自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于websocket和webrtc技术

这篇博客 不讨论代码如何写首先这两个技术 主要是用于前后端实时通信的的技术 从名字上也看得出来这两个技术都是基于socket编程实现的。由于一些版本问题,webrtc的使用 需要浏览器的支持。这两个框架主要用于 做个网页版的聊天工具啊 或者网页直播 什么的 其原理在于数据流传输至服务器 然后服务器进行分发 其中这个连接是长链接 不是短链接 毕竟无论服务器端还是客户端都需要实时监听对方是否发来消息。这两个框架使用起来一般对服务器压力比较大 毕竟连接只有对方关闭浏览器...

2021-08-09 14:14:26 2829

原创 闲聊线程

此篇为闲聊篇。如果出现知识点不做解释。说到线程,首先想到的就是线程和进程的关系。这俩最主要的区别就是一个是系统资源的最小分配单位,一个是执行的最小单位。进程为啥是最小分配资源,想想JVM,它就是个进程。操作系统把资源给了JVM剩下的就是JVM自己处理了。有点像开发组和运维的感觉,运维并不想管你如何开发,更不想管你用的是什么语言,只有在开发人员需要资源的时候知会一下运维就行。而线程呢,就是你只会的这个动作,啥时候cpu想起来了,啥时候就处理了。线程最主要的就是并发为什么并发会导致服务器的崩溃呢。先

2021-03-03 10:19:48 113

原创 说一说JVM垃圾回收算法

闲聊说到垃圾回收算法,首先要聊的就是JVM如何判断一个对象为垃圾。流程其实就是用的GCRoot一个节点去判断是否可以找到该类,(可达性分析)。收集算法标记清理简单粗暴地清理方式,打上标记,然后清理。当然这么做有个坏处,就是会有大量的内存碎片,(内存碎片的坏处,像是大数组,大对象,什么的内存地址要逻辑连续,内存碎片可能太小不够分)标记整理根据标记清理的问题,弄出了个标记整理算法,就是我清完了之后我再整理一下,把占用的内存都移到前面去,这样就没有内存碎片了,但这也有坏处,有点消耗性能

2021-02-22 11:21:27 111

原创 关于volatile的一个有趣demo

闲聊这是一个测试volatile的例子。首先我们td不添加volatile,以下的逻辑,创建一个线程让它去修改该flag,但不是让它立刻去修改,,而是先让子线程休息一段时间,好让主线程进入狂读flag的状态,这样做是为了防止低运行强度下 cpu主动刷新了缓存。之后我们进行修改。public class VolatileTest { static ThreadDemo td = new ThreadDemo(); public static void main(String[]

2021-02-20 11:14:34 256

原创 各种id生成方法

id生成只是总结一下自己见过的id生成方法。1.random 随机生成个id 这就只是单纯的随机生成一个,用随机数表啊,还是时间戳都行。2.自增,mysql自增的那种感觉,但通常来讲这个id不用,会用一个随的id,因为自增过短,且有规律。3.拼接板id 像是雪花算法那种,通过随机和自增来拼出一个id来,当然可以把时间戳放在前面,这样可以根据时间排序,这个思想有点类似线程池区分运行状态和数据长度的那种思想。当然拼接还有很多种拼接方式,根据具体需要来进行拼接。...

2021-02-19 14:47:54 3016

原创 跳跃表

闲聊看了redis zset后,突然想写一篇跳跃表的文章。说一说跳跃表,其实跳跃表的思想有点像二分法的思想,为什么不直接用二分呢,因为跳跃表一般处理的是链表而不是数组。如果是数组的话,只要维持有序,查的时候直接二分就行。二跳跃表要面对的一般是链表,链表不像数组内存地址连续,可以直接访问到想要的地方,链表的访问通常来讲是从头部开始遍历,或者尾部开始遍历。如果每找一个值都要一个一个查的话效率实在是太低,在面对大量的数据时有些力不从心。而跳跃表可以解决这个问题,虽说hashmap也可以解决这个问题,但是h

2021-02-09 15:50:12 328

原创 阻塞队列源码分析

闲聊阻塞队列有很多,比如ArrayBlockingQueue,LinkedBlockingQueue等。他们原理上都差不多区别只在于存储上,这里只以ArrayBlockingQueue来做源码分析。看源码之前我以为很高端,看了之后。。。你懂的。。。这篇的篇幅明显比之前的线程池要短得多。正文入队操作作为看源码的入口,就以offer方法来进行分析,虽然也有add,但是offer明显要常用的多,如果去看其他的源码的话,也能明显感到offer用的要多一些,毕竟可以知道插入是否成功,是不是要自旋插

2021-02-08 15:44:26 82

原创 学习中的改变

在不断地学习中,逐渐达到了一个瓶颈,感觉自己很多东西都会了,感觉自己找不到目标了,不知道学些什么。到了最后发现这些都是自我感觉罢了,都是假的。之后想了想,发现自己很多知识只是知道,只是了解,只是通过看博客,看一些视频而了解的,这样并不好,很多的知识不如直接看源码,实在不懂的地方再去看博客。当然前提是基础知识足够扎实,不会出现源码大面积的看不懂。用一句话来激励自己,人之处于世也,如逆水行舟,不进则退。...

2021-02-07 17:05:43 179

原创 线程池参数和相关原理

本篇文章会拿ThreadPoolExecutor来进行源码分析。1.闲聊线程池,顾名思义,线程的池子。说到池子我们可以联想到很多东西,数据库连接池,线程池等等。他们有什么共同点呢?池化,也就是我们希望通过一个池化的方式来对连接进行把控。我们不希望同一时间连接过多,导致线程过多,占用资源过大。这种感觉有点像JVM,我们不希望我们因为一些琐事而增加我们的开发成本。2.正题进入正题,创建线程池有如下这么多的参数,如果直接说的话不方便理解,我们就直接从execute进入,毕竟这个方法是最

2021-02-07 16:45:41 73

原创 网约车项目学习笔记

网约车项目学习笔记本文章只是网约车项目的学习笔记。刚开始学习,后续更新项目内容分析。附项目地址https://github.com/yueyi2019/online-taxi.git

2021-02-04 13:53:53 695

原创 ArrayList源码分析

介绍ArrayList一个动态数组,通过名字可以大致理解出 这是个数组,并且通过某种方式可以进行动态扩容。作为一个数组,它一定拥有数组的最基本功能,add set get。作为源码分析,我们就从最基本的add开始进入,看看底层是如何实现的。属性/** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * Shared em.

2021-01-26 17:10:11 59

原创 leetcode 518 硬币组合种类数

给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coins = [10]..

2020-09-21 15:34:31 517

空空如也

空空如也

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

TA关注的人

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