Java 笔试选择题知识点记录【elm-0821】

中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

举一个用户在聊天室聊天的简单例子。

原始版本
public class Main{
  public static void main(String[] args) {
	User lucy = new User();
	User lily = new User();

	lucy.send("hello, I am Lucy", lily);
	lily.send("hello, I am Lily", lucy);
  }
}

当群聊的人数增多,上面第 6 行和第 7 行需要指定对象的实现方式会变得非常麻烦,每次都需要确定全部消息发送对象。

中介者模式版本

新建 ChatRoom 类,在 User 类中调用 ChatRoom。

public class ChatRoom {
   public static void showMessage(User user, String message){
      System.out.println(new Date().toString() + " [" + user.getName() +"] : " + message);
   }
}

public class User {
  public void send(String message){
      ChatRoom.showMessage(this,message);
   }
}

public class Main{
  public static void main(String[] args) {
	User lucy = new User();
	User lily = new User();

	lucy.send("hello, I am Lucy");
	lily.send("hello, I am Lily");
  }
}

度数为3的树

结点拥有的子树个数称为结点的度,比如结点①的度为4,结点②的度为0,结点③的度为3。

对于树而言,树的度为树内各结点最大的度,从图中可知,结点①的度是最大的,为4,所以这棵树的度为4。

进程:计算时间与IO时间决定优先级

举个例子:

正确答案是 P3>P2>p1。

原因是同一时刻,只能执行一个 I/O 操作,如果已经有 I/O 了,那新进程的 I/O 将要延时。计算进程会占用大量的cpu时间,而i/o大的会占用较少的cpu资源,相当于短作业,所以应该优先权更高。

abcde出现的次数分别是25 22 15 7 16,根据哈夫曼编码,求 WPL

首先构造哈夫曼树。将出现次数由小到大依次排序,

d c e b a

7 15 16 22 25

选择出现次数最小的两个节点 d 和 c 构成一颗子树,出现次数加起来是 22。因为 b 和 dc 出现的次数都是 22,所以接下来有两种方式,第一种是选择 e 和 b 构成子树,第二种是选择 e 和 dc 构成子树。这里以 e b 作为子树来举例

e b dc a

16 22 22 25

接下来就是

dc a eb

22 25 38

接下来就是

eb dca

38 47

最终变成根节点

ebdca

85

所以,根据上面这个图,哈夫曼编码可以是:

上图我是根据“左分支为0,右分支为1”的策略定的,其它策略也是可以的,比如“某个节点的左分支为1,右分支为0”都是可以的。

如何计算 WPL?

树的路径长度是从树根到每一结点的路径长度之和。

在本例中:

树的路径长度
= sum(每个编码的长度 * 出现次数) 
= e 编码的长度 * 出现次数 + b 编码的长度 * 出现次数 + d 编码的长度 * 出现次数 + c 编码的长度 * 出现次数 + a 编码的长度 * 出现次数
= 2 * 16 + 2 * 22 + 3 * 7 + 3 * 15 + 2 * 25
= 192

Linux 命令输出文件的第 5 行

cat:cat 文件名 | sed -n '5p' 【5 表示匹配第五行,p 表示打印】

awk:awk 'NR == 5' 文件名 【在 awk 中,NR 是一个内置变量,表示当前处理的行号(行数)。awk 'NR == 5' 的含义是匹配行号为 5 的行。】

tail:tail -n +5 文件名 | head -n 1 【tail -n +5 文件名表示从第五行开始打印,head -n 1 表示从第一行开始打印】

Cookie 和 Session 的区别

  • 作用范围不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端。
  • 存取方式的不同,Cookie只能保存 ASCII,Session可以存任意数据类型,比如UserId等。
  • 有效期不同,Cookie可设置为长时间保持,比如默认登录功能功能,Session一般有效时间较短,客户端关闭或者Session超时都会失效。
  • 隐私策略不同,Cookie存储在客户端,信息容易被窃取;Session存储在服务端,相对安全一些。
  • 存储大小不同, 单个Cookie 保存的数据不能超过 4K,Session可存储数据远高于Cookie。

数据库主键多对多的关系可以拆分成两个一对多的表吗?

可以的。将多对多的关系拆分成两个一对多的表是一种常见的数据库设计方法,通常使用一个中间表来实现。

假设有两个实体A和B之间存在多对多的关系,那么可以创建以下三个表:

  1. 表A:包含实体A的信息和主键。
  2. 表B:包含实体B的信息和主键。
  3. 中间表AB关联表:该表包含两个外键,分别指向表A和表B,同时也可以包含其他与这两个实体相关的信息。

中间表的作用是将多对多的关系拆分成两个一对多的关系。

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

Java 后端笔试经验

全部评论

相关推荐

双尔:反手回一个很抱歉,经过慎重考虑,您与我的预期暂不匹配,感谢您的投递
点赞 评论 收藏
分享
来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹 是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹 待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹 能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥 内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务