Java 笔试选择题知识点记录【al·gj-0904】

可恶,从第一题就开始错!

设计模式

减少了对象的创建,但提高了系统复杂度,且分离出外部状态和内部状态的设计模式是?享元模式

  • 享元模式在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

年月日时分秒的表示方式

yyyy-MM-dd-HH-mm-ss。 其中y是年份,M是月份,d是日期,H是小时,m是分钟,s是秒数。

本地 DNS 服务器的缓存作用

本地 DNS 服务器的缓存作用是提高域名解析速度和减轻网络流量负担的关键之一。

本地DNS一般是指你电脑上网时IPv4或者IPv6设置中填写的那个DNS。这个有可能是手工指定的或者是DHCP自动分配的。

在通过浏览器缓存及host文件都无法解析域名的情况下,OS会将这个域名发送给计算机网络配置中DNS对应的地址(LDNS),即本地区的域名服务器。这个DNS通常都提供给你本地互联网接入的一个DNS解析服务,假如是在学校接入的互联网,那么这个本地区的域名服务器基本上是在学校中;如果是在小区接入的互联网,那么这个本地区的域名服务器就是提供给你接入互联网的应用服务上,也就是电信或联通。--《深入分析java web 技术内幕》 许令波著

二次探测再散列处理哈希冲突

  • 线性探测再散列:产生哈希冲突后顺着表往后放,直到没有冲突
  • 二次探测再散列:采用开放定址法处理冲突中的二次探测再散列(也即是题目中的二元探测法),则哈希函数变为 Hash(key) = (Hash(key) + d) % MOD,其中MOD=数组的长度,d = 1^2, -1^2, 2^2, -2^2, 3^2,……,再开始计算。

Linux 统计 test 文件行数

选项如下:

  • sed -n '$=' test ✅
  • grep -n "" test | awk -F:'{print}' | tail -n | awk -F:{..} ✅
  • awk '{print NR}' test ❌awk 'END {print NR}' test
  • cat test | wc -l ✅
# 使用 sed 统计文件行数
lines=$(sed -n '$=' test)

# 使用 grep 统计文件行数
lines=$(grep -n "" test | wc -l)

# 使用 awk 统计文件行数
lines=$(awk 'END {print NR}' test)

# 使用 cat 和 wc 统计文件行数
lines=$(cat test | wc -l)

echo "文件 test 中的行数为: $lines"

操作系统作业

提交时间 0,1,2,5,7;运行时间分别是 2,3,4,2,1。问总周转时间是多少?

周转时间是指程序从进入系统到完成的时间总量

按照后到先来的优先度调度方式,首先按照提交时间对作业进行排序,然后按照后到先来的原则执行。下面是对每个作业的调度和总周转时间的计算:

  1. 第一个作业提交时间为 0,运行时间为 2,所以它在时间 0 到 2 之间运行,总周转时间为 2 - 0 = 2。
  2. 第二个作业提交时间为 1,运行时间为 3,但在时间 2 到 4 之间它才开始运行,总周转时间为 4 - 1 = 3。
  3. 第三个作业提交时间为 2,运行时间为 4,但在时间 4 到 8 之间它才开始运行,总周转时间为 8 - 2 = 6。
  4. 第四个作业提交时间为 5,运行时间为 2,它在时间 8 到 10 之间运行,总周转时间为 10 - 5 = 5。
  5. 第五个作业提交时间为 7,运行时间为 1,它在时间 10 到 11 之间运行,总周转时间为 11 - 7 = 4。

现在,我们可以计算总周转时间的平均值:

(2 + 3 + 6 + 5 + 4) = 20

MySQL column 的名字

select '图书数量'=sum(number) ❌ 不可以用等于号来命名

分页存储管理中,页表的级数

用户程序只有在内存中才可以执行,那么如何在内存中给程序分配空间呢?

  • 连续分配存储管理方式:即用户程序“整个儿”地放入内存空间中。容易产生大量的内部碎片(分配给某进程的内部区域中没用上的区域)和外部碎片(内存中某些分区由于太小而无法再被利用)
  • 非连续分配管理方式:将用户程序分成若干个相同大小的部分,称为“页”或者“页面”(一定注意页和页面的说法是针对程序来说的),相应地,将内存空间也分为相同大小(与上述的“页”和“页面”大小相同)的块,称为物理块或页框。

分页存储管理中的页表级数取决于系统的内存大小和页面大小。页表级数表示了在将虚拟地址转换为物理地址时需要经过多少级页表。

一般来说,一个页表级数的计算可以使用以下公式:页表级数 = log2(物理内存大小 / 页面大小)

其中,页表级数是要经过的页表级数,物理内存大小是系统中的物理内存总量,页面大小是操作系统中定义的每个页面的大小。

举例来说,如果系统有1GB的物理内存,每个页面大小为4KB,那么页表级数可以计算如下:

页表级数 = log2(1GB / 4KB) = log2(2^30 / 2^12) = log2(2^18) = 18

在这种情况下,需要经过18级页表才能完成虚拟地址到物理地址的转换。不过,请注意,实际的页表级数可能会因操作系统和硬件架构的不同而有所变化。

优缺点

页表级数的优缺点主要取决于系统的设计和使用情况。以下是页表级数的一些优点和缺点:

优点:

  • 灵活性:页表级数可以根据系统的内存大小和页面大小进行调整,使其适应不同的硬件配置和内存需求。
  • 虚拟内存支持:通过页表级数,操作系统可以有效地实现虚拟内存,将物理内存和虚拟内存进行映射,从而提供更大的内存地址空间。
  • 内存保护:通过页表级数,操作系统可以实现内存保护机制,防止进程之间或内核与用户空间之间的越界访问。
  • 内存共享:页表级数也使得多个进程可以共享内存,以提高效率和减少资源浪费。

缺点:

  • 复杂性:更多的页表级数意味着更多的页表层次和更多的页表项,这会增加地址转换的复杂性和开销,导致性能下降。
  • 内存开销:每个页表级别都需要额外的内存来存储页表,因此较多的页表级数会增加内存开销。
  • 访问延迟:每增加一级页表,地址转换需要多一次内存访问,这会导致访问延迟增加。
  • 硬件要求:更多的页表级数可能需要更复杂的硬件支持,这可能会增加系统的成本和复杂性。

综合来看,页表级数的优点包括灵活性和功能性,但随之而来的缺点包括复杂性、内存开销和访问延迟。因此,在设计操作系统和存储管理时,需要权衡这些因素,以满足特定系统的需求和性能要求。

SOLID 原则

  • S 单一职责原则
  • O 开闭原则
  • L 里氏替换原则
  • I 接口隔离原则
  • D 依赖倒置原则

HTTPS中,在SSL/TLS握手阶段伪造证书、中断传输的方式?

这题不知道选啥

  • DNS 劫持:攻击者劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致用户对该域名地址进行访问的时候,由原来的IP地址转入到修改后的IP地址。结果就是让正确的网址不能解析或者是被解析到另一个网址的IP,实现获取用户资料或者破坏原有网址正常服务的目的。
  • DNS 污染:又称域名服务器缓存投毒(DNS cache poisoning),它和DNS劫持的不同之处,在于污染针对的是DNS缓存,是在查询信息到达目标DNS服务器前,经过的节点上做手脚,而劫持是DNS服务器中记录的是错误的内容。
  • 举例:对于GFW来说,DNS劫持用于国内服务器,因为可以修改服务器中的DNS记录,而对于国外服务器GFW无法更改其内容,故采用DNS污染的方式篡改用户收到的信息。其中的过程是,当你向国外DNS服务器查询DNS记录时,这些流量走到国际出口带宽的时候会遇到GFW的关键字审查,如果上了黑名单,GFW会立即向你返回一个虚假的DNS记录。因为DNS走的是UDP协议,加上DNS查询结果只认最快返回的,所以一定是先收到了GFW给你返回的虚假DNS记录,就算马上你收到了真正的来自国外DNS的回复,也会被你的系统无视掉。这种攻击也被称为中间人攻击。
  • TCP 劫持:由于 TCP 协议并没有对 TCP 的传输包进行验证,所以在我们知道一个 TCP 连接中的 seq 和 ack 的信息后就可以很容易的伪造传输包,假装任意一方与另一方进行通信,我们将这一过程称为 TCP 会话劫持(TCP Session Hijacking)
  • CSRF 攻击:跨站点请求伪造(Cross Site Request Forgery)又被称作 CSRF,是恶意站点或程序通过已认证用户的浏览器在受信任站点上执行非正常操作。可进行的恶意操作局限于已在网站通过身份验证的用户的功能。

栈段从高地址向低地址生长

计算机内存分了代码段(.text段)、初始化的数据段(.data段)、未初始化的数据段(.bss段)、堆空间(heap)、栈空间(stack)和命令行参数和环境变量区域。

程序计数器(Program Counter,简称PC)的缺省指向0地址,计算机开机后从程序计数器指向的地址开始执行程序,每执行完一条指令后, 程序计数器自动加1。

因此很自然的,代码段从低地址区间开始加载,向高地址区间扩展;

heap从低地址向高地址扩展,做内存管理相对要简单些,为了避免栈空间和代码段冲突,最大利用地址空间,很自然的,我们会选择把栈底设置在高地址区间,然后让栈向下增长。

参考:https://blog.csdn.net/Albert52856/article/details/119836153

笔试

第1题:用的是 set 去重,用 left 和 right 指针做滑动窗口。

第2题:1. 必须有 0;2. 计算 sum,如果 sum 模 3 余 1,那就删掉一个模 3 余 1 的最小的数;3. 如果 sum 模 3 余 2,那就删掉一个模 3 余 2 的最小的数,或者删掉两个模 3 余 1 的最小的数。

第3题:没做出来,主要想法是用 dp 只计算最后一个数的因子相关的数。

Java 后端笔经 文章被收录于专栏

Java 后端笔试经验

全部评论
选择题基本靠蒙
点赞 回复 分享
发布于 2023-09-04 18:33 陕西

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务