自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术分子博客

java技术分子

  • 博客(65)
  • 资源 (9)
  • 收藏
  • 关注

原创 五、二叉树按路径遍历(DFS)

二叉树特点:叶子节点最多两个,分为左叶子节点和右叶子节点。思路:左中左,右中右都不存在就输出。class TreeNode { int val; TreeNode leftNode; TreeNode rightNode; TreeNode(int val) { this.val = val; }}public class TreePathPrintlnTest { public static void main(String[...

2020-09-21 13:44:33 706

原创 四、二叉树按层遍历(BFS)

二叉树特点:叶子节点最多两个,分为左叶子节点和右叶子节点。思路:将每一层节点放入list集合或者队列,遍历完当前层再继续遍历下一层。public class TreeTest { public static void main(String[] args) { TreeNode root =new TreeNode(5); TreeNode leftNode=new TreeNode(3); TreeNode leftNodeL=new Tree...

2020-09-13 20:54:20 330

原创 三、获取栈中元素最小值

栈特性:先进后出思路:peek()查看最后一个元素值,循环遍历栈,元素之间进行比较得到最小值。import java.util.Stack;//获取栈中最小元素public class StackElementMinValue { public static void main(String[] args) { stack.push(2); System.out.println(getMinValue()); stack.push(4);.

2020-08-28 22:11:29 384

原创 二、数据组中奇偶数交换

数组特性:根据下标取值思路:首尾指针(或下标)分别判断指向元素值是否奇数或偶数。 首指针对应值为奇数指针向后移动(自加运算),偶数不移动。 尾指针对应值为偶数指针向后移动(自减运算),奇数不移动。 首指针对应值为偶数,尾指针对应值为奇数交换两个值。 收尾指针相等结束。 import java.util.Arrays;//数据组中包含奇数偶数,将奇数交换到数组前半部分。p...

2020-08-28 21:50:58 1093

原创 一、双栈实现队列入队和出队

栈特性:先进后出队列特性:先进先出思路:将栈中元素颠倒一次即可得到队列顺序。package cn.ruyipay.test;import java.util.Stack;/** * @program:tpb * @description:双栈实现队列入队和出队 * @author:heshuangxi * @create:2020-08-28 08:51 **/public class DoubleStackImplementsQueue { static Stack&lt.

2020-08-28 10:28:47 336

原创 JVM学习总结目录

JVM1.编译器和解释器。为啥将 .java 文件编译为.class文件?2..class文件结构和内容。.java文件如何对应.class文件?3.内存加载.class文件过程。加载每步内容和时机?4.JVM 内存结构。 .class内容如何存储? 5.JVM 内存回收机制 。JVM内存那些地方需要回收?6.字节码执行引擎。7.JVM优化...

2020-05-22 08:58:06 388 1

原创 JVM学习总结——十二、JVM一次调优优化过程

问题:最近接触一个项目,项目恢复测试时发现3次下单2次超时。这就比较恐怖了,业务方之间反馈出来了,通过排查日志发现一个组装参数的方法耗时大概300~500ms,现在的RPC接口肯定不能接受。排查方式:通过观察Young GC 发现一次300多ms,时间也正好吻合。机器配置 2C4G每次FullGC后,内存都能回到某一个值可以排除内存泄漏的情况解决方式:对垃圾回收器进行参数调优,调优过程发现程序处理问题的复杂度不同参数也需要微调。最主要的是当程序足够复杂,JVM参数调优是不明显

2020-05-15 17:02:36 1323 1

原创 JVM学习总结——五、JVM内存常见回收算法

那些内存需要回收?Java堆和方法区(废弃常量,无用的类)什么时候回收?用可达算法判断两次标记后如何回收?需要根据jvm垃圾收集器算法回收。jvm垃圾收集器以及使用的回收算法回收算法1.标记-清除算法(Mark-Sweep) 标记-清除算法是最基础收集算法。(适合回收老年代)。 不足之处:1.效率低因为需要先标记再清除。 2

2018-01-23 14:19:04 271 1

原创 JVM学习总结——四、JVM内存结构

JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。-server选项下默认MaxPermSize为64m,-client选项下默认MaxPermSize为32mJVM在client模式默认-Xms是1M,-Xmx是64MJVM在Server模式默认-Xms是128

2018-01-23 11:41:18 3784 1

原创 IO基础-IO多路复用基础

I/O多路复⽤与传统的多线程/多进程模型相⽐,I/O多路复⽤的最⼤优势是系统开销⼩,系统不需要创建新的额外进程或者线程,也不需要维护这些线程和进程的运⾏行,降低了系统的维护⼯作量,节省了系统的资源。-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider 或者不指定,则底层调用epoll。1、epoll使用了红黑树来保存需要监听的文件描述符事件,epoll_ctl增删改操作快速。3、⽤用户态和内核态切换。

2024-04-18 15:10:24 455

原创 IO基础-传统I/O模型

前面提到的 TCP Socket 调用流程是最简单、最基本的,它基本只能一对一通信,因为使用的是同步阻塞的方式,当服务端在还没处理完一个客户端的网络 I/O 时,或者读写操作发生阻塞时,其他客户端是无法与服务端连接的。虽然阻塞状态不会占用CPU资源,但是会发⽣线程的切换,线程切换时会有上下⽂保存转换的过程,需要CPU调度是一个很昂贵的操作。基于 Linux 一切皆文件的理念,在内核中 Socket 也是以「文件」的形式存在的,也是有对应的文件描述符。阻塞:服务端与客户端建立连接后,其他客户端无法进行连接。

2024-04-18 14:50:01 364

原创 网络基础- Socket 通讯和连接模式

HTTP也可以建立长连接的,使用Connection:keep-alive,HTTP1.1默认进行持久连接,举例:类似于踢足球,只能一个传给另一个人,两个人不能同时传球,球只有一个,单工,就是两者通信单向进行,只能一个主动发信号一个被动去接受,不能角色互换。中断连接.也可以这样说:短连接是指Socket连接后发送后接收完数据后马上断开连接。长连接指建立socket连接后不管是否使用都保持连接,但安全性较差.例如 web网站请求。连接->传输数据->保持连接->传输数据->…连接->数据传输->关闭连接。

2024-04-18 10:38:16 508

原创 网络基础- Socket 通讯中粘包处理

在socket编程中程序的读写数据需求在图中 socket buffer中操作,粘包问题就出现在 socket buffer 中,程序在发送报文数据时可能存在连续情况。(存储数据正文大小) + 数据正文的形式,这样在服务端就可以知道每个数据包的具体长度 了,知道了发送数据的具体边界之后,就可以解决半包和粘包的问题了;当报文数据大于socket buffer时,此时报文数据并未添加完成socket buffer满了进行了发送。接收方读取套接字(Socket)缓冲区数据不够及时。

2024-04-18 09:38:38 515

原创 网络基础-TCP和UDP协议区别

并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节已经收到,那么也不能扔给应用层去处理,同时对「重复」的报文会自动丢弃。序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。因为 TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。IP 层是「不可靠」的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

2024-04-17 16:56:32 688

原创 网络基础-基于TCP协议的Socket通讯

要通过TCP连接发送出去的数据都先拷贝到send buffer,可能是从用户空间进程的app buffer拷入的,也可能是从内核的kernel buffer拷入的,拷入的过程是通过send()函数完成的,由于也可以使用write()函数写入数据,所以也把这个过程称为写数据,相应的send buffer也就有了别称write buffer。服务端进入了监听状态后,通过调用 accept() 函数,来从内核获取客户端的连接,如果没有客户端连接,则会阻塞等待客户端连接的到来。

2024-04-17 16:26:02 1727

原创 网络基础-TCP/IP和OSI协议模型

二、OSI七层模型三、TCP/IP模型参考:https://www.cnblogs.com/f-ck-need-u/p/7623252.html

2024-04-17 14:35:04 343

原创 网络基础-TCP协议握手与挥手

此时server 会维护一个 SYN 队列,半连接 syn 队列的长度为 max(64, /proc/sys/net/ipv4/tcp_max_syn_backlog) ,在机器的tcp_max_syn_backlog值在/proc/sys/net/ipv4/tcp_max_syn_backlog下配置,当 server 收到 client 的 SYN 包后,会进行第二次握手发送SYN+ACK 的包加以确认,client 的 TCP 协议栈会唤醒 socket 等待队列,发出 connect 调用。

2024-04-17 10:50:30 1053

原创 系统内核基础-零拷贝

实际上sendfile的使用场景是比较受限的,大前提是用户态无需看到操作的数据,并且只能从文件描述符往socket中传输数据,而且DMA Gather Copy也需要硬件支持,那么有没有一种不依赖硬件特性同时又能在任意两个文件描述符之间以零拷贝方式高效传递数据的方法呢?尽管mmap可以节省数据拷贝,但维护文件与地址空间的映射关系也是有代价的,除非CPU拷贝数据的时间超过维系映射关系的代价,否则基于mmap的程序性能可能不及传统的read/write。这次拷贝看上去也是没有必要的。

2024-04-17 09:21:01 707

原创 系统内核基础-数据拷贝过程

在 DMA 技术出现之前,应用程序与磁盘之间的 I/O 操作都是通过 CPU 的中断完成的。每次用户进程读取磁盘数据时,都需要 CPU 中断将数 据读进暂存器,然后发起 I/O 请求等待数据读取和拷贝完成,然后写进其它地方,每次的 I/O 中断都导致 CPU 的上下文切换。DMA(Direct Memory Access,直接存储器访问) ,在DMA之前的CPU复制,需要CPU将数据读进暂存器(区别于寄存器),然后写进其它地方,这个过程中,CPU被挤占,而DMA在拷贝时不影响CPU去运行其他任务。

2024-04-17 09:11:00 643

原创 系统内核基础-什么是内核?

微内核架构的内核只保留最基本的能力,比如进程调度、虚拟机内存、中断等,把一些应用放到了用户空间,比如驱动程序、文件系统等。内核一般会提供 4 个基本能力: 进程调度能力(Windows 内核是抢占式、Linux是时间分片)、内存管理能力(通过虚拟内存映射mmap )、硬件通信能力、系统调用能力。内核具有很高的权限,可以控制 cpu、内存、硬盘等硬件,而应用程序具有的权限很小,因此大多数操作系统。Linux 内核架构就是宏内核意味着 Linux 的内核是一个完整的可执行程序,且拥有最高的权限。

2024-04-16 14:14:58 876

原创 三、CPU基础-缓存

程序执行时,会先将内存中的数据加载到共享的 L3 Cache 中,再加载到每个核心独有的 L2 Cache,最后进入到最快的 L1 Cache,之后才会被 CPU 读取。L1 Cache 和 L2 Cache 都是每个 CPU 核心独有的(通常会分为「数据缓存」和「指令缓存」),而 L3 Cache 是多个 CPU 核心共享的。CPU Cache 通常分为大小不等的三级缓存,分别是 L1 Cache、L2 Cache 和 L3 Cache。三、CPU Cache结构。

2024-04-16 10:40:27 1049

原创 二、CPU基础-使用率

比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5。从计算机角度来说,单核心CPU,假设1秒钟分为100个时间片,如果2个任务,第一个任务用了5个时间片执行完成,另外一个任务用了15个时间片执行完成,所以如果统计周期是1秒,那么这1秒内的CPU使用率就是20%。在Linux中,进程分为三种状态,一种是阻塞的进程blocked process(等待I/O设备的数据或者系统调),一种是可运行的进程runnable process,另外就是正在运行的进程running process。

2024-04-16 10:20:22 713

原创 一、CPU基础-负载值

这个搜索程序的处理速度并不依赖于cpu,而是依赖于磁盘的读取速度,也就是输入输出(input/output,I/O).磁盘越快,检索花费的时间就越短。假设有一个进行大规模科学计算的程序,虽然该程序不会频繁地从磁盘输入输出,但是处理完成需要相当长的时间。因为该程序主要被用来做计算、逻辑判断等处理,所以程序的处理速度主要依赖于cpu的计算速度。此时电梯的load=15/10 = 1.5也就是说,1.5的负载表示系统当前满负荷运转,命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。

2024-04-15 14:40:01 1220 1

原创 如何设计分布式系统-分布式事务-TCC?

分布式系统、分布式事务、TCC

2022-11-30 22:26:00 620

原创 如何设计分布式系统-分布式事务-2PC、3PC?

分布式事务、事务、2PC、3PC

2022-11-30 20:04:43 471

原创 如何设计分布式系统-分布式事务-XA?

分布式事务、事务、XA

2022-11-30 19:15:26 961

原创 MySQL-事务特性ACID你真的懂吗?

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

2021-11-09 11:39:16 470

原创 大型电商618、11.11大促实战(上)

https://juejin.cn/post/6985510769136205861/

2021-07-16 22:18:55 114

原创 mac postman 卡顿导致CPU和内存飙升

最近发现自己mac 上使用的 postman版本 7.36.5 (7.36.5) 特别卡。一开始排查也没有发现什么问题?最后每次请求的时候

2021-06-01 22:23:59 2746

原创 Redis 雪崩、击穿、穿透分析

首先了解一下概念然后逐个讲解。雪崩:雪崩的场景大家在很多电影中其实都看到过,就是大面积的雪全部坍塌。放在Redis中就是大量的缓存key全部失效了。 脑海中立刻提出疑问将key全部改为永不失效是不是就避免了雪崩 ?答案是可以。我们都知道内存是非常宝贵的这样会让我们付出昂贵代价。 通过分析这个不是一个好的解决方案。 要想找出一个比较好的解决方案,我们就必须知道雪崩后的后果是什么。 如果发生雪崩后,会有什么影响呢? ...

2021-04-01 01:28:24 709

原创 mac Navicat连接Mysql8.0版本报错解决方案

命令如下:1.登录MySQL服务器找到安装目录:cd /usr/local/mysql/bin/登录:./mysql -u root -p1、use mysql;2、alter user 'root'@'localhost' identified with mysql_native_password by '********';3、flush privileges;然后连接...

2021-02-07 16:53:17 467

原创 Mac_postman安装过程和使用

第一步下载Postman、Postman Interceptor和nodejs。https://www.postman.com/downloads/版本:Postman-osx-7.36.1https://www.crx4chrome.com/(右侧搜索:Interceptor)版本:Postman Interceptor1.1.0https://nodejs.org/en/版本:node-v14.15.4第二步 双击Postman安装第三步Postman Interce...

2021-01-21 01:11:57 4314

原创 Mysqlserver-分层以及binlog 、redoLog 、undoLog

MySQL是服务器端存储软件。MySQL软件本身有分为三层,网络连接层, sql层, 存储引擎层,而网络连接层与sql层合称server层,故mysql又分server层合储存引擎层。简述一条SQL执行的过程。1. 客户端连接到MySQL服务器上。(这里指的是客户端发起一个socket请求,MySQL服务器连接池中分配一个连接。) 例如:java 开发使用 druid连接池与数据库创建连接。关于druid连接池配置参数可以搜索一下。 <property name="initi...

2021-01-05 17:51:14 600 1

原创 mybatis 3.23和mybatis 3.4.1 有什么不同-规范更加严格

mybatis ONGL表达式<!-- <if test=" "></if>标签的使用实例--><select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"&g...

2021-01-05 14:13:58 366

原创 如何设计分布式系统-CAP和BASE理论?

1. CAP理论 一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance) 其中C和A是冲突的,因为这里的C表示强一致性既然是强一致性那么在统一状态过程中势必服务是不可用的。 Zookeeper集群保证的就是CP,那么它的作用:可以作为注册中心,用于服务治理;分布式事务锁等。Zookeeper中节点分为master节点,salve节点。如果master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行...

2020-12-28 18:00:00 430 1

原创 easyexcel与@Accessors(chain = true)不兼容分析

https://blog.csdn.net/qq_28036249/article/details/108035369

2020-12-21 17:32:09 388

原创 高并发下mybatis3.2.3版本,出现空指针异常,下面是异常明细

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:### Error updating database. Cause: java.lang.NullPointerException### Cause: java.lang.NullPointerExceptionat org.mybatis.spring.MyBatisE

2020-12-21 17:28:55 1137

原创 DDD领域总结

DDD是什么?"而DDD则是对传统的以数据为中心的建模方式的反思结果。"DDD战略:领域限界上下文(可以通俗理解为业务场景或语境)上下文映射架构等上下文映射图:上下文映射图帮助我们理解业务领域、模型间的边界,以及这些模型之间的集成方式。用户域商家域问题域价值域解决方案域域的划分通过限界上下文,域独立变化、稳定空间、自治性。域的交互方式上下游关系(依赖方向下游->上游)可以分为:合作,遵奉、分离(最好关系),供应关系(通常关系)。架构:1.六边形架构(端口

2020-09-28 15:16:53 910

原创 idea常用快捷键

ctrl+W 选中单词ctrl+E 最近打开的文件ctrl+Y 删除行ctrl+U 前往父类或接口ctrl+I 实现方法ctrl+O 覆盖接口方法ctrl+]/[ 移动光标到初末位置ctrl+D 复制行ctrl+G 跳到指定行ctrl+H 显示类结构图ctrl+J 插入动态模板ctrl+B 查看被调用类ctrl+N 查询类Alt+Insert 生成get set方法ctrl+alt+T 选中代码放入IF或TRY..中ctrl+alt+I 自动缩进ctrl+alt+.

2020-09-28 15:10:44 277

原创 冒泡排序和选择排序区别

冒泡排序和选择排序区别1.稳定性 冒泡排序稳定排序。(例如 1,2,3,2,4 排完序后两个2,2 先后顺序不变) 选择排序不稳定排序。2.都属于比较排序,交换成本不同。 冒泡排序需要相邻元素比较,如果当前元素大于后一个元素进行交换。 选择排序,先选择后交换,减少交换次数。 import java.util.Arrays;/*** @program:tpb* @description:冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个,稳定排序...

2020-07-02 09:21:31 3360

数据结构和算法Java

数据结构和算法,由浅入深从Java基础到数据结构和算法,很容易理解。

2018-09-20

分布式优惠码生产规则

基于snowflake算法的唯一性和自己添加的随机数保证生产的优惠券和优惠码规律打散,不容易被爆力破解。

2018-10-11

mac_postman.zip

mac 下postman安装包

2021-02-07

分布式发号器

这个是基于Snow flake算法改良的,可以支持分布式和高并发生成订单号。

2018-09-20

多线程编程技巧.pdf.zip

多线程编程技巧,里边包含了对线程的各种使用技巧。很全面也很经典,大家可以相互学习学习。对多线程编程感兴趣的同学,不妨下载下来看一看。

2020-06-29

大型网站系统与Java中间件实践

大型网站系统与Java中间件实践,可以让你了解大型网站和中间件的关系。

2018-09-20

网络是怎样连接的

这是学习网络连接的基础书籍,通过这个本书你可以学习到网络是怎样连接起来的。

2018-09-20

idea 快捷键

中文 idea 开发快捷键文档说明。有需要的快来下载啊!!!

2018-10-31

空空如也

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

TA关注的人

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