深圳虾皮 Shopee 二面 面经 复盘
是终面,有说有笑,题也秒了,感觉还不错
解释幂等性,项目中如何体现幂等性
如果解决用户短时间内的频繁点击的幂等性?
提出参数校验,阀值时间内重复舍弃,其余加锁排队的解决方案
基本猜的 答的一般
项目如何实现可扩展的?用了什么设计模式
为什么要做项目拆分?
其实是想问接耦与微服务,说了一下自己的理解
4TB 文件 内存2GB 查找某个int32是否存在
redis的bitMap不需要细节,大体写一下浏览器输入URL的整体流程
DNS -> 递归查找 UDP
拿到IP 和端口 -> 建立TCP 请求 三次握手
Http or Https -> http GET or POST 报文基本结构 -> https CA
Http1.1长链接 TCP心跳保活
TCP四次挥手断开 -> 2MSL
按照你说的 进程是如何处理TCP通过Socket套接字上传到用户态的字节流的?
其实是想问怎么从字节流 到 HttpRequest和HttpResponse对象的
我肯定知道是 Tomcat Servlet进行解析,但是具体解析流程我就不知道了,我只大体说了下HttpRequest 对象的源码组成和常用方法
一个文件从硬盘读取到通过Socket传输 经历了几次Copy?
我说如果使用零拷贝的Direct Memory Access 应该是两次
如果不使用就是三次 多了一次 读取文件的内核态到用户态的拷贝
开始做题 一道新题 但是不难
0,1,0,1,0
0,0,0,0,1
1,0,0,1,0
1,1,0,0,0
1是障碍物,0是通路,求0,0到右下角最短路径并输出
因为第一眼看到这题的时候感觉DP只能输出一个长度,但是这个要求路径,所以深搜+回溯 即可,
一遍过。
static List<String> result = new ArrayList<>(); public static void main(String []args){ int [][] nums = new int[5][5]; nums[0]=new int[]{0,0,0,1,0}; nums[1]=new int[]{1,1,0,0,1}; nums[2]=new int[]{0,0,0,0,0}; nums[3]=new int[]{1,0,1,0,0}; nums[4]=new int[]{0,0,0,0,0}; find(new ArrayList<>(),nums,new boolean[nums.length][nums[0].length],0,0); System.out.println(result); } public static void find(List<String> list ,int[][]nums, boolean[][] memo, int m ,int n ){ if(m<0||n<0||m>=nums.length||n>=nums[0].length){ return; } if(m ==nums.length-1 && n==nums[0].length-1){ if(result.size()==0||list.size()<result.size()){ list.add((nums.length-1)+","+(nums[0].length-1)); result=new ArrayList<>(list); } } if(!memo[m][n]&&nums[m][n]!=1){ memo[m][n]=true; list.add(m+","+n); find(list,nums,memo,m+1,n); find(list,nums,memo,m-1,n); find(list,nums,memo,m,n+1); find(list,nums,memo,m,n-1); memo[m][n]=false; list.remove(list.size()-1); } }