记录下面试过程,知不足,而补不足。
**
一.面试时的代码评测
**
1.评测详情
面试时面试官首先出了两道笔试题,共给了20分钟让写出代码。
1、实现一个LRU淘汰算法
设计并且实现一个Least Recently Used (LRU)的缓存对象,他支持get和put操作
get用来获取cache中的key对应的value,如果该key不存在,返回-1
put用来更新(如果key已经存在)或者插入(如果key不存在)数据。如果缓存达到它的容量上限的时候,它会将其他不常使用的key和value删除掉,然后再插入新的key和value
2、二叉树
实现二叉树反转
也就是将
A
/ \
B C
变成
A
/ \
C B
1.分析
以上两道题出的比较简单,主要考察的是代码规范及手写代码能力吧。毕竟大名鼎鼎的Max Howell 在面试谷歌时也被揶揄:“我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。”所以手写代码的能力 还是需要加强,如果对大公司抱有期望的话。
2.代码结果
2.1 LUR淘汰算法
public class LRUCache extends LinkedHashMap<Integer,Integer> {
private static final long serialVersionUID = 1L;
private int max;
public LRUCache(int capacity) {
super(capacity,1,true);
this.max=capacity;
}
public int get(int key) {
if(!this.containsKey(key)){
return -1;
}
return super.get(key);
}
public void put(int key, int value) {
super.put(key, value);
}
@Override
protected boolean removeEldestEntry (Map.Entry<Integer,Integer> eldest) {
return size() > LRUCache.this.max; }
}
2.2 二叉树翻转
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
if(null==root){
return null;
}
TreeNode temp=root.left;
root.left=invertTree(root.right);
root.right=invertTree(temp);
return root;
}
}
二.面试问答
1.概述自己做的有代表性的项目。
奉劝在面试前一定要对所做的项目再做个详细回顾,尽量条理清晰,逻辑清楚。
2.所用到的技术,为什么用这个技术。
项目中 用的技术,例如websocket等,需要有一定了解,并对优劣清楚。
3.工作中遇到过的技术问题,怎么解决的。
代表性的问题,怎么遇到的,如何解决的,解决方法概要。
4.所用的数据库,存储引擎。是否用到索引,缓存相关(redis)问题
数据库相关的索引、优化等是常问的,平时需要注意细节相关的
5.乐观锁和被悲观
一种思想,乐观锁
6.hashmap相关
重中之重,必看
7.jvm内存模型相关,gc相关。
必看,重中之重
8.本次面试中未曾体现出来的优势,陈述一下
自己一定要对这个问题好好考虑怎么回答。
仅此笔记,以便后续参考