自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP协议常见面试问题整理

流量控制是为了控制发送方发送速率,保证接收方来得及接收。TCP连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失,从而实现流量控制。TCP使用的流量控制是利用滑动窗口实现。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。6.什么是滑动窗口?为解决每个数据包确认应答效率较低的问题。

2023-09-22 20:00:44 122

原创 Java IO操作-字符流

InputStream类和OutputStream类在读写文件时操作的都是字节,如果希望在程序中操作字符,使用这两个类就不太方便,为此JDK提供了字符流。其中Reader是字符输入流,用于从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类。A:close()关闭流对象,但是先刷新一次缓冲区。

2023-09-13 10:30:50 91

原创 Java IO操作-字节流

在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,IO流中针对字节的输入输出提供了一系列的流,统称为字节流。在JDK中,提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级父类,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。

2023-09-11 23:55:23 103

原创 Java IO操作-File类

File类用于封装一个路径,在创建File对象时,我们需要通过构造方法传入一个路径。这个路径可以指向一个文件,也可以指向一个目录。这个路径可以是绝对路径("C:\\xxx\\xxx"),也可以是相对路径("src\\demo01.java")。File类也提供了对文件或目录的一些常规操作。注意:由于Windows操作系统的路径分隔符是"\"在Java中需要用"\\"表示"\";而Linux操作系统的路径分隔符是"/"。

2023-09-11 20:11:39 45

原创 Java集合遍历-Iterator接口

迭代器的执行原理是创建一个指针对象,指向当前数据结构的起始位置,然后调用next方法,指针自动指向数据结构的第一个成员,接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员,每次调用next方法都会返回一个包含value和done属性的对象。在Java开发过程中我们进场需要去遍历某个集合,然而有的集合有索引,有的集合没有索引,对于没有索引的集合我们就无法通过索引来遍历集合中的元素,这时Java就为我们提供了一个接口,Iterator接口,它的主要作用就是用来迭代访问集合中的元素。

2023-08-24 23:54:38 185

原创 Java中的Queue基本概念

Queue是一个接口,它提供了一些基本的方法,如添加元素、删除元素、检查队列是否为空、获取队列的大小等,Java中提供了多种实现Queue接口的类,包括LinkedList、PriorityQueue、ArrayDeque等。入列(删除元素)时,如果元素数量超过队列总数,会进行等待(阻塞),待队列的中的元素出列后,元素数量未超过队列总数时,就会解除阻塞状态,进而可以继续入列;不管出列还是入列,都不会进行阻塞,入列时,如果元素数量超过队列总数,则会抛出异常,出列时,如果队列为空,则取出空值;

2023-08-23 22:43:11 462

原创 Set系列集合的相关总结

Set集合是无序的,它里面没有保存元素的索引值,因此Set中存放的元素没有特定的顺序,只是将它放到集合中。TreeSet集合中的元素也是唯一的,不允许重复。由于HashSet底层是通过HashMap实现的,所以它的存储是先将元素通过哈希算法计算出哈希值,然后通过哈希值来存储,如果两个元素通过equals比较是ture ,但是哈希值不相等,HashSet还是会在不同位置保存元素。2、TreeSet集合中的元素是有序的,因为实现了SortedSet接口,具有字典顺序,可以通过迭代器按照升序或降序遍历。

2023-08-22 22:19:18 57 1

原创 CopyOnWriteArrayList核心代码阅读

【代码】CopyOnWriteArrayList核心代码阅读。

2023-07-17 21:48:06 36

原创 ReentrantLock与synchronized的区别

synchronized不能绑定;synchronized 的实现涉及到锁的升级,具体为无锁、偏向锁、自旋锁、向OS申请重量级锁,ReentrantLock实现则是通过利用CAS(CompareAndSwap)自旋机制保证线程操作的原子性和volatile保证数据可见性以实现锁的功能。synchronized为非公平锁 ReentrantLock则即可以选公平锁也可以选非公平锁,通过构造方法new ReentrantLock时传入boolean值进行选择,为空默认false非公平锁,true为公平锁。

2023-07-17 20:14:47 32

原创 线程池的执行流程

线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。

2023-07-17 19:51:19 54

原创 线程的实现方式

线程pool-1-thread-1计算900001-1000000范围的计算结束。线程pool-1-thread-2计算100001-200000范围的计算结束。线程pool-1-thread-4计算400001-500000范围的计算结束。线程pool-1-thread-1计算500001-600000范围的计算结束。线程pool-1-thread-2计算700001-800000范围的计算结束。线程pool-1-thread-1计算1-100000范围的计算结束。最终结果:500500。

2023-07-17 19:21:33 30

原创 AES算法的CBC和ECB两种工作模式

对称加密算法(symmetric-key cryptography):加密和解密时使用相同的密钥。常用的对称加密算法有 DES、AES、IDEA;非对称加密算法(asymmetric-key cryptography):加密和解密使用不同的密钥,例如公钥加密的内容只能用私钥解密,所以又称为公钥加密算法(public-key cryptography)。使用最广泛的非对称加密算法是 RSA 算法。AES 全称 Advanced Encryption Standard,是一种对称加密算法。

2023-07-17 18:57:41 824

原创 Java反射机制知识总结

Type[] getGenericParameterTypes() //获取该Method对象所表示方法的所有参数类型的数组,一般情况下,同getParameterTypes()方法的返回值一样,如果存在泛型,则该方法会返回泛型的类型。Field的对象所代表的某一个类的属性,而不是那个类的某一个对象的属性。对于私有属性要得到它所关联的对象的值,需要通过Field的setAccessible(boolean boolean)方法设置。Java当中的类用来表示具有相同属性和方法的对象的结合,是抽象的概念。

2023-07-12 19:42:13 66

原创 hash算法概览

碰撞是一定会出现的,因为输出的字节长度是固定的,String的hashCode()输出是4字节整数,最多只有4294967296种输出,但输入的数据长度是不固定的,有无数种输入。SHA-1是由美国国家安全局开发的,SHA算法实际上是一个系列,包括SHA-0(已废弃)、SHA-1、SHA-256、SHA-512等。最常用于加密的哈希算法是 MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)和 SHA(Secure Hash Algorithm,安全散列算法)。

2023-07-10 18:08:44 75

原创 搭建一个FTP服务器

FTP 协议(File Transfer Protocol)即远程文件传输协议,是一个用于简化 IP 网络上系统之间文件传送的协议,FTP 是 TCP/IP 的一种具体应用,它工作在 OSI 模型的第 7 层,即应用层,使用 TCP 传输而不是 UDP,FTP 建立的就是一个可靠的连接。FTP 协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、连接的方式、甚至是是否使用相同的操作系统无关。要注意的是在使用完之后我们需要关闭连接,使用的方法是disconnect();

2023-07-09 23:57:28 33

原创 JavaMail相关使用攻略

如果我们在邮件中使用HTML作为内容,那么最好将HTML中使用的图片作为邮件的一部分,这样无论是否在线都会正确的显示HTML中的图片。处理方法就是将HTML中用到的图片作为邮件附件并使用特殊的cid URL作为图片的引用,这个cid就是对图片附件的Content-ID头的引用。发送带有附件的邮件的过程有些类似转发邮件,我们需要建立一个完整邮件的各个邮件体部分,在第一个部分(即我们的邮件内容文字)后,增加一个具有DataHandler的附件而不是在转发邮件时那样复制第一个部分的DataHandler。

2023-07-09 23:07:23 112

原创 HashMap的数据结构

HashMap 以 key-value 的形式进行存储,key+value 会以一个 Entry 对象的形式来存储,把 Entry 存入数组 中,具体存入的下标不是按顺序存入,而是通过 key 获 取对应的 hash 值,再根据 hash 值与数组大索引进行按位与运算(将操作数转换为二进制,分别对比各位上的值,都为 1 则该位返回 1,否则返回 0,得到的结果就是按位与运算结果),与数组大索引进行按位与运算是为了保证数组下标不越界,A & B 结果一定是小于等于 B。因此需要想办法解决下述问题。

2023-05-31 13:44:21 714 1

原创 ArrayList扩容方式的理解

ArrayList 是利用Object数组实现容量大小动态可变,扩容机制为首先扩容为原始容量的 1.5 倍。如果1.5倍太小的话,则将我们所需的容量大小赋值给 newCapacity,如果1.5倍太大或者我们需要的容量太大,那就直接拿 newCapacity = (minCapacity > MAX_ARRAY_SIZE)?Integer.MAX_VALUE : MAX_ARRAY_SIZE 来扩容。扩容是通过数组的拷贝,所以尽可能减少扩容操作。

2023-04-26 15:51:48 66 1

原创 LinkedList源代码阅读

对LinkedList主要的组成部分进行源码剖析

2023-04-25 23:20:51 141

空空如也

空空如也

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

TA关注的人

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