- 博客(40)
- 收藏
- 关注
原创 云融科技面试总结
自答:strem流是java8中的新特性,将对象转换为流的方式进行传输,同时,提供一系列的方法,基于流的方式对对象进行操作,比如有一个学生类,有id,name,age,date,school等相关属性,我们只需要它的id,name以及age属性时,就可以将该类以stream流的方式,使用filter方法将所需属性过滤出来。内存空间占用:对于ArrayList,由于是基于数组实现,因此内存空间是连续的,但当需要扩容时,需要重新申请内存空间并将原有元素复制到新的内存空间中,因此可能会有一定的性能开销。
2023-11-13 19:19:02
279
原创 Shrio相关知识
Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份 认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
2023-09-07 15:14:48
286
原创 ElasticSearch中间件相关知识
Elasticsearch中间件相关知识点,包括其基础概念,安装使用、对索引库以及文档的操作、springboot整合ES即RestClient的使用。
2023-08-28 13:06:25
898
原创 springboot的自动配置实现方式
Spring Boot的自动配置是指Spring Boot根据应用程序的依赖和配置信息,自动为应用程序进行配置,减少了开发人员手动配置的工作量。Spring Boot的自动配置基于条件注解和Spring Boot Starter的机制。条件注解是通过判断一定的条件是否满足来决定是否应用某个配置。Spring Boot Starter是一种特殊的依赖,它包含了一组相关的依赖和配置,可以通过引入该Starter来自动配置相关的功能。
2023-08-15 19:24:07
604
原创 Redis相关知识点
对于数据库的基础增删改查操作来说,增加操作不涉及nosql的使用,在查找操作时,首先判断缓存(nosql)中是否有该数据,如果有,直接从缓存中读取,没有,则从数据库读取,并将其加入缓存中;概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,是一种基于内存的数据库,对数据的读写操作都是在内存中完成的,读写速度快,常用于缓存、消息队列、分布式锁等场景。事务在执行的过程中,不会被其他客户端发送发过来的请求所打断。
2023-08-14 18:44:19
722
原创 spring mvc基础知识点
核心思想是请求处理控制、业务逻辑、数据封装、数据显示等流程节点分离的思想来组织代码,可以帮助我们进行更简洁的web层的开发。DispatcherServlet:核心处理器,负责统一接收请求、将请求分发至不同的控制器,并负责 客户端的响应。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。可以使用不同的URL、HTTP方法和请求参数来定义请求映射。用于获取"请求体"内容。
2023-08-09 22:28:42
144
原创 spring框架中用到的设计模式
该类中定义了一个模板方法,该方法封装了数据库访问的公共逻辑,但是留出了一些抽象方法,由子类实现具体的数据库操作逻辑。2. 工厂模式(Factory Pattern):定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。它提供了一种简单和一致的方式来访问数据库,并将通用的数据库访问逻辑封装在模板方法中,具体的实现由子类提供。2. 创建具体的子类,实现抽象类中的抽象方法,完成具体的数据库操作逻辑。4. 使用代理模式来创建代理对象,在代理对象中调用切面类的方法。
2023-08-07 15:34:08
166
原创 一个案例学习xml====>annonation+xml====>annonation+javaConfig配置类的转换
在spring的发展中,spring配置方案大致发生了三种变化2.5版本前====>xml2.5版本后====>annonation+xml3.0版本后====>annonation+javaConfig配置类在理解xml的基础上,如何快速上手其他的配种方案,以以下一个案例来体现:案例分析:连接数据库,并对数据库的字段进行操作。
2023-08-04 17:07:32
122
原创 spring框架之AOP
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术,它可以帮助开发者将横切关注点(如日志记录、事务管理、权限控制等)从业务逻辑中分离出来,封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。注释使用@After(" ")在xml中使用<aop:pointcut id=" " expression="execution()"/>配置;
2023-08-04 16:08:03
226
原创 Spring框架知识+SpringIOC的理解
1.什么是Sping框架橙色标题为面试易问知识点哦!!!1.什么是Sping框架Sping框架是一种轻量级的开发框架,它有两大核心思想:IOC(控制反转)以及AOP(面向切面编程),Spring提供了组件管理服务,用于管理组件以及其他的一些JavaEE中间件,以达到解耦合的作用。2.Sping框架的组成Sping框架由七个模块组成,但是核心模块只有五个3.IOC了解IOC(Inversion Of Control):控制反转,是Spring的核心思想之一,主要用于解耦。
2023-08-03 17:36:17
142
原创 JDBC相关知识
PreparedStatement接口是JDBC中用于执行动态SQL语句的接口,它允许在执行SQL语句之前预编译SQL语句,预编译的SQL语句可以多次执行,每次执行只需将参数绑定到SQL语句中的占位符即可(占位符使用问号(?)表示,可以在SQL语句中的任何位置使用),与Statement接口相比,PreparedStatement接口提供了更高的性能和安全性,使用PreparedStatement就可以避免SQL注入的问题。数据源是一个连接工厂,它提供了创建和销毁连接的方法,并维护连接的状态和属性。
2023-07-25 20:11:53
141
原创 ReentrantLock与synchronized的区别
锁是Java中用于实现线程同步的关键字,当一个线程访问被synchronized修饰的方法或代码块时,会自动获取该方法或代码块对应的锁,其他线程在获取该锁之前会被阻塞,直到锁被释放,使用synchronized锁可以保证多个线程对共享资源的安全访问,避免出现并发访问的问题。是JavaSE核心类库的并发包提供的一种可重入锁,它的内部实现了Sync、NonfairSync、FairSync三个类,其中NonfairSync以及FairSync都继承了Sync,但是NonfairSync是采用。
2023-07-20 18:03:36
137
原创 数据库操作基础
应用程序通过接口连接MySql时,最先处理的是连接 层,connection pool属于连接层,他的作用是将用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求缓存下来,下次可以直接使用已经建立好的连接,提升服务器性能;SQL层是MySql的核心,MySql的核心服务都在该层实现,所以该层包括多个部分,如Management&Services&Utilities、SQL Interface、Parser、Optimize、Cache&Buffers。在数据库中的数据都以二维表的形式存在。
2023-07-19 19:45:42
577
原创 CopyOnWriteArrayList核心源码阅读-->为部分源码方法的作用以及方法中的核心步骤添加注释
否则,设置新的长度newlen为数组长度len-(结束下标-开始下标),移动元素的个数numMoved为数组长度len-结束下标,再次判断,当移动元素的个数numMoved为0时,说明删除数组某个下标到末尾的值,那么通过setArray()方法将CopyOnWriteArrayList中的数组设置为复制0-newlen的数组,否则,设置新数组的长度为newlen,并复制从0到fromIndex个元素、以及从toIndex向后复制numMoved个元素到新数组中。此时,直接返回false。
2023-07-17 21:10:19
139
原创 线程池知识点-->线程池的分类、创建、参数理解、执行流程及状态等
线程数固定的线程池,线程池中的线程数量固定,不会随着任务的增加而增加,也不会随着任务的减少而减少。线程数根据任务动态调整的线程池,线程池中的线程数量可以根据需要进行动态调整,如果有空闲线程可用,则会重用空闲线程,如果没有可用线程,则会创建新的线程。4.完成任务:线程执行完任务后,会返回执行结果(如果任务是Callable类型),然后线程会继续从任务队列中取出任务执行,直到任务队列为空。:能实现定时、周期性任务的线程池,可以定时执行任务的线程池,可以指定任务的延迟时间和执行周期。
2023-07-17 18:59:41
317
原创 生产者消费者模型
生产者-消费者模型就是创建一个阻塞队列,用于解决多线程或多进程之间的数据共享和同步的问题。生产者将生产好的生产任务放入阻塞队列,消费者直接从阻塞队列中获取任务,避免了生产者和消费者的直接接触,当队列为空时,消费者线程将被阻塞,直到队列中有数据可供消费;当队列已满时,生产者线程将被阻塞,直到队列有空间可供生产。
2023-07-17 12:35:59
334
原创 进程与线程基础,主要时线程的创建以及相关的方法
当运行一个java程序时,就会创建一个JVM进程来执行该程序,因此,JVM进程与java程序拥有相同的生命周期,java程序完成或被中止时,JVM页同时会被完成或被中止。在使用线程池来创建线程时,会使用一个默认的线程工厂来创建线程对象,但是默认的线程工厂并不提供额外的定制功能。资源开销:进程之间的资源相互独立,每个进程都有自己的地址空间、文件描述符等,因此进程间的切换开销较大。而线程共享进程的资源,切换开销较小。执行方式:进程是独立的执行流程,每个进程有自己的程序计数器,可以执行不同的任务。
2023-07-13 16:22:58
612
1
原创 代理模式:静态代理+动态代理
InvocationHandler接口只定义了一个方法invoke,该方法接收三个参数:代理对象、被调用的方法以及方法的参数,它返回一个Object类型的值,代表方法的返回值。当需要代理多个原始类时,需要为每个原始类创建一个代理类。在理解动态代理时,可以使用图加+静态代理的方法,动态代理只是将代理类通过Proxy类来自动实现,在使用该方法前,应准备好方法所需的参数以及所扩展的方法即可。- 动态代理:在运行时创建代理对象,无需提前知道代理类和目标类的关系,可以动态地在运行时决定代理对象的行为。
2023-07-12 18:45:40
99
1
原创 Java反射机制基础之反射操作(继承关系+字段的操作)
获取继承关系:获取父类+获取接口,判断继承关系,访问字段,存入字段值,获取方法,调用方法
2023-07-12 15:19:27
1233
1
原创 Java反射机制基础知识之Class类和反射方法调用构造函数
一般通过构造方法创建对象时,A a = new B(),会在编译器确定对象的类型;但是有些时候,只有在程序运行起来的时候,才能确定对象的类型Class.forName("?").newInstance(),这种时候就要用到反射机制。了解一下:编译期:把源码交给编译器编译成计算机可以执行的文件的过程。运行期:把编译后的文件交给计算机执行,知道程序运行结束。java反射机制:在运行状态中,对于任意一个类,都能够知道这个类地所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性;
2023-07-11 18:31:20
675
原创 对称加密算法
使用一个秘钥进行加密或解密,从程序的角度,加密就是有一个函数接收密码和明文,输出密文;解密则是接收密码和密文,输出明文。填充模式:数据块大小不符合加密算法要求时进行填充,也可选择不填充。
2023-07-11 14:43:50
231
原创 秘钥交换算法(DH算法+非对称加密算法)
在不安全的信道上传递加密文件,当加密文件被截取时,没有秘钥,无法破解密文,但是如何在不安全的信道上安全的传输秘钥呢?如何传输秘钥才能使秘钥被截取是还能保证密文的安全的?要解决这个问题,则需要要使用密钥交换算法,秘钥交换算法有两种:对称加密算法以及非对称加密算法。
2023-07-11 14:42:43
368
原创 FTP协议相关知识,FTP服务器文件列表展示、文件上传、文件下载等代码案例和实现步骤细节
它允许用户在客户端和服务器之间上传、下载和管理文件。FTP协议支持匿名访问和身份验证访问,可以通过用户名和密码进行身份验证。1.连接到FTP服务器,验证密码,切换到指定文件夹,列出文件信息,并打印输出文件的名称、创建时间和大小。如果文件夹不存在,则会创建一个新的文件夹。2.在网页中输入主机ip:web服务端口号后输入用户名和密码,则可以进入文件列表展示,并根据权限对文件进行操作。设置用户名和密码,并将想要上传的文件放入主目录,并设置权限。同样的,也可以根据使用编码的方法实现对文件的上传以及下载。
2023-07-10 17:33:29
941
1
原创 BouncyCastle
BouncyCastle是一个第三方开源库,提供了许多哈希算法和加密算法。它提供了Java标准库中没有的一些算法,例如RipeMD160哈希算法。
2023-07-10 17:04:41
573
1
原创 Hmac算法
秘钥只有在第一次使用时生成,并且每次生成不同,所以在数据库存储时,不只需要存储加密后的用户密码,还应存储秘钥,在用户进行登录时,将秘钥与密码一起进行加密,并与数据库中存储的密码进行比对,若一样,则密码正确。Hamc算法是一种基于密钥的消息认证码算法,可以看作一个带有安全key的MD5算法。Hamc总是和某一个算法搭配使用。其中HashTools.bytesToHex()是我们自定义的方法,主要用于将字节数组转换成16进制字符串。所以必须可以根据原始密码与存储的秘钥数组恢复秘钥。秘钥为16进制字符串。
2023-07-10 16:30:01
269
1
原创 哈希算法相关知识点
哈希算法(Hash),又称摘要算法(Digest),对任意一组输入数据进行计算,得到一个固定长度的输出摘要,目的是验证原始数据是否被篡改,相同输入相同输出,不同输入大概率不同输出;MD5加密;SHA-1;MD5与SHA-1的加密方法封装在一个工具类中
2023-07-10 14:54:05
232
1
原创 编码算法(URL+Base64)
对字节进行编码,把任意长度的二进制数据变为纯文本(更利于在某些协议下进行传输),并且编码后只包含a-z、A-Z、0-9、+、/、=,把3字节的二进制数据按6bit一组,用4个两位数表示,并转换成字符;共64种表示,其中,0-25:A-Z,26-51:a-z,52-61:0-9,62:+,63:/。对字符进行编码,浏览器发送数据给服务器时使用的编码方法,但传递数据为中文、日文等其他不能识别的字符时,则需要编码后传递,在编码时,每个字之间使用%分隔,以便识别;使用base64编码对图片进行编码以及还原。
2023-07-10 10:49:49
323
1
原创 Java io的一些操作以及相对应的方法
Java io的一些操作以及相对应的方法,文件字节输入流,带有缓冲区的字节输入流(BufferedOutputStream), 基于字节数组的字节输出流(ByteArrayOutputStream):
2023-07-09 11:51:38
112
1
原创 JavaMail相关代码案例,记录如何完成各种类型邮件发送
邮件传输基于应用层协议的SMTP(Simple Mail Transfer Protocol)协议,JavaMail相关代码案例,记录如何完成各种类型邮件发送
2023-07-08 16:26:24
140
原创 HTTP协议
HTTP(HyperText Transfer Protocol)使目前使用最广泛的Web应用程序使用的基础协议,是基于TCP协议之上的一种请求-响应协议服务器与客户端之间的连接如下:HTTP的请求由HTTP Header和HTTP Body两部分构成,图片所示为Header部分内容,服务器主要依靠某些特定的Header来识别客户端的请求如果是GET请求,那么只有Header即可,如果是POST请求,则还需Body,
2023-07-07 16:17:27
152
1
原创 Cannot get a NUMERIC value from a STRING cell异常解决
代码主要作用就是复制一个excel表格中的数据到另一个excel表格中,而在进行数据的写入时发生了错误,我在进行第一个表格的创建时,它的序号使数字,但是其他数据为字符,因此在复制写入时,我第一行的数字类型并不能以字符的方式写入,所以在outCell.setCellValue(c.getStringCellValue());由于单元格数据类型没有办法进行统一的强制类型转换,所以在复制数据时,一定要确认数据类型是否一致,不一致时,只能根据其具体类型进行操作。
2023-06-12 10:19:43
2211
原创 ArrayList基本知识点
扩容方法时ArrayList中最重要的一部分,在进行一个集合的创建时,如果初始赋值小于10,则创建的是一个容量为10的数组集合,当再次添加元素时,ArrayList首先会将数组的长度(elementData.length)与数组最低要求存储容量(minCapacity)进行比较,当minCapacity
2023-05-19 18:20:14
439
1
原创 ArrayList扩容方法的理解
grow(int minCapacity)方法是对扩容的一个具体操作,在该方法中首先根基原数组长度计算出新数组的长度,一般是原数组的1.5倍,若是其中 minCapacity - oldCapacity 0 ,完成扩容,然后使用capeOf()方法将原数组元素复制到新数组中,如果数组的长度大于((2^31)-1)即2147483647,则会抛异常。本篇文档就是对于ArrayList的扩容方法做介绍。
2023-04-23 15:27:57
131
1
原创 LinkedList的源码阅读
调用UnLinkedList方法时,首先将头元素中的元素和next指针置为空,然后将first指向下一个节点,判断下一个节点的next指针是否为空,为空则整个链表为空,将last指向null,不为空则将下一个节点的prev指针置为空。first和last分别指向链表的头节点和尾节点,当进行添加操作时,只需要将删除元素的前一个节点的next指向其后一个节点的prev,将后一个节点的prev指向前一个节点的next。删除头元素,定义first指针,如果没有,则抛异常,有则调用unlinkFirst方法。
2023-04-19 18:00:16
232
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅