记一次大三秋季成都某公司Java电话面试经历和总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_38239454/article/details/83381885

简历是在一个招聘app上投的。感兴趣的童鞋也可以试试~

本来HR是准备直接过去面试的,但是由于本人不在本地原因,所以直接约了时间面试

面试官是技术部的Leader,总共面试时间是40分钟左右吧!

好的,下面就直接进入正题吧!


面试官问:之前看到过你做的笔试题,做的很好,想了解下你现在学的情况

答:可以


面试官问:大学的主修课程是Java吗?有学过其他课程吗?

答:   学过什么就说什么,主修是Java~


面试官问:现在的课程是不是还在学? (他大体意思就是就职时间吧)

答:学校的课程到这个月底结束,后面就没有课程了,现在就是要准备就业的。


面试官问:看过你以前写过Android,学的怎么样?

答:(这里如实说的,本来就是在校的学生,学了一年安卓,虽然主修Java,但是安卓比Java学的更好一些)


面试官问:那你自己觉得自己做前端多得好还是后端做的好一些?

答:(我说的后端,Java是最好的语言)


面试官问:看到你的简历上有做过app和Java前后端结合的项目,大致是怎么做的,用了哪些技术?

答:这个项目是去年的实训项目,在老师的带领下完成的(这里巴拉巴拉说了一些.....,我现在还觉得这里回答得不好,因为不管一个项目怎么做的,和谁完成的,你都要自己的想法说出来。)


面试官问:线程和进程的区别和联系   

答: (这里我答的比较轻松,因为最近在复习这块的内容)

进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位

进程和线程的关系:

  1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。

  3. 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

  4. 线程是指进程内的一个执行单元,也是进程内的可调度实体。

线程与进程的区别:

  1. 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

  2. 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。

  3. 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。

  4. 系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。


面试官问:你用过哪些线程的方法呢?(他说的没有这么直接,理解出来是这样)

答:run()、sleep()等等   这里我说了很多,列一下吧

sleep()方法属于Thread类,主要的作用是让当前线程停止执行,把cpu让给其他线程执行,但不会释放对象锁和监控的状态,到了指定时间后线程又会自动恢复运行状态

wait()方法属于Object类,与sleep()的区别是当前线程会释放锁,进入等待此对象的等待锁定池。比方说,线程A调用Obj.wait(),线程A就会停止运行,而转为等待状态。至于等待多长时间? 那就看其他线程是否调用Obj.notify().其优势显而易见,成为多个线程之间进行通讯的有手段!

join()方法在某些情况下,子线程需要进行大量的耗时运算,主线程可能会在子线程执行结束之前结束,但是如果主线程又需要用到子线程的结果,换句话说,就是主线程需要在子线程执行之后再结束。这就需要用到join()方法

yield()方法一个线程调用yield()意味着告诉虚拟机自己非常乐于助人,可以把自己的位置让给其他线程(这只是暗示,并不表绝对)。但得注意,让出cpu并不代表当前线程不执行了。当前线程让出cpu后,还会进行cpu资源的争夺,但是能不能再次分配到,就不一定了

isAlive():测试线程是否处于活动状态。

setPriority(intnewPriority):更改线程的优先级。

getName():返回该线程的名称。

currentThread():返回对当前正在执行的线程对象的引用。

面试官问:那你再说一下你用到了线程上的哪些东西,怎么用的?

答:这里我是举例说明,把自己做的项目搬出来说的


面试官问:静态变量、局部变量区别

答:这里窸窸窣窣说了一些。。

静态变量

静态变量也称作类变量,是在类之中,方法之外,以static关键字申明的变量,其独立在对象之外,有许多对象共享的变量。静态变量在对象产生之前产生,并长驻于内存,其在JVM关闭时销毁。

成员变量

成员变量也称作实例变量、属性, 申明在类之中,方法之外的变量,随对象销毁而销毁。

局部变量

在方法或语句块中申明的变量,生命周期只在定义的{}之中,不能跨方法或语句块使用。

面试官问:怎么理解抽象方法,做的项目里有用过吗?

答:abstract....  抽象方法是用过的,和private一起,最近写的项目里没有怎么用到抽象方法,抽象方法里的私有方法用的比较多

一、使用abstract修饰符修饰的类被称为抽象类;

        抽象类不能实例化对象,只能被继承;

二、使用abstract修饰符修饰的方法被称为抽象方法;

        抽象方法不能有方法体,子类必须重写抽象类中所有的抽象方法;

三、抽象类中不一定包含抽象方法,但包含抽象方法的类一定是抽象类;


面试官问:队列和栈的不同点和相同点

答:之前学过数据结构,所以这块凭着记忆还能说上几句靠谱的

栈与队列的相同点:

1.都是线性结构。

2.插入操作都是限定在表尾进行。

3.都可以通过顺序结构和链式结构实现。、

4.插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。

5.多链栈和多链队列的管理模式可以相同。

栈与队列的不同点:

1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。

2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。

3.顺序栈能够实现多栈空间共享,而顺序队列不能。

4.栈先进后出,队列先进先出

面试官问:JavaScript的一些原理 现在更新的情况  面向对象中继承的实现

答:(当时电话听得不太清楚,所以说了几遍才知道在说JavaScript了)我说那天得到笔试题,里面有两道算法,三道脚本语言的题,但是第四题我是没做的,因为对JavaScript脚本语言其实不是很熟悉,只是在课余的时候看过这些,也不敢说都会。。emmm差不多就是这样说的

这里面试官其实在我回答得基础上,补充了一些东西,帮我引导


面试官问:Java的回收机制、虚拟机。。(类似这样的基础知识)

答:(我说的是其实大学里没有注重学底层知识,比如微机原理啊这类的,但是我在课余时间有看这方面的书,然后就大致的说了一下,然后就说了在实际编程中感受到的Java回收机制的优点,和C相比较)  

这里附带一份关于回收机制的博客:Java回收机制


面试官问:get与post方法

答:  (http协议请求...  后面说了一堆  什么安全、长度之类的。)

1.本质

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求

2.服务器端获取值的方法

get方式提交的数据,服务器端使用request.QueryString获取变量的值

post方式提交的数据,服务器端使用request.Form获取数据

3.安全性

get方式安全性低,post方式较安全。但是post方式执行效率要比get方式差一些。

4.机制

get是把参数数据队列加到提交表单的action属性所指的URL中,如:http://www.xxx.com?sessonid=db23434&name=hongten&age=20。在URl中,值和表单南日各个字段一一对应,并且这些在URl中对用户来说是可见的,即用户时可以看到的。如:name=hongten。

post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到action属性所指的URL地址,对于用户来说,这是透明的。

5.大小

URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

对于ASP程序,Request对象处理每个表单域时存在100K的数据长度限制。但如果使用Request.BinaryRead则没有这个限制。

由这个延伸出去,对于IIS 6.0,微软出于安全考虑,加大了限制。我们还需要注意:

1).IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB。
2).IIS 6.0默认上传文件的最大大小是4MB。
3).IIS 6.0默认最大请求头是16KB。
IIS 6.0之前没有这些限制。[参2]

总结:

one:get方式的安全性较post方式要差一些,所以,包含一些重要的信息的话,简易使用post数据提交方式

two:在做查询统计的时候,使用get方式要更好一些;而在做数据的添加,修改或删除操作时,建议使用post数据提交方式

面试官问:实例化对象的方式除了new以外,还没有什么其他方法?

答:

  1. 用new语句创建对象
  2. 运用反射机制
  3. 调用对象的clone()方法
  4. 运用反序列化手段

面试官问:重载和重写的区别?

  1. Overload为重载,Override为重写方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
  2. 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
  3. 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overload)。
    重载的方法是可以改变返回值的类型。

面试官问:抽象类和接口的区别?


答:抽象类:

  1. 抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
  2. 包含抽象方法的类,一定是抽象类。
  3. 抽象类只能被继承,一个类只能继承一个抽象类。

       接口:

  1. 全部的方法都是抽象方法,属型都是常量
  2. 不能实例化,可以定义变量。
  3. 接口变量可以引用具体实现类的实例
  4. 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法
  5. 接口之间可以多实现
  6. 一个具体类可以实现多个接口,实现多继承现象

面试官问:有没有了解过node.js

答:我说的是去年就在用了,但是也是初级,不能说很熟悉它


面试官后面说的就是一些闲聊吧,然后说了一些他们公司的情况,还有我的方向性的一些问题,整体给我的评价就是基础还是可以,但是应用上要比较弱一些,最后也问了 我还没有什么想问他的? 我问的如果我去公司上班,有不懂的地方,有没有同事之类的教一下。。这样 ,其实还有更好的问法吧,但是我认为只是第一次,说了这些,他应该大体是有数的,并且我也是刚毕业的大学生,更应该谦虚一点,而不是张口就要求什么吧。

面试官人很好,在问问题的过程中,也在我的基础中做了一些技术上的补充和解释,我个人觉得是有很好的帮助的,最后就是等他和他的部门商定再通知我后面的情况,最后说了谢谢。

以上就是大致的面试对话,不管有没有成功,有了这次的总结,个人认为自己的理论知识还需要更加巩固和深入去了解,多看书、去写代码、还有多做项目,很多经验也是在项目开发中得到的。其次就是礼貌、谦虚很重要!

欢迎各位博友对我的总结提出更好的建议,多多指点,多多指教

猜你喜欢

转载自blog.csdn.net/sinat_38239454/article/details/83381885