面试复盘|猿辅导一二三四面!(9.14已oc)
u1s1总体三轮技术面,还是比较难的!
下面看面经吧。
一面 8.13号 50min
1.项目介绍
java基础
1.接口和抽象类
2.重载和重写的区别是什么?
3.java中常见的集合有哪些
4.线程的状态
5.java的运行时区有哪些?
6.虚拟机栈中什么情况会发生oom
7.异常类说一下,erro和exception的区别
手撕代码
1.对链表进行选择排序
2.对数组进行消消乐。
import java.util.Stack; public class t6 { public static void main(String[] args) { int []num = new int[]{0,1,2,2,2,1,1,4}; int n = 3; delect(num,n); } /* * 消除数组中的连续相同的n个数 ,并返回消除后的结果 * 比如: 1 3 3 3 1 2 2 n = 2 返回 1 3 1 * 另外还有一个就是如果消除后依然满足条件继续消除 * 比如 1 3 3 3 1 1 2 n = 3 返回2 * */ public static void delect(int []nums,int n){ Stack<int[]> stack = new Stack<>(); for(int num:nums){ //如果为空 或者当前元素与栈顶元素不一样 就放入栈中 if(stack.isEmpty() || num != stack.peek()[0]){ stack.push(new int[]{num,1}); }else { //说明遇到相等了 stack.push(new int[]{num,stack.peek()[1]+1}); if(stack.peek()[1] == n){ int T = n; while (T-->0){ stack.pop(); } } } } for (int[] ints : stack) { System.out.println(ints[0]); } } }
二面 8.20号 50min
1.自我介绍
2.项目介绍
3.你项目里有数据库吧,数据库的三大范式是什么?你项目里有用到这个吗?
4.你对微服务的理解,你项目中用到了几个微服务,为什么这么分呢?
5.你觉得一个微服务项目应该包含哪些东西?
6.springcloud nacos怎么进行服务注册的?
7.手撕两道题
(1)将链表的第m到第n个位置进行反转
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
public ListNode reverseBetween (ListNode head, int m, int n) {
// write code here
ListNode result = new ListNode(0);
result.next = head;
ListNode pre = result,cur = head,temp = null;
for(int i=1;i<m;i++){
//找到第m个的前一个
pre = cur;
cur = cur.next;
}
//开始对m-n的进行就地反转
for(int i=0;i<n-m;i++){
temp = cur.next;
cur.next = temp.next;
temp.next = pre.next;
pre.next = temp;
}
return result.next;
}
}
(2) 字符串转有效ip地址
import java.util.*; public class Solution { /** * * @param s string字符串 * @return string字符串ArrayList */ public ArrayList<String> restoreIpAddresses (String s) { // write code here ArrayList<String> res = new ArrayList<>(); ArrayList<String> ip = new ArrayList<>(); dfs(s,res,ip,0); return res; } private void dfs(String s,ArrayList<String> res,ArrayList<String> ip,int start){ if(ip.size()==4 && start == s.length()){ //说明找到一个合适解 res.add(ip.get(0)+'.'+ip.get(1)+'.'+ip.get(2)+'.'+ip.get(3)); return; } //进行剪枝 判断剩余字符串长度是否大于所缺的个数 if(s.length()-start>3*(4-ip.size())) return; //最少是4位 if(s.length()-start<(4-ip.size())) return; int num = 0; //每一个位置最多是3位 需要控制好 for(int i=start;i<start+3&&i<s.length();i++){ num = num*10+(s.charAt(i)-'0'); if(num<0 || num>255){ continue; } ip.add(s.substring(start,i+1)); dfs(s,res,ip,i+1); ip.remove(ip.size()-1); if(num == 0){ break; } } } }
三面 8.22号 50min
1.自我介绍
2.项目介绍
3.挨个项目问
4.然后出了两个题
(1)岛屿的最大面积
class Solution { // static int res = 0; static int [][]dir = new int[][]{{-1,0},{1,0},{0,-1},{0,1}}; public int maxAreaOfIsland(int[][] grid) { int m = grid.length,n = grid[0].length; // boolean [][]visit = new boolean[m][n]; int flag = 0; int res = 0; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(grid[i][j] == 1){ //说明是入口 //visit[i][j] = true; // int sum = 0; grid[i][j] = 0; int sum = dfs(grid,i,j); res = Math.max(res,sum); } } } return res; } public static int dfs(int [][]num,int i,int j){ if(i<0||i>=num.length||j<0||j>=num[0].length ||num[i][j]=='0') return 0; int sum = 1; for(int d=0;d<4;d++){ int newi = i+dir[d][0]; int newj = j+dir[d][1]; if(newi<0 || newi>= num.length || newj<0 || newj>= num[0].length || num[newi][newj]==0) continue; //visit[newi][newj] = true; num[newi][newj] = 0; sum+=dfs(num,newi,newj); //visit[newi][newj] = false; } return sum; } }
(2)最长有效括号(改编题)
先跟面试官聊的这个题目,这个题目是力扣的改编题,力扣那个都是小括号,这个里面有大括号和中括号。根据当时的思路,有点问题,后面面试官让返回去写第一题了,说第二题他也不知道答案,就是想跟我聊聊,哈哈哈。
hr面 8.22号 20min
1.自我介绍
2.就常规问题,自己对当前教育行业的看法,自己的优缺点之类的。
等了三周,终于意向来了,哈哈哈,不容易,加油!!!