杭州初级Java面试总结

五月底毕业,儿童节当天抵达杭州,经过四天的面试奔波,现在已经稳定工作~
想写点东西总结总结,毕竟是人生第一次啊

都说万事开头难,但这个’ 难 ’ 它也有个前提,就是你事前有没有做充分的准备。
大致准备工作就是以下几点

  1. 面试宝典
  2. 人事回答
  3. 综合职业素养
  4. 个人简历

1: 面试宝典
Java葵花宝典,涵盖面广泛内容充实详细,基础为重,网上能够下载的版本有很多,但内容都有些不怎么尽人意,需要自己再次整理了才清晰。

针对面试时技术方面重点的我认为是如下几点
- “==” 和”equals()”的区别
- 重写和重载
- 面向对象四大特征简述
- 抽象类,匿名内部类,接口相关的
- final,finally,finalize
- 异常、异常分类,异常处理机制
- 线程,线程同步,锁,死锁
- list,set ,map 常用集合的区别,用法原理
- 堆栈存值,session工作机制
- 垃圾回收机制
- sql , tomcat优化经验
- forward()与redirect() request和response
- 分页sql ,左联右联,索引和常见语句

我在面试的时候大概记得都被提问到了下面这些问题
- &和&&
- jsp内置对象
- 简述mvc
- 事物回滚操作如何实现
- session共享,负载均衡
- Java各数据类型间的转换
- 字符流字节流区别
- hashmap和hashtable
- list、map集合的遍历
- 实现多线程的几种方式
- Java中常见的异常类
- 如何实现单例模式,举例说明
- 冒泡排序,手写代码

2:人事回答
涉及最多的就是薪资、加班、出差、有无培训经历、工作经验这些
可以在某乎上多看看,只要回答的时候真诚真心,问题都不大
关键就是看谈吐表现,给人家留个好印象

3:综合职业素养
把职业素养也单独列出来,可见它的重要性,大学的时候我们也专门开了CQC课程,很早的就从学生心态向–准职业人–职业人 方面进行转变,身心态度是重中之重。只要面试前做好充分准备,面试时从容自信冷静沉稳,面试过后及时总结反思汲取经验,稳住,你能赢。

4:个人简历
简历是块敲门砖,一份好的简历可以大大加深面试官对你的好感。 简历的排版、内容一定要认真设计。这里还涉及一个自我介绍的问题,大部分公面试的时候都会边看你的简历,边让你自我介绍,
所以,简历中相关的关键字涉及到的技术,自己一定是非常熟悉的,被人问起时做到回答流利,逻辑清晰,不要给自己挖坑。自己的项目,电脑上一定要能运行来,有些公司复试的时候会要求展示。

PS:
还有很多新的技术,在杭州这边如果对它们有了解的话,是很好的加分项
我目前了解的主要就是这些:
redis分布式缓存、springboot微服务、oracle数据库、Linux系统、
nginx负载均衡,目前的主流开发工具IDEA和oracle下的PL-SQL

附上我整理好的葵花宝典,【直接把内容复制粘贴到word文档里边就行!!!】

1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
3、说说&和&&的区别。
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能, &还可以用作位运算符,
4、在JAVA中如何跳出当前的多重嵌套循环?
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
在switch中,表达式1只能是一个整数表达式或者枚举常量。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
7、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
11、”==”和equals方法究竟有什么区别?
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。
12、静态变量和实例变量的区别?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:
实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间。
静态变量不属于某个实例对象,而是属于类,只要程序加载了类的字节码,静态变量就会被分配空间,总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
13、是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,
而static方法调用时不需要创建对象,可以直接调用。
14、Integer与int的区别
int是java提供的8种原始数据类型之一
Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。
int的默认值为0,而Integer的默认值为null,
即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math类中提供了三个与取整有关的方法:ceil、floor、round,
ceil向上取整,Math.ceil(11.3)的结果为12, Math.ceil(-11.3)的结果是-11;
floor向下取整,Math.ceil(11.6)的结果为11 ,Math.ceil(-11.6)的结果是-12;
round方法,四舍五入,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,
所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
17、请说出作用域public,private,protected,以及不写时的区别
这四个作用域的可见范围如下表所示。
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。

作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×

18、Overload和Override的区别。
Overload是重载的意思,Override是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。
19、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。
20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口。
抽象类可以实现(implements)接口,
抽象类可以继承实体类。
抽象类中可以有静态的main方法。
21、写clone()方法时,通常都有一行代码,是什么?
clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。
22、面向对象的特征有哪些方面
继承:继承是从已有类得到继承信息创建新类的过程。
提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。

封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。
我们在类中编写的方法就是对实现细节的一种封装,
可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。

多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
方法重载(overload)实现的是编译时的多态性(也称为前绑定),
而方法重写(override)实现的是运行时的多态性(也称为后绑定)。

抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
23、java中实现多态的机制是什么?
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,
而程序调用的方法在运行期才动态绑定,
就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,
而不是引用变量的类型中定义的方法。
24、abstract class和interface有什么区别?
含有abstract修饰符的类即为抽象类,抽象类不能创建的实例对象。
含有abstract方法的类必须定义为抽象类,抽象类中的方法不必是抽象的。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected
但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
7. 一个类可以实现多个接口,但只能继承一个抽象类。

自己深厚的技术功底。
25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的method 不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!
native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。
关于synchronized与abstract合用的问题,我觉得也不行,因为在我几年的学习和开发中,从来没见到过这种情况,并且我觉得synchronized应该是作用在一个具体的方法上才有意义。而且,方法上的synchronized同步所使用的同步锁对象是this,而抽象方法上无法确定this是什么。
26、什么是内部类?
内部类就是在一个类的内部定义的类,
内部类中不能定义静态成员,
内部类可以直接访问外部类中的成员变量,
内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中
27、内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!
如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员

28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或实现其他接口。不仅是可以,而是必须!
29、super.getClass()方法调用
下面程序的输出结果是多少?
import java.util.Date;
public class Test extends Date{
public static void main(String[] args) {
31、String s = “Hello”; s = s + ” world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?
没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 “Hello”,
然后我们对s进行了+操作,这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为”Hello world!”,原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

32、是否可以继承String类?
String类是final类故不可以继承。

34、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,
它们可以储存和操作字符串,即包含多个字符的字符数据。
这个String类提供了数值不可改变的字符串。
而StringBuffer类提供的字符串进行修改。
当你知道字符数据要改变的时候你就可以使用StringBuffer。
另外,String实现了equals方法,而StringBuffer没有实现equals方法,
35、如何把一段逗号分割的字符串转换成一个数组?
1. 用正则表达式,代码大概为:String [] result = orgStr.split(“,”);
2. 用 StingTokenizer , 但这个我只是听说过,具体用法还不太了解
36、数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
37、下面这条语句一共创建了多少个对象:String s=”a”+”b”+”c”+”d”;
题目中的代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,
所以,上面的代码应该只创建了一个String对象。
写如下两行代码,
String s = “a” + “b” + “c” + “d”;
System.out.println(s == “abcd”);
最终打印的结果应该为true。
40、final, finally, finalize的区别。
  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成final类型,

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
41、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,
运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误
java编译器要求方法必须声明抛出可能发生的非运行时异常,
但是并不要求必须声明抛出未被捕获的运行时异常。
42、error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。
不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况。

43、Java中的异常处理机制的简单原理和应用。
异常是指java程序运行时(非编译)所发生的非正常情况或错误,
Java使用面向对象的方式来处理异常,
它把程序中发生的每个异常都分别封装到一个对象中来表示,该对象中包含有异常的信息。
Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,
所有异常的根类为java.lang.Throwable,
Throwable下面又派生了两个子类:Error和Exception,

Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,
例如,说内存溢出和线程死锁等系统问题。

Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,

Exception的系统异常是软件本身缺陷所导致的问题,
也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,
但在这种问题下还可以让软件系统继续运行或者让软件死掉,
例如,数组脚本越界, 空指针异常、类转换异常;
在Java中,对于系统异常,编译器不强制用try..catch处理或用throws声明,
所以系统异常也称为unchecked异常。

普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,
例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理,
所以普通异常也称为checked异常,

44、请写出你最常见到的5个runtime exception。
NullPointerException空指针异常 应用程序试图在需要对象的地方使用 为null 时抛出
NumberFormatException数字格式异常 当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常
ClassCastException类转换异常 当试图将对象强制转换为不是实例的子类时,抛出
IllegalArgumentException非法参数异常 表明向方法传递了一个不合法或不正确的参数
IndexOutOfBoundsException数组越界异常 当使用的数组下标超出数组允许范围时抛

46、java中有几种方法可以实现一个线程?
用什么关键字修饰同步方法?
stop()和suspend()方法为何不推荐使用?
有两种实现方法,
分别是继承Thread类new Thread()与实现Runnable接口new Thread(runnable)
用synchronized关键字修饰同步方法
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,
suspend()方法容易发生死锁。对任何线程来说,如果它们想恢复目标线程,
同时又试图使用任何一个锁定的资源,就会造成死锁。
47、sleep() 和 wait() 有什么区别?
sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间
wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁&#

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java是当前最热门的编程语言之一,也是很多公司重要的招聘岗位。内推小公司杭州,首先需要了解该公司的行业背景和业务需求,以及他们对岗位的职责和任职要求。同时,我们也需要了解面试官所考核的技能点,以便我们进行阐述和准备。 对于小公司来说,技术实力和人才储备都不会像大公司那么雄厚,所以他们更需要能够始终保持高效的开发者。在面试中,相信它们也会注重掌握候选人所学技能的实践能力和应用能力,因此一个好的面试表现应该能够让企业相信你能够快速熟悉并掌握他们所用的技术栈。另一方面,他们还想候选人具备自我提升和探索新技术的能力,能够跟上行业发展的步伐。 在面试的准备过程中,我们需要确保自己对Java核心技术和相关技术有着扎实的掌握程度。要熟悉JVM架构、Java多线程和并发机制、Spring框架以及Web应用程序的开发等。而JDK7或者JDK8的使用则展示了我们一位开发者在实际工作中,对业务需求的进行把控和实际项目经验的洞悉。最后,我们需要保证自己能够用简单明了的语言将现有技能展现,同时需要投入到实战练手的过程中,逐渐积累项目实战经验。 总的来说,小公司的Java开发岗位,招聘主要注重候选人的实践能力和项目经验,在面试及时的提供项目经历以及代码片段、自身思考随时展开,同时发挥自己的差异化优势,应用自己的特点去突显自身价值,给出龙虎榜式的面试表现,并有侧屏策略展示,会事半功倍,也更容易获得面试官的好感,从而得到心仪的工作机会。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值