面试题

J2SE基础

  1. 九种基本数据类型的大小,以及他们的封装类。

    java提供了一组基本数据类型,包括
    boolean, byte(8), char(16), short(16), int(32), long(64), float(32), double(64), void.
    同时,java也提供了这些类型的封装类,分别为
    Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void

  2. Switch能否用string做参数?

JDK1.6
的版本中,switch后面的括号里面只能放int类型的值,注意是只能放int类型,但是放byte,short,char类型的也可以。是因为byte,short,shar可以自动提升(自动类型转换)为int。而不能放long型和String型。
JDK1.7 的版本中,switch中可以使用字串String。但仍不支持long型。 原理:hashCode()+equals()
编译器在编译期间给代码做了转换。

3.equals与==的区别。

Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Objectequals方法,要想实现不同的等于比较,必须重写equals方法。

"==""equal"运行速度快,因为"=="只是比较引用.
  1. Object有哪些公用方法?
clone
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常
equals
在Object中与==是一样的,子类一般需要重写该方法
hashCode
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到
getClass
final方法,获得运行时类型
wait
使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。 
调用该方法后当前线程进入睡眠状态,直到以下事件发生: 
1. 其他线程调用了该对象的notify方法 
2. 其他线程调用了该对象的notifyAll方法 
3. 其他线程调用了interrupt中断该线程 
4. 时间间隔到了 
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常
notify
唤醒在该对象上等待的某个线程
notifyAll
唤醒在该对象上等待的所有线程
toString
转换成字符串,一般子类都有重写,否则打印句柄
  1. Java的四种引用,强弱软虚,用到的场景。

  2. Hashcode的作用。

  3. ArrayList、LinkedList、Vector的区别。

  4. String、StringBuffer与StringBuilder的区别。

  5. Map、Set、List、Queue、Stack的特点与用法。

  6. HashMap和HashTable的区别。

  7. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

  8. TreeMap、HashMap、LindedHashMap的区别。

  9. Collection包结构,与Collections的区别。

  10. try catch finally,try里有return,finally还执行么?

  11. Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。

  12. Java面向对象的三个特征与含义。

  13. Override和Overload的含义去区别。

  14. Interface与abstract类的区别。

  15. Static class 与non static class的区别。

  16. java多态的实现原理。

  17. 实现多线程的两种方法:Thread与Runable。

  18. 线程同步的方法:sychronized、lock、reentrantLock等。

  19. 锁的等级:方法锁、对象锁、类锁。

  20. 写出生产者消费者模式。

  21. ThreadLocal的设计理念与作用。

  22. ThreadPool用法与优势。

  23. Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。

  24. wait()和sleep()的区别。

  25. foreach与正常for循环效率对比。

  26. Java IO与NIO。

  27. 反射的作用于原理。

  28. 泛型常用特点,List能否转为List。

  29. 解析XML的几种方式的原理与特点:DOM、SAX、PULL。

  30. Java与C++对比。

  31. Java1.7与1.8新特性。

  32. 设计模式:单例、工厂、适配器、责任链、观察者等等。

  33. JNI的使用。

Java里有很多很杂的东西,有时候需要你阅读源码,大多数可能书里面讲的不是太清楚,需要你在网上寻找答案。

推荐书籍:《java核心技术卷I》《Thinking in java》《java并发编程》《effictive java》《大话设计模式》

JVM

  1. 内存模型以及分区,需要详细到每个区放什么。

  2. 堆里面的分区:Eden,survival from to,老年代,各自的特点。

  3. 对象创建方法,对象的内存分配,对象的访问定位。

  4. GC的两种判定方法:引用计数与引用链。

  5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?

  6. GC收集器有哪些?CMS收集器与G1收集器的特点。

  7. Minor GC与Full GC分别在什么时候发生?

  8. 几种常用的内存调试工具:jmap、jstack、jconsole。

  9. 类加载的五个过程:加载、验证、准备、解析、初始化。

  10. 双亲委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。

  11. 分派:静态分派与动态分派。

JVM过去过来就问了这么些问题,没怎么变,内存模型和GC算法这块问得比较多,可以在网上多找几篇博客来看看。

推荐书籍:《深入理解java虚拟机》

操作系统

  1. 进程和线程的区别。

  2. 死锁的必要条件,怎么处理死锁。

  3. Window内存管理方式:段存储,页存储,段页存储。

  4. 进程的几种状态。

  5. IPC几种通信方式。

  6. 什么是虚拟内存。

  7. 虚拟地址、逻辑地址、线性地址、物理地址的区别。

因为是做android的这一块问得比较少一点,还有可能上我简历上没有写操作系统的原因。

推荐书籍:《深入理解现代操作系统》

TCP/IP

  1. OSI与TCP/IP各层的结构与功能,都有哪些协议。

  2. TCP与UDP的区别。

  3. TCP报文结构。

  4. TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用。

  5. TCP拥塞控制。

  6. TCP滑动窗口与回退N针协议。

  7. Http的报文结构。

  8. Http的状态码含义。

  9. Http request的几种类型。

  10. Http1.1和Http1.0的区别

  11. Http怎么处理长连接。

  12. Cookie与Session的作用于原理。

  13. 电脑上访问一个网页,整个过程是怎么样的:DNS、HTTP、TCP、OSPF、IP、ARP。

  14. Ping的整个过程。ICMP报文是什么。

  15. C/S模式下使用socket通信,几个关键函数。

  16. IP地址分类。

  17. 路由器与交换机区别。

网络其实大体分为两块,一个TCP协议,一个HTTP协议,只要把这两块以及相关协议搞清楚,一般问题不大。

推荐书籍:《TCP/IP协议族》

数据结构与算法

  1. 链表与数组。

  2. 队列和栈,出栈与入栈。

  3. 链表的删除、插入、反向。

  4. 字符串操作。

  5. Hash表的hash函数,冲突解决方法有哪些。

  6. 各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。

  7. 快排的partition函数与归并的Merge函数。

  8. 对冒泡与快排的改进。

  9. 二分查找,与变种二分查找。

  10. 二叉树、B+树、AVL树、红黑树、哈夫曼树。

  11. 二叉树的前中后续遍历:递归与非递归写法,层序遍历算法。

  12. 图的BFS与DFS算法,最小生成树prim算法与最短路径Dijkstra算法。

  13. KMP算法。

  14. 排列组合问题。

  15. 动态规划、贪心算法、分治算法。(一般不会问到)

  16. 大数据处理:类似10亿条数据找出最大的1000个数………等等

算法的话其实是个重点,因为最后都是要你写代码,所以算法还是需要花不少时间准备,这里有太多算法题,写不全,我的建议是没事多在OJ上刷刷题(leetcode等),剑指offer上的算法要能理解并自己写出来,编程之美也推荐看一看。

推荐书籍:《大话数据结构》《剑指offer》《编程之美》

Android

  1. Activity与Fragment的生命周期。

  2. Acitivty的四中启动模式与特点。

  3. Activity缓存方法。

  4. Service的生命周期,两种启动方法,有什么区别。

  5. 怎么保证service不被杀死。

  6. 广播的两种注册方法,有什么区别。

  7. Intent的使用方法,可以传递哪些数据类型。

  8. ContentProvider使用方法。

  9. Thread、AsycTask、IntentService的使用场景与特点。

  10. 五种布局: FrameLayout 、 LinearLayout 、 AbsoluteLayout 、 RelativeLayout 、TableLayout 各自特点及绘制效率对比。

  11. Android的数据存储形式。

  12. Sqlite的基本操作。

  13. Android中的MVC模式。

  14. Merge、ViewStub的作用。

  15. Json有什么优劣势。

  16. 动画有哪两类,各有什么特点?

  17. Handler、Loop消息队列模型,各部分的作用。

  18. 怎样退出终止App。

  19. Asset目录与res目录的区别。

  20. Android怎么加速启动Activity。

  21. Android内存优化方法:ListView优化,及时关闭资源,图片缓存等等。

  22. Android中弱引用与软引用的应用场景。

  23. Bitmap的四中属性,与每种属性队形的大小。

  24. View与View Group分类。自定义View过程:onMeasure()、onLayout()、onDraw()。

  25. Touch事件分发机制。

  26. Android长连接,怎么处理心跳机制。

  27. Zygote的启动过程。

  28. Android IPC:Binder原理。

  29. 你用过什么框架,是否看过源码,是否知道底层原理。

  30. Android5.0、6.0新特性。

Android的话,多是一些项目中的实践,使用多了,自然就知道了,还有就是多逛逛一些名人的博客,书上能讲到的东西不多。另外android底层的东西,有时间的话可以多了解一下,加分项。

推荐书籍:《疯狂android讲义》《深入理解android》

其他综合性的书籍也需要阅读,推荐:《程序员面试笔试宝典》《程序员面试金典》。

三、 项目

关于项目,这部分每个人的所做的项目不同,所以不能具体的讲。项目不再与好与不好,在于你会不会包装,有时候一个很low的项目也能包装成比较高大上的项目,多用一些专业名词,突出关键字,能使面试官能比较容易抓住重点。在聊项目的过程中,其实你的整个介绍应该是有一个大体的逻辑,这个时候是在考验你的表达与叙述能力,所以好好准备很重要。

面试官喜欢问的问题无非就几个点:

  1. XXX(某个比较重要的点)是怎么实现的?

  2. 你在项目中遇到的最大的困难是什么,怎么解决的?

  3. 项目某个部分考虑的不够全面,如果XXXX,你怎么优化?

  4. XXX(一个新功能)需要实现,你有什么思路?

其实你应该能够预料到面试官要问的地方,请提前准备好,如果被问到没有准备到的地方,也不要紧张,一定要说出自己的想法,对不对都不是关键,主要是有自己的想法,另外,你应该对你的项目整体框架和你做的部分足够熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值