自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 TCP协议的拥塞控制

拥塞控制是一个全局性的过程,通过慢开始、拥塞避免、快重传。慢开始就是试探性的先把少量的字节注入到网络中,然后拥塞窗口cwnd以2倍的速度增加,当拥塞窗口大于等于门限值时(cwnd>=ssthresh),结束慢开始算法,则开始第二个算法——拥塞避免。快重传和快恢复是一起的,重传后,拥塞窗口值等于减半计算后的门限值,然后拥塞窗口执行拥塞避免算法逐渐线性增长,短时间内就恢复到较快的传输速率,并且有效的避免了拥塞。通俗来说,就是在某一时刻,网络资源和需求发生了供不应求,从而使网络的性能变低的情况,就是拥塞的发生。

2022-10-08 23:45:39 515

原创 TCP与UDP的区别

TCP是基于点对点的连接通信;而UDP根本无需连接,且支持一对一、一对多、多对多的交互通信。TCP因为需要建立连接,首部格式内容多,内部开销大,所以资源开销大且通信速度慢;而UDP无需连接,资源开销小且通信速度快,效率高。TCP通信过程中,使用字节流传送数据;UDP是通过数据报文段传输的。TCP每条传输的数据,数据都是顺序的且都会收到来自对方回复的确认收到数据包,如果三次收到的ACK是同一个数据包的,则表示丢包了,会启动重传机制,这个过程,就保证了TCP数据传输的稳定性、正确性即可靠性;

2022-09-22 19:25:10 429

原创 浏览器访问一个网站的过程

当你输入地址敲下回车,相当于你发起了请求,浏览器会根据地址通过DNS解析到一个ip地址,得到ip地址后,浏览器正式向服务器发起TCP连接(SYN=1),服务器同意连接后,会返回一个确认数据包(SYN=1,ACK=1),浏览器会再给服务器发送一个表示收到服务器确认连接的数据包(ACK=1),这样双方就连接上了; 建立连接之后,浏览器会给服务器发送HTTP格式的请求数据包,服务器接收数据包后对数据包进行解析,处理后,生成HTTP格式的响应数据包,并响应给浏览器,浏览器对响应数据包进行解析后以HTM

2022-09-22 18:19:09 743

原创 创建对象在堆区如何分配内存

首先java虚拟机JVM在执行程序时,会把内存划分成若干个不同的数据区域。主要有线程共享区(堆区和元空间,JDK1.8前元空间被称为方法区)和线程私有区(程序计数器、虚拟机栈、本地方法栈)。程序计数器用来记录当前程序的执行行数,控制代码流程。虚拟机栈的局部变量表里存储了基本类型变量值和对象的引用类型,这里的引用会指向堆里的对象实例。所以创键一个对象的实例,几乎都存放在了堆区,在堆区分配内存。

2022-09-18 17:24:38 341

原创 CopyOnWriteArrayList源码分析

并发的线程安全Copy-On-Write简称cow,是一种利于集合并发访问的优化策略。基本思想是:在集合增删改元素时,并不会直接写入,而是先复制,将元素复制到新容器,再写入,完成之后再将原容器的引用指向新容器。

2022-09-18 01:35:04 293

原创 线程池的常见面试问题

如果工作队列已满,则判断线程池的当前线程数是否达到最大线程数,如果未达到最大线程数,则创建一个非核心线程来执行提交的任务;如果线程池中不存在空闲线程,那么就判断“当前存活的线程数量”是否小于核心线程数量,如果小于核心线程数,则创建一个核心线程去处理提交的线程任务。如果线程池的线程数量大于核心线程数,则线程池会判断工作队列是否已满,若工作队列未满,则将该任务放入工作队列,等待线程池从工作队列取出别执行。拒绝策略:线程池的核心线程和非核心线程耗尽,工作队列也满了的时候,如果有新提交的任务,则直接采用拒绝策略。

2022-09-15 16:11:43 556

原创 Session会话追踪的实现机制

Ssession中文经常翻译为“会话”,Session跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。...

2022-08-28 22:47:29 546

原创 servlet的生命周期

有许多相似之处,都可以生成动态网页。JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观,不便于生成动态网页。

2022-08-21 21:24:52 273

原创 MyBatis框架学习过程中所遇到的问题

在刚开始学习MyBatis的过程中,于我而言,第一个较为头疼的问题就是:难理解。对MyBatis有了一定的了解后,在学习过程中,避免不了的就是会出现各种异常,但由于不够仔细,或者配置映射文件时配置少了,多了、忘了。同时,也需要注意,我们添加的数据中是没有主键值的,我们需要检查该表的主键是否设置了自动增长类型,这样才能保证数据和主键的正常添加。通过日志文件的显示,我们可以知道,配置没有问题,通过错误的类型和提示,我们很快就能发现是因为马虎sql语句里出现了错误,在异常的提示里,已经告诉了我们那里错了。...

2022-08-16 20:43:12 681

原创 当添加一个键值对元素时,HashMap发生了什么?

当然上面提到的另一种扩容情况,就是在 HashMap加入新元素时,如果链表长度大于8时,会将当前链表转换为红黑树。HashMap 的特殊存储结构使得在获取指定元素前需要经过哈希运算,得到目标元素在哈希表中的位置,然后再进行少量比较即可得到元素,这使得 HashMap 的查找效率较高。Hashmap通过put方法来添加一个新的元素值,所以要想知道添加值时hashmap发生了什么,就是看put方法做了什么。:数组+链表,JDK8后,又加了红黑树,所以存储结构是数组+链表+红黑树。...

2022-08-14 22:37:34 229

原创 基于ftp协议的上传与下载

除了上传和下载,我们还可以通过服务器与客户端的连接,获取服务器的一些指定文件,并查看文件的属性信息等。但基本操作和上传下载一样,都需要创建ftp对象,连接,登录,切换至指定目录,然后我们就可获取该目录下的文件,通过遍历,我们可以获得文件的基本属性和信息。在进行ftp操作时,首先需要保证远程服务器端的通信状态,在远程服务器中执行FTP服务器应用程序,使服务器处于等待被连接的状态;服务器端需创建一个用户,设置用户名并设置指定服务器用户对应的本地文件目录,以及设置客户端对自己的访问权限。2、连接FTP服务器。..

2022-08-07 23:42:39 956

原创 MySQL数据操作

如果想删除表里的全部值,不加where条件即可;truncate清空表的记录。Insert语句有两种语法形式:insert...values和insert...set语句。字段值如果有默认值,或者设置了自增,或者可以为null时,可以不指定添加值。将一张表的所有内容复制到新表,要求新表中的数据结构必须和原表一致。,可以通过原表的创建代码来复制修改表名创建新表。...

2022-08-04 20:30:45 321 1

原创 数据库的基础学习1:select语句的查询

数据库的三个阶段:人工管理阶段、文件系统阶段、数据库系统阶段数据库管理系统:DBMS常见的关系型数据库:Oracle、DB2、mysql常见的非关系型数据库:MongoDB、rediessql的四部分:DQL(select查询语句)DCL(对数据进行变更)......

2022-08-04 19:37:57 6404

原创 对称式加密与非对称式加密的对比

对称加密算法简单来说,就是传统的用一个密码来进行加密和解密。而非对称式加密则是加密和解密使用的是不同的密钥;要用一个公钥-私钥对才能正常进行加密解密。对称式加密算法从程序的角度看,加密就是接收密码和明文,然后输出密文。解密就是接收密码和密文,输出明文。常用的对称加密算法有由于DES已经不常用了,在这里我们以最广泛的AES加密算法的常见工作模式ECB和CBC为例,看一下对称加密的过程和程序代码。ECB工作模式(最简单的AES加密的工作模式)1、准备原文和128位密钥的byte[]数组。...

2022-07-24 21:58:22 1427 2

原创 常见的哈希算法的总结

SHA-1、MD5、Hmac加盐实际上就是产生一个随机字符,来增加我们的加密结果的不确定性和安全性,但有一个基于密钥的消息认证码算法Hmac,它总是和某种哈希算法配合起来使用,(本质上是把key密钥混入摘要的算法)是一种更安全的消息摘要算法。最基础的加密过程就如上述代码展示的结果,在这个过程中,如果想要自己的加密更加安全(也就是防止彩虹表攻击,这里就不解释彩虹表攻击的过程意思了,不知道的可以去百度搜搜看),可以采取措施来抵御彩虹表的攻击,可以使用一个叫“加盐”的方法。的算法加密工具的对象,并传入对于的安全.

2022-07-21 20:59:16 2993 2

原创 基于java Email的电子邮件发送

Email电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程。简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若干个邮件服务器的中转,最后到达收件人的邮件服务器(MDA),收件人就可以通过邮件软件(MUA)接收邮件了。看完email传送过程后,我们再来了解一下三种常见的邮件协议。...

2022-07-17 20:10:12 968 2

原创 基于TCP实现客户端与服务器的图片传送

TCP实现计算机设备通信连接,是一种面向连接,基于字节流的传输层通信协议,我们必须要建立客户端与服务器的连接才能实现信息的交互。先来说说使用网络编程时会遇到的Socket相关的概念,应用程序通过Scoket来建立远程连接,Socket通过内部封装好的协议把数据传输到网络(TCP就是被封装好在socket类中)。java提供的socket相关类有ServerSocket类、Socket类。为了待会能够确认一个客户端的连接所以我们获取一下连接的客户端的IP并打印。6、设置【服务器端】的传输成功反馈信息,...

2022-07-17 18:18:37 2147

原创 超大Excel的读取与写入

普通的Excel文件的读写,我们可以通过ApachePOI提供的excel格式文件的解析来实现,当遇到超大容量的Excel,如100万的数据的解析,除了可以用POI提供的SXSSFWorkbook来解析,还可以使用alibab的EasyExcell来实现.两种方法的具体使用流程如下(顺便对比以下在该方法下数据的解析速度)...

2022-07-14 20:08:07 1850 2

原创 Excel文件的解析

dede 在正式开始解析步骤前,我们需要做一些准备工作:主要是添加jar包,然后就是本地找到一个有数据的Excel的表格。我的jar包如下,大家可以自行去官网主页下载添加即可 不管是解析读取Excel文件,还是创建写入Excel文件,我们首先需要创建的就是Workbook接口的引用指向具体实现类,这里我们主要使用Apache-POI提供的对格式文件的解析,XSSF(类)解析新版本的(*xlsx)Excel文件的解析,HSSF(类)主要用于旧版本Excel文件(*xls)的解析,

2022-07-13 20:49:39 819 1

原创 Properties文件的读取和写入

properties是以一种键值对(key==value)的方式进行存储内容,每一行都是一个键值对。properties类继承自Hashtable,可以用键来获取value值。我们也可以将它看成普通文件的读取,用BufferedInputStream读取,但读取出来没有形成键值对,所以没有意义。读取properties文件,首先也需要创建BufferedInputSstream缓冲输入流传入FileInputStream作为数据源。然后创建properties对象,再调用load()方法,在load方法里传

2022-07-07 20:10:24 1076

原创 Zip文件的读取与写入

ZipEntry表示一个压缩文件或目录,getNextEntry的返回值是zipEntry,当getNextEntry返回值为null时循环结束。一、zip文件解压缩解压缩一个zip文件,需要两大步骤。首先准备一个和压缩文件名称相同的普通文件,来装解压缩后的文件。然后解析读取压缩文件。二、原始文件写入Zip文件(创建压缩文件)关键步骤:1、创建一个和源文件同名同级的压缩文件(同名:原文件的父类路径+“\”+源文件名+“.zip”)2、获取并遍历原始文件,每遍历一个文件就将其创建成一个压缩文件

2022-06-09 00:31:10 666

原创 “FileInputStream“和“BufferedInputStream“的区别

首先分别了解一下FileInputStream和BufferedInputStream的基础了解FileInputStream:从文件流中读取数据,是InputStream的一个子类。FileInputStream到磁盘读取文件,可以一个字节一个字节读取,也可以建立字节数组byte[],以固定容量读取。read()重载实现的字节数组批量读取FileInputStream的字节数组读取方式需要自建字节数组,自建缓冲区,所以引入了BufferedInputStream,自带缓冲区。BufferedInpu

2022-06-08 10:33:54 765

原创 栈模拟队列

栈模拟队列

2022-06-07 18:52:59 181

原创 List Set Map Queue Deque Stack的遍历方式总结

List Set Map Queue Deque Stack的遍历方式总结

2022-06-07 00:39:54 760

原创 Integer常量池的理解

Integer常量池-(缓存池)范围(-128-127)

2022-02-21 20:30:23 381

原创 String,StringBuilder与StringBuffer

StringBuilder的基本语法

2022-02-21 19:55:51 283

原创 字符串的常见方法总结

一、字符串的构造方法构造方法没有返回值,方法名与类名一致,在创建类的对象时通过new关键字调用无参构造方法: public String() { this.value = "".value; }构造方法1:传入的参数类型:字符数组。作用:根据字符数组创建字符串 //构造方法还原public String(char value[]) { this.value = Arrays.copyOf(value, value.le...

2022-02-21 18:55:02 660

原创 重载和重写的区别

前言重载:是发生在同一个类里,方法名相同,功能类似,参数不同的一系列方法叫做方法的重载。重写:是发生在子类里的,子类中定义了一个与父类方法名、返回值、参数都完全一致的方法,被称为方法的重写。一、重载方法名和返回值类型相同传入 参数的顺序、个数、类型不同拿一个类的构造方法重载示例:class Product{//类 //Product类的构造方法重载 public Product(){ } public Product(int x) { } public Produc

2022-02-16 20:15:42 154

原创 Abstract抽象类和Interface接口

抽象类和接口的初认识

2022-02-16 19:34:05 309

原创 “==“与equals的区别

equals 主要应用于引用类型字符串(String)内容的比较,"=="比较的是内存地址,所以会在比较时产生不准确的结果(如图一)。注:纯字符的字符串在比较时,如果不区分大小写的比较,可以调用equalsIgnoreCase();"=="属于关系运算符,可以用来比较一些(除了double)基本数据类型,如:int char的数据或计算结果是否相等(如图) 附:double 类型不可以用"=="比较,结果会产生误差,一些double类...

2022-02-14 20:27:22 190

空空如也

空空如也

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

TA关注的人

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