标签:Java HashMap temp offer 对象 GC JVM 计算机专业 节点
先搞个前提,各位同学可以根据自身情况仅做参考,本人非计算机专业,学历一般吧,工作目前两年左右,因为工作日实在没有时间,所以和HR约定的是视频面试。
招聘的岗位描述:Java开发工程师,但可能需要学习Go语言,非业务开发部门
地点:上海市长宁区北新泾地铁站附近吧,一年之后极有可能搬到杨浦区
技术一面(一小时)
-
项目相关的一些问题,主要是阐述了下项目是什么业务场景,解决什么问题,在进行项目描述过程汇总面试官比较关注的貌似是并发量和业务总量
-
因为我在项目中使用了很多的ES作为持久层,所以面试官就针对我熟悉的中间件进行了提问
-
ES在写入时它是怎么完成一次写入操作的?
此处我给出了两种层面的回答
-
架构层面
在架构层面,由于ES分为了
master
、client
、data
、ingest
四种角色,每次写入和读取的HTTP请求都会先落到client角色的节点上,然后再负载到各个data节点上,完成写入和读取的操作后又将响应给应用程序。其中需要注意的是data
节点在进行查询时,是由多个分片进行查询后,在内存中拼接而成的,所系查询时也需要很大的内存, -
持久化操作层面
这层面的话就只是在写入操作上进行了藐视,首先是数据请求到达了data节点进行存储,存储时刷盘存在了两种方式,
buffer
刷入磁盘和translog
进行存储
-
-
ES集群写入是怎么优化的
-
-
关于
HashMap
源码方面的理解,主要是存储运算过程- HashMap的容量为什么是2的n次方幂
- HashMap线程不安全会有哪些影响
- HashMap的resize过程是怎么样的
- 对于其他集合框架的了解
关于这个HashMap,我之前有专门研究过两天源码,笔记放着同学们自行拿取HashMap源码学习笔记
-
JVM堆内存模型相关问题
-
新建对象内存分配过程(没太答上来)
这里应该会涉及到指针碰撞、空闲列表、并发安全(CAS机制和分配缓冲)
-
堆内存中的GC分类,我在回答时分为了youngGC和FullGC
-
出现GC时什么情况下会有阻塞用户线程的情况
-
GC算法进行标记的时候,可达性分析算法中,根可达算法(GC Roots)有哪些根
作为 GC Roots 的对象包括下面几种:
- 虚拟机栈(栈帧中的本地变量表)中引用的对象;各个线程调用方法堆栈中使用到的参数、局部变量、临时变量等。
- 方法区中类静态属性引用的对象;java 类的引用类型静态变量。
- 方法区中常量引用的对象;比如:字符串常量池里的引用。
- 本地方法栈中 JNI(即一般说的 Native 方法)引用的对象。
- JVM 的内部引用(class 对象、异常对象 NullPointException、OutofMemoryError,系统类加载器)。(非重点)
- 所有被同步锁(synchronized 关键)持有的对象。(非重点)
- JVM 内部的 JMXBean、JVMTI 中注册的回调、本地代码缓存等(非重点)
- JVM 实现中的“临时性”对象,跨代引用的对象
-
-
Spring框架是如何解决循环依赖的问题
-
SpringMVC框架中Filter和Interceptor有什么区别,平时会怎么使用它们
-
ThreadLocal的实现原理,为什么能保证线程安全
-
设计模式,手写一个静态工厂模式
之前另一个面试手写过三种单例模式,这些设计模式考的都还挺简单的,目前我自己掌握的有
三种创建模式:
单例、工厂、原形
四种行为模式:
模板、策略、监听(写的不多,要百度才能手写出来)、责任链
-
给出的业务场景:目前有一堆单词,给定开头的前缀,如
ab
找出这对单词中以ab
开头的单词。这个没有手写,但是之前在业务上自己用过,放这里方便大家参考1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public
static
void
initTrie(Set<String> sensitiveWords) {
words =
new
HashMap(sensitiveWords.size());
Map temp;
Map<String, String> temp2;
//遍历传入的敏感词集合,构建字典树
for
(String word : sensitiveWords) {
temp = words;
//将每个词转为字符数组,每个字符都是一个状态,构建有限状态集合
for
(
char
character : word.toCharArray()) {
//先查看字典树内是否存在这个状态
Object var1 = temp.get(character);
if
(var1 !=
null
) {
//如果存在,则指向下一个节点
temp = (Map) var1;
}
else
{
//如果不存在则进行创建节点
temp2 =
new
HashMap();
temp2.put(
"isEnd"
,
"0"
);
//放置该字符,并标记其状态
temp.put(character, temp2);
//指向下一个节点
temp = temp2;
}
if
(word.charAt(word.length() -
1
) == character) {
temp.put(
"isEnd"
,
"1"
);
}
}
}
System.out.println(words);
}
public
static
boolean
contains(String text,
int
matchType) {
int
i =
0
;
while
(i == text.length() -
1
) {
text.substring(i);
}
return
false
;
}
public
static
void
main(String[] args) {
initTrie(
new
HashSet<>(Arrays.asList(
"搓搓手"
,
"扣扣脚"
,
"深深懒腰"
)));
System.out.println(contains(
"搓手"
,
1
));
}
反问环节
-
团队代码规范是否严苛,是否有注释
A:代码注释可能不会特别多,但是对于变量的命名有绝对的CodeReview标准,代码仓库也是自研,如果代码不是太规范标准的话,将不能编译
-
招人团队属于哪个业务线,如果一起奋斗的话,会在哪个模块
A:主要是负责公司自研的
代码仓库
,只有部分命令传输模块使用的是开源组件,其他均为公司自研,非业务方面,并且能够看到公司所有的代码
福利时刻
最近有很多朋友已经开始准备下半年的跳槽面试了,不得不说还都是未雨绸缪的行家呀!今天就为大家分享一份Alibaba内部Java高级架构师面试题的总结!
这份阿里的Java高级架构师面试总结涉及到的内容有:Java基础、JVM、多线程与高并发、设计模式、操作系统、网络底层原理、Spring、SpringBoot、SpringCloud、MySQL、Redis、Dubbo、Nginx、消息中间件、ZooKeeper、分布式、ELK、Git等等内容!
下面就为大家节选一些这份面试题中的知识点以及面试要点,由于文章篇幅有限可能展示的不是很全,大家拿到手之后可以仔细、认真的阅读!需要完整PDF版的朋友可以点赞此文之后 点击此处 凭截图免费获取
JVM
多线程与高并发
操作系统
网络底层原理
Spring
SpringBoot
SpringCloud
分布式事务一站式解决
MySQL
Redis
Dubbo
消息中间件
ELK
需要完整PDF版的朋友可以点赞此文之后 点击此处 凭截图免费获取
标签:Java,HashMap,temp,offer,对象,GC,JVM,计算机专业,节点 来源: https://blog.csdn.net/Java0258/article/details/118304201
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。