作为一个专科大二学生真的应该有紧迫感了

            好久都没写blog了,又要到秋招了,作为一个正在学习的大二学生来讲,离自己出去实习找工作的时间也不长了。最近看了些CSDN的技术博客论坛,想就此总结谈谈自己的想法。

           从学历谈起作为一个专科生出去面试和其他高校比起来确实差了很多很多,也就只能拼工作经验和腹中的那点墨水,因为很多大公司如果不看学历的话都比较喜欢招两年或者三年工作经验的人,要想提升自己就需要在大学好好表现自己,虽然大学生获得的什么奖项,公司不一定能看重,但是在面试官面前可能还是会产生些微妙的影响。在大学也要学着和别人沟通,一个良好的沟通交流能力可以让你在面试的时候不那么没有什么话说。所以我买了很多书看,不知道有不有作用,总之多看书对自己素养提升应该还是有影响的。还有就是较强的学习能力和逻辑思维能力也要训练,多看看算法,学学高数看看理论相关的知识,从别人的博客中得知,有的面试官看重面试者的学习能力,你有多久的工作经验代表你正处于什么级别,而学习能力代表你将来能达到什么级别。

总结了几点提升自己的能力过程:

  1. 看各大公司的面试题:因为从现在起看面试题可以学习很多很多的基础知识,各大面试官总会问道的问题就是Java Jvm的运行机制 垃圾处理机制等等(下面会专门讲解这些问题)。
  2. 进牛客网做些算法相关的题,经常做,就算每天一道,一年就是365道,至少自己也应该理解了线性查找,排序,递归,贪心算法,数组,链表,队列,这些基本的算法如果说熟悉运用应该还是有一定距离的,毕竟要熟悉这些算法的相关理论,还是要深度研究它底层的东西。
  3. 深入学习:在看面试题或者进入牛客网学习算法的时候,有可能会遇到一些自己没有接触过或者以前没有深入学习过的知识,例如HashMap内部实现与原理,这就需要去看源码了,其实看源码是很重要的一步,起步虽然很难,但是会让你受益良多。
  4. 熟系项目:在自己做过的项目中,肯定有自己没有好好优化的功能,后台写的可能也不怎么好,这个时候就需要自己去优化了,需要的是把一个功能吃透,这里可以看看“最代码”,“码云“这些网站,去看看别人的项目是怎么写的,就因为这些我就已经开始接触过Struts2,Maven,这些架构。
  5. 看书学习运用:我正在看得书有Java编程思想,算法,高等数学;还有进csdn看看别人写的博客,慕课网看看帖子等等。其实还有很多微信公众号是关于编程的。
  6. 看砍关于职业上相关的礼仪,职业上的事情,互联网发生的事。推荐第一财经周刊,36氪这些,可以多看看学习。
  7. 学习记录笔记:把自己每天的学习时间和学习内容记录下来,可以让自己更有动力学习,如果哪天自己的笔记本上没有在更新了,自己的良心肯定也会过不去吧。学习是一个枯燥的过程,必须让自己时刻保持有动力。

最近看到一篇《2017年一线城市程序员工资大调动》https://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78929087

中国一线程序员的平均工资为11770元,受到教育水平对工资有着显著的影响,工资随着工作经验的增长而增长,工资的地域分布也不均匀等等,虽然我们专科生经常听到其实自己经验丰富就足够了,自己能力够就行了,但是如果真把这些话当成自己为自己找的理由的话,就真的错了,要的是提升自己,让别人输的心服口服,我觉得在校读书的时候还是不要把自己是个专科生放下撇在一边,我说的不是精神上的,是在与别人比较素养,记忆力,学习能力的时候。虽然有些本科生确实还没有专科生好,但那也仅仅是有些。如果非要说比较的话专科的好学生比例是3:7;本科就是7:3;所以我们需要的是提升自己,真正的强大才是真的强大。其实真正的藐视不是大吵一架你吵赢了,而是沉默。

近期看博客面试题的总结和自己百度学习的作答

列举常问问题:

  1. 集合相关问题:

HashMap和Hashtable的区别:

答:1.从作者上就有不同,HashMap作者多了一个著名的Doug Lea,他是个并发编程大神;

       2.产生时间的不同:Hashtable在JAVA一发布就提供了键值映射的数据结构,而HashMap产生于JDK1.2

      3.继承的父类不同:HashMap是继承自AbstractMap类,而HashTable是Dictionary类。它们又同事实现了map,Cloneable(可复制),Serializable(可序列化)这三个接口(Dictionary类是个一个已经被废弃的类。父类都被废弃了,自然而然也就没人用它的子类Hashtable)

     4.对外提供的接口不同

Hashtable比HashMap多提供了elments()和contains()两个方法。

Contain()用来判断此集合是否包含传入的value

打印结果为true;

elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举

5.对Null key和Null value的支持不同:

作为一个专科大二学生真的应该有紧迫感了_第1张图片

Hashtable既不支持Null key也不支持Null value。如果传入null就会运行异常为空指针。

作为一个专科大二学生真的应该有紧迫感了_第2张图片

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键对应的值为null,当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

6.线性安全性的不同:

Hashtable是线程安全的,它的每个方法都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,而HashMap不是线程安全的,在多线程并发的环境下,可能产生死锁等问题。

但是,HashMap效率要比Hashtable要好很多,在日常使用当中,大部分时间是单线程操作的。HashMap把这部分操作解放出来了。当需要多线程操作的时候可以使用线程安全的ConcurrentHashMap。ConcurrentHashMap虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。因为ConcurrentHashMap使用了分段锁,并不对整个数据进行锁定。

7.遍历方式的内部实现上不同

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式

              当其他线程改变了HashMap的结构(增加,删除,修改元素的时候),将会抛出异常

              但是通过iterator的remove()方法移除元素就不会抛出异常,

这个要自己去理解。

尽管hashtable采用了原生的同步锁来保护数据安全。但是在出现迭代数据的时候,则无法保证边迭代,边正确操作。于是使用这个值来标记状态。一旦在迭代的过程中状态发生了改变,则会快速抛出一个异常,终止迭代行为。

              8.初始容量大小和每次扩充容量大小的不同:

              Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。

              9.计算hash值得方法不同:

              Hashtable直接使用对象的hashCode,Hashtable在计算元素的位置时需要进行一次除法运算,而除法运算是比较耗时的。

       HashMap的效率虽然提高了,但是hash冲突却也增加了。因为它得出的hash值的低位相同的概率比较高,而计算位运算

为了解决这个问题,HashMap重新根据hashcode计算hash值后,又对hash值做了一些运算来打散数据。使得取得的位置更加分散,从而减少了hash冲突。当然了,为了高效,HashMap只做了一些简单的位处理。从而不至于把使用2 的幂次方带来的效率提升给抵消掉。

未完待续……

你可能感兴趣的:(Java编程语言,Java面试常见题)