- 博客(29)
- 收藏
- 关注
原创 Spring———@Autowired注解的自动装配与原理
Autowired实现主要是依靠于AutowiredAnnotationBeanPostProcessor类下的postProcessProperties()方法,该方法将注入所需要的属性名,以及方法所修饰的方法参数都封装在InjectionMetadata类型的metadata对象中并调用findAutowiringMetadata()方法查询。(2)如果容器内有多个类型与当前@Autowired注入的类型相匹配则会被动按照名称byName去完成自动装配。最后通过inject()方法完成注入。
2022-11-02 22:13:34
694
原创 TCP协议的拥塞控制
拥塞控制为了降低发送数据时出现网络拥堵的可能性并由发送方维护一个叫做拥塞窗口的状态变量,拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。慢开始、拥塞避免、快重传、快恢复。
2022-10-08 18:54:48
849
原创 浏览一个网站时的整个过程
浏览器将生成的HTTP格式的数据包发送给服务器端,服务器对发来的数据包进行解析,并且执行请求,执行完请求之后再生成HTTP格式的数据包, 响应给浏览器,浏览器通过解析该格式数据包,呈现出一个HTML页面响应给用户;浏览网站时,用户首先在地址栏中输入一个URL,然后通过DNS域名解析服务器将域名解析为IP地址,并使用该IP地址来访问对应的服务器端;用户发起一个请求,此时浏览器向服务器发起建立TCP连接的请求,服务器接收请求后通过三次握手建立TCP连接;最后通过四次挥手释放TCP连接;
2022-09-22 18:49:56
457
原创 TCP与UDP的区别
UDP的传输是无连接的,可以随时发送数据,将应用程序发来的数据按照原样发送到网络,没有检查的操作,因此不能够保证数据传输的可靠性;TCP是传输控制协议,面向连接并且传输时可以保证传输数据的可靠性,同时TCP具有可靠性传输,流量控制,拥塞控制的功能;TCP的连接管理在一定程度上消耗性能,花费时间,所以它所需要的资源多,传输时耗时长,传输效率相对慢;的,只发送不确认,因此不需要流量控制与拥塞控制,同时消耗的性能少,传输效率快,所需资源少;,例如:包总量较少,视频,音频,语音通话等。UDP的首部为8字节;
2022-09-22 18:00:12
593
1
原创 创建对象在堆区如何分配内存
仍然放不下,则会进入老年代区看是否空间充足,如果充足,则在老年代分配对象内存;不够则执行FGC(Major GC)即只对老年代进行垃圾收集的GC,回收之后再判断老年代是否空间充足,充足,则分配对象内存;编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。从 JDK 1.7 开始已经默认开启逃逸分析,如果某些方法中的对象引用没有被返回或者未被外面使用(也就是未逃逸出去),那么对象可以直接在栈上分配内存。
2022-09-18 21:52:32
233
1
原创 CopyOnWriteArrayList源码分析
CopyOnWriteArrayList是一种线程安全的集合,通过ReentrantLock来实现集合的安全性。当我们对集合进行写入操作时,并不会直接在集合中写入,而是先将当前的集合复制,复制出一个新的集合,在新的集合中进行写入操作,写入 完成后,将原集合的引用指向新的集合。CopyOnWriteArrayList的设计思想是,在保证写入操作的安全性时,也不会影响并发读取操作。它的内部使用Object[]数组,允许多线程并发读取,但只有一个线程可以进行写入操作。
2022-09-18 21:25:22
278
原创 Session会话追踪的实现机制
如果用户在一段时间内没有访问服务器,那么Session会自动失效,下次即使带着上次分配的Session ID访问,服务器也认为这是一个新用户,会分配新的Session ID。使用Session时,由于服务器把所有用户的Session都存储在内存中,如果遇到内存不足的情况,就需要把部分不活动的Session序列化到磁盘上,这会大大降低服务器的运行效率,因此,放入Session的数据不能太大,否则会影响服务器的运行。通过创建Cookie,我们可以实现在客户端浏览器中存储数据的目的,例如保存用户名和密码。....
2022-08-25 19:09:14
252
原创 Servlet生命周期
由以上结果我们可以知道在一个servlet生命周期中,实例化与初始化只有一次,服务可以多次。也就是说重复的请求操作只会创建一次实例,只会有一次初始化。实例创建和使用的过程,被称为Servlet的生命周期。:服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的。方法,如果子类没有重写该方法,则调用HttpServlet父类的。方法,在父类的该方法中进行请求方式的判断,如果是。方法,在父类的方法实现中,返回一个。请求的过程中,其本质是在调用执行。方法,则调用子类重写后的。
2022-08-21 16:21:12
438
2
原创 MyBatis常见问题
mybatis底层使用了反射,我们在Mapper映射器中设置的Mapper statement操作,它的映射节点的返回值类型是当前实体类的完全限定名 ,当我们执行该操作时,mybatis会根据该返回值类型创建实体类的对象,如果实体类中没有构造方法,则默认调用的是该实体类的无参构造方法,但如果有有参构造方法,没有无参构造方法,我们在执行这个操作时应该创建一个无参构造方法,否则会自动调用该类的有参构造方法有时会导致程序运行错误。映射器与实体类会出现的错误,以下是映射器中的SQL配置和实体类的属性设置。...
2022-08-16 20:54:01
1196
原创 当添加一个键值对元素时,HashMap发生了什么?
例如:加载因子(LoadFactor)的默认值为0.75f,数组容量默认为16,当HashMap中元素个数超过16 × 0.75=12的时候,数组就会扩容。因为数组长度为2的n次幂时,可以使用&与位运算,结合hash值,快速计算该元素在数组中的下标位置,提高HashMap的使用效率。在转换红黑树之前,会判断数组长度,如果小于64,会产生数组扩容。●HashMap的默认容量为16,加载因子为0.75f,当集合元素个数超过扩容阈值(容量*加载因子)时,HashMap会将底层数组容量按照2倍进行扩容。...
2022-08-13 19:00:48
369
原创 hashCode()或HashCode的作用是什么?
2)HashCode哈希码是该对象的内存地址通过哈希Hash算法计算出的一个整数值,代表该对象在哈希表中的位置,作用主要是为了提高查找对象的快捷性,通过HashCode可以快速定位对象的存储地址。(1)hashCode()是Object类中的native(本地)方法,底层使用c/c++语言实现,用于获取该对象的HashCode哈希码。(3)两个对象进行比较,先通过HashCode比较,如果HashCode相等,在调用equals()方法比较,提高效率。为什么要有hashCode()?......
2022-08-11 21:29:38
1362
原创 基于FTP协议的文件上传与下载
FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。同时,它也是一个应用程序,用户可以通过它把自己的计算机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP服务的功能是实现完整文件的异地传输。
2022-08-06 22:17:37
2672
3
原创 MySQL数据库基本知识
SQL的全称是Structured Query Language,结构化查询语言,对数据库进行查询、修改等操作。SQL 具有如下优点。1、一体化:SQL 集数据定义、数据操作和数据控制于一体,可以完成数据库中的全部工作。2、使用方式灵活:SQL 具有两种使用方式,可以直接以命令方式交互使用;也可以嵌入使用,嵌入C、C++、Fortran、Java 等语言中使用。3、非过程化:只提操作要求,不必描述操作步骤。.....................
2022-08-04 21:08:52
6143
原创 Java加密总结:常见的哈希算法总结,对称式加密与非对称式加密的对比
URL编码和Base64编码都是编码算法,它们不是加密算法;URL编码的目的是把任意文本数据编码为%前缀表示的文本,便于浏览器和服务器处理;Base64编码的目的是把任意二进制数据编码为文本,但编码后数据量会增加1/3。......
2022-07-20 19:41:01
1163
3
原创 网络编程——HTTP
浏览器本质上也属于一种HTTP客户端,所以,客户端的HTTP编程,它的行为本质上和浏览器是一样的,即发送一个HTTP请求,接收服务器响应后,获得响应内容。HTTP就是目前使用最广泛的Web应用程序使用的基础协议,例如,浏览器访问网站,手机App访问后台服务器,都是通过HTTP协议实现的,HTTP是HyperTransferProtocol的缩写,翻译为超文本传输协议,它是基于TCP协议之上的一种请求-响应协议。2xx表示一个成功的响应,例如200表示成功,206表示只发送了部分内容;...
2022-07-19 20:37:24
1356
原创 网络编程——Java Email
它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。我们先来了解一下电子邮件的发送过程,例如Outlook,发送到邮件服务器,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件。不同的是,开启了IMAP后,你在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上。...
2022-07-18 19:16:57
636
原创 Java网络编程——TCP
在开发网络应用程序的时候,会遇到Socket这个概念。Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据传输到网络。Socket、TCP和部分IP的功能都是由操作系统提供的,不同的编程语言只是提供了对操作系统调用的简单的封装,例如,Java提供的几个Socket相关的类就封装了操作系统提供的接口ServerSocket类,Socket类。......
2022-07-16 22:32:01
1100
9
原创 Excel文件解析
在应用程序开发过程中,经常需要使用Excel文件来进行数据的导入或导出。所以,在通过Java语言来实现此类需求的时候,往往会面临着Excel文件解析(导入)或生成(导出)。在Java技术生态圈中,可以进行Excel问价处理的主流技术包括ApachePOI,JXL,AlibabaEasyExcel等。ApachePOI基于DOM方式进行解析,将文件直接加载内存,所以速度较快,适合Excel文件数量不大的应用场景。JXL只支持Excel2003以下版本,所以不太常见。ApachePOI。...
2022-07-15 22:22:59
3940
5
原创 Java中如何使用JSON进行文件解析
在应用JSON时我们最常用Fastjson这个库,Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化微JSON字符串,也可以从JSON字符串反序列化到JavaBean。在使用Java进行应用程序的开发中,可能会遇到“将Java对象转换成JSON格式”或者“将JSON格式的数据转换成Java对象”的需求。解决方法输出日期字段时,默认格式不符合需求时,可以在定义实体类的Date字段,使用@jsonFie注解的format属性进行格式配置。...
2022-07-14 21:30:56
5853
1
原创 properties文件的读取和写入
目录一、properties文件的读取二、properties文件的写入properties文件是一种属性文件,这种文件以key=value(键值对)格式存储内容。Java中可以使用Properties类来读取这个文件,使用Properties类中的getProperties(key)方法来得到对应的数据。一般properties文件作为一些参数的存储,使得代码更加灵活。一、properties文件的读取(1)使用BufferedInputStream(缓冲输入流)创建输入流进行读取,读取后以key=val
2022-06-01 00:18:38
3563
原创 Zip包的读取与写入
目录一、Zip包的读取二、Zip包的写入ZipInputStream是一种FilterStream,它可以直接读取zip包的内容。ZipOutPutStream是一种FilterOutPutStream,它可以直接写入内容到zip包。一、Zip包的读取ZipInputStream的基本用法:首先要创建一个ZipInputStream,通常是传入一个FileInputStream作为数据源,然后循环调用getNextEntry(),当返回值为null时,表示zip流读取结束。一
2022-05-30 18:35:39
2135
原创 FileInputStream与BufferedInputStream的区别
目录一、FileInputStream(文件输入流)二、BufferedInputStream(缓冲输入流)一、FileInputStream(文件输入流)FileInputStream是InputStream的子类被称为文件输入流,是从文件流中读取数据。每次都从硬盘中读取,读取速度缓慢。完整读取FileInputStream的所有字节共有俩种方式:(1)逐个字节读取;(2)批量读取。代码如下:import java.io.FileInputStream;import jav
2022-05-30 17:15:41
645
原创 如何用栈实现队列
队列遵循先进先出(FIFO)原则,栈遵循后进先出(LIFO)原则。如果用栈来实现队列则需要用俩个栈来模拟队列进而实现队列的先进先出(FIFO)原则。步骤如下:(1)创建俩个栈一个进行入栈操作Stack<E> in,一个进行出栈操作Stack<E> out(2)队列的特点为先进先出所以要求栈in进,栈out出(3)入队时要保证栈out为空,所以先判断栈out是否为空,若不为空则将栈out中的元素全部存入栈in中 in.push(out.pop())(4)出队时要保证栈.
2022-05-12 23:57:20
2052
原创 List,Set,Map,Queue,Deque,Stack遍历方式总结
List遍历方式方式一:for循环for(int i=0;i<list.size();i++){System.out.println(list.get(i));}方式二:for-each循环for(String s:list){System.out.println(s);}方式三:迭代器(Iterator)Iterator<String> it=list.iterator();while(it.hasNext()) { S...
2022-05-10 17:03:45
421
原创 String的构造方法,其他方法
String是一个引用类型,它本身也是一个class类,也有无参构造方法和有参构造方法。其参数可以是字符串或者字符数组。可以通过创建对象来调用例如 :Stirng str=new String();或者可以直接调用例如:String str="";其他方法:查找:indexOf(),用来查找子字符串,存在即返回子字符串的下标,若不存在则返回-1;lastIndexOf(),用来查找最后一次出现的子字符串的下标;startsWith():以...开头;endWith()以...结尾;
2022-02-24 20:17:15
339
原创 java中的抽象类与接口
抽象类(Abstract);使用abstract关键字来修饰类,写在这个类的最前面;在抽象类中可以定义抽象方法(抽象方法没有方法体),并且抽象方法必须在抽象类中;定义了抽象方法的类必须被定义成抽象类;抽象类可以被继承,但在子类继承抽象类时必须重写抽象类(父类)的方法(若子类也是抽象类则可以不用重写父类的抽象方法);一个抽象类(类)只能继承一个抽象父类(父类);抽象类不可以被实例化;在抽象类中可以有抽象方法(用abstract关键字修饰),构造方法,普通方法,可以定义成员变量或者是常量(用final关键字
2022-02-16 19:06:56
371
原创 java中的重载与重写
重载(overload)方法的重载指的是多个方法的方法名相同但参数不同(例如:参数的个数,类型,顺序),方法重载后完成的功能相似,返回值的类型要相同。重写(override)在继承中 ,子类定义了与父类方法名完全一致的方法称为方法的重写,在重写时可以使用@override辅助,在使用@override时编译器会帮助我们检测是否进行了正确的方法重写,若有错误则会报错,如果子类想要调用父类中被重写的方法时可以用super来调用(注:super在调用父类被重写的方法时要写在子类前面),如果父类不想让其
2022-02-16 18:14:58
342
原创 java中==与equals()方法的区别
==用于比较基本数据类型的值相等和引用数据类型内存地址的相等equals()方法用于比较引用数据类型内容上的相等
2022-02-16 17:50:57
260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅