㈠ 一个面试问题,为什么用redis做缓存
redis不是数据库,只是一种缓存软件,为了缓解服务器频繁读数据库带来的内存资源消耗,redis将需要和数据库交互的信息暂存,当下次同样的http请求,就能直接读取redis里面的内容,而不用读数据库。
这样减少了数据库压力又能提高服务器响应时间。
㈡ 怎么准备Android面试
总体上来说可以分为两种类型,小公司注重你的实践能力,大公司看中你的综合能力。小公司面试会比较集中安卓开发这一块,比较在意你之前有没有类似的项目经验,有没有遇到过目前他们所遇到的一些问题,准备这类公司面试除了基本的一些知识点还需要关注一些安卓开发实际中经常遇到的一些问题,诸如图片缓存,常见的开源框架,oom问题等等。大公司面试比较在意你的综合能力,无外乎是数据结构与算法,计算机网络,操作系统,Java这。我想说在我列出的这么多考查点中,数据结构与算法是一个分水岭,这个的准备需要一个长时间的积累,真正的高手与一般人一试就知道,屡试不爽,所以很多公司都痴迷于考算法,像是美团,网络,爱奇艺等公司,总共整个面试下来可以让你手写5个算法题以上,我说这么多只想告诉你这是一个门槛,能不能跨过去决定了你最终所找工作的水准,所以我都会建议每一个找程序员相关工作的人,这一块要尽早准备,多刷一些leetcode或是其他类似的题。然后在剩下的几块知识中,我只想说你可以不用全部都懂,但是你必须要在某一块知识点是有深入研究的,能够回答面试官4到5个追加问题,如果所以知识点都只能答上一到两个,面试官会觉得你的水平就是这样了,另外也会觉得你没有探究精神,关于后面一点是很恐怖的没有探究精神做不了好的程序员。如果按照重要程度,面试安卓我觉得可以做一个这样的排序:数据结构与算法,java,安卓,计算机网络,操作系统,后面是数据库或是设计模式之类的。java这一块比较重要的是多线程同步异步,java虚拟机内存回收,容器,面向对象一些知识点。就单单是多线程和虚拟机都可以看好几本专门讲解的书了,其他知识点就多啃啃java编程思想,遇到不懂在多翻翻博客加深理解。安卓这一块,异步机制,view的绘制,自定义控件,四大组件都非常重要。不管是android或是java都最好看一些源码,java可以看一些容器的源码,android可以看handler,looper,message等异步通信的源码或是一些开源框架的源码,会看源码绝对是加分项。计算机网络可以注重看上面几层,传输层注重研究。一般来说,前面这几点掌握好了,足以聊好几轮面试,一般面试官你都可以引导他去聊一些你擅长的知识点。后面几块知识点,你可以先掌握一些比较重要的,不一定每次面试都会遇到,但是也得准备。
我只提供一些大概的思路,具体到没一块知识点怎么准备可以自己去搜集,大的方向对了加上好的执行力一般可以取得不错的结果,祝好!
2016.03.14更新,加一些具体的准备建议:
上面这几块知识点,按照其重要程度排序,我个人认为可以这样排:数据结构与算法,Java,Android(如果不找安卓的就去掉这部分),计算机网络,操作系统,设计模式。下面我就按照这个顺序给出一些准备建议。
Ø 数据结构与算法
推荐书籍:大话数据结构,数据结构与算法分析(java语言描述),剑指offer,进军硅谷。
推荐在线刷题网站:Leetcode(LeetCode Online Judge),Lintcod(LintCode - 主页),牛客网(在线编程_C++Java前端经典笔试面试题库)
推荐方案:主要做三件事。
1, 先看一遍大话数据结构,熟悉一些基本概念,大话这本书只讲了一些基本的数据结构,像是B树,B+树,红黑树需要自己看一些博客或是网站,推荐一个讲解算法的网站-七月算法,另外海量数据处理也是一个经常考的专题,它结合了数据结构和操作系统的一些知识,这个需要进行针对性准备。
2,然后开始刷题,最推荐的肯定是leetcode,刷题建议按照标签进行刷题(比如队列,栈,哈希表),刷题从易到难,最好能够刷一百题左右,如果一天一题,至少要三个月以上,所以这个耗时比较长,要从比较早开始准备。进军硅谷这本书有按照专题进行编排,基本上的题目来自leetcode,可以作为一个参考。
2, 然后要分析一些常见数据结构的源码实现(比如队列,栈,hashmap之类的),数据结构与算法分析这本书有讲一些,可以结合一些博客进行准备。
Ø Java
找程序员工作,大多数情况下需要掌握好一门面向对象的语言,主流上分为Java和C++两大阵营。这里讲Java需要怎么准备。
入门书籍:Java核心技术卷一,Head first in java(如果一点面向对象的概念都没有那就看这本)
提高书籍:Java编程思想
Java虚拟机:深入理解Java虚拟机
Java多线程:Java多线程编程核心技术,Java并发编程实践
其实我觉得如果有一定基础建议直接看Java编程思想,面试中的考点经常都会在这本书中有讲到。当然Java虚拟机和多线程这两块需要再看一些专门讲解的书,每一次java面试考查内容几乎都离不开这两块。
总体来说java考察内容包括以下这些:
1,面向对象的一些基本概念:继承,多态之类的
2, 抽象类和接口
3, 静态类,内部类
4, Java集合类,同步和异步
5, Java类加载机制
6, Java内存模型和垃圾回收算法
7, 线程同步机制(volatile,synchronized,重入锁,threadlocal),线程间通信(wait,notify)
8, 异常处理
9, 多线程同步问题,生产者消费者,读者写者,哲学家就餐,用java实现
10,
了解java中设计模式的思想,用了哪些设计模式,有什么好处
Ø Android
入门书籍:第一行代码。
提高书籍:Android群英传,Android开发艺术探索。
上面的书看好了,一般问题不大。主要问的一些问题:
1, Activity,Service,BrocastReceiver,Intent,Fragemnet,ContentProvider,这些组件的基础知识,比如Activity两种启动方式,生命周期,四种启动模式,Service则主要是:两种启动方式,生命周期。还有组件之间怎么通信之类的问题。
2, Android的数据存储方式,数据库,sd卡,SharedPreferences 这些
3, Listview的优化,与scollview的区别
4, view状态与重绘,view的绘制过程,view的事件分发机制,view的事件冲突处理
5, Android多线程异步机制,AsyncTask工作原理与源码实现,Handler,Message,Looper异步实现机制与源码分析
6, Android常见的开源框架(主要是网络通信,图片加载这些),了解怎么使用,分析源码
7, Oom和anr异常引发的原因,怎么解决
8, 了解一些常见的图片缓存技术
Ø 计算机网络
推荐书籍:计算机网络自顶向下,tcp/ip协议详解卷一
主要看:主要看应用层,传输层,网络层,其中传输层最为重要。主要的一些考察内容有:
1, TCP和UDP的区别
2, TCP的三次握手,和四次挥手,为什么需要三次握手,为什么要四次挥手(这两个为什么要考虑非常清楚)
3, TCP拥塞控制算法(慢启动,拥塞避免,快速恢复),流量控制算法,滑动窗口协议,选择重传。
4, TCP可靠性是怎么保证的(通过哪些机制保证)?
5, HTTP协议报文格式,请求方法字段以及各个方法之间的区别,了解常见的响应状态码,了解cookie机制,了解WEB缓存技术(条件get方法)。
6, DNS协议的各层域名服务器,两种查询方式(递归和迭代),dns缓存
7, Udp的特点,适用场景,校验机制
8, 从输入一个网址到最后网页显示整个过程发生了什么?
9, IP地址组成,ARR,RARP,ICMP协议,路由选择算法
㈢ 面试官要求我研究一个Java缓存框架,哪个比较好
缓存框架有ehcache、redis、memcached
现在大公司用的比较多的是memcached和redis,这也是分布式系统开发中常用的缓存中间件
个人比较推荐用redis,因为redis对于可支持的数据类型比memcached要多,而且redis是一个可持久化的缓存框架,在使用的时候还可以尝试搭建redis集群环境。
如果你对redis深入研究,相信你的面试官会很乐意要你的。
㈣ 面试中问到HIBERNATE的缓存机制请问下该怎么回答
首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子。
㈤ java面试问到java缓存有多少种实现方式
我知道的有两种
缓存数据放内存里,key-value键值对,存取都快。redis、ehcache
放数据库,让数据库的定时策略自动删除。mongodb
还有些是直接存文件的.OSCache(不太熟悉)