- 博客(46)
- 收藏
- 关注
原创 HTTPS的加密流程
在这种情况下黑客如果攻击客户端与服务器之间的一个路由器不会得到密钥,则无法获得传送的信息,但一个服务器对应多个客户端,如果每个客户端用一个密钥,则黑客可以通过自己申请一个客户端来拿到密钥。此时可以让每个客户端在连接到服务器时自己生成一个密钥,让每个客户端各自生成各自的,互不相关,从而实现每个客户端的密钥都不相同。客户端:客户端拿着密钥针对要发的数据进行加密,把密文通过网络,传输给服务器。解码:密文+密钥=>明文。非对称加密:有两个密钥,一个公钥,一个私钥。服务器:拿着密钥,进行解密,得到传送的信息。
2023-09-13 10:58:13
548
原创 MyBatis的使用
3.使用ResultMap,属性名和字段名进行手动映射(最好全部都设好,防止多表查询时出问题),column是数据库的字段名,property是定义的类的属性名。2.编写XML文件:namespace的内容要与之前定义的Mapper接口相对应。查询语句:用标签,id填写对应Mapper接口对应的方法,resultType写定义的接收对应sql数据的model类的位置。id为对应的Mapper类里的对应的方法名。id为对应的Mapper类里的对应的方法名。步骤:1.定义Mapper接口,
2023-09-12 11:24:40
230
原创 Spring MVC的常用注解及用法
value用于设置网址,而method可以设置只能用post(RequestMethod.GET)或get(RequestMethod.POST)那种方式获取。@requestMapping既可以用来修饰类也可以用来修饰方法,可以设置参数如value和method。1.@requestMapping:用于实现客户端与程序之间的“连接”;3.Model处理业务并将数据结果给Controller。4.Controller会将数据给View引擎。5.View转换数据生成最终的页面给用户。
2023-09-07 16:13:03
957
原创 Bean的生命周期
第三步要装修(Bean的初始化):装修时要先通知装修公司(各种通知);装修前要进行些准备工作,比如买油漆,家具(初始化前置方法);装修公司进行装修(执行初始化方法);装修完后付钱(初始化后置方法);2.设置Bean的属性(进行依赖注入,将依赖的Bean赋值到当前类的属性上)第二步要盖房子(设置Bean的属性),但是此时还只是的毛坯房;执行初始化方法(设置了就会执行,不设置不会执行)第一步要买地(实例化Bean,分配内存空间);第五步产权到期要销毁(销毁Bean)。第四步要住进去(使用Bean);
2023-09-06 16:13:28
167
原创 Bean的六种作用域
singleton:单例作用域(默认模式):线程不安全,可能会出现多个线程修改一个变量的情况,解决方法:用ThreadLocal。session:会话作用域:一个Http会话共享一个Bean。只适用于Spring MVC项目(Spring Web)request:请求作用域:每次http请求都会创建一个新的Bean。prototype:原型作用域:每次在该作用域下对Bean的请求都会创建一个新的Bean。websocket:HTTP WebSocket作用域:只适用于websocket作用域。
2023-09-06 10:40:57
203
原创 Bean注解总结
当XML中的content标签中的base-package里不包含所要注入的类的软件包时不会存储Bean。@Component(组件,工具类层,会把一些重复在多个层使用的功能单独写成一个层)@Configuration(配置层,设置项目的配置,如端口号)@Repository(数据持久层,实际的业务处理)@Service(服务,业务组装)
2023-09-05 16:51:41
167
原创 HTTP协议的认识
fiddler是一个抓包工具,抓包工具就类似于代理,比如:我爸想包烟,但是他不想出去,正好我要出去,我爸就让我给我捎一下,抓包就类似于例子中的我的作用,是个跑腿的。进入网站后,我是下载的是Fiddler Classic,是免费的,之后点击Try For Free。若没有fiddler,可以到官网下载:http://www.telerik.com/fiddler,HTTP协议:是一个应用层协议,就类似于一问一答,比如,我问同学要支笔,同学把笔给我。设置过程中会弹出对话框,大概是关于根证书,要点击是。
2023-07-20 10:59:06
79
原创 CSS选择器常见用法
一个html标签可以有一个id属性,这个属性值对应定义的id选择器的名称,在页面中是唯一的,同样可以通过id 选择器把这个指定的元素获取到。后代选择器:效果就是上述三种选择器的组合,以下面的代码为例:先找到one,再在有one 类的标签内部找到span标签。类选择器:CSS中创建一个“类名”,这个类名对应一组CSS属性,让指定的html元素应用这样的类名即可。标签选择器:使用标签名,把页面中的所有同名标签的元素都选中了。针对同样的样式属性,设置不同的值,使用类选择器>标签选择器。{}中是具体的CSS属性。
2023-07-18 14:47:01
102
原创 HTML中常用的标签
标题标签:;;;;;dl(总标签) dt(小标题) dd(围绕标题来说明):自定义列表,上面有个小标题,下面有个围绕标题来展开。border:表示边框,1表示有边框(数字越大,边框越粗),“”表示无边框。cellpadding:内容距离边框的距离,默认是1像素。cellspacing:单元格之间的距离,默认是2像素。thead:表格的头部区域。tbody:表格的主体区域。tr:表示表格的一行。段落标签:
2023-07-18 09:19:43
102
原创 类加载的认识
找到.class文件,并读取文件内容。JVM中,加载类,需要一组特殊的模块--加载器。在JVM中内置了三个类加载器:BootStrap ClassLoader:负责加载Java标准库中的类。Extension ClassLoader:负责加载非标准库中的但事是Sun/Oracle扩展的库的类。Application ClassLoader:负责加载项目中程序员自己写的类以及第三方库中的类。Extension ClassLoader是Application ClassLoader的父类加载器。
2023-07-15 10:01:40
81
原创 数据链路层的认识
mac地址的大小是6个字节(mac地址不需要动态分配,一般网卡出场的时候就写死啦)。由于硬件的配置不同,所以mac地址的数据部分的长度上限也不同。一个大的数据报分成小的数据报之后标识位都是一样的,片偏移用来表示小的数据报的先后顺序,标志位有3位,有一位是不用的,一位表示是否分包,一位表示当前是不是最后一个包(结束标记)。
2023-07-13 19:02:50
92
原创 IP协议的认识
把所有的IP地址分为两类:内网(10.* 172.16.*-172.31.* 192.168.*),外网(其他的ip地址)。外网ip必须是唯一的,内网ip在不同的局域网中可以重复。内网设备->外网设备(对应的内网设备的路由器,触发NAT机制进行IP替换,此时就会给这个网络数据报的源ip替换成路由器自己的IP。IPv6:新的IP协议,用16个字节,128位来表示IP地址。IPv4:传统的IP协议,用4个字节,32位来表示IP地址。内网设备->其他局域网中的内网设备(不允许)今天的IP和昨天的不一样。
2023-07-13 16:40:54
88
原创 TCP的认识
数据在网络上传输时,不是直接一对一传送的,中间会经过很多的中间设备,数据在这些中间设备上时,不只有这一个数据,会有不同设备传来的很多数据,如果数据超出限度,中间设备就会丢弃一些数据,进而在接收数据时接受不到,就产生了丢包。TCP还承担一个整理顺序的职责,TCP有个接收缓冲区,每个socket(假设网络间的数据传输是送外卖,通过家庭地址(IP)和你个人信息(端口号),找到你,socket就相当于你家的大门(程序的入口))都有一个自己的缓存区,TCP就按照序号针对收到的信息进行整理。A问B最近过得怎样?
2023-07-08 20:44:46
109
原创 UDP报文的认识
校验和:由于数据在传输中可能受到如:电磁场,太阳黑子等因素的影响,会导致数据出现偏差,校验和的目的就是为了检验数据是否出错,如果校验和出错则一定出错,如果校验和正确也有可能出错。为了增加校验和的准确性,校验和会与内容联系起来(去内容的一部分或一个值,通过数学公式变换如奇偶校验,得到一个值),如果出错则是错误的。发送方发送了一个UDP报文后,接收方会根据报文内容通过相同的方法进行校验得到一个校验和再与发送过来的校验和对比看是否一致。注:端口号
2023-07-07 10:38:49
131
原创 网络中的基本概念
相当于在网上购物,平台只负责传输数据(平台就相当于应用层),淘宝卖家自己关心起点和终点不关心怎么传输(淘宝卖家相当于传输层),网络层负责两个遥远节点之间的路径规划(如从四川到山西走哪条路)所以会在上一层给这一层时给数据加上起点和终点方便规划,数据链路层负责两个相邻结点间的传输(如从无锡到南京是做火车还是动车)所以会在上一层给这一层时会给数据加上路线以及上面的地点方便传输。(总的来说这一层只关心的数据下一层也会用到,所以会用封装把这一层关心的数据以及数据原始数据封装在一起传给下一层)。两台主机间的通信流程。
2023-07-06 17:14:01
92
原创 File 类和InputStream, OutputStream 的用法
文件描述符:进程采用PCB这样的结构表示,pid,内存指针,文件描述表。文件描述表记载了当前的进程都打开了哪些文件,每次打开一个文件,就会在这个表里申请到一个位置。这个表可以当成一个数组,数组下标就是文件描述符,数组元素就是这个文件在内核中的结构体的表示,但是这个表厂是有限的,不能无休止的打开,但又不释放,一旦满了,继续打开就会打开失败。write方法:参数为int,无返回值,参数的是ASCll码值,写入文件后文件里是ASCll码对应的字符。这个路径指向的文件,可以是真实存在的,也可以是不存在的。
2023-07-06 10:36:20
125
原创 文件的基本知识
IO概念:对于数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存的输出流。文件内容操作:文件的读和写。IO就是一种文件内容操作。存储概念:存储就是存放数据的介质。我们平时最常见的存储就是U盘、移动硬盘、笔记本使用的机械或固态硬盘等等。在服务器领域,为了数据的安全性,业务数据一般要与系统分开而且重要的业务数据一般是通过某种共享技术(nsf)挂载到远程存储上的,这样即是为了安全,也是为了高可用性。
2023-07-05 19:57:15
81
原创 synchronized的总结
synchronized可以对整个方法加锁,在方法声明前加上synchronized即可,synchronized的()里表示锁对象,必须是一个object类,表示针对那种资源进行加锁,如果两个锁的资源一致就会导致锁竞争,一个线程争夺到锁后,另一个就只能阻塞等待。2.既是轻量级锁又是重量级锁,如果锁竞争激烈就是轻量级锁,如果锁竞争不激烈就是重量级锁。1.既是乐观锁也是悲观锁,如果锁竞争激烈就是乐观锁,如果锁竞争不激烈就是悲观锁。
2023-07-05 16:18:39
108
原创 锁策略的总结
锁的实现者在实现锁之前要预测锁是否会产生锁冲突/锁竞争(两个线程这对一个对象加锁时,由于线程调度没有顺序,所以谁抢到锁就是谁的,另一个只能阻塞等待)。比如有两个同学,一个对考试比较乐观,他认为只要考前突击一下就行,所以考前几天才开始复习,另一个同学比较悲欢,考前半个月就开始复习,悲观的同学要比乐观的同学花费更多的时间和精力来复习。不可重入锁则不会进行判断。系统对于线程的调度是随机的,自带的synchronized锁是非公平锁,要实现公平锁就要在synchronized基础上加个队列,来记录加锁线程的顺序。
2023-07-05 15:56:16
84
原创 死锁的成因, 和解决方案
3.线程更多,锁更多的情况下,死锁会更容易,如哲学家问题:一个圆桌上有一大碗面,5个盘子,5把筷子,5个座位上可以座5个哲学家,当哲学家就坐以后,其左右有且仅有一个筷子,每个筷子左又有且仅有一个哲学家。哲学家动作:思考,取筷(需要两个),取面,吃面。比如有两个修理工,一个拿着扳手,一个拿着螺丝刀,但是拿扳手的人需要螺丝刀,拿螺丝刀的人需要扳手,可他们两个人都不想交出手上的工具,这样就僵持住了。编号:针对锁进行编号,如果需要同时获取多把锁,约定加锁顺序,务必是先对小的编号加锁,再对大的编号加锁。
2023-07-04 20:27:46
91
原创 HashTable, HashMap, ConcurrentHashMap 之间的区别
ConcurrentHashMap扩容时不会直接一次性搬过去,而是每次只搬一部分,这是就相当于同时存在两张表,新表和旧表,插入元素时直接插进新表,删除元素删旧表的,查找时从两张表中一起查。HashTable是针对真个哈希表加锁,任何的增删改查操作,都会触发加锁,也都可能会有锁竞争(如果两个线程修改两个不同的变量,不会出现线程安全问题,但是由于synchronized加在this上,会引发锁竞争)。在多线程环境里,常用的数据结构会出现问题,最直接的解决办法就是加锁。
2023-07-04 19:13:13
187
原创 线程池的认识
相当于学计算机的同学记的2的1到10次方,因为这些知识是在考试中(尤其是计算计组成原理中)常用到的知识,所以我们把它记下来,就减少了现用现算的时间。线程池也是一个道理,将常用的线程放入线程池中,用的时候直接拿。从线程池里取线程是纯用户态操作,不涉及与内核的交互。
2023-07-04 11:01:19
62
原创 单例模式的写法
由于instance是static修饰的,所以该对象是整个类的,s1,s2在调用的时候都是在调用同一的instance,又由于构造方法是private修饰的,所以无法在该列之外构造,所以s3的构造是错误的。在计算机领域中,推崇懒汉模式,因为现用先准备的方法极大的提高了效率,以读取文件为例:如果读取的文件很大,饿汉模式要在打开前读取相当长的时间,而懒汉模式只读取用户要阅读的部分,读取时间相对较短。单例模式就是写代码的固定套路,就像高中时语文老师总结出来的主观题的模板,按模板写分数不会太低。
2023-07-03 17:07:56
65
原创 Java线程的几种状态
RUNNABLE就绪状态:1.正在CPU上运行;2.准备好随时可以去CPU上运行。TERMINATED 系统中的线程已经执行完毕,Thread对象还在。BLOCK 表示等待锁出现的状态(与synchronized有关)TIMED_WAITING 指定时间等待。NEW 系统中的线程还创建出来,只是有个Thread对象。WAITING 使用wait方法出现的状态。
2023-07-03 09:42:33
65
原创 线程安全问题
某个操作使用单个CPU指令,就是原子的例如:赋值=,使用多个CPU指令大概率不是原子的例如:++)将线程比作要生产一辆汽车要先加工原材料,制造零件,组装零件。由于出现抢占式调度就可能出现:加工原材料,加工原材料,制造零件,组装零件,制造零件(此时已经没有原材料啦)。加锁:类似于更衣室的锁,先进入更衣室的人上了锁其他人就只能等待里面的人解锁后才能进更衣室,但是由于线程是抢占式的所以下一个进入更衣室的人是不确定的。一个变量在一个线程结束后又在下一个线程又被使用,当回到上一个线程时就会出现差错。
2023-07-03 09:15:12
68
原创 Thread的基本用法
上一个的isQuit;由于线程是并发执行的,无法确定哪个线程先执行哪个线程后执行,所以引入线程等待,通过调用join()方法来实现线程等待。在线程1里调用线程2.join,1线程就要等待线程2执行完以后再执行,线程2不执行完毕线程1就会阻塞等待(干等)。sleep清空标志位是为了让线程对于何时结束有一个更明确地认识,interrupt方法只是通知线程该结束啦,不是强制结束,类似于家长周末叫我起床,叫完之后我z只是知道该起了,至于具体时间由我灵活控制。本质上来说方法就一种,让该线程的入口方法执行完毕。
2023-07-02 17:44:41
139
1
原创 进程调度的基本过程
在一个进程的一部分运行结束要换到下一个进程的一部分时,会将前面完成的那一部分进行记录。具体到进程上下文具体指进程具体运行时,CPU内部的一系列寄存器的值(寄存器的一个作用就是保存当前进程执行的中间结果,包括具体执行到哪一条指令)。统计每个进程在CPU上的执行了多久。用来调整优先级,比如考研复习发现自己的高等数学相对于其他学科复习的时间不是太长,而英语的复习时间又给的太多,就把一部分学习英语的时间分配给高等数学。由于我们的计算机要处理的事物很多,而计算机cpu处理事务的资源是有限的,所以要引入并发。
2023-07-02 10:13:33
122
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅