两道计算机网络面试题 4.14 TLS四次握手的过程第一次握手首先,客户端向服务端发送加密通信请求,这个请求主要包含三个部分: 客户端支持的 TLS 协议版本 客户端生成的一个随机数,这个随机数将会参与生成 “会话密钥” 客户端支持的密码套件列表,如 RSA 加密算法 第二次握手服务器收到客户端请求后,向客户端发出响应,主要包含四个部分: 确认 TLS 协议版本,如果浏览器不支持,则关闭加密通信 服务端生成的一个随机数,这 2025-04-14 学习笔记 #计算机网络
两道mysql面试题 4.10 事务的4个特性(ACID) 原子性(A):事务是最小的执行单位,不可以被分割,动作要么全部完成,要么完全不起作用。 一致性(C):执行事务前后,数据保持一致。比如转账事务中,不论事务是否成功,转账者和收款人钱的总额是不变的。 隔离性(I):并发访问数据库时,一个用户的事务不会被其他事务所干扰,各个并发事务之间,数据库是相互独立的。 持久性(D):一个事务被提交后,它对数据库的影响是持久的,即 2025-04-10 学习笔记 #Mysql #数据库
两道操作系统面试题 4.9 进程和线程的区别是什么? 本质方面,进程是操作系统进行资源分配的基本单位;线程是任务调度和执行的基本单位 在切换开销方面,每个进程都有独立的代码和数据空间(程序上下文),进程之间的切换会有较大的开销;线程可以看做轻量级的进程,一个进程中的线程之间共享代码和堆空间,同一进程中的线程的切换,只需要切换运行栈和程序计数器,开销较小‘ 在稳定性方面,如果一个进程崩溃了,往往不会影响其他进程及其兄弟进程和父 2025-04-09 学习笔记 #操作系统
两道计算机网络面试题 4.9 HTTP和HTTPS的区别HTTP是超文本传输协议,是互联网上应用最为广泛的一种网络通信协议,基于TCP或UDP(HTTP3),用来规范超文本(网络上的各种信息)的传输。默认端口号为80。 HTTPS是超文本传输安全协议,是HTTP的加强版,可以认为是在HTTP的基础上,额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号为443。 主要区别 HTTP的连接是简单无状态的,HTT 2025-04-09 学习笔记 #计算机网络
Java中的悲观锁和乐观锁 悲观锁悲观锁的代表是syschronized和Lock锁: 其核心思想是:“线程只有占有了锁,才能去操作共享变量,每次只有一个线程站所成功,获取锁失败的线程,都得停下来等待” 线程从运行到阻塞,再从阻塞到唤醒,涉及线程上下文切换,如果频繁发生,影响性能 实际上,线程在获取syschronized和Lock锁时,如果锁已被占用,都会做几次重试操作,减少阻塞机会 乐观锁乐观锁的代表是AtomicI 2025-04-08 学习笔记 #Java #JUC
JUC之volatite关键字 在之前对单例模式的介绍中,我提到了volatite,在那篇文章中,我们使用volatite是为了保证线程安全,那么volatite是否能够完全保证线程安全呢? 首先,线程安全需要考虑以下三个方面: 可见性:一个线程对共享变量进行修改,另一个线程能看到最新结果 有序性:一个线程内代码按编写顺序执行 原子性:一个线程内多行代码以一个整体运行,期间不能有其他线程的代码插队 直接说结论,volatit 2025-04-08 学习笔记 #Java #JUC
JUC之Lock vs synchronized Lock和synchronized都能实现锁的功能,但是两者之间有着区别。 语法层面 synchronized是关键字,源码位于jvm,用cpp实现。 Lock是接口,源码由jdk提供,用Java语言实现。 使用synchronized时,退出同步代码块时,锁会自动释放;而使用Lock时,需要我们手动调用unlock方法释放锁。 功能层面 两者都是悲观锁,都具备基本的互斥、同步、锁重入功能。 L 2025-03-30 学习笔记 #Java #JUC
JUC之sleep vs wait 在JUC之线程状态这篇博客中,我提到了除了调用锁对象的wait(long)会让线程进入有时限等待外,还可以通过调用sleep(long)方法,来进入有时限等待状态。在这篇博客中,我就讲讲两者的对比。 共同点 wait()、wait(long)和sleep(long)的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态。 三者都可以被打断唤醒。 不同点方法归属不同 sleep(long)是Th 2025-03-30 学习笔记 #Java #JUC
JUC之线程池 线程池本质上就是管理一组线程,用来完成提交给线程池的任务。提交任务,可以调用线程池的submit方法,把实现了Runnable和Callable的任务对象,提交给线程池;而线程池就可以创建出线程对象来执行任务。 创建的线程分为两类:核心线程和救急线程。核心线程就是,当线程执行完任务之后,依然要保留到线程池中的线程;而救急线程,则是执行完任务之后,如果没有别的任务了,就不需要保留到线程池中的线程。两 2025-03-29 学习笔记 #Java #JUC
JUC之线程状态 线程有哪些状态(六种状态)Java中的线程分为6种状态,分别是NEW(新建)、RUNNABLE(可运行)、TERMINATED(终结)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(有时限等待)。 当使用new关键字创建了一个线程对象之后,刚刚创建出来的线程对象,就处于新建状态。新建状态下的线程,仅仅是一个Java对象,没有和操作系统底层真正的线程关联起来,这时的线程 2025-03-29 学习笔记 #Java #JUC