说明
本文记录了在使用netty作为TCP服务端的情况下,如何解决TCP粘包、半包问题,以及如何使用16进制与客户端进行通信。
依赖
首先添加maven依赖:
1 | <dependency> |
代码
创建字节转换类
首先创建一个将字节转换为16进制的处理类,并判断包头包尾是否正确。
more >>分享个人经验见解
最近上AMAZON买个台Oculus Quest2玩玩,前前后后折腾了整整一个星期才终于搞定激活问题!因此这在里写下记录希望后来的网友们少走弯路。
找了下网上的教程发现需要借助智能路由器,而我平时不怎么需要这个东西,就为了激活而买个路由器也不划算,因此我选择了笔记本共享热点的方式。
说道Oculus quest2 我想先简单的评测下,先说说它的优点:
支持透视,找手柄时不用摘下头盔了
支持手势操作,简单的操作无需手柄了
最大的优势—–>没有乱七八糟的线!比如PSVR就要插一堆线,每次看着这么多线就没有开启的动力了
一体机,即可以直接使用又可以WIFI串连电脑玩STEAM VR游戏!
AMAZON退税后约只需1900-2000左右(不要上TB买JS的)
再说说它的不足之处:
清晰度和PSVR相差不大,至少我的眼睛感觉没有明显差距
头戴的那个带子刮耳朵
一会儿要充电了
国内用户无法直接使用
总体来说是目前VR里体验最好的了,不用插线实在是方便
more >>先说说为什么重复造轮子,当时的情况是只需要一个简单的延时任务,做到不丢失即可,引入分布式定时任务框架又觉得太重,因此手动造了个基于redis的简单可靠定时任务。
适用场景,此种做法在单机部署情况下是肯定没问题的,在分布式部署情况下可能会出现问题,比如同一个服务同时重启了,又刚好同时读取redis中的定时任务,还刚好就在那几十毫秒的情况下没有检测到redis锁,此时会导致任务重复读取。
因此,在定时任务的代码中需要容忍可能会出现重复执行的情况,一般做法是用订单状态判断,所以如果不是非常严格的场景,这套做法是够用了 (复杂的定时任务建议用QUARTZ)。
废话结束,接下来上代码,首先创建定时任务的实体类,保存定时任务执行时间、订单ID、订单类型等。
1 | public class DelayedInfo implements Delayed { |
其中delayType、OrderType就是订单类型的枚举标识,可自己定义标识。
more >>由于太长,分成两篇记录,第一篇地址: 自自技术笔记(一)
hashmap
数组加链表存储,通过hash计算key值直接计算出链表在数组中的下标位置,再通过遍历链表判断hash查找value
二叉树其实就是链表的加强版
Java所有集合类型
注意:共10个集合类!
Hashmap扩容机制
loadFactor默认0.75,扩容时要满足一下两个条件
1、 存放新值的时候当前已有元素的个数必须大于等于阈值
2、 存放新值的时候当前存放数据发生hash碰撞(当前key计算的hash值换算出来的数组下标位置已经存在值)
扩容时一般成倍扩容,自jdk1.8后引入新机制
当hash碰撞的链表长度超过默认的8时自动由链表变为红黑树
注意点:如果map触发扩容会重新计算每个数据的位置,所以应尽量避免扩容
ArrayList和LinkedList
HashMap和HashTable
整理了一下记录在手机中的技术知识点,包含JAVA、MYSQL、数据结构等,自用笔记,放博客上备份以备不时之需,如若有人发现错误还请指出。
由于太长,分成两篇记录,笔记二地址: 自自技术笔记(二)
红黑树
红黑树其实就是平衡二叉树,该规则可保证每个节点都是平衡的,不会出现单个节点过长的情况
红黑树的作用,红黑树是一种平衡二叉树,不会退化为链表,多用于搜索查找,时间复杂度logn,也就是树的深度,倍数增长,红黑树是局部平衡二叉树
普通二叉树的局限性是子节点都比父节点小因此全排在右,会退化成链表
红黑树4个性质
红黑树有三种变化规则
1.红变黑 2.黑变红 3.旋转
红黑树的操作规则
右旋有3步
首先我想说的是,百度,食屎啦你! 垃圾玩意,人家bing、谷歌做网站收录分分钟的事,就你百度叼得一批,一个月都不见收录,还因为爬虫过于频繁被github禁了,导致github上的个人博客百度都搜不到。
好了,开始正文
首先你得将代码上传至github,其次包的命名也是有规范的,如果你没有自己的域名,那么你的group id需要使用github的包路径,如:io.github.你的github用户名
如果拥有自己的域名,那么可以使用域名倒叙作为group id,如:域名为:mysite.blogs.com,那么group id开头即: com.blogs.mysite。
使用自己的域名需要配置dns,具体做法创建工单后工作人员会提示。
要上传jar库到maven中央库首先得注册他们的工单系统账号:https://issues.sonatype.org/ 。
关于注册 : 这里重点注意下密码的坑,不要使用xml中必须要转义的特殊字符作为密码,如’&’ ,否则上传时老是验证失败!
登陆成功后点新建,项目类型选 -> Community Support - Open Source Project Repository Hosting ,问题类型->new project,接着将必填项填上:
1 | Group Id:io.github.yourgithubId #也可以使用自己的域名 |
工单创建完毕后等待我们的Orlina小姐姐处理,由于时差关系所以一般是晚上才有动静,所以趁这个时间将代码上的准备工作解决。
more >>使用mysql作为数据分页查询的时候我们一般使用limit,这样做在数据量不大的情况下是完全没问题的,当数据量达到几百万或者几千万的时候,使用limit速度将会非常的慢,比如在一张600万数据量的表中使用以下sql分页查询
SELECT * FROM TABLE WHERE IS_DELETE=0 LIMIT 5000000,20
也许你查前几页的时候是很快的,比如limit 0,20,但是当分到第几百万行的时候,越往后速度越慢,这是由于mysql的innoDB引擎使用的是B+Tree数据存储结构。
有人可能说数据量上千万了为何不直接分表分库,而我个人觉得分表分库会增加查询的复杂性,能通过优化索引解决的问题还没有必要分表,除非数据量大到了索引无法解决问题的地步.
另外一个,一般很少有业务需求是直接把一张大数据量表的数据分页查询的,一般都是要带点条件,比如订单表那肯定是根据用户ID和删除状态去查,这种情况只需要建好索引即可。
先来看看未优化前的SQL
select * from TEST_ORDER WHERE limit 10000000,10000010
从第一千万条开始,查10条数据,结果是执行时间12秒。
more >>tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true