自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 3. HashMap源码: hashmap方法(增添节点部分)

hashmap方法tableSizeFor:获取最小2整数幂作用是查找大于等于传参容量的最小2的整数幂,赋值给threshold阈值。由于扩容是当前数组下标值加上原数组长度,所以需要扩充到原先两倍大小,又因为初始是16,所以一定扩容后的大小是2的整数幂。static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2

2021-01-11 17:34:44 170

原创 2. HashMap源码:红黑树源码解析

红黑树存在方法不全,日后慢慢添加。。。主要特性平衡二叉树:左右子树的高度差不超过1根节点是黑色红色节点的子节点一定是黑色,也就是红色节点不能在纵向连续出现一个黑色节点可以存在两个红色节点,也就是红色节点可以在横向连续出现每个节点到根节点的路径上,黑色节点的数目是相同的。红黑树的左旋右旋这里单独把红黑树中左旋右旋的方法拿出来进行理解。这里引用了博客:左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。

2021-01-11 17:04:17 267 2

原创 1. HashMap源码:内部结构初看

hashmap的内部结构hashmap由两部分组成,桶数组table和链表/红黑树。桶数组就是个数组,每个元素都是一个链表的头节点。链表的节点就是键值对,根据每一处链表长度来决定其是单向链表还是红黑树。transient Node<K,V>[] table // 容量总是2的整数幂,原因在于每次扩容resize需要划分链表/树,高链表下标是旧数组长度+旧数组下标,所以新数组长度要是旧数组*2,初始数组长度是16,所以一定是2的整数幂。可见resize方法。单链表节点(篇幅原因仅

2021-01-11 16:10:30 189

原创 ps:Netty服务端主动关闭问题

之前主动关闭nettyserver是在serverhandler中通过ctx.channel().parent().close();直接关闭serversocketchannel,触发关闭事件,使得sync()不在阻塞线程。另外的方法就是设置一个静态的关闭服务器方法,在外部调用。方法的具体代码之前也有提及,这篇主要是进行测试。主要是服务端测试:public class TestServer { Remote_game_interface Tx_net = new Player_info_fin

2021-01-06 16:41:57 2706

原创 6. 服务自动注销、负载均衡、服务端主动关闭

本次优化主要有两部分,服务自动注销以及负载均衡策略。之前demo可以实现服务的本地注册和Nacos远程服务注册。但是如果服务端断开,nacos注册中心中仍然存在未注销的服务信息,客户端继续调用该服务端提供的服务就会调用失败。因此需要在服务提供端关闭时自动向Nacos中心注册,这样要么在Nacos中找不到对应服务名,要么找得到服务名但是是其他服务端提供,仍然可以调用成功。多次请求高并发的时候如果同时访问一个服务端会影响性能,因此负载均衡策略就是客户端在请求服务时通过合适的策略来选择不同的服务端。基础逻辑

2020-12-27 16:41:57 1050 1

原创 ps:nacos单机模式启动命令问题

之前启动Nacos单机模式是用的sh startup.sh -m standalone很奇怪,第一次在cmd窗口可以,再次打开显示:‘sh’ 不是内部或外部命令,也不是可运行的程序或批处理文件。一开始以为是环境变量的原因,后来发现使用其他命令可以,应该是sh是linux下的文件,cmd窗口不识别sh指令,因此单机模式启动改为在Nacos的bin目录下:startup.cmd -m standaloneps:windows下启动sh文件方法...

2020-12-24 21:25:17 8316

原创 5. 使用Nacos远程服务注册优化

之前demo中客户端只能和一个服务端通信,实现的是一个服务端提供多个本地任务,客户端进行调用,如果服务端地址改变,Rpc框架就失效。因此需要一个远程服务注册中心,多个服务提供者将自己的服务注册到其中,客户端向服务注册中心申请调用。假设一个服务由多个提供者提供,其中一个失效,其余提供者也可以保障Rpc框架实现,同时还可以满足负载均衡。这次优化使用的是Nacos服务注册中心,参考了博客知识点InetSocketAddress:Nacos:实现步骤一、Nacos安装配置首先是下载解压wind

2020-12-23 19:27:48 1124

原创 4. 增加Kryo序列化方式

这次的优化比较简单,就是新增加了一个序列化方式kryo。参考了博客基础原理之前的Jackson序列化因为返回的底层是String类型,所以在反序列化中需要重新对传递的参数类型进行重写,kryo基于字节序列化同时不会出现反序列化过程类型错误,选用。注意目前是仅java应用,不支持跨语言。知识点Lambda表达式Kryo序列化ThreadLocal:贼全ByteArrayInputStream/ByteArrayOutputStream步骤在Maven工程中的pom.xml导入依赖。

2020-12-22 21:36:51 326 1

原创 3. Rpc优化:Netty通信

基础逻辑因为socket通信是阻塞通信,会导致线程资源浪费,因此采用同步NIO框架netty来代替原本的BIOsocket通信。二者之间的原理对比可以参考其实区别就在于多个客户端同时向服务端发出请求时,服务端是开启多线程处理(宕机风险BIO)还是只开启一个线程处理(BIO)。因此本次demo的改动就是用Netty通信代替socket通信,同时创建自己的序列化协议以及创建一个通用的序列化接口(可以后续采用多种序列化方式)来代替之前的Serializable接口。参考了博客以及博客知识点Netty

2020-12-21 22:25:00 211

原创 2.增加服务注册表-demo2

上一个文章说是参考,有点不好意思,其实就是复现了一下何人听我楚狂声的博客哈哈哈,这一篇同样参考的博客,不足之处还请指出,感谢!优化:服务器的多注册表首先明确服务的概念,就是服务端接口的实现类对象。demo1中的代码只允许一个服务,demo2的目的是实现服务器可以允许实现多个服务。demo2的修改都在服务端,客户端保持不变。知识点Map、 Set集合的内容、方法(add\contains\put)ConcurrentHashMap的知识点这里可以看https://zhuanlan.zhih

2020-12-15 19:01:21 169

原创 2.替换空格

两种思路:第一个是直接new一个新的String数组,然后顺序赋值,简单但是实际中空间占有率大;第二种是先计算出空格个数,在延长传入数组的长度,从后往前来给数组赋值,时间复杂度高;public class Solution { public String replaceSpace(StringBuffer str) { int count = 0; for(int i = 0;i<str.length();i++){ if (str.char

2020-12-15 09:59:25 45

原创 1.二维数组查找

这个题目思路就是从最左下角的元素进行对比,大于目标值就向上移动,小于目标值就向右移动。但是关键是循环过程是把数组越界的条件作为while循环的条件,而不是用对比结果作为循环条件,当然也可以,但是就要考虑空二维数组的特殊情况,在while循环外多加一个判断,增加了代码量,所以还是用数组越界条件巧妙一点。public class Solution { public boolean Find(int target, int [][] array) { int len = array.

2020-12-14 21:28:28 60

原创 RPC框架简单简单简单实现

本文是对RPC框架的非常简单的实现,参考了何人听我楚狂声的博客,十分感谢!这篇博客在我看来是保姆文,好多java基础知识顺便进行回顾,还存在很多不足,后续会进行更新优化(可能)。基本原理存在一个接口,客户端想要调用接口中方法的具体实现,但是由于客户端不存在该接口的实现类,只有服务端存在该接口的实现类,也就是服务端提供的服务,所以只能向服务器端发出请求,服务器接收到客户端请求,解析处理后调用服务器本地的实现类对象,然后把调用结果返回客户端。存在的知识点接口实现: 接口是客户端和服务器端都存在的公共接

2020-12-14 20:11:05 601

原创 视觉slam第11讲因子图优化程序编译错误 error adding symbols: DSO missing from command line

视觉slam第11讲因子图优化程序编译错误 error adding symbols: DSO missing from command line问题背景在编译pose_graph_gtsam.cpp时出现故障 /usr/lib/x86_64-linux-gnu/libtbb.so.2:error adding symbols: DSO missing from command line解决方案:原因是没有成功链接到这个libtbb库,需要手动在cmakelist.txt中定义连接set(LIB_

2020-07-20 15:49:48 1543

原创 记录一下ubuntu18.04 下启动g2o_viewer的段错误及其解决办法

记录一下ubuntu18.04 下启动g2o_viewer的段错误及其解决办法本文是亲身经历后总结而成,不一定适用所有情况,还请谨慎参考!希望大家都可以顺利解决问题!问题出现背景:尝试运行高博视觉slam14讲中第十一讲位姿图优化时,发现g2o_viewer指令错误问题类型及解决方案:一、首先报错:段错误(核心已转储),也就是Segmentation fault该问题通过ldd /usr/lib/x86_64-linux-gnu/libQGLViewer.soldd /usr/local/b

2020-07-19 15:52:57 1406 8

空空如也

空空如也

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

TA关注的人

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