几率大的杂乱+操作系统面试题(含答案)

article/2025/10/26 17:20:21

其他面试题类型汇总:
Java校招极大几率出的面试题(含答案)----汇总
几率大的网络安全面试题(含答案)
几率大的多线程面试题(含答案)
几率大的源码底层原理,杂食面试题(含答案)
几率大的Redis面试题(含答案)
几率大的linux命令面试题(含答案)
几率大的杂乱+操作系统面试题(含答案)
几率大的SSM框架面试题(含答案)
几率大的数据库(MySQL)面试题(含答案)
几率大的JVM面试题(含答案)
几率大的现场手撕算法面试题(含答案)
临时抱佛脚必备系列(含答案)
注:知识还在积累中,不能保证每个回答都满足各种等级的高手们,若发现有问题的话,本人会尽快完善。
。◕‿◕。


本文的面试题如下:
Bean的生命周期
手写常用的几个单例模式(懒汉模式和饿汉模式,线程安全等)
各种排序的时间复杂度,堆排序和快排
简单工厂模式、抽象工厂模式、工厂方法模式的区别。
泛型的T,E,?和空的区别
秒杀系统如何设计?高并发下会出现什么问题?
分页和分段有什么区别(内存管理)
操作系统中进程调度策略有哪几种?
虚拟内存是什么
页面置换算法
面向对象的特征
解决 java 集群的 session 共享的解决方案
了解元注解吗?
LinkedList是双向链表还是单向?,他有个get方法,时间复杂度是多少
深拷贝和浅拷贝是什么?有什么区别
String底层原理,StringBuilder和StringBuffer的区别?使用场景
java集合类的初始容量大小和扩容大小


Bean的生命周期

  1. 创建阶段(Created): 分配存储空间,构造对象,初始化
  2. 应用阶段(In Use): 对象至少被一个强引用持有着。
  3. 不可见阶段(Invisible): 该对象不再被任何强引用所持有。
  4. 不可达阶段(Unreachable):
  5. 收集阶段(Collected): 如果该对象已经重写了finalize()方法,则会去执行该方法的终端操作。
  6. 终结阶段(Finalized): 等待垃圾回收器对该对象空间进行回收。
  7. 对象空间重分配阶段(De-allocated): 所占用的内存空间进行回收或者再分配了

手写常用的几个单例模式(懒汉模式和饿汉模式,线程安全等)

构造方法定义为私有方法
提供一个静态方法,
饿汉式(静态常量):在类装载的时候就完成实例化。避免了线程同步问题

public class Singleton {private final static Singleton INSTANCE = new Singleton();final修饰的静态实例private Singleton(){}  私有化构造器public static Singleton getInstance(){   提供一个静态的方法返回实例return INSTANCE;}
}

饿汉式(静态代码块)

public class Singleton {private static Singleton instance;static {instance = new Singleton();}private Singleton() {}public static Singleton getInstance() {return instance;}
}

双重检查: 优点:线程安全;延迟加载;效率较高。

public class Singleton {private static volatile Singleton singleton;   volatile类型的private Singleton() {}public static Singleton getInstance() {if (singleton == null) {synchronized (Singleton.class) {if (singleton == null) {singleton = new Singleton();}}}return singleton;}
}

静态内部类: JVM帮助我们保证了线程的安全性

public class Singleton {private Singleton() {}private static class SingletonInstance {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonInstance.INSTANCE;}
}

枚举[推荐用]: 避免多线程同步问题, 还能防止反序列化重新创建新的对象。

public enum Singleton {
INSTANCE;
public void whateverMethod() {}
}

各种排序的时间复杂度,堆排序和快排在这里插入图片描述

堆排序和快排的实现思路

完全二叉树即是:若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
在这里插入图片描述
堆是一个完全二叉树。堆满足两个性质: 堆的每一个父节点数值都大于(或小于)其子节点,堆的每个左子树和右子树也是一个堆。
堆分为最小堆和最大堆。最大堆就是每个父节点的数值要大于孩子节点,最小堆就是每个父节点的数值要小于孩子节点。排序要求从小到大的话,我们需要建立最大堆,反之建立最小堆
平衡二叉树: 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
满二叉树: 除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。( 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。)
在这里插入图片描述
二叉搜索树: 它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 搜索,插入,删除的复杂度等于树高,O(log(n)).
在这里插入图片描述
红黑树: 是一种自平衡二叉搜索树, 都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。
在这里插入图片描述
B树: 概括来说是一个节点可以拥有多于2个子节点的二叉查找树。
B+树: 是对B树的一种变形树,它与B树的差异在于所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
哈弗曼树: 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树。 哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

简单工厂模式、抽象工厂模式、工厂方法模式的区别。

简单工厂模式, 又叫做静态工厂方法,是由一个工厂对象决定创建出哪一种产品类的实例。
*
缺点:很明显工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则
在这里插入图片描述
工厂方法模式:核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口。
在这里插入图片描述
抽象工厂模式: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类
在这里插入图片描述

泛型的T,E,?和空的区别

泛型的好处就是:省去了强制转换,可以在编译时候检查类型安全,可以用在类,方法,接口上。
使用大写字母A,B,C,D…X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已
? 表示不确定的java类型
T (type) 表示具体的一个java类型
K V (key value) 分别代表java键值中的Key Value
E (element) 代表Element

泛型的限定:
? extends E:接收E类型或者E的子类型。
? super E:接收E类型或者E的父类型

1)E,T,K,V等表示固定泛型类型参数需要声明,而通配符?不需要定义可以直接使用,表示泛型的类型参数。

秒杀系统如何设计?高并发下会出现什么问题?

架构设计
1)将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,但实际秒杀成功的请求数量却很少,所以如果不在前端拦截很可能造成数据库读写锁冲突,甚至导致死锁,最终请求超时。
2)充分利用缓存(redis):利用缓存可极大提高系统读写速度。
3)消息中间件(ActiveMQ、Kafka等):消息队列可以削峰,将拦截大量并发请求,这也是一个异步处理过程
(消息队列作用:解耦 削峰 异步操作)
前端设计方案
页面静态化:将活动页面上的所有可以静态的元素全部静态化
禁止重复提交:用户提交之后按钮置灰,禁止重复提交
用户限流:在某一时间段内只允许用户提交一次请求,比如可以采取IP限流
后端设计方案
网关层:
限制uid(UserID)访问频率: 针对某些恶意攻击或其它插件,在服务端控制层需要针对同一个访问uid,限制访问频率。
服务层:
采用消息队列缓存请求:先把这些请求都写到消息队列缓存一下
利用缓存应对读请求:对典型的读多写少业务,大部分请求是查询请求。 利用缓存分担数据库压力。

操作系统中进程调度策略有哪几种?

FCFS(先来先服务,队列实现,非抢占的)
SJF(最短作业优先调度算法)
优先级调度算法(可以是抢占的,也可以是非抢占的)
时间片轮转调度算法(可抢占的)
多级队列调度算法
多级反馈队列调度算法。

虚拟内存是什么

虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。页面置换算法。

页面置换算法

FIFO先进先出算法LRU(Least recently use)
最近最少使用算法LFU(Least frequently use)
最少使用次数算法OPT(Optimal replacement)
最优置换算法

面向对象的特征

1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程
2)继承:继承是从已有类得到继承信息创建新类的过程。
3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。

解决 java 集群的 session 共享的解决方案

1.客户端 cookie 加密。
2.集群中,各个应用服务器提供了 session 复制的功能
3.session 的持久化,使用数据库来保存 session。
4.使用共享存储来保存 session。
5.使用 memcached 来保存 session

了解元注解吗?

元注解是指注解的注解,包括
@Retention 注解的保留策略(如仅存在于源码)
@Target 注解的作用目标
@Document 注解包含在javadoc中
@Inherited四种。注解可以被继承

LinkedList是双向链表还是单向?,他有个get方法,时间复杂度是多少

双向链表 O(n)
get(int index):返回此列表中指定位置处的元素。

public E get(int index) {checkElementIndex(index);return node(index).item;}
private void checkElementIndex(int index) {if (!isElementIndex(index))throw new IndexOutOfBoundsException(outOfBoundsMsg(index));}
先将index与长度size的一半比较,如果index<size/2,就只从位置0往后遍历到位置index处,而如果index>size/2,就只从位置size往前遍历到位置index处。这样可以减少一部分不必要的遍历
Node<E> node(int index) {// assert isElementIndex(index);if (index < (size >> 1)) {Node<E> x = first;for (int i = 0; i < index; i++)x = x.next;return x;} else {Node<E> x = last;for (int i = size - 1; i > index; i--)x = x.prev;return x;}}

深拷贝和浅拷贝是什么?有什么区别

https://www.2cto.com/kf/201401/273852.html
实现对象拷贝的类,必须实现Cloneable接口,并覆写clone()方法
创建一个指向对象的引用变量的拷贝,地址值是相同的,那么它们肯定是同一个对象, 这就叫做引用拷贝
创建了新的对象, 而不是把原对象的地址赋给了一个新的引用变量,这就叫做对象拷贝
深拷贝和浅拷贝都是对象拷贝
浅拷贝
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。 简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
深拷贝
深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。 简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。
1) 利用序列化实现深拷贝
2) 重写clone()方法将引用对象改为深复制
3) 彻底深拷贝,几乎是不可能实现的

String底层原理,StringBuilder和StringBuffer的区别?

使用场景
1)String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为private final方法,没有提供对应的SetXXX方法,所以String是不可变类。 底层是通过char数组来保存字符串的,至于提供的修改String字符串的方法,比如sub操、concat还是replace操作都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。也就是说进行这些操作后,最原始的字符串并没有被改变。

特别的:
1)String str1 = “hello world”;String str3 = “hello
world”;System.out.println(str1==str3);//true运行期间字面常量"hello world"被存储在运行时常量池(当然只保存了一份)先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。
2)通过new关键字来生成对象是在堆区进行的,创建出的一定是不同的对象,即使字符串的内容是相同的
3)对于String拼接,如string += “hello”,会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象。
4)StringBuilder和StringBuffer的区别?
a)拥有的成员属性以及成员方法基本相同,区别是StringBuffer是线程安全的
b)执行效率:StringBuilder > StringBuffer > String,特殊情况:String str = “hello”+ "world"的效率就比 StringBuilder st = new StringBuilder().append(“hello”).append(“world”)要高。
使用场景
当字符串相加操作或者改动较少的情况下,建议使用 String str="hello"这种形式;
当字符串相加操作较多的情况下,建议使用StringBuilder,如果采用了多线程,则使用StringBuffer

java集合类的初始容量大小和扩容大小

ArrayList默认初始容量为10, 按原数组长度的1.5倍扩容
Vector默认初始容量为10, 按原数组长度的2倍扩容
Stack默认容量是10 按原数组长度的2倍扩容
CopyOnWriteArrayList默认容量是0,从0开始 扩容机制,每次+1
LinkedList是用双链表实现的。对容量没有要求,也不需要扩容
HashMap默认容量是16 扩容到原数组的两倍
ConcurrentHashMap,同上。Hashtable默认容量是11, 扩容到原数组的两倍+1
TreeMap由红黑树实现,容量方面没有限制


http://chatgpt.dhexx.cn/article/PV3HwHZ3.shtml

相关文章

操作系统常见面试题

文章目录 进程和线程进程和线程的区别协程与线程的区别进程与线程的切换流程什么是虚拟地址空间为什么虚拟地址空间切换后感觉程序变慢进程间通信方式线程&#xff08;进程&#xff09;间同步方式线程的分类协程&#xff08;纤程&#xff09;线程和协程的区别 进程&#xff08;…

这可能最全的操作系统面试题

文章目录 操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么 Linux 系统下的应用程序不能直接在 Windows 下运行操作系统结构单体系统分层系统微内核客户-服务器模式 为什么称为陷入内…

操作系统面试题(史上最全、持续更新)

尼恩面试宝典专题40&#xff1a;操作系统面试题&#xff08;史上最全、持续更新&#xff09; 本文版本说明&#xff1a;V28 《尼恩面试宝典》升级规划为&#xff1a; 后续基本上&#xff0c;每一个月&#xff0c;都会发布一次&#xff0c;最新版本&#xff0c;可以联系构师尼…

操作系统面试题总结(2022最新版)

关于作者 &#x1f436; 程序猿周周 ⌨️ 短视频小厂BUG攻城狮 &#x1f93a; 如果文章对你有帮助&#xff0c;记得关注、点赞、收藏&#xff0c;一键三连哦&#xff0c;你的支持将成为我最大的动力 本文是《后端面试小册子》系列的第 4️⃣ 篇文章&#xff0c;该系列将整理和梳…

MFC中MENU的使用

一、创建基于对话框的应用程序框架 1.选择菜单项文件->新建->项目&#xff0c;弹出“新建项目”对话框。 2.直接选择“MFC应用程序”或左侧面板中模板的Visual C下选择MFC&#xff0c;中间窗口中选择MFC应用程序&#xff0c;然后在下面编辑框中键入工程名称&#xff0c;并…

MFC 菜单栏一片黑,界面卡顿问题

这是在公司做的一个项目, 实现可视化调节参数内容包括频段、频点、增益和Q值等&#xff0c;可以美化&#xff08;包括丑化&#xff09;和修饰声音&#xff0c;使声音&#xff08;或音乐&#xff09;风格更加鲜明突出。软件如下图所示&#xff1a; 但这软件开发过程中一直存在一…

C#版封装的近400个Windows API 类

【实例简介】 Windows API 类常用方法锦集 【实例截图】 文件&#xff1a;590m.com/f/25127180-494402201-213b68&#xff08;访问密码&#xff1a;551685&#xff09; 【核心代码】/// <summary> /// 封装Windows API类&#xff0c;可直接调用&#xff0c;和调用平常…

C#实现QQ窗体的步骤和总结

C#实现QQ窗体的步骤和总结 程序结构控件布局代码分析公共变量API调用公用方法事件 知识总结IntPtrMarshal 类PointOffset PaintEventArgs 类效果演示 GraphicsMouseEventArgs 类代码案例 ContextMenu 概述演示效果程序代码 MouseEventHandler句柄user32详细介绍使用方法 DllImp…

VC++:菜单的使用总结

菜单是windows应用程序经常使用的资源之一。从今天开始&#xff0c;把有关菜单的创建及使用等各方面的基本用法总结到一起&#xff0c;算是做个笔记吧&#xff01;准备一天写一点&#xff0c;陆陆续续完成&#xff01; 一、菜单的创建&#xff1a; &#xff08;一&#xff09…

Windows 编程[18] - 更换菜单项: ModifyMenu

为什么80%的码农都做不了架构师&#xff1f;>>> 本例效果图: 本例使用的资源文件(TestRes.rc): MyMenu1 MENUEX BEGINMENUITEM "Open" ,101MENUITEM "Old" ,102MENUITEM "Help" ,103 END本例代码文件: program Project1;{$R Tes…

动态更改菜单之ModifyMenu

多语言支持&#xff0c;已经是桌面应用软件的发展趋势。用句流行的词就是“国际化”。除了语言翻译的工作外&#xff0c;比较重要的就是字符的编码问题。不过这些问题的讨论已经铺天盖地了&#xff0c;我就不想再多说细节了。我在此只记录一下我的软件“国际化”中的一个技术小…

Android 为CheckBoxPreference Preference 控件添加样式

Android 为CheckBoxPreference Preference 控件添加样式 分类&#xff1a; android 2012-11-16 17:48 8920人阅读 评论(4) 收藏 举报 [html] view plain copy print ? <CheckBoxPreference android:key"enable_adb" android:layout"…

数据存储: CheckBoxPreference

最近&#xff0c;做一个项目&#xff0c;使用 Preference 非常频繁&#xff0c;之前就很想写一些关于 android 数据存储的文章&#xff0c;这次机会来了。 先从小出着手吧&#xff0c;CheckBoxPreference 小巧可爱&#xff0c;使用简单。但是使用的时候&#xff0c;还是需要注意…

CheckBoxPreference组件

CheckBoxPreference 选中为true 取消选中为false 它的值会以boolean的形式储存在SharedPreferences中。 <?xml version"1.0" encoding"utf-8"?><PreferenceScreenxmlns:android"http://schemas.android.com/apk/res/android"><…

Android 自定义CheckBoxPreference的CheckBox复选框

在使用Android的Preference&#xff0c;有时为了让我们的界面更加美观&#xff0c;我们会自定义自己的Preference。今天就主要说一下怎样自定义CheckBoxPreference的CheckBox按钮。 系统默认CheckBoxPreference的CheckBox样式 自定义后的CheckBox样式 其实&#xff0c;关键的一…

最好用的手机端C/C++语言编程软件, 不要说没电脑就不学编程了!

今天介绍一个软件—C编译器(c4droid)&#xff0c;可以直接编辑运行C/C程序&#xff0c;代码高亮、语法检查&#xff0c;使用起来非常不错&#xff0c;下面我简单介绍一下这个软件的安装和使用&#xff1a; 安装C编译器&#xff0c;这个直接在手机应用中搜索就行&#xff0c;如…

最新版手机端C/C++语言编程的软件

今天介绍一个软件—C编译器(c4droid)&#xff0c;可以直接编辑运行C/C程序&#xff0c;代码高亮、语法检查&#xff0c;使用起来非常不错&#xff0c;下面我简单介绍一下这个软件的安装和使用&#xff1a; 安装C编译器&#xff0c;这个直接在手机应用中搜索就行&#xff0c;如…

C语言编程工具软件推荐

c语言编程软件适于编写系统软件&#xff0c;是学习编程的同学们的必备软件。c语言一种非常强大的计算机语言&#xff0c;应用非常广泛&#xff0c;不仅仅是在软件开发上&#xff0c;而且各类科研都会用到c语言。今天小编给大家汇总下C语言的编程工具 中国有句古话叫做“工欲善其…

c语言编程软件有哪些 Win7下用哪种C语言编译器

C语言是一门历史很长的编程语言&#xff0c;其编译器和开发工具也多种多样&#xff0c;其开发工具包括编译器&#xff0c;现举几个开发工具供大家选择&#xff0c;当然也要根据自己的操作系统来选择适合自己的开发工具 好多刚开始接触c语言的朋友都想知道用上面软件开发c语言…

手机上可以编程看代码的软件

以后大家会在路上看到很多人拿着手机,他不是在聊天,他有可能是运维工程师、也可能是算法开发、也可能是java开发,还可能是客户端开发,也可能是前端开发... 让你编程一直在路上,这到底是程序员的福音,还是码农的枷锁。 粉丝提问: 这里介绍几款可以在手机上编程的app,分…