首页 > 映客补招两轮面试题+答案
头像
Evan_Wang🌴🌴
编辑于 2020-12-17 12:14
+ 关注

映客补招两轮面试题+答案

8.25就投递了,秋招没拿到面试机会。补招从笔试->一面->二面。

看到是补招,就想着面着看看。

笔试选择+4算法+1问答
60min时间不够所以算法做的不是很好,但感觉算法难度不大

一面:

1、数据库

1.innodb myisam 的区别

MySQL5.5.5以后,InnoDB是默认引擎,因为innodb适合更多业务场景,原因是innoDB支持事务,支持外键。
除此之外:
锁:innodb行锁,myisam表锁
索引:innodb采用聚簇索引+辅助索引,myisam才用非聚簇索引(即:主键和非主键索引的查询速度区别不大

补充(我没答上来的):
全文索引
MyISAM支持FULLTEXT类型的全文索引
InnoDB不支持FULLTEXT类型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,并且效果更好
主键
MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址
InnoDB如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值

1.2 聚簇与非聚簇与非聚簇索引的区别

1.3 索引覆盖是啥?

https://zhuanlan.zhihu.com/p/73204847

推荐的是我以前看过不错的文章

2、redis

redis为什么快?(和mysql比)

- 它是单线程(6.0之前),没有进程竞争,锁等设置,所以少了切换上下文的时间,相对快了很多。
- 同时,数据存储在内存中,他可以快速处理数据。
- 同时,它又是epoll的多路复用模式,异步的读取信息,自己要进行的逻辑处理也相对很少。并且可以涉及单机多redis,充分利用其他cpu核心。

mysql就是基于磁盘+B加树咯

redis常见数据结构以及使用场景

string,存储json、照片、视频等各种各种可序列化的对象。
list,如果对消息的可靠性没有较高的要求的话,那么就可以使用Redis去实现消息队列。
map,二级映射,存储对象更直观。
set,元素不重复又在内存,可以做合并数据等
zset,排行榜

推荐的以前关注的公众号博主敖丙的redis文章咯 ,里面挺详细的

3、设计模式

问了工厂模式和职责链模式

工厂模式:简单工厂、工厂方法、抽象工厂

动机:

工厂里提供很多方法,不同方法新建不同对象

看了很多解释我的总结有以下几点:

1、减去繁琐的new工作,统一让工厂创建对象

2、软件系统中经常面临对象的创建工作,由于需求的变化,这个对象可能也随之发生变化,但他却拥有比较稳定的接口。需要提供一种封装机制来隔离出这个易变对象的变化,从而保持系统中其他依赖该对象的对象不随之需求变化而变化。

其次:

三个工厂模式,各有千秋

从简单工厂模式——》工厂方法模式,解决了对产品的拓展不符合OCT原则的问题

从工厂方法模式——》抽象工厂模式,解决了一个过程只能生产一个产品的问题

但是反而多了一个问题,部分不符合OCT原则的问题,对工厂的拓展符合OCT,但是每次要拓展一个产品,就要修改一次工厂里面的方法

职责链模式:

类似踢皮球,往职责链上一甩,谁有能力谁处理

这种直接看菜鸟教程,我这里没有问源码,涉及源码就要花时间研究了


4、一道算法,前序遍历二叉树,要非递归写

class Solution {
    List<Integer> list = new ArrayList<Integer>();
    public List<Integer> preorderTraversal(TreeNode root) {
        if(root == null)
            return list;
        Stack<TreeNode> stack= new Stack<>();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode tree = stack.pop();
            list.add(tree.val);
            
            if(tree.right != null){
                stack.push(tree.right);
            }
            if(tree.left != null){
                stack.push(tree.left);
            }
        }
        return list;
    }
}


注意这里有个坑,root为空要返回一个空的arraylist
这题是leetcode 144


“能接受转GO吗”

一面40分钟,基本从项目展开就问技术

二面

自我介绍
“你自我介绍说向往我们公司,那你对我们公司有什么了解”

“你在实习干了啥”

“ab怎么做的,你了解吗”

“聊开发项目”

“锁是怎么做的”
我一开始说操作系统的那些什么共享内存 ,对锁有死锁检测、死锁避免、死锁处理。还有四个条件什么的

他说这是进程的,线程锁怎么做

我就说JAVA线程的话,synchronized 信号量 阻塞队列这些已经有线程api

“项目线程安全的理解”
项目里面的,我说了concurrenthashmap,我太久没看代码忘了  想了很久说的不好。

“那边实习 为啥不打算留下来”

“你手里有几个offer”

还有一个最难的题目,“一个tcp的 ping命令10ms,http请求多少ms”

我乱分析一通,说ping基于icmp,是网络层已经是很底层了,http是应用层,http先是是不是就tcp三次握手 所以 30ms。

他说不是,后面反问环节,我问他这个问题的答案,他说思路没错,可以仔细看一下三次握手,有优化,不需要那么久。

没有撕算法

总结

两轮两个面试官挺好的,
很尊重人,一面面试官反问是说:“您这边还有什么问题吗?”注意是“您”

二面面试官,他说我说话的时候不知道是不是因为紧张,可能是有点急促什么的吧,问我平时是不是这样,我说,是。害,应该多练练。思路清晰就不紧张了

另外,我在项目介绍说的都不是很好,得回去再看看以前的代码了~

更多模拟面试

全部评论

(9) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐