自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 单元测试Junit5新特性

Junit5、mockito@Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试@ParameterizedTest :表示方法是参数化测试,下方会有详细介绍@RepeatedTest :表示方法可重复执行,下方会有详细介绍@DisplayName :为测试类或者测试方法设置展示名称@BeforeEach :表示在每个单元测试之前执行@AfterEach :表示在每个单元测试之后执行@Bef

2021-11-17 17:44:47 549

原创 SQL调优

SQL调优1、很多时候用 EXISTS 代替 IN 是一个好的选择:SELECT * FROM class_a WHERE id IN ( SELECT id FROM class_b);用下面的语句替换:SELECT * FROM class_a A WHERE EXISTS ( SELECT * FROM class_b B WHERE A.id = B.id);上述两种方法查询结果一样,但exists 方式速度要快。分析如下:如果连接列id 上有索引,那么查询CLASS_B时,无需查询

2021-03-18 10:19:43 864

原创 Redis数据结构及底层实现

Redis数据结构及底层实现Redis中有五种基本数据类型:String(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Sorted Set(有序集合),这些只是Redis键值对中值的数据类型,也就是数据的保存形式。底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。和数据类型的对应关系如下:可以看到,String 类型的底层实现只有一种数据结构,也就是简单动态字符串。而 List、Hash、Set 和 Sorted Set 这四种数

2021-01-08 15:15:28 549

原创 geohash和geohash聚合

Geohash原理GeoHash本质上是空间索引的一种方式,其基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。以GeoHash方式建立空间索引,可以提高对空间poi数据进行经纬度检索的效率。认识GeohashGeoHash将二维的经纬度转换成字符串,比如下图展示了北京9个区域的GeoHash字符串,分别是WX4ER,WX4G2、WX4G3等等,每一个字符串代表了某一矩形区域。也就是说,这个矩形区域内所有的点(经纬度坐标)都共享相同的

2020-05-22 15:07:24 1028

原创 Base32编码转换

在网络传入字符串过程中,如果编码方式是基于ASCII,那么会造成什么问题?比如:url地址中存在"/"(如:www.csdn.net/nav/ai),字符串中编码中也存在"/",这样就会出现错误地址解析.为了防止这种情况的出现,出现了Base16,Base32,Base64编码方式.我们知道计算机传输的单位是字节,也就是8个比特位,按照一个字节编码的方式结果就有256种状态(每个比特位0或者1两种状态,8位就是=256),ASCII编码是将8个比特位中最高位置为0,所以总共可表示128个字符(即=128).

2020-05-22 11:22:39 1530

原创 Log日志级别

1. 日志级别日志一共分成5个等级,从低到高分别是:DEBUGINFOWARNINGERRORCRITICAL说明:DEBUG:详细的信息,通常只出现在诊断问题上INFO:确认一切按预期运行WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题- 在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。ERROR:更严重的问题,软件没能执行一些功能CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行这5个等级,也分别对应5种打日志的方法: d

2020-05-20 16:33:41 3985

原创 前序遍历——递归和非递归实现

递归实现:当节点不为空时,每次遍历现将节点值添加进list,之后,左子树补空,遍历左子树;右指数不空,遍历右子树;最终返回list。需要注意的是根节点为空的情况,在遍历之前,根节点为空,直接返回(全局)list。//前序遍历递归排序 public class solution{ ArrayList<Integer> list = new ArrayList&...

2020-04-26 15:51:05 516

原创 Java8特性——Optional

当项目运行时抛出 NullPointerException 空指针异常的错误时,可以考虑使用Optional来处理null的问题。例子如下:@Override public ReplyStatusResponse replyStatusList(Long replyId) { LOGGER.debug(CommonLogDomain.BUSINESS, "replyS...

2020-04-26 11:14:13 113

原创 idea 导入文件为j问题解决

idea导入项目通过终端导入,复制git的ssh命令导入完成之后,打开项目如图所示:文件左下角的图标为J,正常应该是为C或者I。解决方法:点击—File—选择在下面的power Save Mod将前面的✅去掉(由于我的已经去掉了)刷新之后,文件就变成C了。...

2020-04-26 10:57:21 1071 1

原创 剑指offer--所有链表题型题解及代码,Java语言

1、树的子结构题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:递归判断,其中一个函数hasSubTree判读一个树是不是另一个树的子树,函数isSubTree判断两棵树是不是相等,根节点相等则判断左右子树是否相等。代码:/**public class TreeNode { int val = 0; Tree...

2020-04-14 11:20:45 128

原创 计算机粘包

粘包问题TCP是基于数据流的协议,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,整条消息的数据段排序完成后才呈现在内核缓冲区。例如基于tcp的套接字客户端往服务端上传文件,发送时文件内容是按...

2020-04-11 16:01:53 148

转载 一致性哈希算法原理

一致性哈希算法原理 一致性Hash算法背景  一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用...

2020-03-17 16:01:27 151

原创 数据库高并发解决方法总结和主从复制

一、什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。您看,像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接...

2020-03-17 15:46:27 474

原创 Java线程池原理和源码分析

Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源, 还会降低系统的稳定性,...

2020-03-06 15:24:33 150

原创 Innodb解决幻读

1、MVCC多版本并发控制(Multi-Version Concurrency Control, MVCC)是 MySQL 的 InnoDB 存储引擎实现隔离级别的一种具体方式,用于实现提交读和可重复读这两种隔离级别。而未提交读隔离级别总是读取最新的数据行,要求很低,无需使用 MVCC。可串行化隔离级别需要对所有读取的行都加锁,单纯使用 MVCC 无法实现。基本思想在封锁一节中提到,加锁...

2020-03-05 21:56:00 1174

原创 Java锁——自旋锁和互斥锁的区别

自旋锁和互斥锁的区别自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu,自旋锁(spinlock)则是不断循环并测试锁的状态,这样就一直占着cpu。互斥锁:用于保护临界区,确保同一时间只有一个线程访问数据。对共享资源的访问,先对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。临界区:每个进程中访问临界...

2020-03-05 20:35:49 875

原创 TCP、UDP、IP的包头

TCP数据格式TCP是一种可靠的、面向连接的字节流服务。源主机在传送数据前需要先和目标主机建立连接。然后,在此连接上,被编号的数据段按序收发。同时,要求对每个数据段进行确认,保证了可靠性。如果在指定的时间内没有收到目标主机对所发数据段的确认,源主机将再次发送该数据段。源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的...

2020-03-05 18:36:42 326

转载 JVM监控和调优常用命令工具总结

JVM监控和调优常用命令工具总结 </h1> <div class="clear"></div> <div class="postBody">阅读目录JVM监控和调优jpsjinfoj...

2020-02-25 22:17:17 249

原创 排序算法——快速排序原理解析

快速排序原理快速排序算法通过多次比较和交换来实现排序,其排序流程如下:首先设定一个分界值,通过该分界值将数组分成左右两部分。将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左...

2020-02-22 11:26:42 570

转载 Redis持久化RDB和AOF的区别

 redis的持久化方式RDB和AOF的区别 1、前言最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方...

2020-02-19 21:04:23 204

原创 TCP长连接和短链接及优缺点

TCP和UDPtcp:面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手断开连接优点:在数据传输时,有确认、窗口、重传、拥塞控制机制,能保证数据正确性,较为可靠缺点:速度相对慢一点,要求系统资源较多udp:面向无连接的通信协议,数据包括目的端口信息和源端口信息优点:面向无连接,操作简单,要求系统资源较少,速度快,由于不需要连接,可进行广播发送缺点:发送数据之前不需要与...

2020-02-17 17:25:09 4561

原创 剑指offer--链表--Java

1、从尾到头打印链表题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路:新建一个栈和一个数组,先把链表中的结点全部存入栈内,然后在从栈中push结点进数组,直到栈为空,返回此数组。代码:import java.util.ArrayList;import java.util.Stack;public class Solution { public...

2020-02-13 17:40:19 139

原创 Java反射基本概念

反射概念:将类的各个组成部分封装为其他对象,这就是反射机制。好处:1、可以在程序运行过程中,操作这些对象。2、可以解耦,提高程序的可扩展性。获取Class对象的方式:1、Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象//多用于配置文件,将类名定义在配置文件中,读取文件,加载类2、类名.class:通过类名的属性class获取//多用于参数的传...

2020-02-12 00:14:24 1095

原创 正则表达式基本语法——快速匹配

正则表达式语法定义:正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。runoob,可以匹配 runob、runo...

2020-01-07 14:27:57 708

转载 剖析ConcurrentHashMap源码

...

2019-12-25 16:10:14 80

原创 String字符操作

String 类的常用方法都有那些?indexOf():返回指定字符的索引。charAt():返回指定索引处的字符。replace():字符串替换。trim():去除字符串两端空白。split():分割字符串,返回一个分割后的字符串数组。getBytes():返回字符串的 byte 类型数组。length():返回字符串长度。toLowerCase():将字符串转成小写字母。t...

2019-12-25 14:08:39 55

转载 Java集合:HashMap详解(JDK 1.8)

...

2019-12-25 10:25:10 103

转载 双亲委派模型

看过这篇文章,大厂面试你「双亲委派模型」,硬气的说一句,你怕啥?读该文章姿势打开手头的 IDE,按照文章内容及思路进行代码跟踪与思考手头没有 IDE,先收藏,回头看 (万一哪次面试问了呢)需要查看和拷贝代码,点击文章末尾出「阅读原文」文章内容相对较长,所以添加了目录,如果你希望对 Java 的类加载过程有个更深入的了解,同时增加自己的面试技能点,请耐心读完.........

2019-12-23 11:21:46 88

原创 计算机进程死锁

计算机进程死锁必要条件处理方法鸵鸟策略死锁检测与死锁恢复1. 每种类型一个资源的死锁检测2. 每种类型多个资源的死锁检测3. 死锁恢复死锁预防1. 破坏互斥条件2. 破坏占有和等待条件3. 破坏不可抢占条件4. 破坏环路等待死锁避免1. 安全状态2. 单个资源的银行家算法3. 多个资源的银行家算法必要条件互斥:每个资源要么已经分配给了一个进程,要么就是可用的。占有和等待:已经得到了某个资...

2019-12-18 22:54:49 654

原创 KNN(下)

来自斯坦福CS231n课程笔记image classification notes内容列表如下:图像分类、数据驱动方法和流程Nearest Neighbor分类器k-Nearest Neighbor验证集、交叉验证集和超参数调参Nearest Neighbor的优劣小结小结:应用kNN实践拓展阅读List item用于超参数调优的验证集...

2019-08-25 22:02:48 143

原创 KNN(上)

来自斯坦福CS231n课程笔记image classification notes内容列表如下:图像分类、数据驱动方法和流程Nearest Neighbor分类器k-Nearest Neighbor验证集、交叉验证集和超参数调参Nearest Neighbor的优劣小结小结:应用kNN实践拓展阅读List item图像分类目标:这一节...

2019-08-25 21:50:43 88

原创 机器学习——Support Vector Machine(支持向量机)

间隔与支持向量给定训练样本集 D={(x1,y1),(x2,y2),…,(xm,ym)},yi∈{−1,+1}D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{m}, y_{m}\right)\right\}, y...

2019-05-30 21:59:20 2055

原创 latex公式语法

Markdown中使用Latex基础LateX 公式有两种,一种是用在正文中的,一种是单独显示的。正文中的公式用来定义,单独使用的用:基本LaTeX 公式命令2.1 常用希腊字母Tips如果使用大写的希腊字母,把命令的首字母变成大写即可,例如 \Gamma 输出的是Γ \GammaΓ。如果使用斜体大写希腊字母,再在大写希腊字母的LaTeX命令前加上var,例如\varGa...

2019-05-16 22:03:57 3074

原创 西瓜书学习——第三章 线性模型

基本形式给定由 d 个属性描述的示例 x = (X1; X2; … ; Xd) , 其中 Xi 是 X 在 第 i 个属性上的取值,线性模型 (linear model)试图学得一个通过属性的线性组合来进行预测的函数:向量形式:线性回归“线性回归” (linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记.即找到一条直线来区分样本,找到ω 和 b 来...

2019-05-16 21:51:56 198

原创 Multi-Adversarial Domain Adaptation

前面我们介绍完domain adaptation下面我们来看一篇论文《Multi-Adversarial Domain Adaptation》发表在2018年的AAAI上面,作者是清华大学龙明盛老师的学生。我们知道,在domain adaptation中存在两个挑战:(1)加强正向转移通过最大限度地匹配跨域底层数据分布的多模结构(2)缓解负迁移通过防止跨域不同分布模式的错误对齐原来我...

2019-05-14 10:51:23 4892 2

原创 迁移学习

迁移学习 (Transfer Learning,TL)迁移学习,对于人类来说,就是掌握举一反三的学习能力。比如我们学会骑自行车后,学骑摩托车就很简单了;在学会打羽毛球之后,再学打网球也就没那么难了。对于计算机而言,所谓迁移学习,就是能让现有的模型算法稍加调整即可应用于一个新的领域和功能的一项技术。传统机器学习通常有两个基本假设,即训练样本与测试样本满足独立同分布的假设和必须有足够可利用的...

2019-05-14 10:16:31 44718 2

原创 XGB算法梳理

引言XGBoost(eXtreme Gradient Boosting)是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,如果你的算法预测结果不好,赶紧试试XGBoost吧。在工业界规模方面,xgboost的分布式版本有广泛的可移植性,支持在YARN, MPI...

2019-04-10 21:02:30 580

原创 AdaBoost算法梳理

引言正所谓“三个臭皮匠,顶个诸葛亮”,在机器学习中也存在这样的哲理。提升方法(Boosting)就是这样的代表:通过将一系列弱学习器综合提升为强学习器的算法。Boosting族算法的工作机制:(1)先从初试训练集训练出一个基学习器;(2)再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的训练样本在后续训练中受到更多关注;(3)基于调整后的训练样本继续训练下一个基学习器;(4)如此重复...

2019-04-10 20:43:17 261

原创 随机森林算法梳理

集成学习概念个体学习器概念boosting bagging结合策略(平均法,投票法,学习法)随机森林思想随机森林的推广优缺点sklearn参数9.应用场景1、集成学习集成学习通过构建并结合多个学习器来完成学习任务。 一般先产生一组“个体学习器”,再用某种策略讲它们结合起来,结合起来的结果进行整合会获得比单个学习器更好的学习效果。也就是说,集成学习有两个主要的问题需要解决...

2019-04-04 21:06:00 830 1

原创 机器学习—决策树

1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)联合熵:联合熵就是度量一个联合分布的随机系统的不确定度,下面给出两个随机变量的联合熵的定义:信息增益:信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好,在概率中定义为:待分类的集合的熵和选定某个特征的条件熵之差(这里只的是经验熵或经验条件熵,由于真正的熵并不知道,是根据样本计算出来的),公式如下:...

2019-04-03 21:18:39 241

空空如也

空空如也

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

TA关注的人

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