- 博客(32)
- 收藏
- 关注
原创 TCP和UDP的面试题理解
为了控制发送方发送的速率,保证接收方来得及接受数据。流量控制是通过滑动窗口协议实现的。接收方通过自己TCP首部中窗口的大小,来控制发送方的窗口大小,保证发送方发送的数据接收方可以进行接收,以免导致包丢失等问题。TCP报文段的首部中有个字段叫窗口,占2个字节。这个字段是接收方告诉发送发自己可以处理多少数据,发送方就会按照接收方能接收的数量进行发送。发送方的窗口大小是根据接收方的窗口大小决定的。发送方将窗口内容分为发生窗口和可用窗口。
2023-09-24 23:01:53 168
原创 Swagger框架
语法:@ApiImplicitParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”,dateType="变量类型”,paramType="请求方式”语法:@ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”,dateType="变量类型”,paramType="请求方式”)2、@ApiOperation:描述一个类的一个方法,说明方法的作用。可以看到Swagger的界面。
2023-09-11 17:00:01 239
原创 MyBatis:使用注解实现一对一,一对多查询
注解开发中,可以使用@Results、@Result、@One、@Many注解组合完成复杂映射的配置。@Result:结果集的封装,@Results:可以与@Result一起使用,封装多个结果集。@Insert:添加,@Delete:删除,@Update:修改,@Seletc:查询。@One:实现一对一结果集封装,@Many:实现一对多结果集封装。订单表和用户表,每个订单属于一个用户,一个用户可以有多个订单。创建用户数据访问层接口:UserMapper。创建用户数据访问层:UserMapper。
2023-09-09 15:38:14 961
原创 SpringBoot快速入手
SpringBoot项目的父项目都是spring-boot-starter-parent;2. 选择spring initalizr (默认是去官网的快速构建工具那里实现)1. 创建一个新项目(File--->New--->Project)继承parent模块可以避免多个依赖使用相同技术时出现依赖冲突;封装太深,内部原理复杂,初学者不容易理解。程序主入口,初始化spring容器,扫描所有类。导入嵌套式的坐标简化配置,实现坐标依赖传递。4. 选择初始化的组件(勾选Web)6. 等待项目构建成功。
2023-09-07 15:29:19 63
原创 Git的使用
在自己的分支编写代码,以免不小心修改了别人写好的代码或者把已经写好的代码弄丢了,在确定自己编写的代码无误后,合并分支再提交至远程仓库。5.在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。2.从本地仓库中checkout代码到开发工具进行代码编写或修改;4.提交修改到本地仓库,本地仓库中保存修改的各个历史版本;1.从远程仓库中克隆Git 资源作为本地仓库;2、从远程仓库中下载项目到Idea中。3.在提交前先将代码提交到暂存区;5、提交代码到本地仓库。6、提交代码到远程仓库。
2023-09-04 00:23:30 69
原创 Linux基本命令
1、Linux是一套免费使用和开放源码的操作系统,存在着许多不同的Linux版本,它们都使用了Linux内核。Ctrl+c:结束当前命令行,clear命令或Ctrl+l:清楚屏幕,补全命令:table。命令的基本格式:命令字 [-命令选项] [命令参数](-r:删除目录下的所有文件或目录,尽量不要使用)..上一级目录,.当前目录,~家目录。内容少的文件,显示在屏幕上。2、Linux目录结构。5、基本命令-帮助查询。4、文件管理基本命令。
2023-08-31 15:26:12 56
原创 Redis基本理解:事务
事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。activeExpireCycle()会对每个expires空间进行检查,随机挑出W个key进行检测,如果key超时,删除key,在这次检查中,如果删除key的数量。1、Redis是内存数据库,如果不将内存中的所有数据保存到磁盘中,一旦服务器进程退出,那么服务器中的数据也会消失,所以Redis提供了持久化功能。解决方案:日常例行统计数据访问记录,统计访问频度较高的热点数据,将统计结果中的数据分类,根据级别,redis优先加载级别较高的热点数据。
2023-08-28 11:20:00 80
原创 Redis基本理解:语法
主题符合非关系型、分布式、开源代码和具有横向扩展能力的下一代数据库。Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存、持久化的key-value数据库。特点:Remote Dictionary Server(过程字典服务器),内存储存与持久化,数据类型丰富,主从复制。Redis自身是一个Map,其中所有的数据都是采用key:value的形式存储。Redis监听端口号为:6379。
2023-08-25 14:45:07 145
原创 Spring框架基本理解(2)
读取xml配置文件,每个bean变成一个BeanDefinition信息对象,存放入Map集合中,然后,从Map集合取出每个bean对象,执行后工厂处理器(BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor、BeanPostProcessor),最终,创建出一个”半成品”的bean实例。三是双向循环依赖);execution(* *.*.*.类名称.方法名称(参数列表))execution(* 包名称.类名称.方法名称(参数列表))
2023-08-23 13:56:05 40 1
原创 Spring框架基本理解(1)
IOC容器属于Spring core模块,用来创建和管理bean,IOC容器通过配置文件中配置的数据,对各个bean对象进行实例化,并根据bean对象之间的依赖关系完成bean之间的注入。DI(依赖注入),在容器创建好对象后,处理各个对象之间的依赖关系,在IOC容器运行时,给当前对象注入它所需要的另一个对象。配置属性:name:构造方法中参数名称,value:属性值,ref:属性值的引用,index:构造 方法中参数下标,type:构造方法中参数类型。
2023-08-23 11:32:16 60
原创 Java 8特性---日期,Lambda和函数式接口
Java 8 中,接口方法除了可以定义抽象方法和常量外,还可以定义default默认方法和static静态方法。lambda表达式本质是一个匿名函数,它表达的是接口方法的实现,这个接口是函数式接口。:只有一个参数的且返回值为布尔值的断言型接口。该接口中包含多种default修饰的默认方法来进行多种条件的过滤。:传入两个参数且返回一个比较结果的比较器接口。该接口中提供了比较器的组合,反转等方法。:只有一个参数且返回一个结果的接口。该接口中提供了将多个函数组合一起的方法。Comparator接口。
2023-08-20 16:01:33 228
原创 ThreadLocal
mian()运行在主线程里,而thread线程是子线程,如果在主线程的ThreadLocalMap里面存值,在子线程中获取,是拿不到的,因为两个线程都有自己的线程,而自己的线程中都有一个ThreadLocalMap集合。数据在线程、函数、方法之间传递数据时,使用不ThreadLocal,会产生返回值和较多的参数,增加方法之间的耦合度,使用ThreadLocal后,就会降低这些方法之间的耦合度。Entry对象的key是存储当前数据的ThreadLocal,value是当前存储的数据。
2023-08-17 08:59:35 147
原创 Synchronized实现原理
使用Synchronized关键字将一段代码用锁"锁起来",只有持有当前锁的线程才能访问。在同一时间,只能有一个线程持有锁,这样,才能保证线程的安全性。1、Synchronized关键字使用在方法体上。(作用范围:整个方法)2、Synchronized关键字代码块(作用范围:被Synchronized代码块包围的代码)referencr-to-lock:Java对象(任何Java对象都可以当做锁)三、Synchronized关键字中对象的使用1、Synchronized修饰在实例方法上,使用
2023-08-14 22:14:45 45
原创 MyBatis框架基本概念
XML文件:所有的标签必须写在标签中,mapper标签中要有namespace属性(设置当前映射器的命令空间,此名称要与映射器接口名称一致)。它是一个开源的(源代码开放),持久化的框架,其内部对JDBC进行了封装,开发人员只用关注sql代码的编写,而不用关心底层数据库的连接,结果集的遍历等执行。将age区间的上限,下限重新定义一个类(WebsiteCondition),传入的参数就是WebsiteCondition类型的。
2023-08-12 23:27:02 81
原创 JDBC基础操作
JDBC中提供了与数据库连接的接口:Connection接口,通过DriverManager中的getConnection()传入参数"数据库连接符(包含数据库名,主机地址,端口号数据库,配置参数)",“用户名”,“密码”,返回一个Connection,DriverManager驱动管理类会找到所有的驱动,并根据传入的"数据库连接字符串"找到对应的数据库驱动。作为占位符,这样就可以保证每次传给数据库都是完整的sql语句,只是占位符处的数据不一样,还能提高SQL预编译的执行效率。此时就会引发SQL注入问题。
2023-07-21 19:47:09 57
原创 Java生产者消费者模型
put()方法用于模拟生产者将数据任务放入阻塞队列中,并调用notifyll()方法唤醒所有的线程任务。take()方法用于模拟消费者从阻塞队列中获取队头数据任务,在获取锁时,先判断阻塞队列是否为空,如果为空,让线程进入等待并释放锁,被put(()方法的this.notifyAll();唤醒时,会重新获取锁。//使用LinkedList 作为队列的存储容器//添加元素(生产的数据任务)放入队尾//将数据任务放入阻塞队列中//唤醒所有线程(通知所有线程有线程任务进入阻塞队列)
2023-07-18 20:46:58 90
原创 ReentrantLock与synchronized的区别
synchronized:是个关键字,是一种可重入的锁。在进行加锁时,可以直接将synchronized写入方法名中,或者使用synchronized代码块。synchronized在进行加锁时,会记录获取锁的次数和释放锁的次数。ReentrantLock:是个类,是一种可重入的锁。所以用该类进行加锁时,需要先创建其对象,使用对象调用方法进行加锁。ReentrantLock在获取锁时,可以调用tryLock()方法尝试获取锁,给其设定一个时间,超过这个时间没有获取到锁,就不再等待,可以去做别的处理。
2023-07-17 18:53:58 53
原创 Java线程池的执行流程
3、STOP:停止状态,当调用shutdownnow()方法时,线程池进入STOP状态,此时,线程池不会再接收新的线程任务,但是,线程池不会等待没有执行完的线程任务执行完,但是会将没执行完的线程任务返回。2、SHUTDOWN:关闭状态,当调用shutdown()方法时,线程池进入SHUTDOWN状态,此时,线程池不会再接收新的线程任务,并且等待所有的线程任务执行完毕。5、BlockingQueue:阻塞工作队列,当来一个新的线程任务时,如果当前没有空闲线程,此线程任务将会进入阻塞工作队列中进行等待。
2023-07-15 18:49:10 395
原创 Java实现线程的方式
因为Thread对象的参数不接收Callable对象,所以要定义一个既可以接收Callable对象的,又可以被Thread对象接收的对象------->FutureTask对象。总的来说,创建线程只有一种方法就是创建Thread对象,别的方法是从代码实现角度对其进行划分的,其内部代码实现终归还是在创建Thread对象。2、RUNNABLE:运行状态,调用了start()方法,线程即将执行或正在执行run()方法。1、NEW:新建状态,线程刚创建,还没有调用start()方法。四、线程生命周期的六种状态。
2023-07-15 18:46:43 100
原创 Java反射总结
Person类定义了hello()方法,其子类也重写了hello()方法,那么从Person实例中获取hello()方法,作用于Student实例,调用的是父类的hello方法还是子类的hello方法?1、Constructor类的getConstructors()方法能获取所有定义的构造方法,但获取的构造方法是public公有的。2、Constructor类的getDeclaredConstructors()方法能获取所有定义的构造方法(任意修饰符修饰的)。2、Class类的常见方法。
2023-07-12 21:21:18 99
原创 Java:对称加密算法总结
在加密过程中,需要自定义函数decrypt进行解密处理。在加密/解密的过程中,需要创建Cipher对象.传入加密使用的算法,工作模式,填充模式。对称加密算法:指用一个秘钥进行加密和解密。加密就是接收秘钥和原文,返回密文。对称加密算法中的秘钥是一个自己给定的、固定长度(16字节)的。CBC工作模式比ECB工作模式多了个参数,需要生成一个16字节的随机数作为IV参数。2、AES加密+CBC工作模式(安全性较高):同一个秘钥和原文,因为IV参数的随机产生,所以每次生成的密文都不一样。
2023-07-12 19:09:42 941
原创 Java哈希算法总结
1、使用秘钥生成器生成秘钥,进行加密处理//1.产生秘钥//获取HmacMD5秘钥生成器//生成密钥System.out.println("秘钥:"+Arrays.toString(key.getEncoded()));System.out.println("秘钥长度(64字节):"+key.getEncoded().length);System.out.println("秘钥:"+HashTools.bytesToHex(key.getEncoded()));
2023-07-11 18:59:59 621
原创 FTP服务器对文件进行上传、下载
FTP(文件传输协议)是一个用于在计算机网络上客户端和服务器之间进行文件传输的应用层协议。通过安装EasyFtp-Server工具作为服务器,java程序作为客户端来进行文件列表的展示、文件的上传和下载。
2023-07-09 15:18:24 1637
原创 Java Email发送的实现步骤
创建StringBulider对象,将要添加的html文本添加进去,如果要将附件中的图片显示在正文中,可以在正文中加入html标签<img src=\"cid:child\"/>,再将StringBulider对象中的内容添加到邮件正文中。创建一个MultiPart对象,这个对象中可以添加多个BodyPart对象。调用Session中的getInstance()方法,getIntance()方法需要传入两个参数,一为SMTP服务器连接信息,二为账号和密码的授权认证对象。创建邮箱发送账号和账号授权密码。
2023-07-09 14:01:52 151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人