自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 golang 泛型 lo

go 1.18之后,go语言做出重大更新:支持泛型。这极大地缩减了代码冗余量,但是同时也降低了代码可读性。它包含了slice、map、tuples等辅助函数,还提供了多个集合之间计算辅助方法,甚至一些搜索查询辅助方法。

2023-03-30 10:26:15 405 1

原创 WEB开发的分页逻辑(具有排序功能)

在WEB开发过程中,分页逻辑是很常见的,因此在一个项目中开发一个功能齐全的泛型分页工具类,会使项目中所有分页逻辑都更加高效。普遍的分页逻辑是将当前页和页面的数据条数作为入参,返回对应的部分数据。

2022-08-21 18:11:18 382

原创 golang的json编码与解码

golang对于json数据格式的编码和解码方法详解

2022-07-24 11:36:27 1127

原创 Java vs Golang:面向对象(OOP)的实现

面向对象的区别Golang是一门具备面向对象编程风格的语言,但是却不具备Java等传统面向对象语言中“继承(extends)、实现(implements)”的关键字。在Golang中,通过接口或结构体的组合来实现非严格的“继承”,通过非侵入式的接口来实现非严格的“多态”,通过结构体及包和函数实现了代码细节的“封装”,有了封装、继承与多态,就可以很好地通过OO思维实现与现实需求所对应的程序了。JavaPersonpublic abstract class Person { protec

2021-06-29 13:43:07 301 1

原创 Java vs Golang:结构体、函数及指针

结构体的声明和使用在Golang中区别与Java最显著的一点是,Golang不存在“类”这个概念,组织数据实体的结构在Golang中被称为结构体。函数可以脱离“类”而存在,函数可以依赖于结构体来调用或者依赖于包名调用。Golang中的结构体放弃了继承、实现等多态概念,结构体之间可使用组合来达到复用方法或者字段的效果。要声明一个结构体只需使用type + struct关键字即可:type Person struct { Name string Age int id string} 使

2021-06-29 13:40:27 475

原创 Java vs Golang:基础语法

编码规范代码排版1. 花括号换行风格在Java中,每一条语句以分号";"分隔,是否换行不影响代码的正确性。在python中,取消了分号分隔方式,同时也取消了括号对于代码逻辑的作用(python中各种括号用于不同的数据类型)。因此采用了一种严格的缩进规则来控制代码规范。而Golang取消了Java中的分号分隔,采用换行划分语句,但是保留了括号的使用。但是Golang对花括号的使用较为严格。在Java中,以下两种书写方式都是正确的public String getString(Integer n

2021-06-29 13:36:53 414 1

原创 java线程池的创建

newCachedThreadPoolpublic static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue&lt

2021-04-01 15:53:46 112 2

原创 spring mvc报错:No more pattern data allowed after {*...} or ** pattern element

具体报错:***************************APPLICATION FAILED TO START***************************Description:Invalid mapping pattern detected: /**/*.css^No more pattern data allowed after {*...} or ** pattern elementAction:Fix this pattern in your applic

2021-02-23 11:46:34 10194 2

原创 Java面试 每日一题:死锁

产生死锁的原因1. 竞争资源系统中的资源可以分为两类:可剥夺资源:是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;不可剥夺资源:当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。产生死锁中的竞争资源之一指的是竞争不可剥夺资源(例如:系统中只有一台打印机,可供进程P1使用,假定P1已占用了打印机,若P2继续要求打印机打印将阻塞)产生死锁中的竞争资源另外一种资源指的是竞争临时资源(临时资源包括硬件中断、

2021-02-01 23:16:35 359

原创 Java面试 每日一题:进程、线程、协程

进程进程是资源分配(CPU时间片、内存等资源)的基本单位。进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。线程有时被称为轻量级进程(Lightweight Process,LWP)线程是独立调度(CPU调度)的基本单位。一个进程中可以有多个线程,它们共享进程资源。QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览

2021-01-30 21:39:10 379

原创 Java面试 每日一题:生产者消费者模型实现

生产者消费者问题是研究多线程程序时绕不开的经典问题之一。问题描述:使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品。因为缓冲区属于临界资源,因此需要使用一个互斥量 mutex 来控制对缓冲区的互斥访问。为了同步生产者和消费者的行为,需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计,这里需要使用两个信号量:empty 记录空缓冲区的数量,full 记录满缓冲区的数量。其中,empty 信号量是在生产者进程中使用,当 empty 不为 0 时

2021-01-28 22:25:21 393 1

原创 Java面试 每日一题:final关键字

1. 数据声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。对于基本类型,final 使数值不变;对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。final int x = 1;// x = 2; // cannot assign value to final variable 'x'final A y = new A();y.a = 1;2. 方法声明方法不能被子类重写。private 方法隐式地被指定为

2021-01-27 21:18:54 174

原创 Java面试 每日一题:wait()和sleep()的区别

sleep()方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象,导致进程进入TIMED-WATING状态。wait()wait()是Object类的方法,当一个线程执行到wait方法时,它就

2021-01-26 21:54:39 173

原创 springboot集成hikari连接池报错:( Driver does not support get/set network timeout for connections.)

报错大致是这样的:HikariPool-1 - Driver does not support get/set network timeout for connections. (Method com/mysql/jdbc/JDBC4Connection.getNetworkTimeout()I is abstract)如图:问题:驱动不支持设置jdbc 1.4 的这个超时原因:用的mysql驱动版本的问题用mysql5.1.6版本会出现上述错误<dependency>

2021-01-25 21:30:06 13440

原创 Cannot load driver class: com.mysql.cj.jdbc.Driver

如果你的mysql版本在6之上,仍然报这个错,那么这篇文章对你没有用,不要在这浪费时间啦!但是如果你的mysql在6之下,那么直接上解决办法:将“.cj”去掉即可。因为:com.mysql.jdbc.Driver是mysql-connector-java 5中的,而com.mysql.cj.jdbc.Driver是mysql-connector-java 6中的。...

2021-01-24 22:50:34 765

原创 Java面试 每日一题:hashCode、equals、==

==它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 "= =’'比较的是值,引用数据类型==比较的是内存地址)基本类型有:byte(1字节):Byteshort(2字节):Shortint(4字节):Integerlong(8字节):Longfloat(4字节):Floatdouble(8字节):Doublechar(2字节):Characterboolean(未知):BooleanInteger a=new Integer(5);

2021-01-23 23:03:16 117

原创 Java面试 每日一题:HashMap

HashMap的数据插入(put)和获取(get)put方法根据Key计算出hashcode。根据计算出的hashcode定位出所在桶。如果桶为空,则说明当前位置没有数据存入,则新增一个Entry对象写入当前位置。如果桶不空,则遍历桶下面的链表,比较(equals)Key值是否相等,如果相等则进行覆盖,并返回原来的值;如果链表没有相等的Key,则新增节点插入链表。get方法根据key计算出hashcode,然后定位到具体的桶;遍历桶下面的链表,直到Key相等的时候就返回值;如果桶为空

2021-01-22 22:21:11 150

原创 Java面试 每日一题:接口和抽象类的区别

接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法接口中的实例变量默认是 final 类型的,而抽象类中则不一定一个类可以实现多个接口,但最多只能实现一个抽象类一个类实现接口的话要实现接口的所有方法,而抽象类不一定接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。...

2021-01-21 20:38:58 88

原创 Java面试 每日一题:论悲观锁和乐观锁

何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁( 共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Ja

2021-01-20 19:51:36 252

原创 Java面试 每日一题:一次HTTPS请求的完整过程

接上回书说道:一次HTTP请求的完整过程HTTPSHTTPS是一种应用层协议,本质上来说它是HTTP协议的一种变种。HTTPS比HTTP协议安全,因为HTTP是明文传输,而HTTPS是加密传输,加密过程中使用了三种加密手段,分别是证书,对称加密和非对称加密。HTTPS相比于HTTP多了一层SSL/TSL,其构造如下:HTTPS综合使用了非对称加密的高安全性和对称加密的快速性。HTTPS协议就是基于SSL的HTTP协议HTTPS使⽤用与HTTP不不同的端⼝口(HTTPS80 , HTTPSS443

2021-01-19 19:58:04 657

原创 java面试 每日一题:一次HTTP请求的完整过程

例子:访问www.baidu.com的完整过程地址解析通过DNS解析服务器(www.baidu.com)域名从而获得主机的IP地址① Chrome浏览器 会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.linux178.com 对应的条目,而且没有过期,如果有且没有过期则解析到此结束。注:我们怎么查看Chrome自身的缓存?可以使用 chrome://net-internals/#dns 来进行查看② 如果浏览器自身的缓存里

2021-01-18 23:02:49 304 1

原创 Windows10 Python安装TensorFlow-gpu下载速度太慢

在安装TensorFlow时,速度只有十几K。直接上方法:- 指定清华源下载:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow-gpu==1.13.2这里我需要的是1.13.2版本。- 防止超时:pip --default-timeout=1000000 install -U -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade te

2020-12-17 09:58:24 787

原创 Windows 10 Python安装gdal环境

Python安装gdal,在线安装(pip install gdal或conda install gdal)会比较麻烦,甚至会报错。解决方法:打开链接:https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal在网页中找到与你的Python版本和主机版本相对应的gdal版本:我用的是Python3.6 Windows10 64位,所以:下载完成后,打开cmd进入Python虚拟环境,并切换到该文件所在的目录,执行命令:pip install GDAL-3.

2020-12-17 09:44:06 986

原创 Python环境安装TensorFlow 报错:importError: DLL load failed: 找不到指定的模块。

详细错误如下:C:\Users\wei\.virtualenvs\pyqt51-EL5sW8oD\Scripts\python.exe E:/work/facode/renlian-master/face_train.pyTraceback (most recent call last): File "C:\Users\wei\.virtualenvs\pyqt51-EL5sW8oD\lib\site-packages\tensorflow_core\python\pywrap_tensorflow

2020-12-17 09:19:03 298

原创 String, StringBuffer and StringBuilder的区别

1. 可变性String 不可变StringBuffer 和 StringBuilder 可变2. 线程安全String 不可变,因此是线程安全的StringBuilder 不是线程安全的StringBuffer 是线程安全的,内部使用 synchronized 进行同步String Pool字符串常量池(String Pool)保存着所有字符串字面量(literal strings),这些字面量在编译时期就确定。不仅如此,还可以使用 String 的 intern() 方法在运行过程将字符串添加到 Str

2020-12-07 22:13:21 92

原创 包装器类型的equals和==的区别

Integer a=new Integer(5);Integer b=new Integer(5);int c=5;int d=5;System.out.println(c==d); //trueSystem.out.println(a==b); //false== 比较的是两个对象的地址。它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象:基本数据类型==比较的是值引用数据类型==比较的是内存地址基本类型有:byte(1字节):Byteshor

2020-12-06 10:56:22 260

原创 线程创建的四个方式

Thread:继承Thread类实现多线程run()为线程类的核心方法,相当于主线程的main方法,是每个线程的入口a.一个线程调用 两次start()方法将会抛出线程状态异常,也就是的start()只可以被调用一次b.native生明的方法只有方法名,没有方法体。是本地方法,不是抽象方法,而是调用c语言方法 registerNative()方法包含了所有与线程相关的操作系统方法c. run()方法是由jvm创建完本地操作系统级线程后回调的方法,不可以手动调用(否则就是普通方法)publ

2020-12-06 09:22:11 93

原创 golang网络编程:获取当前时间戳

func GetTime() string { const shortForm = "2006-01-02 15:04:05" t := time.Now() temp := time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), time.Local) str := temp.Format(shortForm) fmt.Println(t) return str}

2020-08-15 21:35:28 661

原创 与云服务器传输文件(WinSCP)

1. 在本地主机下载并安装WinSCP客户端http://winscp.net/eng/docs/lang:chs2. 打开WinSCP如上图所示,填写服务器基本信息点击登录->在此输入密码即可可能遇到的问题:“拒绝访问”解决方法:(尝试一下几种方法)1. 关闭防火墙sudo ufw disable2. 在服务器上安装OpenSSH服务器sudo apt-get install openssh-server3. 端口号22要打开获取root权限修改ssh配置文件:

2020-08-12 21:52:25 436

原创 Linux上搭建MySQL数据库

1. 安装MySQL服务器端sudo apt-get install mysql-server执行过程中会设置“root”用户的密码2. 安装MySQL客户端sudo apt-get install mysql-clientsudo apt-get install libmysqlclient-dev3. 查看安装是否成功sudo netstat -nap | grep mysql...

2020-08-12 21:41:28 232

原创 在Linux云服务器上搭建golang运行环境

安装go语言环境1. 安装包下载:https://golang.org/dl/(需要梯子)国内安装包下载路径:https://studygolang.com/dl复制链接地址连接服务器,使用wget命令获取安装包首先获取root权限(如果不知道root密码,可以重置密码Su passwd即可设置新密码)2. 安装wgetapt-get install wget查看wget版本检查是否安装成功3. wget命令下载安装包wget https://studygolang.co

2020-08-12 21:35:32 2810 1

原创 golang网络编程:连接MySQL数据库

const (db_driver = "username:password@tcp(127.0.0.1:3306)/DBname?charset=utf8")其中:“username:password”:应填写你的MySQL数据库对应的的用户名和密码“127.0.0.1:3306”:这里是访问本机的数据库(数据库的端口号一般为3306),如果是远程访问,需要修改IP地址。“DBname”:应改为你的数据库的库名“charset=utf8”:这是编码规则连接数据库: opend, db :=

2020-08-12 21:16:05 457 1

原创 golang网络编程:获取本机操作系统和系统架构

在统计用户信息时,需要获取当前用户的操作系统等信息,并返回服务器端。 fmt.Println(runtime.GOOS) //获取当前操作系统 fmt.Println(runtime.GOARCH) //获取当前系统架构输出:windowsamd64

2020-08-12 21:00:33 741 2

原创 golang网络编程:获取本机MAC地址

对于IP地址可以表示一个网络连接,但是无法唯一标识一台主机,而MAC地址是主机网卡的物理地址,这个对于一台主机来说是不会改变的。func mac(){ // 获取本机的MAC地址 interfaces, err := net.Interfaces() if err != nil { panic("Poor soul, here is what you got: " + err.Error()) } for _, inter := range interfaces { fmt.Println

2020-08-12 20:53:58 4307

原创 golang网络编程:发送与接收数字

网络通信一般发送与接收的都是字符串,而对于数字的发送与接收需要特殊的编码和解码。发送端: num:=1 var buf = make([]byte, 8) binary.BigEndian.PutUint64(buf, uint64(num)) conn.Write([]byte(buf))接收端: data := make([]byte, 255) //创建一个字节流 msg_read, err := conn.Read(data) //将读取的字节流赋值给m

2020-08-12 20:41:41 315

原创 while()判断语句的正确写法(解决越界问题)

while()语句是我们code时比较常用的循环语句,但是对于while语句的判断条件的写法有一些重要的小技巧,在这里分享一下。例如:设数组num[3],用while语句找出数组中第一个不为“0”的数。输入[0,0,0]分析:这是常见的一种情况,无论是while还是for,如果数组中有符合要求的元素,自然是在相应位置退出循环。但是,对于这种没有符合条件的元素,需要一些特殊的约束条件。情形一:最容易想到的使用while,即:int i=0;while(num[i]==0){i++;}很

2020-08-12 15:42:34 4734

原创 npm安装依赖报错:Error installing vscode.d.ts: Error: getaddrinfo ENOENT raw.githubusercontent.com

在使用npm安装依赖时,报如下错误:npm install解决方法:查看raw.githubusercontent.com的真实IP地址点开网址 https://www.ipaddress.com/ ,输入raw.githubusercontent.com,点击查询:修改hosts文件找到这个文件夹: C:\Windows\System32\drivers\etc 下的hosts打开,在最后一行编辑199.232.68.133 raw.githubusercontent.com

2020-07-22 19:30:41 7945 2

原创 C# 选择文件(读取文件时)、选择路径(保存文件时)

选择文件 private string SelectPath() { string path = string.Empty; OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = "Files (*.csv)|*.csv"//如果需要筛选txt文件("Files (*.txt)|*.txt")

2020-07-14 15:32:05 13335 1

原创 二进制的位运算操作(LeetCode的java实现)

直接上题:LeetCode190题:颠倒二进制位题目描述:颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出: 00111001011110000010100101000000解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 00111001011110000010100101000

2020-07-07 20:29:09 430

原创 找到两个单链表相交的起始节点(一个浪漫的解法)

LeetCode160题,解法新奇,富有深意,耐人寻味。题目链接:160. 相交链表题目描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交

2020-06-28 17:10:36 541

BloomRPC:GRPC框架的测试工具,等同于测试http请求使用postman工具。

由于http测试有postman工具,在使用GRPC框架的时候,我们使用BloomRPC工具。

2022-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除