
操作系统
文章平均质量分 80
Money、坤
人间烟火 各有遗憾 今天比昨天好就有希望
展开
-
【面经】某团面经---一篇到底
RuntimeException:运行异常一般是Java虚拟机正常运行期间抛出的异常的超类,程序中可以处理这些异常,也可以不处理这些异常,编译器并不会提示我们来处理这些异常。因为Java浮点数使用二进制数据的科学记数法来表示浮点数,因此可能不能精确表示一个浮点数,使用double类型的浮点数比float类型的浮点数更精确,但如果浮点数的精度足够高,依然可能发生这种情况,如果开发者需要精确保存一个浮点数,则可以考虑使用BigDecimal类。实现依赖注入的关键是IoC容器,它的本质就是一个工厂。原创 2022-09-25 23:47:59 · 595 阅读 · 1 评论 -
【JVM】JVM内存模型详解
JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够“一次编译,到处运行的”原因。方法区存储的内容有:类型信息(比如类全称、父类全称)、域信息(域名称、域修饰符private等)、方法信息(方法名称、方法修饰符、返回类型等)、字面量(字面量包括文本字符串、八种基本类型的值 、被声明为final的常量等)。Java虚拟机栈是当前线程在执行方法时存储所需的数据、指令、返回地址的一种栈结构(先进后出)。原创 2022-08-24 01:14:00 · 16042 阅读 · 0 评论 -
【操作系统】什么是死锁,以及死锁产生的原因和必要条件
所谓死锁,就是在两个或多个并发进程中,如果每个进程持有某种资源而又都等待着别的进程释放它或它们现在保持着的资源,否则就不能向前推进,此时每个进程都占用了一定的资源但又都不能向前推进,称这一组进程产生了死锁。举个例子,如果此时有一个线程A持有a锁,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。原创 2022-09-07 23:24:12 · 7806 阅读 · 0 评论 -
【Java基础】全面讲解Java中的各种锁
1. 概念synchronized是关键字,用于解决多个线程间访问资源同步性问题,保证其修饰的方法或代码块任意时刻只能有一个线程访问synchronized 它可以把任非 NULL 的对象当作锁。他属于独占式悲观锁,同时属于可重入锁。2. 作用范围线程A调用一个实例对象非静态Synchronized方法,允许线程B调用该实例对象所属类的静态s方法而不会发生互斥,前者锁的是当前实例对象,后者锁的是当前类作用于同步代码块 锁住的当前对象,进入同步代码块前需要获得对象的锁3. 实现方式Synchronized原创 2022-08-21 13:02:09 · 469 阅读 · 0 评论 -
【JVM】深入理解JVM垃圾回收机制及其垃圾回收算法
在 JVM 进行垃圾回收之前,首先就是判断哪些对象是垃圾,也就是说,要判断哪些对象是可以被销毁的,其占有的空间是可以被回收的。根据 JVM 的架构划分,我们知道, 在 Java 世界中,几乎所有的对象实例都在堆中存放,所以垃圾回收也主要是针对堆来进行的。在 JVM 的眼中,垃圾就是指那些在堆中存在的,已经“死亡”的对象。而对于“死亡”的定义,我们可以简单的将其理解为“不可能再被任何途径使用的对象”。那怎样才能确定一个对象是存活还是死亡呢?这就涉及到了垃圾判断算法,其主要包括引用计数法和可达性分析法。...原创 2022-08-14 23:47:12 · 598 阅读 · 0 评论 -
【JVM】JVM类加载全过程以及双亲委派模型详解
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当上一层类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到这个类)时,下一层类加载器才会尝试自己去加载;综上可得,如果想要打破JVM双亲委派模型,那么就自定义一个类加载器,继承classLoader类,重写其中的loadClass方法,使其不进行双亲委派即可。双亲委派模型是可以打破的;...原创 2022-08-12 20:45:31 · 388 阅读 · 0 评论 -
【操作系统】volatile关键字深层解析
操作了不同的属性,虽然每个线程的属性没有特别强的依赖,但是线程之间有可能造成指令重拍,导致值改变。缓存一致性协议将缓存中修改的变量写入到主内存,并且cpu总线嗅探机制进行监听,如果有线程之间的变量改变就将另外的线程变量变失效,另外的线程就需要重新获取变量并进行处理。如果变量之间如果没有特别强的依赖,编译器可能会进行一些代码的优化进行指令的调整,使得指令顺序不同导致问题。线程之间不能直接通信,要通过共享主内存进行通信,所以多个线程抢占同一个资源的时候,需要进行共享主内存,将需要的变量写入到线程的缓存当中。..原创 2022-07-13 12:45:14 · 209 阅读 · 0 评论 -
【多线程】单例模式下的线程安全问题
这两个附加的操作是在队列为空时,获取元素的线程会等待队列变为非空。主线程中,队列元素为空,消费者(主线程)发生阻塞,此时,主线程(消费者)唤醒生产者,即往队列中添加元素。子线程中,读取键盘输入往队列中添加元素,当队列中添加一个元素后,生产者唤醒消费者(主线程),即可取出队列元素。主线程中对静态变量quit进行了修改,但是对于子线程Mythread来说,quit的修改是不可见的,此时就需要使用关键字volatile修饰静态变量,保证内存的可见性,子线程中当quit被修改时就会输出变量r的值。...原创 2022-07-05 16:59:15 · 984 阅读 · 0 评论 -
Linux简单的shell脚本程序
尊敬的用户,请选择如下功能(按数字即可):1:查看进程信息2:查看用户信息3:显示当前目录信息4:显示计算机名5:显示Linux分发版本名称和Linux内核版本6:显示当前的IP地址7:退出并且,当用户输入相应的数字执行对应的功能。...............原创 2022-07-07 18:08:58 · 742 阅读 · 0 评论 -
【详解】线程池及其自定义线程池的实现
1. 为什么使用线程池?线程池是运用场景最多的并发框架,几乎所有需要一步或者并发执行任务的程序都可以使用线程池。使用线程池一般有以下三个好处:①降低资源的消耗,通过重复利用已经创建的线程降低线程创建和销毁造成的消耗。②提高相应速度,当任务到达的时候,任务可以不需要等到线程创建就能立刻执行。③提高线程的可管理性,线程是稀缺资源,使用线程池可以统一的分配、调优和监控。2. Java中的线程池ThreadPool线程池参数介绍1)corePoolSize(线程池的基本大小):当提交一个任务到线程池时,线程原创 2022-07-08 12:41:21 · 2159 阅读 · 0 评论 -
【网络基础】浏览器输入一个URL之后,都发生了什么(详细讲解)
将封装好的数据包通过硬件设备传输封装的时候时不知道MAC地址的,获取方式就是使用ARP地址解析协议,首先查看目的主机和源主机是否在同一网段,将目的IP和子网掩码按位相与得到网段,如果在同一网段就直接通过ARP获取目的MAC,如果不在同一网段就将数据交给网关处理,使用APR查找网关的MAC,目的MAC就是网关的MAC。当发送一个请求时,第一步封装就是在应用层,在应用层中,会根据应用层的HTTP协议将请求封装成HTPP格式,然后将封装好的数据交给传输层进一步封装。........................原创 2022-07-16 00:04:18 · 3544 阅读 · 3 评论 -
【操作系统】阻塞队列的实现及底层分析
代码】【操作系统】阻塞队列的实现及底层分析。原创 2022-07-10 18:33:31 · 230 阅读 · 0 评论 -
云服务器web项目部署详解
提前购买好一台云服务器,可以是阿里云、百度云、腾讯云等等,大家根据自己的喜好购买,小编这里使用的是轻量级百度云;(备注只需将脚本的项目更改为你自己的项目将即可,同时,你本地的项目需要关联远程git仓库)准备一个远程连接工具,可以是xshell/xftp等,小编使用的是finalShell;部署web项目所需要的一些工具,JDK,MySQL,TomCat,Maven等;(4)安装成功后,系统会初始化mysql,通过以下命令查看数据库临时密码。(2)上传jar包到Linux系统;创作不易,麻烦点个赞啦!....原创 2022-07-26 22:58:57 · 3552 阅读 · 1 评论 -
【操作系统】「不得不看」线程的那些知识
(1)进程:即正在运行的程序,是操作系统进行资源分配的基本单位。单核CPU情况下,同一时刻只能运行一个进程;宏观上并行,微观上串行。(2)线程:又称为轻量级进程,是CPU的基本调度单位。(3)二者的区别:实现Runnable接口4.线程的静态方法线程休眠线程join5.守护线程线程分为两类:用户线程(前台线程)、守护线程(后台线程),如果程序中所有的前台线程都执行完毕了,后台线程会自动结束。(Java中的垃圾回回收器就i属于守护线程)执行结果:(1)并行和并发:(2)用原创 2022-06-25 19:54:51 · 778 阅读 · 0 评论