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 聚簇与非聚簇与非聚簇索引的区别 https://my.oschina.net/xiaoyoung/blog/3046779   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,但是每次要拓展一个产品,就要修改一次工厂里面的方法      职责链模式:   类似踢皮球,往职责链上一甩,谁有能力谁处理   https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html      这种直接看菜鸟教程,我这里没有问源码,涉及源码就要花时间研究了         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。  他说不是,后面反问环节,我问他这个问题的答案,他说思路没错,可以仔细看一下三次握手,有优化,不需要那么久。  没有撕算法  总结 两轮两个面试官挺好的, 很尊重人,一面面试官反问是说:“您这边还有什么问题吗?”注意是“您”  二面面试官,他说我说话的时候不知道是不是因为紧张,可能是有点急促什么的吧,问我平时是不是这样,我说,是。害,应该多练练。思路清晰就不紧张了  另外,我在项目介绍说的都不是很好,得回去再看看以前的代码了~
点赞 3
评论 9
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务