- 博客(72)
- 资源 (5)
- 收藏
- 关注
原创 https是如何验证证书的有效性的
证书验证的过程是使用非对称加密的,客户端对服务器端发起请求,服务器返回一个证书,客户端验证这个证书的合法性,如果这个证书是合法的,那么就生成一个随机值,利用这个随机值作为对称加密的钥匙一个数字证书通常包含了:- 公钥;- 持有者信息;- 证书认证机构(CA)的信息;- CA 对这份文件的数字签名及使用的算法;- 证书有效期;- 还有一些其他额外信息;为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA 就是网络世界里的.
2021-05-31 10:59:51
2797
原创 系统的TPS不达标,此时如何优化
对系统进行压测,比如每秒压个几百请求到几千请求,甚至上万请求,此时发现死活压不上去,压来压去,你的系统最多每秒就处理几百个请求,根本到不了几千个请求,此时就发现系统的TPS不达标。这个时候,如果发现TPS不达标,通常是说明你系统肯定是每个请求处理时间太长了,所以就导致你单位时间内,在有限的线程数量下,能处理的TPS就少了,这个时候往往要先优化性能,再提TPS。假设你一共有200个线程,结果你每个请求要耗费500ms,每个线程每秒就只能处理2个请求,200个线程每秒只能处理400个请求,比期望的单机处理5
2021-05-10 21:14:22
1832
原创 NIO笔记(1)
NIO(同步非阻塞)基本架构Selector、Channel、Buffer每一个Channel对应一个Buffer,Channel是双向的程序切换到Channel是由事件决定的,Event是一个重要的概念Selector对应一个线程,一个线程对应多个ChannelSelector根据不同的事件,在各个通道上进行切换Buffer就是一个内存块,是双向的,底层是有一个数组数据的读写是通过Buffer理解非阻塞的概念(关注的是程序在等待调用结果(消息,返回值)时的状态)从上图理解非阻塞
2021-04-13 17:37:46
304
3
原创 tail命令
查看文件内容现有itbilu.log日志文件,查看其后5行:$ tail -n -5 itbilu.log// 或$ tail -n 5 itbilu.log// 或$ tail -5 itbilu.log查看第100行至文件末尾:$ tail -n +100 itbilu.log// 或$ tail +100 itbilu.log配合head命令,实现查看文件的第10到20行:$ head -20 itbilu.log | tail -10实时查看日志
2021-04-13 13:57:15
271
原创 postman 中 form-data、x-www-form-urlencoded 的区别
form-data就是 http 请求中的 multipart/form-data, 它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有 Content-Type 来说明文件类型;content-disposition,用来说明字段的一些信息;由于有 boundary 隔离,所以 multipart/form-data 既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。x-www-form-url..
2021-04-13 09:42:52
381
原创 SpringBoot结合Netty实现WebSocket推送功能
文章目录Http协议WebSocket代码演示总结:Http协议无状态,使得HTTP服务轻量级-HTTP消息冗长:HTTP消息包含消息头,消息体,换行符等。且大多采用文本传输。所以HTTP消息会有很多冗余消息并且消息占用字节数大,消耗过多的带宽半双工通信:同一时刻,数据只能往同一方向传输。比如向服务器发送消息时,服务器此时不可以向客户端发送消息。(不过目前HTTP2已经支持了全双工通信)1、WebSocket可以由tomcat和netty进行实现,这里选择用netty进行实现WebSocke
2021-04-01 17:06:37
3101
原创 多生产多消费者问题
注意事项:保证生产者不会在缓冲区满的时候继续向缓冲区放入数据,而消费者也不会在缓冲区空的时候,消耗数据 当缓冲区满的时候,生产者会进入休眠状态,当下次消费者开始消耗缓冲区的数据时,生产者才会被唤醒,开始往缓冲区中添加数据;当缓冲区空的时候,消费者也会进入休眠状态,直到生产者往缓冲区中添加数据时才会被唤醒应用场景任务的处理时间比较长的情况下:比如上传附件并处理,那么这个时候可以将用户上传和处理附件分成两个过程,用一个队列暂时存储用户上传的附近,然后立刻返回用户上传成功,然后有专门的线程处理队列中的
2021-03-26 17:39:26
314
原创 记录下自己搜索日志
这是在打开陈浩网站跳出来的一个方框,再次看陈浩老师的文字被他深深的震撼了大家好,我是陈皓,网名左耳朵耗子(很多人问我为什么要叫这个“一只耳”的名字,你们猜),对了,我真的不是高手,我也不是牛人,离他们的距离还很大。我从2003年开始在网上记录一些自己的技术知识和想法,今天我还在努力学习希望能成长一个高手,因为,面对生活在今天这样技术日新月异的时代,我们每个人都是一个新人。我很幸运出生在这个时代——第三次工业革命的时代,也很幸运选对了专业,所以,可以算是一只“风口上的猪”了,就是运气好,赶上了这...
2021-02-18 16:07:49
243
原创 idea开启远程调试
在线上的环境和本地开发的环境不一样,当线上出现问题时idea开启远程调试这个技能在工作中还是很实用的,首先需要在服务器上按这行命令启动java -jar -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 jar --server.port=9030然后再idea以debug方式启动就行了...
2021-02-03 10:58:59
168
原创 堆排序
public class HeapSort { public static void main(String[] args) { int[] arr={2,3,1,4,7,5}; new HeapSort().sort(arr); } public void sort(int[] arr){ int n=arr.length; for(int i=n/2-1;i>=0;i--){ he.
2021-02-01 18:03:20
140
原创 实现一个简单的hashmap
/** * 实现hashmap */public class MyHashMap { private final int N=10000; private Node[] arr; public MyHashMap(){ arr=new Node[N]; } public static void main(String[] args) { MyHashMap hm=new MyHashMap(); hm.put(1.
2021-02-01 17:46:53
170
原创 跨域的问题排查
刚入职的第一天,就碰到了一个问题就是跨域加上权限认证的问题,排查了一天的问题,最后通过import org.springframework.core.Ordered;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.annotation.WebFilter;im
2021-01-22 15:41:54
350
原创 删除链表中重复的的数字
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5这是我面试美团时候考的题目,在牛客网J56,对于链表在我们大学的第一次学数据结构就接触了,但是不能说处理这种题目很容易。面试就是这种套路,当面试官觉得你的项目没什么亮点时,就会考察你的算法能力。废话少说,先上代码public class Solution { ..
2021-01-11 15:57:21
792
原创 ABC三个线程如何顺序打印ABC
package com.macro.mall.demo.xiancheng;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class C { public static void main(String[] args) { Data3 data.
2021-01-04 20:32:45
207
2
原创 Spring 操作Mongo 进行增删改查
首先先贴上一个我在查阅资料时参考的一个链接,https://www.jianshu.com/p/a576499769ae,这篇文章大概讲解了如何利用Spring 操作Mongo进行增删改查。但是笔者在实际的开发过程中,遇到了多对多的模型设计,当然笔者第一时间也在互联网搜索了相关的资料,最终采用的设计,是存一个List集合。 "_id" : ObjectId("5ea132115cbf0e0d3a5d5578"), "Self" : { "PersonId" : "1", .
2020-12-27 12:12:24
278
原创 实现分布式id
如何实现分布式id,搜索相关的资料,一般会给出这几种方案:使用数据库自增Id 使用reids的incr命令 使用UUID Twitter的snowflake算法 利用zookeeper生成唯一ID MongoDB的ObjectId
2020-12-25 17:24:44
138
原创 开发工具
1、开启热部署2、开启rundashboradhttps://blog.youkuaiyun.com/sheinenggaosuwo/article/details/86624759?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogC
2020-12-12 22:47:59
141
原创 常见面试题
对Java内存模型的理解,以及在并发中的应用Java内存模型主要分为工作内存和主内存,Java内存模型规定所有的变量都存储在这个主内存中,每个线程有自己的工作内存,工作内存保存了主内存的拷贝,线程中对变量的操作必须在工作内存中,不能直接读取主内存中的变量。把一个变量从主类存中复制到工作内存中,那就要顺序地执行read和load操作,如果要把变量从工作内存中同步到主内存,就要顺序的执行sto...
2020-03-29 23:10:22
244
原创 面试时需要注意的事项
在面试时,经过寒暄后,一般面试官会让介绍项目经验 。常见的问法是,说下你最近的(或最拿得出手的)一个项目。根据我们的面试经验,发现有不少候选人对此没准备,说起来磕磕巴巴,甚至有人说出项目经验从时间段或技术等方面和简历上的不匹配,这样就会造成如下的后果。第一印象就不好了,至少会感觉该候选人表述能力不强。一般来说,面试官会根据候选人介绍的项目背景来提问题,假设面试时会问10个问题,那么至少有5个...
2020-01-07 21:25:42
182
翻译 类加载机制
**类是在运行期间第一次使用时动态加载的,而不是编译时期一次性加载。因为如果在编译时期 一次性加载,那么会占用很多的内存。**类加载包括以下 7 个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)加载加载是类加载的一个阶段,注意不要混淆。加载过程完成以下三件事:...
2019-12-14 20:57:33
212
原创 存储过程
存储过程(stored procedure)的定义它是在大型数据库系统中,一组为了完成特定功能的SQL语句,它存储在数据库中,一次编译永久有效。语法如下:CREATE DEFINER=`root`@`%` PROCEDURE ` ten_minute_procedure`(in input bool,in result bool)BEGINdeclare month varchar(...
2019-12-14 20:31:45
471
原创 在Linux上安装redis
将redis-3.2.5.tar.gz复制到某目录(如:/root/Software)cd /root/Softwaretar xf redis-3.2.5.tar.gz解压之后的文件目录cd redis-3.2.5makemake install //如果不够权限就sudo make installvi redis.conf ...
2019-12-14 20:26:21
149
原创 kafka
毋庸置疑,目前 Apache Kafka 是整个消息引擎领域的执牛耳者,也是大数据生态圈中颇为重量级的一员。从最早诞生于 LinkedIn 的“分布式消息系统”,到现在集成了分发、存储和计算的“流式数据平台”,Kafka 广泛应用于国内外大厂,比如 BAT、字节跳动、美团、Netflix、Airbnb、Twitter 等等。我身边也有越来越多的工程师们,把 Kafka 加入到自己的学习列表。的确...
2019-11-28 07:32:14
181
原创 数据库连接池
这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。一、早期我们怎么进行数据库操作1、原理一般来说,Java应用程序访问数据库的过程是:①装载数据库驱动程序;②通过jdbc建立数据库连接;③访问数据库,执行sql语句;④断开数据库连接。2、代码// 查询所有用户Public void FindAllUsers(){...
2019-11-26 22:31:20
180
原创 什么是微服务?
微服务(Microservice Architecture)是近几年流行的一种架构思想,简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。而近几年流行...
2019-11-25 23:27:04
753
原创 redis
前言:学习一个知识点最重要的不是你看了多少相关的书,而是要体现在代码的实际应用场景中。当然这也不是说看书不重要,相反非常重要,看书能让你有全局的把控,辅助代码你会记得更加牢固。Redis导图redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有...
2019-11-24 22:41:20
178
原创 spring常见面试题
僵尸进程一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait() 或 waitpid() 获取了子进程信息后才会释放。如果子进程退出,...
2019-11-17 22:25:15
155
原创 Spring是如何解决循环依赖的
Spring有两种处理方式当你通过构造器循环依赖1、Spring容器创建“circleA” Bean,首先去“当前创建Bean池”查找是否当前Bean正在创建,如果没发现,则继续准备其需要的构造器参数“circleB”,并将“circleA” 标识符放到“当前创建Bean池”; 2、Spring容器创建“circleB” Bean,首先去“当前创建Bean池”查找是否当前Bean正在创建,...
2019-11-16 23:24:33
167
原创 原子操作
原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。处理器中的原子操作使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。使用总线锁保证原子性如果多个处理器同时对共享变量进行读改写...
2019-11-15 19:06:03
619
原创 MySQL的复制功能
复制解决的问题是让一台服务器的数据与其他的服务器保持同步。一台主库的数据可以同步到多台备库上去,备库本身也可以被配置成另外一台服务器的主库。从集中到分布,最基本的一个需求不是数据存储的瓶颈,而是在于计算的瓶颈,即SQL查询的瓶颈,我们知道,正常情况下,Insert SQL就是几十个毫秒的时间内写入完成,而系统中的大多数Select SQL则要几秒到几分钟才能有结果,很多复杂的SQL,其消耗服务器...
2019-11-14 19:55:08
288
原创 JVM内存分配与回收策略
Minor GC 和 Full GCMinor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。Full GC:发生在老年代上,老年代对象其存活时间长,因此 Full GC 很少执行,执行速度会比 Minor GC 慢很多。内存分配策略对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 区分配,当 Eden...
2019-11-14 19:39:21
164
原创 Mycat和分库分表
Mycat和分库分表mycat是一种非常流行的分布式数据库中间插件,mycat的作用为满足数据库的大量存储,提高了查询性能,从架构的角度来理解就是前端用户可以把mycat看作是一个数据库的代理,核心功能是分库分表,即将一个大表水平分割为n个小表。千亿以下的数据规模仍然是数据库领域的专长,而 Hadoop 等这种系统,更适合的是千亿以上 的规模。所以,Mycat 适合 1000 亿条以下的单表规模...
2019-11-12 20:43:04
247
原创 聊聊你对AQS的了解
AQS是一个并发包的基础组件,用来实现各种锁,各种同步组件的。包含了state变量、加锁线程、等待队列等并发中的核心组件。AQS全称是队列同步器AbstractQueuedSynchronizer,是用来构建锁或者其他同步组件的基础框架。它使用了一个int成员变量表示同步状态,默认情况下是0/**The synchronization state.*/private volatil...
2019-11-11 20:56:50
286
原创 synchronized
在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。本文详细介绍Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。先来看下利用synchronized实现同步的基础:Java中的每一个对...
2019-11-07 11:38:00
170
原创 程序管理
什么是程序在 Linux 系统当中:触发任何一个事件时,系统都会将他定义成为一个程序,称为 PID。job control 的管理直接将指令丢到背景中『执行』的 &tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &这是一个重定向命令 参考2>&1 &将『目前』的工...
2019-11-06 11:38:42
280
原创 EXPLIAN-修订版
查询优化必备神器—EXPLAIN学习解释EXPLAIN将帮助你了解MySQL优化器是如何工作的。要使用EXPLAIN,只需要在查询的SELECT关键字之前加上EXPLIAN这个词,MySQL会在查询上设置一个标志。当执行一个查询时,这个标志会使其返回在执行计划中每一步的信息,而不是执行它。增加EXPLAIN时在查询在FROM子句中包括子查询的情况下,会执行子查询。们使用EXPLAIN解析SQL...
2019-11-05 20:21:56
448
原创 什么是线程池——第一篇
什么是线程池?Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。主要处理流程:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池...
2019-11-05 20:09:25
275
assciation.zip
2020-06-03
wenda1.zip
2020-06-03
wireless.zip
2020-06-03
《高性能MySQL》读书笔记.docx
2020-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人