阿里面试经历

记录下面试过程,知不足,而补不足。
**

一.面试时的代码评测

**
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.本次面试中未曾体现出来的优势,陈述一下
自己一定要对这个问题好好考虑怎么回答。

仅此笔记,以便后续参考

猜你喜欢

转载自blog.csdn.net/qq_35033270/article/details/80560484