Java
文章平均质量分 73
卡多希y
it程序员
展开
-
Spring中@Autowired注解实现原理
Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示,自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。原创 2022-10-24 20:25:45 · 915 阅读 · 1 评论 -
基于写时复制技术的并发集合———CopyOnWriteArrayList源码分析
CopyOnWriteArrayList作为一种线程安全的集合,它通过加Lock锁来实现线程安全,并且它的写是复制技术是指在对集合进行添加或修改。删除等操作时,不会直接对当前集合进行操作,而是根据原集合进行复制一份出来,然后再对拷贝的集合进行操作,当对新集合写入完毕时,再将原集合的引用指向当前的新集合,从而实现写时复制。CopyOnWriteArrayList内部使用Object[]类型数组存储数据,它允许多个线程并发读取,但在写入时,只能有一个线程操作当前集合。原创 2022-09-18 19:29:37 · 333 阅读 · 0 评论 -
创建对象在堆区如何分配内存
当创建一个新对象时,会将新对象加入新生代的Eden区,如果Eden区放不下,会触发YGC的垃圾回收机制,然后再次判断Eden区能否放下,如果可以放下则分配内存空间,如果放不下则尝试将对象放到老年代中,如果老年代放不下,则触发FGC的垃圾回收机制,然后再次判断老年代能否放下,如果可以放下则分配内存空间,否则抛出错误OOM,而在这个过程中,当YGC执行完成时,Eden区幸存的对象survivor区能否放下,如果放不下则直接移到老年代,如果能放下则会放在幸存区的from或to空间中,并且from和原创 2022-09-17 17:13:55 · 294 阅读 · 0 评论 -
多线程基础知识总结
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,可以理解为程序是包含静态代码的文件。例如:浏览器软件、音乐播放器软件等软件的安装目录和文件。进程是程序的一次执行过程,是系统运行程序的基本单位。在Windows系统中,每一个正在执行的exe文件或后台服务,都是一个进程,由操作系统统一管理并分配资源,因此进程是动态的。例如:正在运行中的浏览器就是一个进程,正在运行中的音乐播放器是另一个进程,同理,正在运行中的QQ和WPS等都是进程。操作系统运行一个程序,即是一个进程从创建,运行到消亡的过程。原创 2022-09-16 18:41:05 · 319 阅读 · 0 评论 -
Session会话追踪的实现机制
web语言中的会话web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。由于HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,但是一个请求结束时 , 服务器就会忘掉这个会话 , 当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户。原创 2022-08-24 13:52:42 · 313 阅读 · 0 评论 -
Servlet的生命周期
当我们的浏览器访问服务器时,服务器会对URL进行解析,然后根据URL访问对应的Servlet,以Tomcat为例,如果是第一次访问,Tomcat服务器会创建这个Servlet的实例对象,接着通过Java反射技术来自动调用Servlet的init()、service()等方法,最终,当Tomcat关闭或者重启时,Servlet就会被销毁,这是一个Servlet的完整生命周期。web容器加载Servlet并将其实例化后,其生命周期正式开始。原创 2022-08-20 15:05:37 · 658 阅读 · 0 评论 -
MyBatis框架使用过程中出现的问题以及解决方案
MyBatis作为一款完全开源的框架,对于原生的JDBC做了一个很好封装,简化了我们对于JDBC的操作,将更多的精力放在注重SQL映射文件上,给程序的维护带来了很大的便利,我们也可以结合数据库自身的特点灵活的控制SQL语句,因此能够实现比Hibernate等全自动ORM框架更高的查询效率,高效的完成复杂查询。...原创 2022-08-16 20:39:43 · 1599 阅读 · 0 评论 -
MyBatis框架的搭建以及使用教程
标签中添加和属性,来实现该功能原创 2022-08-16 19:52:48 · 3876 阅读 · 1 评论 -
当添加一个键值对元素时,HashMap发生了什么?
所以,每次当我们使用下面这行语句时,都会将key、value存储到Entry对象中,然后将每一个Entry对象都保存在数组中,当发生哈希冲突时,会在发生哈希冲突的数组位置将Entry对象以链表的形式保存,并且当链表长度大于阈值8,数组长度大于64时,会将列表转化为红黑树,减少搜索时间。⑽判断链表长度大于阈值8并且数组长度大于64,如果满足,链表转换为红黑树,如果不满足,数组扩容。⑿如果大于,调用resize()方法,按原数组的长度,扩容一倍。⑸如果存在数据,说明发生哈希冲突,继续判断key是否相等。...原创 2022-08-13 17:26:07 · 363 阅读 · 0 评论 -
基于FTP协议的文件上传与下载
在FTP的使用当中,经常会提到两个概念,“下载”和“上传”。下载文件就是从远程主机拷贝文件到自己的计算机中;使用FTP时,必须先登录,在FTP服务器上获得相应的权限后,才能进行上传和下载文件。在进行使用FTP服务器来进行文件传输前,要先对FTP服务器的IP地址,端口,以及用户的权限进行设置。(4)为确保我们的文件能够上传成功,我们在FTP服务器中切换上传目录。最终我们可以看到在FTP服务器设置的文件夹内可以查看到刚才上传的文件。下载和上传类似,同样的是先进行连接、登录、设置文件类型,最后下载。...原创 2022-08-06 15:32:05 · 1383 阅读 · 0 评论 -
Java反射基础
既然通过Field实例可以拿到指定实例的字段值,那么也可以设置字段的值,设置字段的值通过Field.set(Object,Object)实现的,其中第一个Object参数是指定的实例,第二个参数是待修改的值。当我们拿到一个field字段实例时,我们还可以拿到一个实例对应的该字段的值,例如,对于一个Person实例,我们可以先拿到name字段对应的Field,再获取这个实例的name字段值。既然我们可以通过反射调用Field对象,那么同样的我们也可以通过反射来调用Method类的对象,即方法。...原创 2022-08-04 19:47:50 · 519 阅读 · 1 评论 -
常见的哈希算法总结
Hmac算法就是一种基于密钥的消息认证码算法,它是一种更安全的消息摘要算法,在存储用户的口令时,通过加"盐"的方式可以抵御彩虹表的攻击,而这个"salt"就相当于Hmac算法里的认证码这也是Hmac算法的一个优势,一般情况下,Hmac算法总是和某种哈希算法配合起来使用的,而且输出的长度也和所配合的这种哈希算法长度一致。字符串长度为32的原因是无论你要加密的内容是什么,最后的输出长度都会像上图提到的输出长度一样,像MD5最终的输出长度为16字节,因为我将字节数组转换为了字符串,所以它的长度就变为了32。...原创 2022-07-21 19:47:54 · 6703 阅读 · 2 评论 -
对称式加密与非对称式加密的对比
非对称加密算法使用的是一对密钥,使用公钥加密私钥解密的方法,这就使得在通信初期,要想双方可以通信,必须让A方先发送公钥给B方,B方通过接受的公钥进行加密,再将密文发送给A方,A方再使用私钥进行解密。根据结果可以发现,加解密步骤大致相同,但是要保证双方密钥在交换的过程中保证安全性,一般我们会采用DH算法,也就是密钥交换算法,使用了这种算法可以保证双方的共享密钥一致,并且保证了密钥的安全性。而非对称式加密就是加密和解密使用的是不同的密钥,只有同一对的公钥和私钥才能正常进行加密和解密。4、根据原始内容进行加密。.原创 2022-07-21 19:15:30 · 531 阅读 · 1 评论 -
基于HTTP协议以及TCP协议实现的简单网络爬虫
HTTP(HypeTextTransferProtocol)协议又叫做超文本传输协议,是目前使用最广泛的Web应用程序使用的基础协议,像APP访问后台服务器或者浏览器访问网站,都是通过HTTP协议实现的,它是基于TCP协议之上的一种请求-响应协议。Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似与jQuery的操作方法取出和操作数据。5、通过输入输出流,一边读,一边将内容写到磁盘上。......原创 2022-07-19 08:56:44 · 599 阅读 · 0 评论 -
基于Java Mail 的简单Java邮件发送
但是与POP3不同的是,开启了IMAP后,你在客户端收取的邮件仍然保留在服务器上,同时所有的操作都会回馈给服务器。假设我们准备使用自己的邮件地址发送邮件,在发送邮件前,我们首先要确定作为MTA的邮件服务器地址和端口号,邮件服务器的地址通常是smtp.***.com,端口号由邮件服务商确定。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式,SMTP协议属于TCP/IP协议簇。在网络上,想要实现邮件功能,必须要有专门的邮件服务器,这些服务器类似于我们生活中的邮局,快递站等等。......原创 2022-07-16 18:53:57 · 646 阅读 · 3 评论 -
基于UDP协议的Java聊天室
而DatagramPacket是用来表示一个数据包的,DatagramPacket只是在首次创建时指定地址,以后所有的包都会通过DatagramSocket发送。UDP协议是无连接、不可靠的,并且它是面向报文的,并不是像TCP一样,面向字节流的。8、客户端实例时候,不需要指定端口,操作系统会指定一个当前未使用的端口,然后调用setSoTime(3000),设定超时时间。在实现Java聊天室之前,我们先了解一下什么是UDP协议,以及使用UDP协议的客户端或服务器端是如何来接收信息或者发送信息的。...原创 2022-07-16 18:07:27 · 1693 阅读 · 2 评论 -
Java中excel文件解析总结以及超大文件读写的分析报告
在系统与系统之间进行数据传递时,经常需要使用Excel文件来进行数据的导入或者导出。因此,在Java语言实现这类需求时,往往会面临着数据的导入(解析)或者导出(生成)。Java中可以用来处理Excel文件的主流技术主要包括Apache POI、JXL、Alibaba的easyExcel等。 APache POI 是用Java编写的免费开源的Java API ,Apache POI 提供对Microsoft Office格式进行读写功能的API。 POI是基于DOM方式进行解析的,它将文件数据一原创 2022-07-13 19:59:54 · 1937 阅读 · 4 评论 -
使用Java解析JSON
JSON全称为Java Script Object NoTation。它作为一种轻量级的数据交换格式,它被广泛应用于各种平台,在两个系统之间交换数据起到不可或缺的作用。JSON具有两种结构:JSON对象和JSON集合。JSON对象为{key:value,key:value,...}的键值对形式,key为对象的属性,value为对应的属性的值。JSON集合为["Java","JSON","Apesource"]的形式,取值方式和所有语言相同,同过索引获取,字段值的类型可以为字符串、数字、数组、对象等等。同时,原创 2022-07-12 20:02:53 · 7108 阅读 · 9 评论 -
Java中HashSet去重的实现原理
HashSet作为Set接口的实现类,它的底层还是基于HashMap来创建的。而HashSet拥有两个特点:1、插入元素的顺序和输出元素顺序与HashSet中的位置不一致。2、HashSet可以保证集合中的元素唯一。这篇文章主要针对HashSet的这个特点来详细讲解HashSet是如何在底层进行去重的。那么HashSet是如何去重的呢?当我们在一个HashSet的对象中添加元素时,首先计算该元素的hashCode是否与HashSet中元素的hashCode相同,如果不相同,则直接添加到HashSet之中;如原创 2022-07-08 08:03:07 · 1447 阅读 · 1 评论