brief note-2022

本文涵盖了Java编程的基础知识,包括设计模式、软件开发模型、数据库操作、并发处理、异常处理、内存管理和垃圾回收。深入讨论了工厂模式、单例模式、行为型模式如状态模式和访问者模式,以及数据库的索引、分区和查询优化。此外,还介绍了Web开发中的Spring框架、MyBatis工作原理以及Git操作。内容还包括线程池、JVM内存模型、反射机制、文件系统、HTTP协议、网络编程和数据结构等。文章还涉及了分布式系统、数据库事务、JVM调优和操作系统原理,以及安全性和性能优化等多个方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 行为模式包括:

策略模式,模板方法,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式

2. 工厂模式包括:

简单工厂,工厂方法模式,抽象工厂

3. WEB 请求方法:

GET, POST, HEAD

4. 硬链接

https://www.nowcoder.com/questionTerminal/92518d9942354ee0801e1cf440e118bc

若文件f1的硬链接为f2,两个进程分别打开f1和f2,获得对应的文件描述符为fd1和fd2,则下列叙述中,正确的是

​ Ⅰ.f1和f2的读写指针位置保持相同

​ Ⅱ.f1和f2共享同一个内存索引结点

​ Ⅲ.fd1和fd2分别指向各自的用户打开文件表中的一项

硬链接通过索引节点连接,一个文件在物理存储器上有一个索引节点号

存在多个文件名指向同一个索引节点

两个进程各自维护自己的文件描述符

5. 线性结构:

线性结构:线性表,栈,队列,双队列,数组,串

非线性结构:二维数组,多维数组,广义表,树,图

串:零个或多个字符组成的有限序列

线性表:n 个具有相同特性的数据元素的有限序列

栈:限定仅在表头进行插入和删除操作的线性表

队列:仅允许在表的前端删除,后端插入

双端队列:两端均可进行入队和出队操作的队列

6. 某文件系统的簇和磁盘扇区大小

分别为 1 KB 和 512 B。若一个文件的大小为 1026B,则系统分配给该文件的磁盘空间大小是

  • 1026 B
    
  • 1536 B
    
  • 1538 B
    
  • 2048 B
    

​ 绝大多数操作系统为改善磁盘访问时间,以簇为单位进行空间分配,所以至少需要2KB,即2048B

​ 为什么至少需要 2 K ?

7. Mybatis 的 xml 映射文件中,不同 xml 映射文件,id 是否可重复?

若配置了 namespace,则 id 可重复

8. Spring 装配 Bean 的方式

在 XML 文件中显式配置

在 Java 接口和类中实现配置

隐式 Bean 的发现机制和自动装配原则

9. 基本软件开发模型:

8 种基本软件开发模型:选择哪一种? - 腾讯云开发者社区-腾讯云 (tencent.com)

瀑布模型:任务和阶段按严格顺序一个接一个地完成

V 型,迭代和增量模型,螺旋模型,大爆炸模型,敏捷模型,原型模型,Devops

10. Devops 的三大原则

  • 基础设施即代码

  • 持续交付

  • 协同工作

11. Redis 事务(一次执行多条命令)

所以 redis 一次执行一条命令有误

12. 哪个特性功能不用于数据查询优化?

  • 并行查询
  • 索引
  • 【x】视图
  • 分区

视图并不在数据库中以存储的数据值集形式存在,仅仅是一个给用户展示的逻辑虚表,其在数据库中底层还是以完整的数据存储

数据库查询优化策略

分区:避免全表扫描,分区形式,找到指定区域来避免全表查询

索引:数据排序,提高查询效率

并行查询:从 OS 和 CPU 上给予多线程多核操作

13.jekins 构建的几种方式

  • 触发式构建
  • 参数化构建
  • 定时构建

14. 同一进程中,不同线程,能共享的和不能共享的?

线程共享:进程代码段,进程的公有资源(全局变量),进程打开的文件描述符,消息队列,信号的处理器,进程的当前目录,进程用户 ID,进程组ID

进程独占:线程 ID,寄存器组的值,用户栈,内核栈,错误返回码,信号的信号屏蔽码,线程优先级

15. servlet 生命周期

加载,实例化,服务,销毁

16. spring 事务管理

  • 声明式事务,只需通过XML或注解进行配置,即可实现对事务的管理。
  • 编程式事务,需要通过TransactionTemplate组件执行SQL,达到管理事务的目的。
  • [×]声明式事务优于编程式事务,应该一律采用声明式事务

17. 常用的 servlet 包名称

 [常用的servlet包的名称是?__牛客网 (nowcoder.com)](https://www.nowcoder.com/questionTerminal/96042b5ee9194445a7728f43f72244df) 

- ```
  java.servlet
  ```

- ```
  javax.servlet
  ```

- ```
  servlet.http
  ```

- ```
  javax.servlet.http
  ```

   B D

18. 合法的抽象类的定义

abstract class Animal{abstract  void growl();}

① 类修饰符应在 class 关键字之前

② 抽象方法不能有方法体

19. switch 括号内表达式的类型:

JDK 1.7 之前:整数表达式【int, Integer 包装类,可隐式转换为 int 的 byte, short, char 等】和枚举常量

JDK 1.7 之后:String

注意不能是 long :原因是 long 转换为 int 将失去精度,导致数据不准确

20. 重写方法抛出异常的规则

重写:子类对父类的允许访问的方法的实现过程重新编写,返回值和形参不能改变

重写抛异常:不能抛出比父类申明更加宽泛的异常

异常的继承体系:父类 Exception 包括运行时异常 RuntimeException,编译异常【IOException,SQLException】

21. 逻辑表达式:&& 与 &, || 与 | 的区别

问题:连接表达式方面的区别

& 位运算符,逻辑运算符;

&& 要求两侧必须是表达式

区别在于,& 会计算出两侧表达式的值再给出结果,而 && 计算出左侧表达式不满足条件后就不再计算右侧

22. 虚拟机是解释器吗?

​ 尽管不是所有的 JVM 都采用 解释器与编译器 并存的架构,许多主流的商用虚拟机都同时包含解释器和编译器

23. abstract, final, static, private 是否能一起使用?

abstract 能用来修饰什么?类,方法,属性

① abstract 与 private :不能联用

private 修饰成员变量,成员方法:若用 abstract 修饰方法,则子类必须要实现该方法,

而private 修饰的方法只能在本类中被使用,子类不能继承

② abstract 与 final :不能联用

final 修饰类,方法,变量,主要还是方法,final 修饰后的方法防止任何继承类修改其实现

③ abstract 与 static :不能联用

static 修饰 方法,变量

abstract 修饰的方法需要子类实现通过对象调用,而 static 修饰的方法属于类可以直接调用

24. throw 和 throws 关键字

  • throws 用在方法上,throw 用在方法内,抛出一个具体的异常类型
  • throws 不显式捕获异常,可由系统自动将所有捕获异常信息抛给上级
  • throw 需要用户自己捕获相关的异常

25. 静态优先级是在创建进程时确定的,

确定后在整个运行期间不再改变

26. 适配器模式:结构型设计模式

使原本因接口不匹配导致无法在一起工作的两个类能一起工作

27. 状态模式:行为型模式

允许对象在内部状态改变时改变它的行为,也称策略模式,可使程序更有弹性

28. 里氏替换原则:

父类出现的地方,把父类替换成子类,系统的功能应该不能受到影响

29. ORDER BY 默认是 ASC 升序

降序后面加 DESC

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

30. GIT 对象模型

blob :存储文件内容

tree :目录,表示内容间的目录层次关系

commit :commit 对象指向一个 tree 对象,标记项目某个特定时间点的状态

tag :包括对象名(sha1签名),对象类型,标签名,标签创建人,签名消息…
img

31. 数据库锁的相容性描述?

32. 单例模式,使用枚举方式,不会被反射破坏

为什么要用枚举实现单例模式(避免反射、序列化问题) - 李子沫 - 博客园 (cnblogs.com)

反射在通过 newInstance 创建对象时,会检查该类是否 ENUM 修饰,若是则抛出异常,反射失败

33. 关于 Java 反射的描述,错误的是?

  • Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
    
    
  • 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
    
    
  • Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
    
    
  • Java反射机制提供了字节码修改的技术,可以动态的修剪一个
    
    

    只有 B 正确

34. InputStreamReader 继承了 Reader 字符流,

本身采用 适配器设计模式,把字节流 InputStream 类型转换为 Reader 字符流类型

35. git 合并代码

  • git pull --rebase

  • git merge

  • git cherry-pick

补充:git blame 逐行显示文件

36. 下列有关 servlet 生命周期不正确的是

  • 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
    
    
  • 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
    
    
  • 在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
    
    
  • destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法
    
    

    创建 Servlet 实例由 Servlet 容器完成,创建 Servlet 实例是在初始化方法 init() 之前

37. mybatis 的工作原理及核心流程

mybatis 底层封装了 JDBC 的 API,核心流程与 JDBC 使用步骤一脉相承

JDBC有四个核心对象

  • DriverManager,用于注册数据库连接
  • Connection,与数据库连接对象
  • Statement/PrepareStatement,操作数据库SQL语句的对象
  • ResultSet,结果集或一张虚拟表

MyBatis也有四大核心对象

  • SqlSession对象,该对象中包含了执行SQL语句的所有方法,类似于JDBC里面的Connection
  • Executor接口,根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护,类似于JDBC里面的Statement/PrepareStatement
  • MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息
  • ResultHandler对象,用于对返回的结果进行处理,可以自定义返回类型,得到想要的数据格式或类型

MyBatis 工作原理

mybatis.png

38. 创建型模式:

抽象工厂模式,工厂方法模式,单例模式

39. MySQL 全文搜索语法,判断是否包含某列

  1. 添加全文索引 alter table table_name add FULLTEXT INDEX index_name WITH
ALTER TABLE articles ADD FULLTEXT INDEX title_body_index (title,body) WITH PARSER ngram;

  1. 判断是否包含某列 match xxx against xxx
mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('精神' IN NATURAL LANGUAGE MODE);

40. 查询所有key:keys*

41. 进程的四个基本特征:

动态性,并发性,独立性,异步性

42. 关于反射的说法

  • class.forname 获取编译后的 class 对象
  • newInstance 调用空参构造方法构造,若类中没有空参构造会报错
  • getDeclaredMethods 获取类中所有的方法列表,不包含父类中的方法
  • method.invoke(obj,args) 调用私有方法需要暴力反射

43. Elasticcsearch 是什么

分布式存储,搜索,分析引擎

44. MySQL 执行计划:

Explain Plan

45. ASCII 码:

0 - 9 【48 - 57】,A - Z 【65 - 90】,a - z 【97 - 122】

46. JVM 如何判断对象可以被回收?

引用计数,可达性分析

47. 常见的五种约束

  • 主键约束

  • 外键约束

  • 唯一约束

  • 默认约束

  • 检查约束

48. 关于递归说法

关于递归法的说法不正确的是(D )

  • 程序结构更简洁
    
    
  • 占用CPU的处理时间更多
    
    
  • 要消耗大量的内存空间,程序执行慢,甚至无法执行
    
    
  • 递归法比递推法的执行效率更
    
    

49. SQL 语言具有的功能

DDL 数据定义:SQL 模式,基本表,视图和索引

DML 数据操纵:数据查询和数据更新

数据控制:对基本表和视图的授权,完整性规则描述,事务控制

50. JDK 附带工具:

jps

jstat

jmap

51. 对称加密算法:

对称加密:DES, 3DES, AES

非对称加密:RSA, DSA

散列算法:SHA-1, MD5

52. HTTP 响应包括:

状态行:HTTP 版本,状态码

响应首部字段

响应内容实体

53. URL 地址中的编码?

URL 编码是浏览器发送数据给服务器时使用的编码,通常附加在 URL 的参数部分

https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87

使用 URL 编码的原因,兼容性考虑,很多服务器只识别 ASCII 字符

若是其他字符,先转换为 UTF-8 编码,然后对每个字节以 %XX 表示

54. 开发中使用泛型取代非泛型的数据类型(例如ArrayList 取代 ArrayList) 程序的运行时性能会变得更好?

使用泛型的好处:

类型安全

消除类型转换

注意:泛型只是提高了数据传输安全性,并没有改变程序运行的性能

55. JSP 页面中,保存数据的范围由小到大依次是:

pageContext, request, session, appliaction

56. 一致性哈希:

将 存储节点 和 数据 都映射到一个首尾相连的哈希环上,增加或移除一个节点,只影响该节点在哈希环上顺时针相邻的后继节点,其他数据不会受到影响

57. 每 5 分钟运行一次 crond 任务 exam ,下面哪项正确?

*/5 * * * * exam

链接:https://ac.nowcoder.com/questionTerminal/b3d3dafd6a55486880c6a339ff6547c0?orderByHotValue=1&mutiTagIds=134&page=17&onlyReference=false来源:牛客网

*  *  *  *  *  command
 分 时 日 月 周 命令
第1列表示分钟159 每分钟用*或者 */1表示
第2列表示小时1230表示0点)
第3列表示日期1314列表示月份1125列标识号星期060表示星期天)
第6列要运行的命令

58. MD5?

MD5 Message - Digest Algorithm 5 信息-摘要算法,用于确保信息传输完整一致

59. 线程池的作用?

降低资源消耗

提高响应速度

提供附加功能,例如定时,延时执行某些线程

60. 防火墙提供的功能

IP 地址欺骗防护

NAT

访问控制

61. MYSQL 存储过程参数

IN :默认模式,调用程序必须将参数传递给调用程序

OUT :将其更改后新值传递回调用程序

INOUT :调用程序可传递参数,并且存储过程可修改 INOUT 参数并将新值传递回调用程序

62. HTTP 1.0 使用短连接

63. 触发 Full GC 条件

调用 System.gc

老年代空间不足

永久代空间不足

gc 担保失败

64. SQL 删除表数据

① 删除指定数据

DELETE FROM table_name WHERE XXX = XXX;

② 删除全表数据

DELETE FROM table_name;

65. Java 程序输出 goog and gbc 而不是 test ok

public class Example{
    String str = new String("good");
    char[ ] ch = { 'a' , 'b' , 'c' };
    public static void main(String args[]){
        Example ex = new Example();
        ex.change(ex.str,ex.ch); // 调用栈上的 str
        System.out.print(ex.str + " and ");// ex.str 调用成员变量
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[ ]){
        str = "test ok"; // 调用栈上的 str 指向 "test ok"
        ch[0] = 'g';
    }
}

66. MySQL 中,between 包含了 value1 和 value2 边界值

67. POSIX 互斥锁相关的函数

  • int pthread_mutex_destroy(pthread_mutex_t* mutex)
    
    
  • int pthread_mutex_lock(pthread_mutex_t* mutex)
    
    
  • int pthread_mutex_trylock(pthread_mutex_t* mutex)
    
    
  • int pthread_mutex_create(pthread_mutex_t* mutex)
    
    

​ D 错误

68. 二层交换机能识别什么地址?

二层交换机工作在数据链路层,可识别 MAC 地址

69. Linux 文件权限

-rwxr-xr-x为例:

三段分别用于区分:所有者,用户组,其他用户

70. java.lang.Class.getDeclaredMethod()

返回一个 Method 对象,反映此 Class 对象所表示的类或接口的指定已声明方法

71. C类 IP 地址

C类 IP 地址:3 字节网络地址 和 1 字节主机地址

72. JDK, JRE, JVM

JVM JRE 的一部分,是 Java 实现跨平台的最核心部分

JRE 是 Java 运行环境,并不是开发环境,没包含任何开发工具

JDK Java 开发工具包,包括 JRE,Java 工具和 Java 基础类库

补充:JDK 是面向开发者的,JRE 是面向使用 Java 程序的用户

大数据必学Java基础(九):JDK,JRE,JVM的区别 - 腾讯云开发者社区-腾讯云 (tencent.com)

73. 缺页率

# 题目
已知页面走向为1、2、1、3、1、2、4、2、1、3、4,且开始执行时主存中没有页面, 只给该作业分配 2 个物理块
1. 当采用FIFO页面淘汰算法时缺页率为多少?
2. 假定现有一种淘汰算法,该算法淘汰页面的策略为当需要淘汰页面时,就把刚使用过的页面作为淘汰对象,试问就相同的页面走向,缺页率又为多少?

注意这里是先进先出

也即:

1、2、1、3、1…

3、2、1 理解为队列的结构,从首部插入,当 3 进入时,1 被移除队列,则再次请求 1 时为 1、3 【2 移出】

也即最后的顺序是:4,3,1,4,2,1,3,2,1均缺页

自定义淘汰算法:

页面:1、2、1、3、1、2、4、2、1、3、4

块一:1、1、1、3、1、1、4、4、1、3、4

块二:0、2、2、2、2、2、2、2、2、2、2

缺页:√、√、×、√、√、×、√、×、√、√、√

74. NP 问题 【最大连续子序列乘积】

例如:完全子图,图着色,旅行商 TSP

# 题目
下列不属于 NP 问题的是:
A. 精确覆盖问题
B. 背包问题
C. 0-1 整数规划问题
D. 最大连续子序列乘积 [x]

75. MySQL 游标

游标:cursor 存储在MySQL上的数据库查询,是被 select 语句检索出来的结果集

存储了游标后,应用程序可根据需要滚动或浏览其中的数据

游标的基本使用:

create procedure processorders()
begin
# 定义游标名为 ordernumbers 的游标

	declare ordernumbers CURSOR
	for
	select order_num from orders;
	
end;

# 打开游标
open ordernumbers;


# 关闭游标
close ordernumbers;

76. 系统管理员 vi 文件默认访问权限

① 三个一组:1-3 文件所有者权限,4-6 同组用户权限,7-9 其他用户权限

② 每组数字含义:顺序 rwx 分别对应 4 2 1

77. 长度为 11 的有序表进行二分查找判定树,求等概率查找平均查找长度

二分查找,等概率查找时,查找平均查找长度约为log2(n + 1) - 1

78. 建造者模式 也可称为:生成器模式

生成器设计模式结构

主要分为:

Builder :抽象构造者,定义了构造对象的方法

Concretebuilder :具体建造者,实现 Builder 接口,提供构造对象的具体实现

Director :指挥者,客户端通过指挥者调用建造者的相关方法,指定构建顺序

Productor :最终生成的对象,通过 Concretebuilder生成

79. 建造者模式的使用场景

建造者模式,JDK 使用场景:

JDK中使用

应该是站在 接口,实现类,这些层面上分析

Appendable 定义了 append() 方法

实现类:AbstractStringBuilder 提供了多种形式的 append(…) 方法

ASB 的实现类,StringBuffer 和 StringBuilder 又对其父类的 append() 进行了封装实现

最后用户调用的时候,通过 sb.append(xxx) 括号里面的内容是可以任意指定的

@Test
public void test(){
    StringBuilder sb = new StringBuilder();
    sb.append("1");
    sb.append(1);
    sb.append('1');
    sb.append(01);
    sb.append(sb);
}

例如上面的,用户只需要调用 append 即可

80. String 转化为 ArrayList 的几种方式?

@Test
    public void test1(){
        String[] s = {"1","2","3","4","5","6"};
        // ① Arrays.asList(s) + new ArrayList<>(list)
        List<String> list = Arrays.asList(s);
//        System.out.println(list.add("7")); 报错需要进一步转换
        ArrayList<String> arrayList = new ArrayList<>(list);
        arrayList.add("7");

        // ② 遍历 s,添加到 ArrayList 中
        List<String> arrayList1 = new ArrayList<>(s.length);
        for(String str : s){
            arrayList1.add(str);
        }

        // ③ 借助 Collections
        List<String> arrayList2 = new ArrayList<>();
        boolean b = Collections.addAll(arrayList2, s);
    }

81. 首次适应算法,最佳适算法,最差适应算法

首次适应算法:从空闲分区表的第一个标目起查找,把最先能满足要求的空闲区分配给作业,减少查找时间

最佳适应算法:从全部空闲区中找出能满足作业要求,且大小最小的空闲分区,使碎片尽量小

最差适应算法:从全部空闲区中找出能满足作业要求,且大小最大的空闲分区,使链表节点大小趋于均匀

82. 查看线程 CPU 利用率

top -H -p pid

83. 下列哪个地址为保留地址,主要用于Internet试验和开发( )

127.0.0.1 回送地址,检测本地 TCP/IP 协议是否可用

E 类地址范围:240.0.0.0 - 255.255.255.255

其中 240.0.0.0-255.255.255.254 作为保留地址,用于 Internet 试验和开发

84. 以Person类为例,下列哪些方法可以获取class对象( )

① 通过对象.getClass()

Person p = new Person();
Class c = p.getClass();

② 通过类.Class

Class c = Person.Class;

③ 通过 Class.forName(“类的全限定名”)

Class c = Class.forName("cn.test.Person")

85. 已知 JVM 配置参数求 eden 区的最终分配大小

-Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio = 3

参数解释:

Xmn 新生代内存,

-XX:SurvivorRatio = n 年轻代中 Eden 区与两个 Survivor 区的比值,3 表示:Eden :Survivor = 3 : 2

则计算方式为:Xmn * 3 / (3 + 2) = 500 * 3 / (3 + 2) = 300

补充:

在这里插入图片描述

86. 有关 JAVA 异常类的描述

A. 异常的继承结构:基类 Throwable,子类 Error 和 Exception,

RuntimeException 和 IOException 继承 Exception

B. 非 RuntimeException 一般是外部错误(非 Error),其必须被 try{} catch 语句块所捕获

C. Error 类体系描述了 Java 运行系统中得内部错误以及资源耗尽的情形,Error 不需要捕捉

D. RuntimeException 运行时异常,不需要处理,由虚拟机接管;例如 错误的类型转换,数据越界访问,访问空指针等

87. java中将ISO8859-1字符串转成GB2312编码

String gb2312 = new String("hell0".getBytes("ISO8859-1"), "GB2312");

88. 关于 final 关键字说法错误的是:

A. final 可修饰类,方法和属性,不可修饰接口和抽象类,

接口一般使用 public 修饰,抽象类可被 public, default, 修饰

B. final 修饰的类不能被继承

C. final 修饰方法,方法不能被重写

89. 下面哪些 JVM 垃圾回收方式采用 复制 算法回收?

新生代串行收集器

新生代并行回收收集器

Serial New :针对新生代的收集器,采用复制算法

Parallel New :新生代采用复制算法,老年代采用标记整理

Parallel Scavenge :针对新生成代,采用复制算法

Serial Old :新生代-复制,老年代-标记整理

Parallel Old :针对老年代,标记整理

CMS :标记清理

G1 :整体 标记整理,局部采用 复制

总结:新生代基本采用复制算法,老年代标记整理,CMS 采用标记清理

90. System.gc()

System.gc() 和 finalize() 之间的关系:finalize() 是 JVM 调用的,JVM 感到内存不够时才会执行 finalize()

也即调用 System.gc() 不一定会使 JVM 立即调用 finalize()

public class Tony {
    public void play(){
        System.out.println("play-");
    }
    public void finalize(){
        System.out.println("clean-");
    }

    public static void main(String[] args) {
        Tony t1 = new Tony();
        t1.play();
        System.gc();
        Tony t2 = new Tony();
        t2.play();
    }
}
// play-play-

91. 单例模式的使用场景

例模式的场景:

日志类:所有的应用程序组件中提供全局日志访问点,

配置类:将服务器的配置信息存放在一个文件中,配置数据由一个

工厂类:

共享模式访问资源的类:

Spring 中创建的 Bean 实例默认都是单例模式存在的

92. Huffman 树的带权路径长度:节点权值 * 根节点到节点的分支数

w=(15,3,14,2,6,9,16,17)
在这里插入图片描述

计算方法为:先构造出 haffman 树,然后用节点的值 * 节点所在的层数,例如上述 16, 17 位于第二层

需要注意的是,添加的节点不计算在内,例如上述深蓝色的点

小结论:添加的点 = 原有点 - 1

93. SQL 添加外键约束

外键的作用:建立主表与从表的关联关系,其中一个表发生变化,另一个表也发生变化

ALTER TABLE table_name ADD CONSTRAINT 外键名 FOREIGN KEY (列名) REFERENCES 主表名 (列名)

94. 已知主机号和掩码,求广播地址

子网掩码 255.255.252.0,即 11111111.11111111.11111100.00000000了,主机位为连续的 0,共 10 位

主机 180.80.77.55,广播地址【主机位全 1】为 180.80.010011[11.11111111]180.80.79.255

分析

252 的表示:252 = 255 - 3 = 11111111 - 11 = 11111100
256:1,0000,0000
255:1111,1111
252:1111,1100
主机号:连续 1 后面的0,即 00.00000000
广播号:主机号全1,即 11.11111111

95. 求进程数,使得系统不会发生死锁

系统中有 11 台打印机,N 个进程共享打印机资源,每个进程要求 3 台。当 N 的取值不超过 ?时,系统不会发生死锁

解答:当每个进程都获得了 2 台打印机且系统中剩余打印机不少于 1 台时,系统不会发生死锁

即 11 - 2N >= 1, 即 N <= 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值