百度国际化后台开发日常实习一面

算法:LC3. 无重复字符的最长子串(mid,ACM模式,自己写输入输出,直接秒)
无项目拷打,只让讲了项目中缓存穿透、缓存击穿、缓存一致性的解决方案。大多时间拷打八股,主要是Mysql、Redis和Kafka(项目中有用到),还有计算机网络。Mysql和Redis考得很深,问了一些工程问题的解决方案没答得很好,最后面试官说知识的广度挺好、深度有欠缺

1. SQL事务题,这两个事务同时执行,说明它们的执行流程,失败还是成功
-- 表 t 有主键 id,值为 1, 3, 5, 10, 15, 20
-- 事务 A
SELECT * FROM t WHERE id = 7 FOR UPDATE;
-- 事务 B
INSERT INTO t VALUES (6, ...); 
INSERT INTO t VALUES (8, ...);
INSERT INTO t VALUES (11, ...);
2. Mysql的事务是什么?有哪些特性?
3. Mysql的原子性底层如何实现?(undo log)
4. 讲一下Mysql的MVCC机制的实现原理(readview、undo log、隐藏字段)
5. Mysql的覆盖索引、前缀索引、索引下推分别是什么?
6. 如何定位和优化慢SQL语句?(慢查询日志、explain关键字)
7. 使用explain分析慢SQL语句时,哪些字段比较重要?
8. Mysql的主从复制的数据同步流程是怎样的?(binlog、offset)
9. 介绍下Redis的常用数据类型
10. 讲一下你项目中如何解决缓存穿透、缓存击穿和缓存一致性问题?
11. 如何使用kafka解决消息丢失问题?
12. 如何使用kafka防止消息的重复消费问题?
13. kafka发送消息时,如果因为网络问题出现消息丢失,如何解决?
14. 从浏览器输入百度的网址访问网页的网络过程是怎样的?
15. HTTP和HTTPS的区别是什么?
#面经#  #百度#  #后端开发#  #大厂#
全部评论
HTTP和HTTPS,我一直以为这两一样的
点赞 回复 分享
发布于 今天 21:37 陕西
这个sql题学到了,之前没见过呢
点赞 回复 分享
发布于 今天 16:42 北京

相关推荐

AI coding的好用...
点赞 评论 收藏
分享
前一天做了线上笔试,有一个HR线上监考,手机作答,题目大多是一些计算机基础知识、常见算法题(主要是动态规划)、高中数学题,不难,做完后当天下午要求发成绩单验证,第二天约面面试前30min让介绍项目,主要是我在讲,偶尔针对一些问题提一两点后面就是一些八股问题,很多问题偏开放1. 说一下归并排序和堆排序,及其它们的时间复杂度和空间复杂度2. 如果有100MB纯文字数据,内存只有10MB,如何进行排序?3. TCP和UDP的区别是什么?分别有哪些应用场景4. 详细说明TCP三次握手的流程5. Spring中Bean的依赖注入有哪几种方式6. 讲一下Spring中Bean的作用域7. Spring中的单例模式如何保证线程安全?8. 接口和抽象类的区别和应用场景分别是什么?9. 讲一下代码重构有哪些常用原则10. 如果一个系统响应很慢,你会从哪些方面分析优化?(比较笼统,讲了SQL优化、Redis优化和分库分表之类的)11. 有过哪些开发经验?有没有参与过开源项目贡献?有什么难点和收获(讲了自己参与过的一些项目)12. 如果要开发一个商城系统,从0到项目上线有哪些工作?(从需求分析、编写接口文档讲到前后端联调、测试、部署上线等)13. 从输入网址,到后端处理后返回并展示页面内容的过程(MVC架构)技术面后半小时左右通过,直接约hr面,已经口头oc
查看13道真题和解析
点赞 评论 收藏
分享
01-10 21:01
门头沟学院 Java
比较经典的题目,如果之前没写过的可能需要想一番,首先实现缓存最先想到的就是hashmap,O1级别的查找速度很适合做缓存,然后就是要实现lru,参考redis的zset底层实现,zset也是使用了两个数据结构跳表+hashmap,使用跳表实现排序,我们这里也是使用双向链表实现lru功能,每次查询对应数据的时候就将数据移除重新加到头部,也就是更新使用频率,附上代码如下比较经典的题目,如果之前没写过的可能需要想一番,首先实现缓存最先想到的就是hashmap,O1级别的查找速度很适合做缓存,然后就是要实现lru,参考redis的zset底层实现,zset也是使用了两个数据结构跳表+hashmap,使用跳表实现排序,我们这里也是使用双向链表实现lru功能,每次查询对应数据的时候就将数据移除重新加到头部,也就是更新使用频率//通过自定义节点,hashmap,哨兵节点//删除时通过pre和next指针快速删除节点//添加时只操作头尾,通过哨兵节点快速添加节点class LRUCache {private class Node{//保留key,不然在删除尾结点的时候不能返回key让map也删除//而map又不知道尾结点是哪个int key,value;Node pre,next;Node(int key,int value){this.key=key;this.value=value;}Node(int key,int value,Node pre,Node next){this.key=key;this.value=value;this.pre=pre;this.next=next;}}private int capacity;//通过哨兵节点可以快速找到头结点和尾节点private Node dummy;//通过hashmap快速找到节点,通过节点pre指针和next指针快速实现删除private Map<Integer,Node> map=new HashMap();public LRUCache(int capacity) {this.capacity=capacity;//不能dummy=new Node(-1,-1,dummy,dummy)//这样会导致dummy的pre和next为nulldummy=new Node(-1,-1);dummy.pre=dummy;dummy.next=dummy;}public int get(int key) {if(!map.containsKey(key)) return -1;//如果存在,更新使用频率(加到头部)Node node=map.get(key);remove(node);addFirst(node);return node.value;}public void put(int key, int value) {Node node;if(!map.containsKey(key)){while(map.size()>=capacity){int removeKey=removeLast();map.remove(removeKey);}node=new Node(key,value);addFirst(node);}else{//否则更新数值重新加入node=map.get(key);node.value=value;remove(node);addFirst(node);}map.put(key,node);}public void remove(Node node){Node pre=node.pre;Node next=node.next;pre.next=next;next.pre=pre;}public int removeLast(){Node tail=dummy.pre;remove(tail);return tail.key;}public void addFirst(Node node){//通过哨兵结点快速找到头结点Node head=dummy.next;head.pre=node;node.next=head;dummy.next=node;node.pre=dummy;}}
查看1道真题和解析
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

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