- 博客(47)
- 收藏
- 关注
原创 源码 反码 补码
1.规则结论1.正数的源码 反码 补码 都是相同的。负数的源码 是其抛除符号位的正数的源码负数的反码 抛除符号位的证书的源码 各位取反。负数的补码 反码+12.存储形式正数在计算机中是以源码的形式存在,负数是以反码的形式存在。{0_1111111}=+127 (补码){0_0000000}=+0 (补码){1_1111111}=-1 (补码){1_0000000}=-128 (补码)反码的出现是为了解决计算机无法计算减法,所以我们把负数使用反码表示。减去负
2022-04-01 11:43:05
2980
原创 java-线程池
1.分类ExecutorService e = Executors.newFixedThreadPool(2); ExecutorService e1 = Executors.newCachedThreadPool(); ScheduledExecutorService e2 = Executors.newScheduledThreadPool(10);ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,20,1000
2022-04-01 10:58:10
695
原创 LinkedBlockingQueue和ArrayBlockingQueue的异同
1.ArrayBlockingQueue在初始化的时候需要指定容量;LinkedBlockingQueue不需要指定容量。2.LinkedBlockingQueue中有两把锁,put锁和take锁,分别用来取出元素和放入元素,效率更高,而ArrayBlockingQueue只有一把锁 效率更低。3.底层 不同,一个是数组一个是链表。4.LinkedBlockingQueue由于是两把锁,所以在统计元素个数的时候需要使用AtomicInteger。5.清空数据的时候我们需要获取到put锁和tak
2022-03-30 17:05:19
1057
原创 Thread.interrupted()
线程中断1.线程有自己决定是否中断。其他的线程只能给当前线程设置中断标志位。然后当前线程去检测是否中断。然后自行决定是否中断。2.Thread.interrupted()该方法用于检测线程是否中断,以及清除中断标志位。当第二次调用这个方法的时候就会返回false。3.如果线程被中断,当我们执行Thread.sleep()的时候会抛出中断异常。 Thread thread = new Thread(() -> { while (!Thread.
2022-03-30 11:03:20
2776
原创 java -线程
1.线程的不同状态我们都可以看成是一个队列,新建线程队列,就绪线程队列、运行态队列、死亡态队列、阻塞态队列。线程状态解释:初始态:当我们new Thread()创建了这么一个对象的时候就是初始态、或者叫做创建态。创建了之后的对象是可以被CPU调度的。等待队列:调用wait()方法会进入到等待队列。其他线程调用notify会进入到锁池队列。再拿到对象锁才能够进入到可运行态。可运行态和运行态1.获取CPU时间片段 CPU slice。2.yield()。为什么wait..
2022-03-30 09:52:37
270
原创 http 三次握手和四次挥手
1、三次握手第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),
2022-03-20 21:04:26
251
原创 mybatis 的加载过程
1.程序启动的时候,通过springfactoryBuilder->去加载mybatis全局配置文件。在spring中是mybatis-config。然后通过mybatis的配置文件生成sqlSessionFactory.2.sqlSessionFactory 去生成sqlSession。sqlSession代表的是一个会话。通过这个会话我们可以连接到数据库。3.通过sqlSession 获取mapper。获取到代理类执行即可找到对应的mapper.xml。然后执行具体的5..
2022-03-19 18:12:48
2421
原创 java 对象被回收
1.引用计数法。1.当一个对象被引用了一次了,那么这个对象计数加1,当我们检测对象是否可以被回收的时候,就通过检测 该对象被引用的次数是否为0.如果为0就代表可以被回收,否则不能被回收。public void buidDog() { Dog newDog = new Dog(); Tail newTail = new Tail(); newDog.tail = newTail; newTail.dog ...
2022-03-19 12:50:53
1159
原创 mysql undo redo buffer pool
1.概念undo 日志用于恢复。redo 日志用于重做。buffer pool:把磁盘的数据加载大buffer pool,修改buffer pool中的数据,并把数据记录到redo log buffer中。WAL(Write-Ahead Logging):redo log是写之前记录的。我们会把日志写入redo日志,再把数据写入buffer pool.当事务提交的时候 就执行redo log 落盘操作(在此之前会先执行binlog的操作)。redo 落盘了,但是buffer pool 不
2022-03-11 14:08:33
932
原创 Mongodb的数据存储结构Bson
BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是mongodb的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。BSON主要会实现以下三点目标:(1)更快的遍历速度对JSON格式来说,太大的JSON结构会导致数据遍历非常慢。在JSON中,要跳过一个文档进行数据读取,需要对此文档进行扫描才行,需要进行麻烦的数据结构匹配,比如括号的匹配,而BSON对JSON的一大改进就是,它会将JSON的每一个元素的
2022-03-10 18:09:51
1937
原创 springbootboot的事件监听
在new SpringApplication启动的时候,执行一下内容public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.resourceLoader = resourceLoader; Assert.notNull(primarySources, "PrimarySources must not be null"); this.primarySour
2022-03-10 18:08:41
276
原创 yaml文件热部署
1.添加依赖<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.25</version></dependency>
2022-03-04 16:20:37
238
原创 SSL证书设置
1.生成证书。keytool -genkey -alias tomcat -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -keystore ./tomcat.keystore -storepass 123456782.生成客户端证书keytool -genkey -alias client -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -storetyp
2022-03-01 15:49:03
783
原创 springboot AOP
要完全理解Spring AOP首先要理解AOP的核心概念和术语,这些术语并不是Spring指定的,而且很不幸,这些术语并不能直观理解,但是,如果Spring使用自己的术语,那将更加令人困惑。Aspect:切面,由一系列切点、增强和引入组成的模块对象,可定义优先级,从而影响增强和引入的执行顺序。事务管理(Transaction management)在java企业应用中就是一个很好的切面样例。Join point:接入点,程序执行期的一个点,例如方法执行、类初始化、异常处理。 在Spring AOP中,接
2022-02-22 11:39:06
119
原创 maven - bom
bommaven 中bom 项目主要用来指定依赖的版本。类似于对依赖的声明,如果要想使用的话,我们需要在另一个pom中的<dependencyManagement> 种指定这个依赖。就可以了。假设在A module中中只有一个pom文件。在B中如果要使用的话,在B的<dependencyManagement>节点下指定这个即可。那么在B中就可以任意的使用啦。...
2022-02-18 14:15:57
1528
原创 vue ref
vue $refs的基本用法<div id="app"> <input type="text" ref="input1"/> <button @click="add">添加</button></div><script>new Vue({ el: "#app", methods:{ add:function(){ this.$refs.input1.value ="
2022-02-08 09:12:55
59
原创 相对定位和决定定位
static、relative、absolute、fixed相对定位:relative相对定位指的是相对于自身的定位。执行过程去掉偏移量的位置是原来的位置。再添加偏移量的位置是新的位置。绝对定位:absolute、fixed决定定位:找到离自己最近相对或者决定定位的的父元素。并以此为定位位置进行定位。如果没有就找父元素。static默认的定位是static。...
2022-01-27 15:42:23
1029
原创 浮动和清浮动
浮动为了让块状元素具有能够跟行内元素一样的属性,即能够横向排列。所以我们引入的浮动。浮动的属性:left、right、none特性:1.直到遇到父容器或者其他的浮动元素才会停止浮动。2.浮动之后会脱离文档流。清浮动因为浮动之后会脱离文档流,所以当父容器的高度为0的时候,会出现坍塌的情况所以需要在父容器中清除浮动。清除浮动也可以看做是又回到了文档流。.clearfix:after { content: ''; clear:
2022-01-27 15:22:02
253
原创 块状元素、行内元素、行内块状元素
转换 (1)display:inline;转换为行内元素 (2)display:block;转换为块状元素 (3)display:inline-block;转换为行内块状元素特点inline特点(1)设置宽高无效(2)对margin仅设置左右方向有效,上下无效;padding设置上下左右都有效,即会撑大空间(3)不会自动进行换行spanblock(1)能够识别宽高(2)margin和padding的上下左右均对其有效(3)可以自动换行(4)多个块状元素
2022-01-27 09:03:12
64
原创 vue项目搭建
1.安装nodejs,vue通过nodejs进行包管理。2. 修改包管理的镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org3. 安装脚手架 cnpm install -g vue-cli4.vue init webpack vue-demo 初始化项目。目录说明1、build:构建脚本目录 1)build.js ==> 生产环境构建脚本; 2)check-ver...
2022-01-26 11:13:32
88
原创 mysql-分布式锁
分布式锁当我们的微服务连接到一个数据库的时候,可以使用mysql的 select for update 来作为分布式锁使用。pictureMapper.findLock();select id from table_lock where id = 'lock' for update由于我们查询的时候 默认会自动提交,即autoCommit为true。所以有2中方式可以解决。方式1:给当前的事务添加@Transactional注解方式2:设置提交方式为非自动提交,让我们
2022-01-25 14:44:10
2670
原创 java-CAS
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);this:代表的是当前的变量。valueOffset:代表的是volatile的变量的地址。expect:期望的值。update:更新的结果。
2022-01-25 14:36:41
260
原创 DateTimeFormatter、SimpleDateFormat
1.以上两个类用来格式化日期用的。2.DateTimeFormatter是线程安全的。而SimpleDateFormat是线程不安全的。example DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); dateTimeFormatter.format(LocalDateTime.now()); SimpleDateFormat sim
2022-01-24 16:19:05
435
原创 java-volatile
1.关键字 volatile作用在并发的时候,让线程去读取最新的数据。从主存中读取,而不是从自己本地的线程栈副本中读取。这样可以保证读取到的数据是最准确的。不适用volatile的目的也是为了优化执行速度。不从主存中读取数据,减少了一次IO.失效率更高。不再多线程中使用的变量我们可以不适用volatile进行修饰。...
2022-01-24 16:14:48
188
原创 disruptor
public void start() { super.start(); this.exception = null; this.disruptorMsgBuffer = RingBuffer.createSingleProducer(new MessageEventFactory(), ringBufferSize, new BlockingWaitStrategy()); int tc ...
2022-01-22 15:27:54
329
原创 socket、serverSocket
客户端和服务端通信的原理。tomcat作为服务器其实也是作为客户端。当浏览器发送请求之后,tomcat端绑定了本地的ip和port,如果创建连接,就需要使用创建socket(区分serverSocket)。通过socket与serverSocket进行来回读写。当时作为http协议没有实现服务端向客户端发送消息的。只有客户端对服务端发送消息。...
2022-01-21 11:28:24
630
原创 网络编程-select、poll、epoll
1.问题当有多个客户端连接去请求服务器的时候,如果同步阻塞的话,就会出现排队处理的情况,处理请求的效率会非常的慢。这种是同步阻塞。一个线程只能处理一个请求。遇到IO的时候就只能选择等待。当然我们可以使用多线程的方式进行处理,也就是说一个连接使用一个线程,几十个连接还是能处理的,当连接超过几百个的话可能服务器就很难应付。只进行线程的切换就消耗掉了大批的资源。从内核态到用户态来回切换。2.多路复用IO从字面意思的理解是多个连接socket(线程)公用一个线程。忙闲等待。3.具体的实现方式
2022-01-21 11:18:57
1691
原创 操作系统-基础知识
内核态和用户态1.原因:为了安全期间,用户程序是无法执行特权指令的。IO的硬件操作。发送硬件信号接收硬件信号。特权指令:只能由操作系统执行,用户程序无法执行。非特权执行:可以在用户态执行。2.切换从用户态 切换到内核态的条件。中断、异常、陷入中断:多指硬件中断 。例如 硬盘IO读写、网卡读写、键盘读写、鼠标点击等。当发生IO操作的时候,硬件会发送一个信号到CPU,CPU会把中断信号发送给操作系统。异常:缺页异常。陷入:调试的的时候会陷入状态。陷入和异常的区别:陷入回来
2022-01-21 10:05:43
200
原创 java 回调
1.什么是回调A 调用B,B调用A.其中B一般是一个接口。回过头来调用。2.回调有什么好处针对一个接口B,我们 可以有多个实现类。针对不同的实现类。对于回调的操作可以不相同,那么就能够在回调接口中做不同的操作。...
2022-01-20 15:04:00
366
原创 分布式事务
2pc1.prepare commit协调者向参与者发送prepare commit请求,当所有的参与者都回复ack之后,协调者会发送docommit请求。2.docommitdocommit执行真正的提交操作。当协调者发送了commit之后,有一部分参与者没有收到,那么他会放弃事务执行。导致数据不一致。3pc修改点:1.添加了超时机制:在最后一个阶段 协调者发送 doCommit()请求之后,参与没有收到这个请求,并且出现超时的时候,参与者会主动执行commit。2.添加了
2022-01-19 11:22:04
1859
原创 zookeeper
1.zab:定义zookeeper atomic broadcast:广播协议2.数据一致性采用2pc过半的方式来保证数据的一致性。如果要读取最新的数据需要我们在客户端使用sync()方法配合。数据一致性的本质是什么?操作是原子的和事务的。可能会进行回退或者提交。强一致性。需要使用一个些钓者。3.zab的协议内容1.崩溃恢复当master 发生崩溃的时候,会从follower中选举出master。其中新选举出来的master会持有最新的zxid.然后可以继续去发送commit命令
2022-01-18 21:06:39
1605
原创 java线程基础
1.线程状态新建、就绪态、运行态、阻塞态、终止。阻塞态分为3种状态1.在对象等待。调用了wait()方法的线程2.在对象锁池中阻塞状态。获取锁的3.其他的条件导致的 IO等。2.线程方法join()用于线程 同步,a.join()意味着只有当a线程执行完成了才回去执行主线程。yield()暂停当前线程,也就是释放CPU片段。但是可能下一次还是轮到当前的线程。sleep()休眠,释放CPU片段。先一个CPU时间片段一定不是当前的线程。wait()线程进入等待状态。直
2022-01-18 17:41:27
63
原创 java 多线程semaphore
@RestController@RequestMappingpublic class AController { @Autowired private ILabelService iLabelService; private final Semaphore semaphore = new Semaphore(5); @RequestMapping("/semaphore") public void semaphore(){ for(i.
2022-01-18 15:52:20
248
原创 spring 获取非空的属性
spring获取 非空属性public static String[] getNullPropertyNames (Object source) { final BeanWrapper src = new BeanWrapperImpl(source); java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); Set<String> emptyNames = new HashSet&l
2022-01-18 10:51:27
258
原创 App开发
1.原生app1.原生App使用iOS或者Android平台提供的控件和底层api进行开发。特点:运行速度快,但是效果不明显,没有很好的交互。2.webApp1.基于网页的App开发。3.混合App使用网页+容器的组合。h5网页可以用来产生比较好看的效果。在应用中相当于嵌套了一个浏览器。是应用可以渲染出浏览器的效果。表现层(页面) + 渲染层(webView/uiWebView)+api底层。...
2022-01-12 11:44:23
1929
原创 LeetCode-树
1.二叉树层序遍历LeetCode102力扣https://leetcode-cn.com/problems/binary-tree-level-order-traversal/利用队列的特点:remove()方法:移除掉头部位置的元素并且返回最后位置的元素。add()方法:队列尾部添加元素。queue.isEmpty():队列是否为空。队列先进先出。public static void levelOrder(BiTreeNode t) { if (t == null)
2022-01-12 09:17:51
159
原创 java -泛型
1.泛型理解java 泛型值得是类型的参数化,也就是说这个类型传递过来的是什么类型就是什么类型的。就像一个参数一样。可以随意的变化。2.泛型声明泛型类:对一个一个泛型的类我们可以在创建对象的时候声明。还可以在List<String> arrayList = new ArrayList这个对象的类型是String类型。泛型方法:非泛型类中我们也可以使用泛型的方法。声明的时候通过方法的形参传入。然后再返回的时候使用。...
2022-01-11 19:46:35
106
原创 工厂设计模式
引入工厂设计模式的简单中的要素 主要是 产品和工厂。他们之间的关系是 工厂生产产品。也就是通过工厂新建一个对象。工厂设计模式应用非常广泛,有时候即使只有一种产品,我们也会去创建一个工厂,所有该对象的创建都过这一个入口来管理。会更加方便。简单工厂简单工厂 只有一个工厂类。可以生产多个同类型的产品。工厂方法工厂方法添加了 工厂类。每一种类型都有一个工厂。生产不同的类型使用不同的工程厂。抽象工厂在工厂方法的基础之上(有多个工厂),每一种类型的工厂会生产多种产品。.
2022-01-10 15:37:29
45
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人