正所谓不积跬步,无以至千里;不积小流,无以成江海。
作为程序员,基本功很重要,因为这是修炼内功的前提。
如果用武侠中的名词来比喻的话,现在很多的程序员会的这些功能模块的编写其实仅仅只是武功中的招式,
而那些大师级的人就是那种内功特别深厚的人,他们深谙Android内部框架和原理,随心所欲编写UI,自定义各种控件完全不在话下。当小兵碰到这些大师级的人物时,所有的招式全部都会被一一破解。
既然能力撑不起野心,那就静下心来学习,年轻人切忌急功近利、切忌浮躁盲目。
只要一步一个脚印踏踏实实地走好每一步,总会有好的结果。
如果生来是雄鹰,固然很好,展翅一跃,就能到达金字塔的顶峰,如果生来只是一只蜗牛,那更要有坚持不懈地毅力,才能到达金字塔的顶峰。
不要等到要面试的时候才准备面试题,所以现在的我有时间就整理一下那些常考的知识点,一来温故而知新,二来查漏补缺,看看自己,哪些地方还没有掌握。
1、方法重载与覆盖的区别?(Overload与Override的区别)
答:方法覆盖是父类直接多态性的一种表现,而方法重载则是一个类中多态性的表现。
2、 String 和StringBuffer的区别
答:String为不可变对象,一旦被创建,就不能修改它的值,对于已经存在的String对象的修改都是重新创建一个新的对象,然后再把新的值保存进去。
StringBuffer是可变对象,在修改值的时候不需要再新建对象,可以用append()方法在后面添加新的值,性能比String高。
3、接口和抽象类
答:接口(interface):接口是用来实现的,里面定义的方法在被子类覆盖时子类中的方法都是public的,里面的成员对象都是final&static,里面的方法都要被实现。
抽象类(abstract):是用来被继承的,里面定义的方法在被子类覆盖时子类的方法不一定都是public的,里面的成员对象不是final&static,在其内部中有abstract方法才会被必须实现。
4、集合类的区别:
java容器类库一共有两种主要类型,Collection和Map。
Collection:它是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。如:Collection.max(Collection coll); Collection.sort(List list);
分为List(ArrayList,LinkedList,Vector,都是有序,元素可重复),
Set(HashSet,TreeSet,LinkedHashSet,都是无序,且元素不可重复),
Queue(PriorityQueue,先进先出的容器)
Map:
HashMap,HashTable,TreeMap
主要其中几款常用到的:
ArrayList:底层用数组实现,查询效率高,增删效率低,轻量级,线程不安全
LinkedList:底层用双向循环链表,查询效率慢,增删效率高。
Vector:底层用数组实现,重量级,占据更多的系统开销,线程安全。
HashSet:底层用的是哈希算法。
HashMap:轻量级,线程不安全,允许key或者value是null。
HashTable:重量级,先出安全,不允许key或者value是null。
5、线程的四种状态:
答:产生(new),可执行(Runnable),死亡(Dead),停滞(Blocked)
线程的实现方式:extends Thread 和 implements Runnable
6、线程中wait,join,sleep,yield,notify,notifyall,synchronized,区别及联系
答:sleep():在指定时间内让当前正在执行的线程休眠。
wait():在线程休眠的同时释放掉机锁,其他线程可以访问该对象。wait必须在同步代码块中执行。
那怎样把对象锁收回来呢?第一种就是给其设定时间,时间一到就立刻收回来,如:wait(1000);
notify():收回对象锁的另一种方式,它的作用是唤醒在此对象监视器上等待的单个线程。当被执行notify()方法后,等待池中的线程就被放到了锁池中,并取得机锁,回到wait()前的中断现场。
notifyAll():唤醒在此对象监视器上等待的所有线程。
join():等待当前线程执行完。
yield():停止当前线程,让同等优先级的线程先运行,如果不是同等优先级的线程,则不执行。
synchronized:当它用来修饰一个方法或者一个代码块时,能够保证在同一时刻只有一个线程能够执行该段代码。
7、 final、finally、finanlize()的区别
答:final:用来修饰成员、方法和类,使得成员变量不能被修改,方法不能被覆写,类不能被继承。
finally:对java异常处理模型的最佳补充,不管有无异常发生,finally结构的代码总会被执行。
finalize:用于一些不容易控制,并且非常重要的资源的释放,例如:I/O的操作,数据的连接。
8、字节流和字符流的区别
答:字符流用到了缓冲区,而字符流没有用到。
在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
但是我们还是认为使用字节流更好,理由是:
所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,
而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
java面试题先写这么多,以后有需要再补充,至于某些设计模式、数据结构和算法,在这篇博文中暂时先不写。
下一篇就是写Android的面试题。
如果大家有什么的建议和看法,可以提出来,很高兴跟大家分享。
PS:所有优秀的人的理由是一样的,所有不优秀的人各有各的理由——优秀是一种习惯。
阅读(4663) | 评论(0) | 转发(0) |