金山办公-服务器端Java一面

前言

面试官哪里很吵,特别吵。面试开始时,叫我等一会儿,应该是现看我简历,过了几分钟,问了我一些基本情况,比如除了Java还学过其他什么语言、为什么本科就出来找工作这些。

就第一个问题,我就有点怀疑这个面试官可能不是Java的,后面的面试也更加印证了我的想法,因为全程没有Java八股,问的都是一些计算机基础、中间件。

操作系统

(楼主面试真的很少遇到操作系统的八股,大多都是线程、进程相关的,导致很少去深入看操作系统的八股,导致有点被爆锤)

1.了解操作系统的内存管理吗,缺页中断说一下

2.了解VSS吗(???)

3.进程的通信方式

4.了解TLB吗

5.进程切换,会刷新TLB吗

6.Linux文件系统

7.操作系统内存分配

8.那些操作会触发进程调度

9.操作系统内存管理

计网知识

1.TCP可靠性是如何实现的

2.断开连接中CLOSE-WAIT状态在哪一方?

场景:在服务器端有大量连接出现了CLOSE-WAIT转态,可能是什么原因

3.HTTPS,使用的加密算法

4.客户端发送数据到服务器端,内容发生了几次拷贝

这个问题,我一开始回答需要从文件系统拷贝到内核缓冲区,然后拷贝到用户缓冲区,发生两次

面试官说,假设内容已经在用户缓冲区,发送需要几次拷贝

redis

1.redis基本数据结构,那些使用的比较多(答Set)

2.Set底层数据结构

3.场景:假设有100万的键,不重复,平均大小10B,问在redis服务器上存下这些数据大概需要多大空间(结合跳表的结构回答了)

4.redis对String类型操作的指令周期

5.LRU,假设要保证O(1)的查询效率,选择什么数据结构

数据库

1.什么是幻读

2.InnoDB默认事务隔离级别

3.一条Update语句执行过程(还好刚看过,贴个答案在下面)

具体更新一条记录 UPDATE t_user SET name = 'xiaolin' WHERE id = 1; 的流程如下:

  1. 执行器负责具体执行,会调用存储引擎的接口,通过主键索引树搜索获取 id = 1 这一行记录:
    • 如果 id=1 这一行所在的数据页本来就在 buffer pool 中,就直接返回给执行器更新;
    • 如果记录不在 buffer pool,将数据页从磁盘读入到 buffer pool,返回记录给执行器。
  2. 执行器得到聚簇索引记录后,会看一下更新前的记录和更新后的记录是否一样:
    • 如果一样的话就不进行后续更新流程;
    • 如果不一样的话就把更新前的记录和更新后的记录都当作参数传给 InnoDB 层,让 InnoDB 真正的执行更新记录的操作;
  3. 开启事务, InnoDB 层更新记录前,首先要记录相应的 undo log,因为这是更新操作,需要把被更新的列的旧值记下来,也就是要生成一条 undo log,undo log 会写入 Buffer Pool 中的 Undo 页面,不过在内存修改该 Undo 页面后,需要记录对应的 redo log。
  4. InnoDB 层开始更新记录,会先更新内存(同时标记为脏页),然后将记录写到 redo log 里面,这个时候更新就算完成了。为了减少磁盘I/O,不会立即将脏页写入磁盘,后续由后台线程选择一个合适的时机将脏页写入到磁盘。这就是 WAL 技术,MySQL 的写操作并不是立刻写到磁盘上,而是先写 redo 日志,然后在合适的时间再将修改的行数据写到磁盘上。
  5. 至此,一条记录更新完了。
  6. 在一条更新语句执行完成后,然后开始记录该语句对应的 binlog,此时记录的 binlog 会被保存到 binlog cache,并没有刷新到硬盘上的 binlog 文件,在事务提交时才会统一将该事务运行过程中的所有 binlog 刷新到硬盘。
  7. 事务提交(为了方便说明,这里不说组提交的过程,只说两阶段提交):
    • prepare 阶段:将 redo log 对应的事务状态设置为 prepare,然后将 redo log 刷新到硬盘;
    • commit 阶段:将 binlog 刷新到磁盘,接着调用引擎的提交事务接口,将 redo log 状态设置为 commit(将事务设置为 commit 状态后,刷入到磁盘 redo log 文件);
  8. 至此,一条更新语句执行完成。

没录音,大概就这些吧,说实话,问的挺深的。

大概10min后收到电话约二面,算运气好吧

#金山办公##面经#
全部评论
同学,可以看看我们公司,招聘软件测试和开发! 深圳市国资全资子公司,研发型企业,纯国资背景,薪资对标深圳大厂薪资。(无笔试,直接面试),感兴趣同学看我的主页帖子,可以私信我。 https://www.nowcoder.com/discuss/1085334
点赞 回复 分享
发布于 2022-11-10 10:05 广东
base地点在哪儿
点赞 回复 分享
发布于 2022-10-28 19:43 重庆
好强
点赞 回复 分享
发布于 2022-10-28 09:19 江苏

相关推荐

emmm别问我为啥上一条帖子隔了两个月我才开始投简历和拿offer,因为我懒😰简单流程如下:周一凌晨改好的简历,然后到处乱投简历;周二接到了三维家的一面通知,临时抱佛脚的背了一些八股;周三上午一面下午通知第二天hr面;周四上午hr面下午拿offer,遂收手支线:在BOSS上顺手投了几个大厂,投字节的时候不小心投城客户端了,结果过了一天HR突然把我简历要走了,还问我能不能整客户端,我直接一口答应(脏面评警告😢)结果在周三下午的时候给我打电话,说前端有空缺实习岗,问我有没有兴趣,然后就跟我约了周四下午一面😰我都没咋准备啊,咩都不会啊😭结果周四下午面完,晚上打电话通知过一面了,赶紧把二面约在下周一下午,留点缓冲时间。逆大天了,我一半的问题都不会,他居然给我过了?运气未免有点好了😥现在正在恶补计网、网安、性能优化的东西(这三大板块我是几乎一点不会,一面几乎一点答不出来,加上我又没怎么背八股,这块被干烂了😵)心得体会与经验:1. 我giao怎么这么快就结束了,我还以为要找好久😨2. 大厂的面试问题真的和中厂小厂很大不同,比如在三维家我能自己吹水到vue的数据劫持、Proxy代理响应式之类的他们就觉得很不错了,但是在字节你但凡敢提到一下就会追问你细节了,一追问马脚就全漏出来了3. 有信心真的很重要,我感觉我能拿中厂offer最重要的就是吹水吹出自信来了,以至于三维家面试反问面试官有哪里还需要改进的时候,他就说很不错了解的很多😦4. 理解很重要,我从头到尾真没背过很多八股,不过有一些知识确实是敲过代码验证过,所以面试的时候能吹水吹得出来😇想了解面经啥的可以直接评论区问我,但我可能也说不全,因为我没有记录,而且今天摆了一天感觉记忆快清空了😵下面是故事时间:我暑假刚开始的时候才开始准备八股,印象很深那个时候连什么原型、事件循环、闭包这些名词都没听过,资料也不知道怎么找,就一直零零散散的准备,感觉也只有js稍微背了一下八股,其他很多时候都是靠完全理解和手写熟悉一些机制的,但这样做效率很低,反正准备了一个多星期半个月就开摆了😭结果一摆就摆到了开学,笔记是乱七八糟的,八股是忘光光的,简历是一直没改的,实习也是一直没投过的。直到上周日晚上偶然和师兄聊天,他突然问我“你怎么还不找实习”,那天晚上才幡然醒悟,是时候做点事情了😡然后就按照上面描述的来走了。其实我感觉我从头到尾都没背特别多八股,也没怎么找刷题资料啥的,早期就是翻尚硅谷或者黑马的入门视频从头学起,中期用面试鸭看了一点点题,主要是在学js机制和敲js代码,后期才发现了w3c的面经网站,然后在那里看着学(那个时候已经懒得敲了,因为有些问题与代码感觉不像是给找实习的看的,忒细了点😂)接下来继续准备字节二面吧,虽然几乎没啥可能可以通过,但是万一有奇迹呢?😍😍😍也祝大家能够早日拿到心仪的offer
我的offer呢😡:我已经预见10天后你会发,节孝子启动了
投递三维家等公司10个岗位
点赞 评论 收藏
分享
评论
15
75
分享

创作者周榜

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