- 博客(33)
- 收藏
- 关注
原创 当我在谈汇编的时候我该谈些什么-流程控制
它的功能就是直接跳转到某个地方,你可以往前跳转也可以往后跳转,跳转的目标就是jmp后面的标签,这个标签在经过编译之后,会被处理成一个地址,实际上就是在往某个地址处跳转,而jmp在CPU内部发生的作用就是修改eip,让它突然变成另外一个值,然后CPU就乖乖地跳转过去执行别的地方的代码了。名为“标志寄存器”,它的作用就是记住一些特殊的CPU状态,比如前一次运算的结果是正还是负、计算过程有没有发生进位、计算结果是不是零等信息,而后续的跳转指令,就是根据eflags寄存器中的状态,来决定是否要进行跳转的。
2022-09-07 10:38:12
115
原创 Redisson PermitExpirableSemaphore源码详解
这两天的工作中发现了一个问题。原本一直在使用的redisson提供的semaphore信号量经常会莫名其妙的消失,也就是所谓的信号量泄露,发现问题出在调用的外部服务上,所以我只能试图通过给semaphore的每个信号量设置过期时间,也就是说当获取一个信号量的时候,如果在一定时间内没有归还,那么信号量将自动归还在总值里。这个时候就要使用redisson提供的另外一个功能,PermitExpirableSemaphore,他提供了为每个信号量设置过期时间的功能。...
2022-08-01 21:30:48
657
1
原创 为什么volatile不具有原子性
volatile为什么不能保证原子性呢?一般都拿i++这种自增来证明volatile不具备原子性。网上的答案各种复制粘贴,我想说说我的想法。volatile方式的i++,总共是四个步骤:i++实际为load、Increment、store、Memory Barriers 四个操作。内存屏障是线程安全的,但是内存屏障之前的指令并不是.在某一时刻线程A将i的值load取出来,放置到cpu缓存中,然后再将此值放置到寄存器A中,然后A中的值自增1(寄存器A中保存的是中间值,没有直接修改i,因此其他线程并不会获取到这
2022-06-30 14:22:07
469
原创 摩尔投票法
首先是算法原地址摩尔投票法论文今天在LeetCode上做到了求众数这道题。https://leetcode.cn/problems/majority-element/然后除了我一如既往擅长的暴力破解和难得灵机一动想到的排序之后取中间那个数。题解里还有一个摩尔投票法的方法。很有趣。但是摩尔投票法的局限性很大。他有一个天然的要求。因为这个算法基于一个事实前提下。思路其实很简单。从第一个数开始设为候选者candidate,然后设置一个int票数vote初始值为1。接着遍历这个数组。如果与当前candidat
2022-06-23 15:07:00
108
原创 java selenium 网页截图 可控制分辨率
项目地址如下https://gitee.com/ogisosetsuna_kong/screenshot用SpringBoot以及selenium实现了一个无chromeGui界面截图的项目。当你想截图的尺寸大于你的屏幕分辨率时,你可以使用该项目获得对应截图。使用该项目前,请去http://chromedriver.storage.googleapis.com/index.html 或者 http://npm.taobao.org/mirrors/chromedriver/ 这两个网站下载和自己当前安装
2022-06-22 17:27:48
2470
原创 JDK9中的arraylist的add方法联想到JVM方法内联
今天我不小心看到了jdk9和8中间arraylist的一些小改动。扩容的方法和逻辑其实大相径庭。但是一个小细节引起了我的注意。就是jdk9将jdk8的add方法进行了拆分。以下是jdk9中的ArrayList相关的add方法。以下是1.8可以看到这么一段话。翻译一下然后我就详细了解了一下 这个jvm参数 。这个时候问题来了,什么是内联优化呢?我对于这个玩意儿的大概理解就是说,如果一个方法中调用了另外一个方法,jvm内部会通过方法内联这一优化手段,将两个方法的字节码整合成一个方法。然后就是上述
2022-06-19 22:18:04
150
原创 我关于volatile JMM MESI的一些思考
volatile这个关键字是用来保证变量在多线程并发的时候的可见性的,顺便防止指令重排。这大家都知道。先放结论!所以jvm使用lock前缀指令 利用了mesi协议 去实现了JMM层面的可见性重排序功能。接下来就是我东抄西抄 东看西看之后的一些想法。cpu的缓存cpu的运算速度是相当快的,单位是以时间周期来计算的。此处补一下时钟周期的单位, 时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。一个时钟周期是多
2022-04-27 19:32:32
224
原创 Redisson的semaphore初始化在多个pod实例(jvm)的情况下 会被覆盖吗
Redisson的semaphore初始化在多个pod实例(jvm)的情况下 会被覆盖吗首先是结论,不会。当我们在项目中使用redisson的时候,我们要首先给redisson内部设置一个信号量的大小。@Configurationpublic class RedissonConfig { @Bean public RedissonClient redissonClient(){ Config config = new Config(); confi
2022-04-24 17:43:35
860
原创 接口 和 抽象类
抽象类可以存在普通成员函数,而接口只能有public abstract方法。抽象类中的成员变量可以是各种形式的,而接口只能是public static final形式的。抽象类只能继承一个,而接口可以实现多个。接口的目的是为了对类的行为进行约束。抽象类的目的是为了代码复用。当我们敲代码的时候,如果要关注行为,那么使用接口。如果关注的是本身和共性,那么使用抽象类。...
2021-12-13 18:22:48
171
原创 Java 浅拷贝和深拷贝
浅拷贝 就是指的,在复制拷贝一个对象的时候,基本类型不用管,肯定没问题。但是非基本类型,只复制了内存地址。(这意味着,最开始的本体对象被修改了,拷贝后的新对象可能也会变更)深拷贝 就是指的,在复制拷贝一个对象的时候,基本类型不用管,肯定没问题。但是非基本类型,是新建对象进行拷贝。慎用 Object 的 clone 方法来拷贝对象。说明: 对象的 clone 方法默认是浅拷贝,若想实现深拷贝需要重写 clone 方法实现属性对象的拷贝。...
2021-12-13 18:12:34
206
原创 ArrayList和LinkedList
ArrayList和LinkedListArrayList由数组构成,有下标,方便查找。add方法用的是尾插法。效率也很高。扩容机制(动态数组)无参的话第一次长度是10,之后每次是1.5倍。LinkedList由链表构成方便增删元素(只需要改一下指向的位置即可)不方便查询不能用for循环,因为int i这个操作,每次找到对应下标都要遍历一遍整个list。得用iterator进行循环。不要用indexof来获得下标 每获得一个下标都要遍历一遍...
2021-12-08 17:58:26
437
原创 == 和 equals()的区别
==对比的是栈中的值equals()本身也是调用的双等号但是String中重写了equals方法比较的不再是栈中的值而是String的内容String str1 = "hello";String str2 = new String("hello");String str3 = str2;str1是放在了常量池中,str2放在堆中。==比较的是地址equals是内容...
2021-12-08 14:57:05
74
原创 JVM复习
JVM复习首先自己画一个JVM内存模型的图类加载子系统类加载子系统负责加载class文件只负责加载 能否运行由执行引擎决定加载好的类信息被放在了方法区中。加载-》验证-》准备-》解析-》初始化加载:通过这个类的全限定名获取这个类的二进制字节流验证:比如验证cafebabe 就是对象头的这个内容准备:为类变量分配内存并且设置该变量的初始值解析:将常量池的符号引用转换为直接饮用的过程初始化:执行这个类的构造器方法的过程双亲委派机制首先是由应用程序类加载器(系统类加载器)进行委
2021-12-08 11:07:45
61
原创 HTML + CSS + JavaScript 实现勾选动态表格中的记录(checkbox)
要求#添加一个学生信息表格,表格的信息有编号、姓名、性别、信息勾选4个字段,可以任意的勾选其中0行或以上信息行。主要步骤分析创建一个学生信息表格定义三个按钮:全选、全不选、反选给添加按钮绑定点击事件步骤实现创建一个表格<table> <caption>学生信息表</caption> <tr> <th><input type="checkbox" name="cb" id="firstCb">
2021-04-26 20:09:17
977
原创 Redis复习
Redis复习首先是从客户端写入数据到redis的缓存里面,会提示你写入成功嘛,想要的数据就留在redis缓存里了。但是如果有一些原因,导致了redis的进程突然挂掉了,或者说redis的集群机器之类的出了问题,这样就会导致有很多的查询直接访问了数据库,甚至有可能导致数据库崩掉。就是为了应对这种场面,我们在redis把数据存到缓存之前,将这些缓存数据提前存储下来,可以同步到那些云服务存储里嘛,就可以直接下载恢复了。redis rdb以内存快照的形式存储下来的。(dump.rdb)(配置可选 re
2021-03-30 14:26:39
95
原创 Innodb和Myisam区别
Innodb和Myisam区别从事务角度innodb支持事务,事务安全。Myisam非事务安全,也不支持事务。从锁的角度innodb支持行级锁。Myisam只支持表级锁。从索引的角度innodb不支持全文索引。Myisam支持全文索引。适用场景Myisam查询比较快,适用于小型的项目,以select为主Innodb则适用于大型的,以update,delete为主的项目。...
2021-03-30 12:53:13
3090
原创 volatile关键字的作用
volatile关键字的作用首先需要介绍一下并发的三个属性。原子性为什么叫原子性呢,因为原子就是不可拆分的了。所以原子性指的就是,一个操作或者多个操作不会被别的因素打断,要不就一起执行,要不就一起都不执行。比如在mysql中事务的操作也具有原子性。常见的原子性操作有直接对变量进行赋值所有引用reference的赋值操作java.concurrent.Atomic包里面的操作可见性可见性指的是在多线程的情况下,如果有一个线程进行了变量的修改,那其他的线程都能看
2021-03-15 19:45:47
217
1
原创 JVM总结(一) JAVA内存区域
JVM总结(一)JAVA内存区域运行时数据区域方法区1.7及以前被称为永久代1,8以后被称为元空间、也被称为非堆用于存储已被虚拟机加载的class信息,常量,静态变量,即时编译器编译后的代码等数据。堆JAVA heap是Java虚拟机所管理的内存中最大的一块在虚拟机启动的时候创建 用来存放对象实例,几乎所有的对象实例都在这里分配内存Java堆是垃圾收集器的主要管理区域虚拟机栈JVM虚拟机栈的生命周期与线程相同。虚拟机栈描述的是JAVA方法执行的内存模型每个方法被执行
2021-02-28 16:29:17
56
原创 寻找两个正序数组的中位数 leetcode 04java判断奇偶性数组合并数组排序
使用了笨逼解法 先合并数组 再排序 在进行判断奇偶 最后得出中位数需要注意的点 是在java中/2 和 /2.0是不同的要看除数是什么类型的,如果是int :区别是 5/2=2,5/2.0f=2.5:如果除数是浮点数 没什么区别java中判断奇偶性要使用a% 2 !=0因为java求余结果与左操作数保持相同的符号public boolean isOddNumber(int i) { return i % 2 != 0;}public boolean isOddNumber
2021-02-12 03:37:18
101
1
原创 实例化的过程
实例化的过程静态和非静态分开处理使用到静态加载时,静态又分为: 静态变量, 静态代码块, 其中加载顺序是按照类中书写的先后顺序加载的非静态加载顺序: 按照非静态书写顺序加载/执行静态方法,实例方法只有在调用的时候才会去执行当静态加载中遇到需要加载非静态的情况: 先加载非静态再加载静态。使用new才会涉及到构造方法public class InitializeDemo { private static int k = 1; private static InitializeDe
2020-11-03 21:08:38
203
原创 继承 重写 多态
继承private不能被继承super调用父类的构造方法,必须在构造方法的第一个siper必须只能出现在子类的方法或者构造方法中super和this不能同时调用构造方法this 本身调用者这个对象super 代表父类对象的应用this 么有继承也可以使用super 只能在继承条件才可以使用this 本类的构造super 父类的构造重写需要有继承关系,子类重写父类的方法1.方法名必须相同2.参数列表必须相同3.修饰符:范围可以扩大 public > Protected
2020-11-03 17:44:03
71
原创 封装
封装该露的露 该藏的藏我们程序设计要追求 高内聚,低耦合高内聚就是类的内部数据操作细节自己完成 不允许外部干涉低耦合就是 仅暴露少量的方法给外部使用封装(数据的隐藏)通常 应该禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问 这称为信息隐藏属性私有,get/set封装的意义1.提高程序的安全性,保护数据2.隐藏代码的实现细节3.统一接口4.增加系统的可维护性...
2020-11-02 21:44:31
54
原创 java方法
java方法什么是方法?方法是解决一类问题的步骤的有序组合方法包含于类或者对象中方法在程序中被创建,在其他地方被引用设计方法的原则方法的本意是功能块,就是实现某个功能的语句块的集合。最好保持方法的原子性,即一个方法只完成一个功能。形式参数 实参add(int a, int b) //形式参数 add(1,2) //实参*** return ***可以用来结束一个方法方法的重载重载就是在一个类中,同样名字的方法,但形参不同的函数。方法重载的规则方法的名字必须
2020-10-31 23:40:12
65
原创 employee类在内存中的存储与变化
对象与类employee新建了一个数组 调用构造方法 内存的变化过程左边为栈 右边为堆[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BierNmbx-1603794803087)(C:\Users\KONG\AppData\Roaming\Typora\typora-user-images\image-20201026201845768.png)]引用类型为什么叫引用类型 因为句柄和值不在一起 要靠引用的...
2020-10-27 18:35:21
136
原创 JDK JRE JVM
JDK JRE JVMJDK java development kitJRE java runtime environmentJVM JAVA virtual machineJDK包含JRE
2020-10-24 23:58:49
60
原创 java三大版本
java三大版本JavaSE 标准版 桌面程序 控制台开发JavaME 嵌入式开发 已死JavaEE 企业及开发 web端 服务器开发
2020-10-24 23:55:38
149
原创 什么是计算机 10-24
什么是计算机全程电子计算机 速成电脑能够按照程序运行由硬件和软件所组成计算机硬件一些物理装置按系统结构的要求构成一个有机整体冯诺依曼体系结构软件及软件开发系统软件 应用软件DOS(DISK OPERATING SYSTEM)磁盘操作系统基本的DOS命令#盘符切换 D:#查看当前目录下的所有文件 dir#切换目录 cd (change directory)#清理屏幕 cls (clear screnn)#推出中端 exit#查看电脑ip ipconfig#ping
2020-10-24 23:53:21
116
原创 MD学习笔记
MD学习笔记标题二级标题三级标题四级标题5级标题字体Hello world!Hello world!Hello world!Hello world!Hello world!引用第一次学习md分割线图片[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oL3k1yeY-1603552205248)([图片])]超链接点击跳转到csdn列表aaaaaaaaaaaaaaaaaaa3333333333333ddddddddddddddd
2020-10-24 23:10:39
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人