java
isOk。
hello hello!
展开
-
@Autowired注解的深入理解
1.@Autowried所在类未加@Controller,@Service,@Component,@Repository等注解,或者一些其它情况(如直接new对象的实例)。我们一般使用的都是用@Autowried自动装配单个实例,但其实它也可以用来装配多个实例。可以通过List,Set,Map来装配多个实例。同一类型多个bean,当按类型装配时,如果该类型的bean不止一个时,会直接报错。举例说明:接口,自动装配。@Autowird的作用范围:成员变量,构造器,方法,参数,注解。原创 2022-11-19 10:59:22 · 786 阅读 · 1 评论 -
JavaScript中事件及其详解
JS的dom操作可以改变网页内容,结构和样式,我们就可以利用dom操作元素来改变元素里面的内容属性等。:回调函数的特点:自己把这个函数代码写出来了,但是这个函数不是自己负责调用,由其他程序负责调用该函数。onmouseover和onmouseenter的区别:前者会影响子元素的触发事件,后者不会影响。onmouseover:鼠标移入某个元素触发。【修改元素属性】:先获取元素,注册事件,处理程序,然后直接调用元素的属性赋值。onkeyup:某个键盘按键被松开。事件源:事件被触发的对象,就是谁触发了这个事件。原创 2022-11-16 20:42:14 · 1232 阅读 · 0 评论 -
TCP协议的拥塞控制
由图可以看出快恢复和快重传是紧密相连的,在执行快重传结束时,就执行了快恢复,快恢复则是把“ssthresh的值”设置为快重传最后一次执行值的一半,然后通过拥塞控制的“加法增大”进行线性的增长,降低了发送方发送的速率,解决了拥塞问题。:在进行拥塞避免的时候,在接收方要求每次接收到的报文段后,都要对最后一个已收到的报文段进行确认,然后发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。:从图中可以看出,拥塞窗口从1开始,由小增大,并且值的变化是翻倍增长的。:【慢开始,拥塞避免,快重传,快恢复】原创 2022-10-08 19:07:30 · 289 阅读 · 0 评论 -
数据结构&算法&树&二叉树
节点层次:从根节点开始,树根所在层为第一层,根的子节点所在的层为第二层,以此类推。子节点通常被称为“左孩子节点”和“右孩子节点”,并且遵循左小右大的原则。子树:根节点所分出来的一个节点,形成的一系列节点和元素构成子树。节点的度:当前节点,拥有的子树的个数称为节点的度。节点高度:该节点到叶子节点的最长路径所包含的边数。树的节点:使用树存储数据的每个元素都是一个节点。二叉树是特殊的有序树,每个节点最多有两个子节点。节点深度:根节点到该节点的路径所包含的边数。子节点:节点2,节点3是根节点的子节点。原创 2022-10-05 10:50:14 · 538 阅读 · 0 评论 -
数据结构&算法&栈&队列
是一种特殊的线性集合,对栈的操作都在栈顶【加入数据push,移除数据pop】并且是后进先出的【例如:网页的前进与后退】。队列的出口端叫做队头,则入口端叫做队尾,队列只允许在队头进行出队操作;虚拟机栈:由栈帧组成,每个栈帧都拥有:局部变量表,操作数栈,动态链接,方法出口信息。当为数组时则为顺序栈,当为链表时则为链式栈。入栈和出栈的时间复杂度为O(1)访问指定元素的时间复杂度O(n)数组实现的队列叫做顺序队列;链表实现的队列叫做链式队列。时间复杂度:假设队列中有n个元素。队列的分类:单队列,循环队列。原创 2022-10-03 10:29:15 · 1492 阅读 · 4 评论 -
数据结构&算法&线性表
【链表不限制数据的物理存储位置,其物理存储位置是随机的,链表由数据域和指针域组成】缺点:链表相比于数组会占用更多的时间,因为每个节点除了存放元素本身,还有存放指向其他节点的指针。3.顺序表长度固定如果需要大的扩容要申请更大的内存空间+拷贝原数组,但是链表支持动态扩容。6.顺序表的空间利用率比链表的高,因为数组时连续的存储空间但是链表是随机的存储位置。5.链表存储数据时一次只开辟存储一个节点的物理空间,如果后期需要,还可以再申请。优点:使用链表存储结构不需要提前预估长度,可以克服顺序表的缺点。原创 2022-10-02 19:10:21 · 555 阅读 · 0 评论 -
Java8-特性
Stream有串行和并行两种,串行Stream上的操作是在一个线程中依次保存完成的,而并行Stream则是在多个线程上同时执行的。default修饰的默认方法可以被调用或者重写因为其属于实例方法,在调用时必须实现接口,如果有定义相同签名的方法必须进行重写。分为中间操作或者最终操作,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,可以连续完成多个操作。在JDK1.8之后接口中允许定义以default关键字定义的默认方法、static修饰的静态方法和抽象方法。在这种接口中只有一个抽象方法。原创 2022-09-23 13:22:25 · 313 阅读 · 0 评论 -
TCP与UDP的区别:
释放连接:通过四次挥手】的,可靠的传输层的协议 ,每个TCP协议的连接都是一个发一个收的,是基于字节流的通信协议且拥有可靠性传输,流量控制,拥塞控制功能。UDP是一种用户数据报协议,该协议支持无连接的,所以是不可靠的协议,支持一对一,一对多,多对一,多对多,是基于数据包的通信协议。首部格式:TCP首部格式的大小:20-60字节=》源端口、目的端口、序号、确认号、数据偏移、保留、控制位和窗口。UDP:一对一,多对一,多对多,一对多。连接方式:TCP:通过三次握手建立连接,四次挥手释放连接。原创 2022-09-22 18:49:49 · 730 阅读 · 0 评论 -
浏览一个网站时的整个过程
将我们想要访问的内容输入在浏览器地址栏里【但是计算机之间的通信具有自己的格式为HTTP格式,会将我们输入的内容解析成HTTP格式的数据包】,发送请求,当服务器端收到请求时【再运用HTTP格式的解析对数据包进行解析并获取客户的需求,服务器根据客户的需求做出相应的反馈内容,服务器再利用HTTP格式对反馈的内容进行解析并打包】,服务器做出反馈【服务器将发送数据包到浏览器,浏览器对到来的数据包进行HTTP格式的解析】。:浏览器对解析的数据包内容进行渲染,最终将客户想要得到的内容呈现。原创 2022-09-22 18:17:18 · 450 阅读 · 0 评论 -
Java类加载机制
概述:类只被加载一次且被动态加载至JVM中,因为一次性加载所有类会占用很多内存,所以JVM不会一次性加载所有类。双亲委派模型:在实现类加载时,必须先进行双亲委派模型的验证,如果在“双亲”中存在该类则不用再进行加载。3.应用程序类加载器。5.执行init方法。原创 2022-09-19 18:01:18 · 767 阅读 · 0 评论 -
CopyOnWriteArrayList源码分析
CopyOnWriteArrayList是线程安全的,内部结构为Object[]数组,允许多个线程并发读取,但是只可以有一个县城写入。3. 适合读多写少的应用场景。由于add()、set() 、 remove()等修改操作需要复制整个数组,所以会有内存开销大的问题。4. CopyOnWriteArrayList由于只在写入时加锁,所以只能保证数据的最终一致性,不能保证数据的实时一致性。2. 由于每次写入操作时,进行了Copy复制原数组,所以无需扩容;1. 在保证并发读取的前提下,确保了写入时的线程安全;原创 2022-09-18 22:07:16 · 255 阅读 · 1 评论 -
创建对象在堆区如何分配内存
【YGC执行流程:当一个旧对象传入时,判断其是否在Survivor区是否放得下,若放不下时则直接晋升Old区,若放的下则再进入S0/S1区域,在S0/S1区域判断传入的对象的存活阈值是否超过14,如果大于等于15则直接晋升Old区域,否则继续返回S0/S1区域】新生代又分为三个区域,第一个区域为Eden占新生代的十分之八的内存空间,第二个区域为from占新生代的十分之一的内存空间,第三个区域为to占新生代的十分之一的内存空间。:是JVM所管理的内存的最大的一块区域,用于存放对象实例和数组。原创 2022-09-18 21:46:56 · 177 阅读 · 0 评论 -
MySQL【事务】与【索引】:
3.可重复读(REPEATABLE READ):一个事务只能读取到另一个已提交事务修改过的数据,但是第一次读过某条记录后,即使其它事务修改了该记录的值并且提交,之后该事务再读该条记录时,读到的仍是第一次读到的值,而不是每次都读到不同的数据。在事务进行中数据可能不处于一致的状态(数据库中的数据有部分的修改);2.读提交(READ COMMITTED):如果一个事务只能读取到另一个已提交事务修改过的数据,并且其它事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那么这种隔离级别就称之为读提交。原创 2022-09-10 20:15:08 · 364 阅读 · 0 评论 -
Session会话追踪的实现机制
概述:HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。JavaEE的Servlet机制内建了对Session的支持。当我们需要获取Session时,可以通过request请求对象的方法。原创 2022-08-23 11:43:35 · 291 阅读 · 0 评论 -
Servlet生命周期
【服务service】:调用HttpServlet父类的service()方法,根据请求方式(Get或Post)的不同,调用子类的doGet()或doPost()方法。Servlet生命周期,生命周期既从生到死的一个过程,则Servlet从创建到销毁的过程就是它的生命周期。包括了四个阶段:1.实例化。JavaEE提供了Servlet API ,我们使用Servlet API编写自己的Servlet来处理HTTP。【初始化】:执行init()方法,完成初始化逻辑。【销毁】:调用destory()方法。原创 2022-08-20 16:59:27 · 225 阅读 · 0 评论 -
当添加一个键值对元素时,HashMap发生了什么?
因为数组长度为2的n次幂时,可以使用&与位运算,结合hash值,快速计算该元素在数组中的下标位置,提高HashMap的使用效率。每当我们新添加一个键值对元素时,我们都可以通过该元素的键的hash值,计算该元素在数组中应该保存的下标位置。如果该下标位置已经存在其它Node对象(产生哈希冲突),则采用链地址法处理,即将新添加的KV键值对元素将以链表的形式存储。当加入一个新的键值对时,HashMap的大小会产生变化,所以会有HashMap的初始容量和HashMap的扩容。:数组+链表+红黑树。...原创 2022-08-13 18:34:32 · 254 阅读 · 0 评论 -
基于FTP协议的文件上传与下载
FTP是一种基于TCP的协议,具有跨平台的特性,支持Windows,Linux,Unix等操作系统。采用客户/服务器模式,通过FTP服务器可以快速的下载,上传文件。同时它也是一个应用程序,通过FTP客户端与他人的服务器连接,可以访问服务器上的文件或信息。创建一个ftp协议对象,选择上传的文件(以文件流的形式进行传送),输入流。连接ftp服务器通过ip端号,再通过密码和账号进行登录,因为是以流的形式进行传输,所以是以数组的形式(二进制),最后再上传至ftp服务器(临时存放的一个容器),最后记得关闭连接。...原创 2022-08-07 12:44:14 · 1514 阅读 · 0 评论 -
常见哈希算法的总结,对称式加密与非对称式加密的对比
Java字符串的hashcode()就是一个哈希算法,输入任意字符串,输出固定的4字节int整数。碰撞是不能避免的,因为哈希算法是把一个无限的输入集合映射到一个有限的输出集合,必然会产生碰撞。2.不同的输入大概率得到不同的输出。对任意一组输入数据进行计算,得到一个固定长度的输出摘要。1.哈希算法可用于验证数据完整性,具有防篡改检测的功能。哈希算法的输出长度越长,就越难产生碰撞,也就越安全。1.相同的输入一定得到相同的输出;2.常用的哈希算法有MD5,SHA-1等。哈希算法又称为摘要算法。......原创 2022-07-21 19:25:43 · 2217 阅读 · 1 评论 -
Java-Email
不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如删除邮件,标记已读等,服务器上的邮件也会做相应的动作。的发送过程也是类似的,只不过是电子邮件是从用户电脑的邮件软件,例如Outlook,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件。是如何发送的传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱的。为避免代码冗余我们先创建一个SMTP服务器的信息类。...原创 2022-07-17 17:58:59 · 683 阅读 · 2 评论 -
网络编程-UDP编程
2.UDP端口和TCP端口虽然都使用0~65535,但他们是两套独立的端口,即一个应用程序用TCP占用了端口1234,不影响另一个应用程序用UDP占用端口1234。在Java中使用UDP编程,仍然需要使用Socket,因为应用程序在使用UDP时必须指定网络接口(IP地址)和端口号。1.UDP和TCP编程相比,UDP编程就简单得多,因为UDP没有创建连接,数据包也是一次收发一个,所以没有流的概念。和服务器端相比,客户端使用UDP时,只需要直接向服务器端发送UDP包,然后接收返回的UDP包。...原创 2022-07-17 17:32:22 · 1033 阅读 · 0 评论 -
JSON解析:
json是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。1.FastJson默认过滤null,不显示null值字段,使用Feature枚举值进行设置。使用中括号[]保存数组(集合),数组(集合)可以包含多个对象。使用大括号{}保存对象,每个对象由若干数据组成。使用\进行特殊字符的转义。主要用于封装key-value键值对数据,继承自。数据之间使用逗号,分隔。封装自数组集合,继承自ArrayLiat类。JSON类的作用主要用于。...原创 2022-07-14 20:21:03 · 1104 阅读 · 1 评论 -
Excel文件解析-Apache POI
在Java中对Excel文件进行解析的主流技术包括:Apache POI,JXL,Alibaba EasyExcel。Workbook(Excel文件):Workbook是一个接口,实现类是XSSFWorkbook。Sheet(工作簿):通过Workbook来进行工作簿Sheet对象的获取或者创建。Row(数据行):通过Sheet来进行数据行Row对象 的获取或者创建。Cell(单元格):通过Row来进行单元格Cell对象的获取或者创建。超大Excel文件的读写:使用EasyExcel写入:准备工作如下:原创 2022-07-13 20:47:13 · 549 阅读 · 0 评论 -
Properties的读取和写入
Properties的普通读取方式:将Properties的内容按照字符打印出来,并不是以键值对的形式输出。所以无意义。普通读取方式的代码为:Properties的专属读取方式:1.创建输入流2.创建Properties集合对象3.利用Properties的load方法将输入流进行切割和处理,提取出键和值并存入put中。做转换将流转换为集合。4.输出的时候就可以用get(),方法得到键想要对应的值。Properties的专属读取方式的代码:Properties的写入:1.创建Properties集合,并且利原创 2022-06-05 16:08:11 · 339 阅读 · 0 评论 -
classpath的读取
classpath读取文件优点可以避免不同环境下文件路径不一致的问题,并且主要是运用于一些资源文件的加载。首先获取当前类的class对象,然后调用getResourceAsStream()【返回输入流】,在输入路径时总是以‘/'开头,这样就可以从classpath读取任意的资源文件。但是再调用getResourceAsStream()方法时需要特别注意一点,如果资源文件不存在则会返回null。所以我们要检查InputStream是否为null。classpath读取的代码显示:...原创 2022-06-04 23:05:17 · 1078 阅读 · 0 评论 -
Zip压缩文件的读取和写入
Zip文件的读取:在读取的过程中首先创建一个ZipInputStream,一般在ZipInputStream中传入一个FileInputStream作为数据源,写一个ZipEntry=null,在循环中调用getNextEntry(),直到返回null时表示zip流结束,并且如果ZipEntry表示一个压缩文件或目录,如果是压缩文件,则用read()方法不断读取,直到返回-1结束。zip读取的代码显示:Zip文件的写入:可以直接写入内容到zip包。一般先创建一个装饰器ZipOutputStream包装一个F原创 2022-06-04 16:50:07 · 895 阅读 · 0 评论 -
FilelnputStream和BufferedlnputStream的区别:
FilelnputStream可以从文件中获取输入流,是InputStream常用的一个实现类,作用为就是从文件流中读取数据。并且是到磁盘中去读取文件,在读取文件的时候可以一个字节一个字节的去读,也可以一批一批字节的去读。BufferedInputStream是缓冲输入流,并且继承自FilelnputStream,...原创 2022-05-22 18:19:45 · 269 阅读 · 0 评论 -
栈模拟队列
栈的特点:后进先出(LIFO)队列的特点:先进先出(FIFO)由两个特点比较可知要想用栈去模拟队列,需要两个栈共同配合即可完成。首先建立一个入栈队列,其次建立一个出栈队列。先把元素存入入栈队列,此时需要判断出栈队列是否为空;在出栈队列输出元素,此时需要判断入栈队列是否为空。假如:入栈队列存入1,2,3,4,5则取出顺序为:5,4,3,2,1再将此存入出栈队列,再取出则为1,2,3,4,5。符合队列的特点存入1,2,3,4,5出队列也为1,2,3,4,5。则为用栈模拟队列的输出。...原创 2022-05-12 18:16:21 · 144 阅读 · 0 评论 -
集合框架的分类:
集合分为单列集合(Collection)和双列集合(Map)两个大块,细分为List集合,Map集合,Set集合,Queue队列,PriorityQueue优先队列,Deque双端队列,Stack栈和Iterator迭代器。List集合:有序可重复集合,集合有ArrayList,LinkedList集合。优先使用ArrayList集合,内部使用数组进行元素得存储,可以自定义数组得大小也可以不定义数组的大小,不定义时则为空数组当存入第一个元素时数组的长度变为10,之后每次按照1.5倍增长。并且将前一个数组原创 2022-05-09 18:13:14 · 416 阅读 · 1 评论 -
Integer缓存池
public static void main(String[] args) { //采用Integer缓存池(-128-127) Integer i1x =129; Integer i1y = 129; System.out.println(i1x == i1y); //采用构造方法 Integer i2 = new Integer(12); Integer i3 = new Integer("...原创 2022-02-21 18:56:52 · 162 阅读 · 0 评论 -
String,StringBuilder和StringBuffer的对比
String中的拼接字符串是直接用+拼接字符串,原String字符串并不会改变,而是开辟新的空间去存取新的字符串然后扔掉旧的字符串,这样大部分的字符串都是临时的对象,浪费内存空间还影响效率。StringBuilder方法可以高效的拼接字符串,它是一个可变的对象,可以预分配缓冲区,所以使用StringBuilder拼接字符串不会增加新的空间,可以减少内存空间的浪费,也会使得效率有所提高。并且对于普通字符串的+操作,并不需要将其改写为StringBuilder,因为编译器会自动将其改为操作编码Strin原创 2022-02-21 18:30:16 · 325 阅读 · 0 评论