面试复盘|赛宁网安中后台研发22届校招一二hr面面经

面试复盘|赛宁网安中后台研发22届校招一面二面hr面经

面试总体感觉不错。一开始约线下面,但是由于疫情,学校封校无法出去,短信沟通改线上面,次日就约了线上面,而且面试反馈很快。

一面面经

方式:腾讯会议

时间:9月28日15:20

时长:40分钟

Q:首先自我介绍

技术面开始:

Q1:刚刚你说计算机基础你都学过,那什么是线程调度?

A:当时傻了,就说了什么是线程、什么是进程。系统调度、调度算法讲讲。下面是从网上搜索整理的一个答案供参考。

在只有一个CPU的情况下,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令。所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务。线程调度是指按照特定机制为多个线程分配CPU的使用权。
线程调度有两种:
    1.分时调度
        分时调度就是所有线程轮流拥有(使用)cpu的使用权,平均分配每个线程占用cpu的时间
    2.抢占式调度
        抢占式调度就是优先让优先级高的线程使用cpu,如果线程的优先级相同,则会随机选择一个,所以谁的优先级高,谁抢夺cpu的几率就越大,从而优先级高的占用cpu的时间会更长,Java为抢占式调度.

Q2:知道死锁吗?

A:知道。各个进程相互等待对方手里的资源,导致各进程阻塞,无法向前推进的现象。

Q:那如何解决死锁问题?

A:首先死锁产生有四个条件:互斥条件、请求和保持条件、不可剥夺条件、循环等待条件,只要破环这四个条件中的任意一个或多个就不会发生死锁。比如资源一次性分配,这样就破环了请求和保持条件,但是这样会严重造成资源浪费。

产生死锁的四个条件:
互斥:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
请求和保持:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不可剥夺:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
循环等待:在发生死锁时,必然存在一个进程--资源的环形链。

Q3:数据结构与算法也学过是吧,说说常见的排序算法?

A:知道的O(n^2)的有冒泡排序、选择排序、插入排序,还有一些O(nlogn)的:快速排序、堆排序、归并排序。其他的想不起来了。

Q:最快的排序算法的时间复杂度是多少?

A:现在能想起来的是O(nlogn)。

Q:有没有更快的?

A:可能有吧,不过现在知道的就是O(nlogn)。

面试结束网上查了下,还有更快的。见下图:
图片说明
Q4:什么是网段?

A:这个大概知道是什么,但是具体概念不清楚。然后就胡说一通。下面网络搜到的:

网管:一种是指物理上由网络连接设备所相隔的网络。比如由路由设备(或者交换机,甚至集线器)连接的两个局域网,我们可以称之为两个网段。另一种是指从逻辑上,根据其IP地址中的网络地址来区分其所属的网段。

Q5:什么是公网和私网?

A:公网,也叫做外网,没有限制,只要能上网的用户,都可以访问,比如类似百度,新浪这样的网站。私网,只有属于局域网内部的成员,才可以访问。

Q6:私网是如何访问百度的?

A:知道有个NAT技术。

Q:除了这些计算机基础,还学过其他的吗?

A:其他的就是Java相关的了……还有数据库技术,MySQL和Redis。

Q7:那说说数据库的索引是什么吧?

A:之前总结过,直接看👇

索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。而且索引是一个文件,它是要占据物理空间的。

Q:什么情况下使用索引?

A:查多写少的情况下,适合使用索引。因为索引可以大大加快数据的检索速度,但是另一方面,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率。

Q:查找数据的时间复杂度是多少?

A:(这题不会,当时就瞎说了)额……根据索引查找数据,主要取决于树的高度,因为索引使用B+树,而三层B+树大概可以存储10亿数量级数据,所以时间复杂度是常数级别的

Q:不是这么算的,你稍后可以查一下。

A:嗯嗯,好。

Q8:还会Redis是吧,Redis是单线程的还是多线程的?

A:单线程。

Q:既然是单线程,那为什么执行快?

A:因为单线程,没有上下文切换的开销,另外Redis是基于内存的,与底层使用的数据结构也有关。(下面给一个标准的答案)

Redis为什么快:
    1. 基于内存:Redis是使用内存存储,没有磁盘IO上的开销。数据存在内存中,读写速度快。
    2. 单线程实现( Redis 6.0以前):Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。
    3. IO多路复用模型:Redis 采用 IO 多路复用技术。Redis 使用单线程来轮询描述符,将数据库的操作都转换成了事件,不在网络I/O上浪费过多的时间。
    4. 高效的数据结构:Redis 每种数据类型底层都做了优化,目的就是为了追求更快的速度

Q9:Redis有哪些问题?

A:问题?是缓存雪崩、缓存击穿、缓存穿透吗?

Q:不是,这是和数据库使用中的问题,我想问的是Redis本身的问题。

A:这不清楚。

Q10:如何查看Redis中有多少数据?

A:不记得了,有一个keys命令,不知道有没有可以返回数据多少的。

Q:那如何查看以某个字符为前缀的数据?

A:使用keys xx*命令。

Q:有其他的办法吗?

A:不知道了。

Q:以后千万不要使用keys *这个命令。

A:(……)哦。因为redis是单线程的,如果数据量非常大,会发生阻塞吗?之前都是学习,没在生产中用过。

反问阶段:

Q:公司主要业务,部门技术栈

Q:什么时候知道面试结果(很快,十一假期前吧)。


二面面经

方式:腾讯会议

时间:9月29日15:00

时长:20分钟,没问啥,就是先聊聊,然后讨论笔试题。

感觉这个面试官不是写代码的(分不清Java和C/C++)

  1. 自我介绍、实习和项目

  2. 笔试题讨论:

第一题:有n盏灯,编号为1~n。1号将灯全部打开,2将按下所有为2的倍数的开关,(这些灯将被关掉)第3个人按下所有编号为3的倍数的开关(该灯如为打开的, 则将它关闭;如关闭的,则将它打开)。以此类推,一共有n个人,求最后有多少盏灯是开着的?(就是这个题目,但是表述不太一样)

// 代码是我自己写的,笔试题也是白板直接提交,没有验证对错,仅供参考。
class Solution {
    public int openLights(int n) {
        int[] arr = new int[n + 1];
        for (int i = 1; i < arr.length; i++) {
            arr[i] = 0;
        }
        for (int j = 1; j <= n; j++) {
            for (int i = 1; i < arr.length; i++) {
                if (i % j == 0) {
                    arr[i] ^= 1;
                }
            }
        }
        int ans = 0;
        for (int i = 1; i < arr.length; i++) {
            ans += arr[i];
        }
        return ans;
    }
}

第二题:NC65 斐波那契数列

// 这是我知道的三种方法中最简单的答案。
public class Solution {
    public int Fibonacci(int n) {
        if (n <= 1) return n;
        int a = 0;
        int b = 1;
        for (int i = 2; i <= n; i++) {
            b = a + b;
            a = b - a;
        }
        return b;
    }
}

Q:你这是用C语言写的吗?

A:不是,是Java。

Q:那怎么看起来和C/C++差不多?

A:😅。

Q:先来看看第一题,说一下你的思路?还有更简单的做法吗?

Q:第二题:经典的斐波那契数列,高频笔试面试的编程题,主要有三种写法:递归、动态规划(使用数组)、只使用额外几个变量而不创建数组(这叫啥法子啊😄)


hr面面经(都是闲聊,可不看)

方式:腾讯会议

时间:10月9日14:30

时长:20分钟(感觉聊了很多,应该更长吧)

hr:(一顿客套话,恭喜啊通过技术面啥的),现在是人事面,大概多久,主要就是想了解下候选人一些信息和想法啥的。

我:嗯嗯……

hr:你之前在这个xxxx公司实习,能说说吗?

我:巴拉巴拉……(反正就很好,钱多事少还远程😄)

hr:那你当时为什么没有留在xxxx。

我:主要是我想找Java岗,他们是python。

hr:那说说哪些让你觉得xxxx公司很好的吗?

我:制度完善、管理人性化……

hr:那你对赛宁了解吗?

我:目前只知道是做网络安全对,还没有深入了解,如果拿到offer了,会进一步深入了解的。

hr:那你拿到offer后,一般会看哪些或者考虑哪些呢?

我:嗯,首先是薪资啊,然后(就拿过一个offer,连offer上有啥都不清楚😅)……然后会考虑公司的行业、主要业务和发展前景。

hr:那我先给你介绍下我们公司吧。然后巴拉巴拉的,主要就是公司是做网络安全的,另一个就是CTF竞赛啥的。你之后可以了解下。

我:嗯嗯,会的。

hr:那关于薪资这块,你的期望薪资是多少?

我:你们能给到多少啊?

hr:我们目前还没有确定薪酬标准,因为你这是第一批,后面还有第二批,第三批,现在就是想了解下你的意愿,后面才能确定。

我:(应该问问往年的情况的)xx w 到 xx w吧。

hr:xx到xx,是一个月吗?

我:是年薪。

hr:那你有没有想过去上海或者杭州啊?这两个城市也挺近的。

我:上海应该是不会考虑的。杭州嘛,和南京也差不多啊之类的,除非能拿到比南京更好的offer才会考虑吧。反正优先选择南京。

hr:那比如杭州给你xx w(比我说的上限高一些的)年薪的offer,你会选择去杭州吗?

我:大体上还是会留在南京的(后来想想不该表现出留在南京的意愿太强烈)

hr:那你在投递简历的时候都是投递南京吗?

我:如果有南京的岗位,肯定是投递南京,没有的话,如果有北京,会选择北京吧。

hr:那你家在哪里啊?

我:xxx。

hr:那距离北京挺近的(其实一点也不近)。如果拿到北京的offer会考虑北京吗?

我:(北京虽好,但我不配😭)反正就是说,想我这种普通人去了,也只是过客,而且自己太喜欢南京,还是希望留在南京的……

(主要就是薪资、公司业务、城市选择这些)

hr:情况我基本了解了,那你有什么想问我的吗?

我:我大概多久知道面试结果啊?

hr:因为你这是第一批,要到第二批,第三批结束才会发offer。

我:哦哦哦。

hr:反正已经加了微信,有什么事你可以微信直接问我。

我:嗯嗯……

总结:一面都是基础,二面就是聊聊笔试题,然后就hr面,还是很容易,而且进度很快。

讨论&交流

这里汇总下自己当时没get到面试官想问的还有没有答好、不懂的问题:

  1. 查找数据的时间复杂度是多少?
  2. Redis存在什么问题吗?是Redis自身带有的问题,求教。
  3. 有什么方法可以查看Redis中的数据量?
  4. 怎样获取以xx前缀开头的数据?不能使用keys *命令。
  5. 关于hr面的:大家都是实话实说的吗?有没有注意点?经历的hr面太少了。
#面试复盘##面经##校招#
全部评论
大佬接到电话说面试通过了吗
点赞 回复
分享
发布于 2021-10-13 14:47

相关推荐

3 9 评论
分享
牛客网
牛客企业服务