- 博客(44)
- 收藏
- 关注
原创 MyBatis 中的动态 SQL 的相关使用方法
为什么会有动态SQL,把SQL写死不是比较方便吗?其实有很多的举例,这里我那一个常见的来说,像我们用户注册,会有必填字段和非必填字段,有些传来的参数不一样,那对应的SQL也不一样,因此,在这些的场景底下我们需要使用动态SQL来完成。这里动态SQL我是使用XML的办法进行说明,因为使用注解不方便,而且不好观察哪里有误。这里我会先从一些常用的标签的介绍来对动态SQL进行使用的讲解。
2024-04-12 17:10:07 1264 1
原创 CSS 选择器的常见用法
这里CSS选择器主要分为以下这几种:1. 标签选择器 2. class选择器 3. id选择器 4. 复合选择器 5. 通配符选择器CSS 选择器的主要功能就是选中⻚⾯指定的标签元素. 选中了元素, 才可以设置元素的属性.1.标签选择器这里面表示,所有的P标签 设置为红色。
2024-03-03 17:06:56 563
原创 垃圾回收机制
垃圾回收机制(GC):垃圾回收中的一个很重要的问题STW(stop the world)问题。触发垃圾回收的时候,很可能回使当前程序的其他的业务逻辑被暂停。垃圾回收,是回收内存:它的主要战场在堆上。其实这里的垃圾回收,说是回收内存,更准确的说是“回收对象”,每次垃圾回收的时候,释放的若干个对象。(实际的单位都是对象)
2024-02-29 19:31:15 1124
原创 类加载的过程以及双亲委派模型
类加载,指的是java进程运行的时候,需要把.class文件从硬盘,读取到内存,并进行一系列的校验解析的过程。(.class文件 => 类对象,硬盘 => 内存)类加载的过程,类加载的过程其实是在java官方文档中给出的说明(Java 官方文档)
2024-02-29 16:57:09 919
原创 HTTPS 的加密流程
这就意味着,每个客户端连接到服务器的时候,都需要自己生成一个随机的密钥,并且这个密钥告知服务器。(也不一定非得客户端生成,服务器生成也行,也是需要告诉客户端的)。这就是问题的关键!!密钥需要传输给对方的,一旦黑客拿到了这个密钥,意味着加密操作就无意义了。需要考虑,针对咋们的密钥,也进行密文传输。假设使用对称加密,引入key2 针对key进行key进行加密,意味着就需要把key2也传输给服务器,服务器才能解密到可以,但是在传输过程中还是肯被黑客拿到的。
2024-02-28 17:58:06 2067 2
原创 HTTP 协议的基本格式和 fiddler 的用法
对于我们刚开始的,就观察Raw里面放着的是http请求的原始数据,而响应的数据是被压缩了。网络传输中,带宽是一个比较贵的硬件资源,为了节省带宽,就可以把响应数据进行压缩,(一般压缩响应,请求不太需要),压缩和解压缩的过程,是需要消耗时间和cpu的。2. 服务器地址,服务器端口号:这里的域名,也可以是IP地址,后面带有端口号,表示你要访问服务器的哪个端口,如果URL中不带端口号:浏览器就会自动给一个默认的端口(服务器端口,不是客户端的端口,不是系统随机分配的那个)。简单来说,uri的范围比url更广一些。
2024-02-20 14:43:32 769
原创 IP 协议的相关特性
IP(Internet Protocol)协议是互联网中使用的网络协议之一,它的特性包括:1. 无连接性:IP协议是一种无连接协议,每个数据包都是独立发送和处理的。因此,每个数据包都需要包含完整的源和目的地址信息,以便被正确路由到目的地。2. 不可靠性:IP协议不提供任何可靠性保证,数据包在传输过程中可能会在网络拥塞、链路故障等情况下丢失或重复,需要应用层自行处理数据的可靠性。
2024-02-02 19:24:04 3070
原创 NAT 机制的工作流
大部分情况下,局域网内的不同设备,访问的是不同网站,这个时候直接通过服务器IP就能区分。极少数情况,碰巧访问的是同一个服务器并且端口相同,就可以在路由器这边自动映射成不同的端口了,仍然能区分。因此,在NAT机制之下,当前的网络是足够使用的了,本质是提高IP的利用率,没有增加IP地址,而是让IP地址复用了。要求公网的设备,对应的公网IP,都必须是唯一的,但是私网上/局域网上的设备,使用私网IP,只要保证局域网内部的IP不重复即可,不同的局域网之间的IP允许重复。5. 公网设备访问局域网设备,不允许主动访问。
2024-02-01 17:07:54 499
原创 TCP 协议的相关特性
如果一切顺利,通过应答报文就可以告诉发送方,当前数据是不是成功收到。但是网络上可能存在“丢包”情况,如果数据包丢了,没有到达对方,对方自然也没有ack报文了,这个情况下,就需要超时重传了。TCP可靠性就是在对抗丢包,期望在丢包客观存在的背景下,也可能尽可能的把包给传过去,发送方发了个数据之后,要等,等的时间里,收到了ack(数据报在网络上传输,需要时间的)如果等了好久,ack还没等到,此时发送方就认为数据的传输出现丢包了。
2024-01-30 16:58:08 1359
原创 UDP 的报文结构和注意事项
UDP数据报发送方,在发送之前,先计算一遍CRC,把算好的CRC值放到UDP数据报中(设这个CRC值为value1),接下来这个数据包通过网络传输到达接收端,接收端收到这个数据之后,也会按照同样的算法,再算一遍CRC的值,得到的结果是value2。3. 不可逆: 给一个源字符串,计算md5值,这个过程非常简单,但是给你一个算好的md5值,让你把他还原回原始字符串,理论上无法完成的。在这里checksum 相加的过程中,产生的数据可能比较大,超出short的俩个字节的范围,就溢出了,在这里的话也不管溢出。
2024-01-25 15:57:01 1814
原创 总结网络中的一些基本概念
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。协议,就只是一种通信过程中的约定,发送方和接受方需要提前商量好,数据的格式,才能确保俩者之间能够正确进行沟通,通信双方的俩个计算机,也是自于各种不同的厂商,为了确保任意俩个计算机之间能够通信,也就要求这些计算机都需要遵守相同的网络协议,协议就是一种约定,确保不同的厂商之间生产出的设备能够相互配合。协议分层的初心是为了让一个复杂的一个协议变成更多简单的多个协议,还带了一些好处。源端口号:标识源主机中该次通信发送数据的进程。
2024-01-20 09:05:59 472
原创 File 类的用法和 InputStream, OutputStream 的用法
InputStream和 OutputStream是以字节为单位进行读写,一次最少读写一个字节,而Reader和Writer是以字符单位进行读写。(这几个类的使用非常相似,会用一个,其他也就会了)这里注意了后面加了一个true,加了跟没加有很大的区别,加上true的话打开该文本是不会把之前的给清空,继续往上面增加,加不加true,也是看场景是否需要而加上的。这里使用的是try-with,它会自动在我们使用完这个对象自动释放,避免了程序猿忘记释放而导致出现大问题。
2024-01-19 19:05:58 382
原创 IO、存储、硬盘、文件系统相关常识
我们平常意义的存储可能是存储数据的硬盘,在计算机中,用于数据直接处理的是内存,存储数据的是硬盘,内存相较于硬盘来说速度是快成百上千倍的 , 内存是个不可持久化的,对于内存来说,断电后内存中的数据就会清空 外存也就是硬盘,是持久化的数据,断电后外存的数据不会丢失。
2024-01-19 16:24:05 919
原创 总结锁策略, cas 和 synchronized 优化过程
1. 乐观锁和悲观锁2. 轻量级锁和重量级锁3. 自旋锁和挂起等待锁4. 普通互斥锁和读写锁5. 可重入锁和不可重入锁6. 公平锁和非公平锁(这里的公平表示遵循先来后到的规则)对于synchronized的总结-CSDN博客对于synchronized的来说它是自适应的,不是读写锁,是可重入锁,是非公平锁。
2024-01-17 15:15:48 1187
原创 HashTable,HashMap和ConcurrentHashMap
1、HashMap线程不安全,适用于单线程环境,key值可以为null;2、HashTable线程安全,但锁的是整个Hashtable对象,效率较低,key值不可以为null;3、ConcurrentHashMap线程安全,锁的是每个链表的头结点,降低了锁冲突的概率;充分利用CAS机制;优化了扩容方式;key值不可以为null,适用于多线程环境。
2024-01-17 00:24:05 425
原创 synchronized和ReentrantLock的区别
synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁,二者的主要区别有以下 5 个:用法不同:synchronized 可以用来修饰普通方法、静态方法和代码块,而 ReentrantLock 只能用于代码块。获取锁和释放锁的机制不同:synchronized 是自动加锁和释放锁的,而 ReentrantLock 需要手动加锁和释放锁。锁类型不同:synchronized 是非公平锁,而 ReentrantLock 默认为非公平锁,也可以手动指定为公平锁。
2024-01-16 18:00:25 892
原创 对于synchronized的总结
如果俩个线程度,本身就是线程安全的,不需要互斥,如果使用synchronized 这种方式加锁,俩个线程读,也会产生互斥,产生阻塞(对于性能有一定的损失)。完全给读操作不加锁也不行,就怕一个线程读一个线程写,可能会读到写了一半的数据。读写锁就可以解决这个问题(synchronized不是读写锁)。
2023-12-09 20:35:52 938
原创 总结线程池
我们来假设一个场景,这里我有正式员工和实习员工第一个参数为正式员工而第二个参数为正式员工和实习员工。现在是一个有一个紧急项目需要大家加班加点完成,可是就正式员工大概率完成不了,这个时候我们就需要找5个实习生来帮忙一起完成,而这个峰值已过就可以把实习生一脚踹开(注意这里一脚踹开,下次还需要实习生不是我们上次招过的而是全新的实习生,不存在“再次放回来的概念”,而且也不要把这俩个参数理解为最小值和最大值,在有些情况下并不合适)。
2023-12-09 16:13:43 925
原创 自己实现MyTimer
这里我们需要 定义一个timer ,通过timer.schedule() TimerTask里面实现了内部类,来实现run方法,并且可以把时间少的先进行执行,并且把所有的消息队列执行完,该线程还是不会结束的,这个属于前端后台。通过上述的简单描述我们就可以让我们自己实现Timer 的功能有一个简单的了解,接下来让我们来一起实现MyTimer吧!!!
2023-12-06 15:40:17 412
原创 线程安全问题的原因和解决方案
一个操作或一组操作要么全部执行成功,要么全部不执行,不会出现部分执行的情况。这里我们可以简单理解为,你在上厕所时锁门这个操作,你锁了门(锁门就是需要一定的机制来保证安全)另一个人进不来,这样子保证了原子性,反之则无。有的时候也把这个现象叫做同步互斥。
2023-11-26 20:40:43 958
原创 Java线程的状态
1. Thread.sleep(long millis):使当前线程睡眠指定时间,sleep() 方法不会释放当前锁,但会让出 CPU,所以其他不需要争夺锁的线程可以获取 CPU 执行;2. Thread.join():使当前线程等待另一个线程执行完毕之后再继续执行,底层调用的是 Object 实例的 wait() 方法;操作系统的PCB本身是有线程状态的, Java中的线程是⽤Thread表示的,本身是⼀个对象,所以⼜在这个基础上做了⼀套⾃⼰的体系。线程等待一个具体的时间,时间到后会被自动唤醒。
2023-11-25 21:12:10 900
原创 Thread的基本类用法
让当前的线程休息⼀会, 必须要指定时间的, 防⽌⼀直⽆休⽌的休 眠 在操作系统⾥有多个链表⽤来管理PCB⼀个是就绪队列, 就绪队列中的PCB中以随时调度到CPU上去执⾏⼀个是阻塞队列, 阻塞队列中的PCB要等到休眠时间到了才会被移 动就就绪队列 移回就绪队列并不代码就⽴即可以上CPU执⾏,还是要等CPU的调 度 sleep(1000)真的是休眠1000毫秒吗?这里在try...catch中如果写的是e.printStackTrace(),这里就会出现上面的错误,那是为什么?但是有了sleep就有了变数了。
2023-11-24 21:31:22 828
原创 进程和线程的区别和联系
每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以 说是计算机科学中最重要和最成功的概念之一。进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。1. 管道 2. 共享内存 3. 文件 4. 网络 5. 信号量 6. 信号。其中,网络是一种相对特殊的 IPC。
2023-11-23 12:23:25 56
原创 Map 和 Set
这个又是我们熟悉的老图了,可以清楚的看到Map是实现不了iterable的接口的,所以要像Map能够使用该接口我们应该把它弄成Set来完成该接口。可能在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,本1节介绍的Map和Set是 一种适合动态查找的集合容器。6. Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入。6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入。,value可以为空。
2023-10-22 16:03:30 88 1
原创 七大排序的总结
1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定4. 堆排序。
2023-10-16 20:36:39 71 1
原创 数据结构(Java)---- 二叉树
2.除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 <= i <= m) 又是一棵与树类似的子树。层 上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。:以某结点为根的子树中任一结点都称为该结点的子孙。:若一个结点含有子结点,则这个结点称为其子结点的父结点;:一个结点含有的子树的根结点称为该结点的子结点;1. 有一个特殊的结点,称为根结点,根结点没有前驱结点。:从根到该结点所经分支上的所有结点;
2023-10-14 19:44:02 91 1
原创 Java数据结构---顺序表和链表的总结
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO)的原则。压栈:栈的插入操作叫做进栈压栈入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear出队列:进行删除操作的一端称为队头。
2023-09-24 22:11:59 158 1
原创 认识异常(Java)
在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常(Unchecked Exception)处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助。在上述过程中可以看到,java中不同类型的异常,都有与其对应的类来进行描述。时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到。调用声明抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用。异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明。中表示可选项,可以添加,也可以不用添加。
2023-09-10 18:33:09 43 1
原创 Java---图书管理系统(超级基础款来熟悉Java的语法)
主要分为三个包和一Main方法来进行完成(如图):包下又分成若干个功能来一起实现图书管理系统。
2023-08-08 04:33:06 301 1
原创 Java的继承和多态
你会发现Dog和Cat中有许多重复的地方,那能否将这些共性抽取呢?。继承的概念):是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进行,这样产生新的类,称。继承呈现了面向对象程序设计的层次结构, 体现了 由简单到复杂的认知过程。。例如:狗和猫都是动物,那么我们就可以将共性的内容进行抽取,然后采用继承的思想来达到共用。如图:上述图示中,Dog和Cat都继承了Animal类,其中:Animal类称为父类基类或超类,Dog和Cat。
2023-08-03 15:11:33 44
原创 JAVASE----类和对象
Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面向对象的世界里,一切皆为对象。面 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人 们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。类是用来对一个实体对象来进行描述的,主要描述该实体对象具有哪些属性外观尺寸等,哪些功能用来干 啥),描述完成后计算机就可以识别了。那JAVA是如何定义的呢?比如:洗衣机,它是一个品牌,在Java。
2023-07-31 22:14:10 89 1
原创 预处理的学习
_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义。
2023-07-22 09:21:01 36
原创 c语言文件操作
我们谈文件通常分为俩种:程序文件、数据文件(从文件功能的角度来分类的)。程序文件:包括源程序文件(后缀为.c目标文件(windows环境后缀为.obj可执行程序(windows环境 后缀为.exe文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件, 或者输出内容的文件。在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显 示器上。
2023-07-18 12:59:30 39 1
原创 结构体,枚举,联合的学习
int i;//第一种跟着结构体结尾定义和初始化struct Sdouble d;int main()//第二种在main函数内部定义//也属于第二种main函数内部定义并初始化int i = 0;for (i = 0;i < 10;enum Color//而且枚举是把生活中可能的值给列举出来RED,//0 默认的情况下第一位值为0。
2023-07-18 02:07:52 36 1
原创 字符函数和字符串函数的认识和使用(小部分)
重点介绍处理字符和字符串的库函数的使用和注意事项1、求字符串长度strlen2.长度不受限制的字符串函数3、长度受限制的字符串函数介绍strncpy4、字符串查找5、错误信息报告strerror6、内存操作函数。
2023-07-15 00:17:02 48 1
原创 指针的进阶
1. 字符指针 2. 数组指针 3. 指针数组 4. 数组传参和指针传参 5. 函数指针6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数。
2023-07-14 18:15:08 43 1
原创 浮点数在内存储存
总的来说,计算机储存是十分有意思的,可以去好好的研究一下下哈!2、(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。十进制的-7,二进制为-111.0----->-1.11x2^2。对于64位的浮点数,与32位大致相同,而多的32位全部放在M中。十进制的7,二进制为111.0------>1.11x2^2。3、M表示有效数字,大于等于1,小于2。以上可得s=0,M=1.11,E=2。以上可得s=0,M=1.11,E=2。而浮点数9.0的表达式为---->所以S=0,E=-126,M=
2023-06-01 22:39:58 42 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人