逻辑思维 得到
一面
1 实现无括号的4则运算表达式
中缀式:(a+b+c*d)/e
后缀式:abcd*++e/
前缀式:/++ab*cde
可以将表达式默认存到树里面
然后树节点后序遍历完成
代码附上
class TreeNode { char val; TreeNode left; TreeNode right; TreeNode(char x) { val = x; } } public int comp(TreeNode p) throws Exception { int a,b; if(p!=null){ if(p.left!=null && p.right!=null){ a = comp(p.left); b = comp(p.right); return cal(a,b,p.val); }else{ return p.val - '0'; } }else { return 0; } } private int cal(int a, int b, char op) throws Exception { if(op == '+') return a+b; if(op == '-') return a-b; if(op == '*') return a*b; if(op == '/'){ if(b==0){ throw new Exception(); } return a/b; } return 0; }
2 进程和线程的区别
3 什么是僵尸进程, 僵尸进程是怎么产生的?
4 线程同步的方式?
5 进程通信的方式?
6 什么是缓冲区溢出,缓冲区溢出的原因有哪些, 有什么危害?
7 TCP 建立连接的过程
8 TIME_WAIT, CLOSE_WAIT 可能是什么原因?
9 HTTP协议为什么基于TCP协议设计实现
10 索引是什么?有什么作用以及优缺点?
11 简单说一说drop、delete与truncate的区别
12 设一表user_buy_record,字段包含用户ID(UID), 商品ID(product_id)
create table user_buy_record( uid int(11) , product_id int(11), create_time int(11),_ update_time int(11)_ )12.1 找出购买一个商品大于2次的用户id
12.2 列最近购买的前10个用户ID
13 判断一个链表是否是回文结构
两种方法 1快慢指针加反转 2使用栈来实现
public boolean isPalindrome(ListNode head) { if(head == null && head.next == null){ return true; } ListNode slow = head,fast = head; ListNode p=null,pre = null; while (fast!=null&&fast.next==null){ p = slow; slow = slow.next; //快慢遍历 fast = fast.next.next; p.next = pre; //翻转前半部分 pre = p; } if(fast!=null){ //如果是奇数跳过奇数节点 slow = slow.next; } while(p!=null){ //前半部分和后半部分进行比较 if(p.val!=slow.val){ return false; } p = p.next; slow = slow.next; } return true; }
二面
1、十进制: 937,使用八进制表示是:
2、投掷一个筛子,连续出现两个相同数字的概率为: a. 1/6 b. 1/36 c. 1/12 d. 以上都不是
3、一个袋中有10个球,黑球3个白球7个,先从袋中取任意一球(不放回去),接下来再取一次是黑球的概率是:
a. 1/10 b. 1/9 c. 2/10 d. 3/10
3、一个袋中有10个球,黑球3个白球7个,先从袋中取任意一球(不放回去),接下来再取一次是黑球的概率是:
a. 1/10 b. 1/9 c. 2/10 d. 3/10
4、随意给定一组不知道个数的数字(有重复),写一个算法,找到出现次数最多的3个数字(不限语言)
使用大顶堆来实现
//给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 public List<Integer> topKFrequent(int[] nums, int k) { HashMap<Integer, Integer> map = new HashMap<>(); for (int num : nums) { if(map.containsKey(num)){ map.put(num,map.get(num)+1); }else{ map.put(num,1); } } PriorityQueue<Integer> heap = new PriorityQueue<>((n1,n2)->map.get(n2)-map.get(n1)); for (Integer num : map.keySet()) { heap.add(num); } ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < k; i++) { list.add(heap.poll()); } return list; }
全部评论
(1) 回帖