- 博客(9)
- 收藏
- 关注
原创 TCP为什么需要三次握手
前面两次握手是客户端给服务端的一问一答+服务端的一问,此时只有客户端知道我可以发给服务端消息,并且能确定服务端能收到我的消息(因为服务端回答了我),此时服务端做到了事事有回应;服务端在反馈客户端一问的同时也给客户端发起了一问,如果没有第三次握手(回答服务端的一问),服务端是不知道客户端能不能收到自己的消息,客户端没有做到事事有回应,对于服务端来说这个连接就是不可靠的。我看了很多关于为什么需要三次握手的文章,都是从原理入手,最终还是在说三次握手的过程,我个人理解之所以需要三次最重要的一点是因为TCP是。
2023-04-03 14:22:54
107
1
原创 代码重构思路
背景项目中我们经常能看到一些上千行的方法,甚至几千行的方法,本人见过最恶心的一个方法3500多行,这些代码逻辑结构复杂,各种if else错综复杂,就算心里万马奔腾最后也得硬着头皮去看、去改,就算上线了也得慌好几天,一听到线上报警心率瞬间飙升。这些代码很多是因为业务迭代过快,加上一开始没有好好设计,只考虑了完成需求,没有考虑扩展问题。作为一个有追求的程序员,这种代码正是体现能力的时候,如果能够重构一下,满满的成就感。难点不知道如何下手,是从头写一遍还是在原来的代码上改重构风险过高,没
2021-10-19 17:43:39
255
转载 2021-05-25
Java类加载过程原文链接1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。wps5F9E.tmp类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预
2021-05-25 17:38:40
136
原创 JVM之不同垃圾收集器比较
JVM垃圾收集器优缺点比较Serial收集器涉及这一部分的东西都是晦涩难懂的,加上平时开发中很少有这方面技能要求,在很长的一段时间我都是懵逼的,但是面试时又是一个重点,所以抽出时间来专门整理一篇这样的文章帮助本人理解学习。Serial收集器...
2020-05-23 13:19:56
493
原创 Java运行时数据区域
Java运行时数据区域程序计数器Java虚拟机栈本地方法栈堆方法区-元空间运行时常量池程序计数器程序计数器是一块较小的内存空间,依赖于用户线程,随着用户线程的启动和结束而存在和销毁,它可以看作是当前线程所执行的字节码的行号指示器。多线程对于处理器来说属于串行执行,在任意时刻一个处理器只会执行一条线程中的指令,因为处理器的处理速度是超级快的,我们用多线程是可以充分的利用处理器资源,让它尽可能的满负荷运行。而Java虚拟机就是通过多个线程轮流切换,分配处理器执行时间的方式实现的。但是有一个问题,线程来回切换
2020-05-17 17:40:27
149
原创 用反射实现两个对象相同属性值赋值
用反射实现两个对象相同属性值赋值使用场景用到的技术代码实现使用场景 开发中一个对象可能是有多处使用,一处改变了某些属性值其他地方 也会发生改变,造成一些意想之外的效果,但是复制一个对象挨个 属性去set值又感觉有点蠢,毕竟我们技术人员装逼要到位,看了很 多别人写的方法都不尽如意,总感觉很别扭,自己花了几分钟写一 个。用到的技术 反射代码实现public class Student implements Serializable { private Int
2020-05-14 11:58:30
440
原创 kafka+flume+kudu
今天动手实践了一下kafka数据经过flume处理,最后保存进kudu的操作。总的来说有几点需要注意第一:必须要手动下载kudu-flume的依赖包放到flume的lib目录下,具体目录在flume-ng/lib如果是clouderaManager安装的,目录在 opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/flume-ng/lib...
2019-11-25 17:15:53
525
1
原创 手写ORM
ORM原理对象-关系映射(Object/Relation Mapping,简称ORM),日常开发中我们都在用的比如Hibernate,Mybatis。废话不多说,直接上代码1、建表2、建实体对应上表public class TsRole { private String id ; private String code ; private String createTime ;...
2019-11-07 16:26:30
145
原创 JVM编译过程理解
JVM编译过程理解前言正文前言不知道大家有没有注意,jdk分为linux版和windows版,java 之所以能够跨平台也是因为这个,不同的运行环境(linux,windows)我们需要安装对应的jdk。我们知道javac是编译命令,会把.java文件编译成.class文件,这时我们用命令java 即可运行编译后的.class文件。我们删掉.java文件也是可以运行的,说明java程序的运行不...
2019-10-30 22:50:50
257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人