几道常问的题

是在牛客网上的某大神面经里看到的,大神总结了一下问题,我给写上答案方便查阅,有不对的请留言,随时修改。


J2SE基础

九种基本数据类型的大小,以及他们的封装类
基本类型大小/byte封装类
byte1Byte
short2Short
char2Character
int4Integer
float4Float
double8Double
long8Long
boolean-Boolean
Switch能否用string做参数?

在jdk7之前不能,jdk7之后可以。

equals与==的区别。
  • == 是一个运算符。
  • Equals则是string对象的方法,可以.(点)出来。

对于String对象来说,实例化后的对象可以储存在不同的位置,但是储存内容是相同的,此时,如果要比较储存内容,就要用equals。

Object有哪些公用方法?
  • clone()
  • equals()
  • hashcode()
  • toString()
  • notify()
  • notifyAll()
  • wait()
  • getClass()
Java的四种引用,强弱软虚,用到的场景

不知道

Hashcode的作用

hashcode用来鉴定2个对象是否相等的,通常要求与equals逻辑一致,一般在Collection和Map中使用。

ArrayList、LinkedList、Vector的区别
  • ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  • 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
  • Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。
  • Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
  • LinkedList 还实现了 Queue 接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等.

一般用的都是ArrayList,详细见这里

String、StringBuffer与StringBuilder的区别

String用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。
要是需要多次更改,需要用到StringBulider或者StringBuffer,两者不同点在于StringBuffer是线程安全的。
StringBulider转为String:
String m = sb.toString();
String转StringBuilder:
StringBuilder sb = new StringBuilder(m);

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

详细见这里

HashMap和HashTable的区别。

这里

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

为了线程安全。
从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。

TreeMap、HashMap、LindedHashMap的区别。

TreeMap就是红黑树的结构
LinkedHashMap使用双向链表来维护key-value对的次序

Collection包结构,与Collections的区别。

Collection是集合类的上级接口,子接口主要有Set 和List、Map。
Collections是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

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

如果try中有异常并且try中有return这时候正常执行顺序是try—-catch—finally— return
总之 finally 永远执行!

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

详情

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

封装,继承,多态

Override和Overload的含义去区别。

重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
重写的时候,是覆盖之前的方法体,执行新写的方法体。

interface与abstract类的区别。
  • abstract class 在Java中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
  • 在abstract class 中可以有自己的数据成员,也可以有非abstarct的方法。
  • 抽象类中可以有非抽象方法。接口中则不能有实现方法。
    待补充
Static class 与non static class的区别。

详情

java多态的实现原理。

不知道

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

Thread是继承了Thread类,Runnable是实现了Runnable接口,Runnable可以重用代码,更好一些。

线程同步的方法

sychronized、lock、reentrantLock等。

锁的等级:方法锁、对象锁、类锁。
写出生产者消费者模式。
ThreadLocal的设计理念与作用。
ThreadPool用法与优势。

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
第三:提高线程的可管理性。
先定义一个线程池ThreadPoolExecutor,使用的时候用executor来调用runnable。

Concurrent包里的其他东西

ArrayBlockingQueue、CountDownLatch等等。

wait()和sleep()的区别。

在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备

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

在固定长度或长度不需要计算的时候for循环效率高于foreach.
在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便.

Java IO与NIO。

IO是面向流的,NIO是面向缓冲区的
详情

反射的作用于原理。
泛型常用特点,List能否转为List。

向上转型是安全的

解析XML的几种方式的原理与特点:DOM、SAX、PULL。
  • SAX是基于事件流的解析
    当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据
  • DOM是基于XML文档树结构的解析
    解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构

详情

Java与C++对比。
Java1.7与1.8新特性。
设计模式:单例、工厂、适配器、责任链、观察者等等。
JNI的使用。

JVM

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

分为栈,堆,方法区,方法区中存放.class文件的内容和静态成员以及类型数据,栈存放引用,堆存放实例化的对象。

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

详情

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

虚拟机遇到new 关键字的时候,首先去常量池中寻找有没有这个类的符号引用,并且检查该引用的类是否已经被加载,解析,和初始化过,如果没有则会先执行该类的加载过程, 在通过检查后,虚拟机为该新生对象分配内存。
访问定位包括句柄访问和直接指针访问。

GC的两种判定方法

引用计数与引用链

GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
GC收集器有哪些?CMS收集器与G1收集器的特点
Minor GC与Full GC分别在什么时候发生?
几种常用的内存调试工具

jmap、jstack、jconsole。

类加载的五个过程

加载、验证、准备、解析、初始化

双亲委派模型

Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。

分派:静态分派与动态分派

操作系统

进程和线程的区别

a.地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
c.调度和切换:线程上下文切换比进程上下文切换要快得多。
d.在多线程OS中,进程不是一个可执行的实体。

线程之间如何实现资源共享:

1将要共享的数据封装成另外一个对象,对这个对象进行操作
2将Runnable作为一个内部类,并在外部类中定义要共享的成员变量。

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

如果一个进程集合里面的每个进程都在等待只能由这个集合中的其他一个进程(包括他自身)才能引发的事件,这种情况就是死锁。
死锁的四个必要条件
互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。
1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配,以避免死锁。
4.通过破除死锁四个必要条件之一,来防止死锁产生。

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

详情

进程的几种状态
  • 运行态:进程占用CPU,并在CPU上运行;
  • 就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
  • 阻塞态:进程因等待某件事发生而暂时不能运行;
线程的几种状态
  • 新建状态
  • 就绪状态
  • 运行状态
  • 阻塞状态
  • 死亡状态
IPC几种通信方式

管道/FIFO/共享内存/消息队列/信号
详情

什么是虚拟内存
虚拟地址、逻辑地址、线性地址、物理地址的区别

TCP/IP

OSI与TCP/IP各层的结构与功能,都有哪些协议
OSI中的层功能TCP/IP协议族
应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层数据格式化,代码转换,数据加密没有协议
会话层解除或建立与别的接点的联系没有协议
传输层提供端对端的接口TCP,UDP
网络层为数据包选择路由IP,ICMP,RIP,OSPF,BGP,IGMP
数据链路层传输有地址的帧以及错误检测功能SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层以二进制数据形式在物理媒体上传输数据ISO2110,IEEE802,IEEE802.2
TCP与UDP的区别
区别TCPUDP
是否连接面向连接面向非连接
传输可靠性可靠不可靠
应用场合传输大量数据少量数据
速度
TCP报文结构
TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用

三次握手:连接请求+同意请求+确认
四次挥手:FIN+ACK+FIN+ACK
详情

TCP拥塞控制
TCP滑动窗口与回退N针协议
Http的报文结构
Http的状态码含义
Http request的几种类型
Http1.1和Http1.0的区别
Http怎么处理长连接

HTTP1.1规定了默认保持长连接(HTTP persistent connection ,也有翻译为持久连接),数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。

Cookie与Session的作用于原理

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

电脑上访问一个网页,整个过程是怎么样的

DNS、HTTP、TCP、OSPF、IP、ARP

Ping的整个过程。ICMP报文是什么
C/S模式下使用socket通信,几个关键函数

accept,getOutputStream

IP地址分类
路由器与交换机区别

数据结构与算法

链表与数组
队列和栈,出栈与入栈
链表的删除、插入、反向
字符串操作
Hash表的hash函数,冲突解决方法有哪些

开放定址,链地址,再散列法等。

各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定
快排的partition函数与归并的Merge函数
对冒泡与快排的改进
二分查找,与变种二分查找
二叉树、B+树、AVL树、红黑树、哈夫曼树
二叉树的前中后续遍历:递归与非递归写法,层序遍历算法
图的BFS与DFS算法,最小生成树prim算法与最短路径Dijkstra算法
KMP算法
排列组合问题
动态规划、贪心算法、分治算法。(一般不会问到)
大数据处理:类似10亿条数据找出最大的1000个数………等等

Android
1. Activity与Fragment的生命周期。
2. Acitivty的四中启动模式与特点。
1. Standard模式(默认)
我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。

  1. SingleTop模式
    这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。

  2. SingleTask模式
    如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。

  3. SingleInstance模式
    当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。

  4. Activity缓存方法。
  5. Service的生命周期,两种启动方法,有什么区别。
    1 通过startService

      Service会经历 onCreate -> onStart
     stopService的时候直接onDestroy
      如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。下次调用者再起来可以stopService。

2 通过bindService

  Service只会运行onCreate, 这个时候服务的调用者和服务绑定在一起

  调用者退出了,Srevice就会调用onUnbind->onDestroyed所谓绑定在一起就共存亡了。并且这种方式还可以使得

调用方(例如)调用服务上的其他的方法。
5. 怎么保证service不被杀死。
6. 广播的两种注册方法,有什么区别。
1.在AndroidManifest.xml文件中注册。
好处:一旦应用程序被安装到手机里,BroadCast Receiver就开始生效。无论应用程序进程是否运行,运用程序是否在开启状态下都可以接受到广播事件。
2.通过代码的方式注册广播
好处:一旦运用程序停止,广播也跟着停止
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新特性。
31. 五大组件
activity,broadcast receiver,service,content provider,intent

参考:http://www.nowcoder.com/discuss/3043

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值