java基础面试大全(推荐7篇)
1、Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现
2、谈谈final, finally, finalize的区别
答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)
finalize—方法名。Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的3、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)
在两个运算符都能用在布尔运算中
当使用&&运算符时如果第一表达式为假就不再判断第二表达式的真假
当使用&运算符当第一表达式为假还是会去第二表达式
4、、HashMap和Hashtable的区别
答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
5、Collection 和 Collections的区别
答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
6、什么时候用assert
答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的7、GC是什么? 为什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。System.gc();
8、sleep()和 wait()有什么区别?
答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
9、Java有没有goto
答:java中的保留字,现在没有在java中使用
10、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有length的属性。String有有length()这个方法
11、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
12、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等,equals()和==方法决定引用值是否指向同一对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
13、给我一个你最常见到的runtime exception
IndexOutOfBoundsException14、error和exception有什么区别
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
15、List, Set, Map是否继承自Collection接口
答: List,Set是,Map不是
16、abstract class和interface有什么区别
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
17、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized
答:都不能
18、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
19、启动一个线程是用run()还是start()?
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
20、构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overload
21、是否可以继承String类
答:String类是final类故不可以继承
22、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
答:不能,一个对象的一个synchronized方法只能由一个线程访问。
23、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
答:会执行,在return前执行
24、用最有效率的方法算出2乘以8等於几
答:2 << 325、两个对象值相同(x.equals(y)== true),但却可有不同的hash code,这句话对不对 答:不对,有相同的hash code26、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的27、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上 答:swtich(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、short、char 或者 byte。long,string 都不能作用于swtich28、编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance(){
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次//使用时生成实例,提高了效率!
if(instance==null)
instance=new Singleton();
return instance;}
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
2013年安徽事业单位面试备考:自我认知基
础考查题目总结
自我认知题,也就是求职动机和拟任职位匹配性的考查在事业单位面试中出现的频率较多。涉及到专业类的考试,在面试中考查的范围,也就是出题的素材就会收缩范围,收缩的一个方向就是自我认知。自我认知题目的考查是看似杂乱无章但是实际有章可循的,只要抓住了这个“章”,我们的才会牢牢把握所有题目回答的根源,接下来安徽中公教育就根据自我认知题常考的五种题目来进行逐一解释说明。
1、个人信息
主要是有关考生自身的基本情况,如学历、专业、兴趣、爱好、恋爱婚姻、家庭、宗教信仰、理想抱负、人生观等。这些问题的答案没有正确和错误之分,考生可根据自身情况可以灵活回答。同时,考生应注意以下几点:(1)要与个人简历上的一致,如果前后矛盾,就会使考官怀疑你的诚信,从而埋下失败的种子;(2)尽量避免谈及与做好面试的工作无关的东西,即使这些是你的特长和优点;(3)要谦虚地表现自己的实力,而不要表现得惟我独尊,目中无人,这样会让考官对你的印象大打折扣。
2、教育和培训情况
在面试时,考官一般会验证你在简历中所说的是否属实,你所受的教育和培训是否有利于完成你准备应聘的工作。对自己所受的教育和培训要如实回答,不要把自己拔得太高,回答时要谦虚,不可旁若无人,夸夸其谈。要特别注意突出自己所受教育培训与所应聘工作之间的关系,要有具体分析,不能简单地下结论。涉及到医疗和教师岗位的考试中,作为提前的准备,考生更应该提前对自己以往的专业方面的实践经历进行必要的总结,明确提炼这些经历要集中表达自己在什么方面的纵向深度和职业素养。
3、求职动机
弄清面试者的求职动机,是考官的基本任务之一。大凡有经验的考官,都不会放过考查、——来源:安徽教师招考网(http://ah.zgjsks.com//)
验证应试者求职动机的任何机会。公职人员强调的是公仆意识、奉献精神、责任心、事业心等精神上的追求,所以在谈论自己的求职动机时,要真诚地显露出自己崇高的精神境界。考生对于名利、金钱绝不能表现出崇拜、贪婪的心态,否则你将被淘汰掉。但也不能显得过于清高,把物质利益贬得不值一提,这样也容易被判定为虚伪或不通人情而被刷掉。在这里建议考生参照马斯洛需求层次理论中的观点进行说明,我们要注意不做俗人,也不做圣人,只做凡人。
4、工作经验
用人单位一般会坚持这样的原则,即在素质能力相当的情况下,工作经验优先。有经验的考官,会询问应试者的工作经验,并验证其是否属实。在这部分问题中,考官想知道的是你过去的经验对你要应试的工作之间的匹配性。所以,你必须把有利于你做好应试工作的经验说清楚,特别要突出和强调其对于做好所需职位的关系,而不要谈论无关紧要的东西。有经验的考官往往采取案例性提问来验证你所说的工作经验。
5、未来计划和目标
封装:
继承:子类继承父类,除private修饰以外的所以方法和属性 多态:一个对象多种状态,可以把子类对象当作父类对象来看,一旦这样做了,就只能
去调用父类中原有定义的属性和方法,也就是子类中扩展的方法或属性就不能调用了。
抽象:
2、abstractclass 和interface的区别
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
3、final、finally、finalize的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
4、匿名内部类是否可以作为父类被其他类继承,或做为接口被实现?
匿名内部类不被继承也不能被实现,因为它没有名字,而一个内部类只要有名字就可以作为父类被继承,也可以作为借口被实现。
5、多线程有几种实现方法,同步有几种实现方法,都是什么?
多线程有两种实现方法,分别继承继承Thread类与实现runnable借口。
同步的实现方法有两种,分别是synchronized,wait与notify。
6、string 与 stringbuffer的区别?
String的长度是不可变的,而stringbuffer的长度是可变的。如果你对字符中的内容经常进行操作,特别是内容修改时,那么就要使用stringbuffer,如果最后需要使用string,那么使用stringbuffer的tostring()方法。
7、解析XML文件的几种方式和区别
DOM:处理大型文件时其性能下降的非常厉害
SAX:SAX是事件驱动型的XML解析方式,它是顺序读取XML文件,不需要一次性全部装载整个文件。
8、sleep()和wait()有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
9、数组有没有length这个方法?string有没有length这个方法?
数组没有length()这个方法,有length这个属性
String有length()这个方法
10、LinkedList、ArrayList和Vector的区别? ArrayList和Vector是采用数组方式存储数据,此数组元素总数大于实际存储的数据个数以便增加和插入元素,二者都允许直接序号索引元素,但是插入数据要移动数组元素等内存操作,所以它们索引数据快、插入数据慢。
Vector由于使用了synchronized同步方法(如add、insert、remove、set、equals、hashcode等操作),因此是线程安全,性能上比ArrayList要差。
LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!LinkedList双向链表,是指可以从first依次遍历至last(从头到尾),也可以从last遍历至first(从尾到头),但首尾没有构成环,不同于双向循环链表(注意区分):
11、hashmap与hashtable的区别?
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap类没有分类或者排序。它允许一个null键和多个null值。
Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。
12、Jsp有哪些内置对象,作用分别是什么?(至少能说出五个)
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
13、Javaservletapi中forward()与redirect()的区别?
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
14、重载(overload)与重写(override)的区别?
Overload:方法名相同,参数不同,与返回值无关
Override:方法名相同,参数相同,相同的返回值,建立在继承的基础之上
15、什么是单例模式,在程序中如何使用?
单例模式确保一个类只有一个实例 饿汉式单例类
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
懒汉式单例类
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if(instance==null)
instance=new Singleton();
return instance;
}
}
16、Servlet生命周期?
加载和实例化
初始化init()
请求处理service()
服务终止destroy()
17、spring中IOC与AOP的含义?
IOC:控制反转,是一种设计模式,一层含义控制权的转移,由传统的在程序中控制依赖转移到由容器来控制,第二层是依赖注入将互相依赖的对象分离,在spring配置文件中描述它们的依赖关心,它们的依赖关系只是在使用的时候才建立
AOP:面向切面,是一种编程思想,oop的延续,将系统中非核心的业务提取出来,进行单独的处理,比如事务、日志和安全等
Spring的AOP和IOC都是为了解决系统代码耦合度过高的问题,使用代码重用性高,易于维护,不过AOP和IOC并不是spring中特有的,只是spring把它们应用的更灵活方便。
18、hibernate与JDBC的区别?
相同点:
1>两者都是JAVA的数据库操作中间件。
2>两者对于数据库进行直接操作的对象都不是线程安全的,都需要及时关闭。
3>两者都可以对数据库的更新操作进行显式的事务处理。
不同点:
1>使用的SQL语言不同:JDBC使用的是基于关系型数据库的标准SQL语言,Hibernate使用的是HQL(Hibernate query language)语言
2>操作的对象不同:JDBC操作的是数据,将数据通过SQL语句直接传送到数据库中执行,Hibernate操作的是持久化对象,由底层持久化对象的数据更新到数据库中。3>数据状态不同:JDBC操作的数据是“瞬时”的,变量的值无法与数据库中的值保持一致,而Hibernate操作的数据是可持久的,即持久化对象的数据属性的值是可以跟数据库中的值保持一致的。
19、struts中的标签库有几种,分别是?
有5种标签,分别是:bean标签库、html标签库、logic标签库、tiles标签库nested标签库
20、Error与Exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,Exception表示需要捕捉或者需要程序进行处理的异常。
21、Collection和Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
22、GC是什么?为什么要有GC?(基础)。
GC是垃圾收集器。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
23、启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
24、&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
25、heap和stack有什么区别。
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方
式进行处理。
堆是栈的一个组成元素
26、List, Set, Map是否继承自Collection接口?
List,Set是,Map不是
27、MVC的各个部分都有那些技术来实现?如何实现?
MVC 是Model-View-Controller的简写。“Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View” 是应用的表示面(由JSP页面产生),“Controller” 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
28、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
29、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类
(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
30、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
31、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 不能,一个对象的一个synchronized方法只能由一个线程访问。
32、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
33、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现
java面试自我介绍篇一:
我叫赵,我的同学更都喜欢称呼我的英文名字,叫,六月的意思,是君的谐音。我来自安徽的市,在21年我以市全市第一名的成绩考上了大学,学的是计算机科学专业。不过,在大,我没法再像高中一样总是名列前茅了,到目前为止,我的综合学分排名是4%左右。在专业课程方面,我C++的编程能力比较强,一年以前就开始自学Java,在班级里是最早开始学Java的。
我参与过我们老师领导的一个项目,叫做聊天室,我负责开发了其中的及时通信系统的编写。在我们班,老师只挑选了我一个女生参与这个项目,主要是我写程序的效率比较高,态度也非常认真。除了学习和项目实习以外,我在学生会工作了两年,第一年做干事,第二年被提升为秘书长。大家对我的评价是考虑问题很周全,令人放心。
在我的求职清单上,贵公司是我的首选单位,原因和您面试过的很多同学都一样,出于对大品牌的信赖。毕竟,大品牌公司意味着很多我们需要的东西,比如培训和薪资,能和优秀的高素质的人在一起工作等等。
技术支持工程师也刚好是我的首选职位,因为我有技术背景,也有作为女性和和客户沟通的天然优势。还有,我不担心频繁出差,因为我身体素质很好,我已经坚持晨跑两年多了。在专业技术方面,我信赖公司的培训体系和我自己的快速学习能力!希望能有机会加入团队!
java面试自我介绍篇二:
我叫XXX,今年21岁,毕业于XX解放军信息工程大学计算机科学与技术专业,拥有扎实的Core Java基础,良好的编程风格;熟悉JSP+Servlet+JavaBean模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB;熟悉Tomcat,Jboss服务器等,熟悉基于Linux及Unix环境下的软件开发。
在校期间有多次社会实践经历,曾参与过学院网上虚拟实验室开发的需求分析,大学期间多次担任多课程的课代表。虽然实际工作经验不是很足,但军校四年培养了我充分的自信心和敬业精神以及扎实的学科基础知识和较强的专业技能,四年军校生活中,我严格要求自己,自觉、遵纪、守时。本人坦诚且有责任心,有独立进取的品性,勤于动手、善于动脑,适应新环境能力很强。能在最短时间内完成从学生到职业工作人员的转型,尽自己最大的努力融入新的工作生活。
请各位考官多多指教,谢谢!
java面试自我介绍篇三:
我叫朱新仲,今年22岁,毕业于山东理工大学计算机科学与技术专业。由于非常喜欢本专业,并期待将来从事专业方向的工作,因而在校期间十分注重对专业课的学习,拥有扎实的Core Java基础,良好的编程风格;熟悉JSP+Servlet+JavaBean模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB;熟悉Tomcat,Jboss服务器等,熟悉基于Linux及Unix环境下的软件开发。因为专业课知识掌握牢固,以专业第一的综合成绩毕业。
然而,我深知仅有专业知识是不够的,社会需要的是高素质复合型人才,因而在校期间学习之外,我积极参加各种社会实践活动,曾参与过学院网上虚拟实验室开发的需求分析。大三暑假曾在浪潮软件园实习,参与了电信增值软件开发与编挰,通过亲自动手及不断地向有经验的工程师请教学习,实习结束时我已经基本掌握整个Java平台的核心技术,独立编程能力大大提高。同时实习生活也让我意识到从事Java编程工作团队合作的重要性。
其实不是针对面试,基本仪容和礼仪在日常生活也是非常重要的,是一个人是否有教养,是否有素质的基本要求。
穿着:如无特别需要,不要着正装,休闲装即可。但是不要光脚丫子大拖鞋,背心吊带,男士不要穿露脚趾凉鞋。干净整洁即可,表示对本次面试的重视和对面试官的尊重。
仪容:女士如果想化妆的话,淡妆即可,素颜也可以。男士头发理一下,胡子剃掉。还是那句话,干净整洁,万万不可口腔有异味,或者身上有体味(特别是脚丫子臭味,绝对不行!)
礼仪:多说“请”,“您”,“谢谢”,记得进门后关门,前台给你倒的水走的时候记得拿出去扔掉。坐下来面对面试官要有坐像,不要跟在家里一样太随便,说话口齿清楚,慢一点说,不要跟打机关枪一样。切记,不可做作,细节处把握尺度就行。如果遇到和面试官有分歧的时候,立即闭嘴并闭嘴,不要争论,不要试图说服面试官,更不可耻笑或者蔑视面试官,哪怕你确实不知道比面试官高到哪里去了。记住,这是礼貌,跟你技术有多牛逼无关。
谦虚:任何时候,把自己放在一个相对低的姿态,你是来面试,不是来教育面试官的,抱着一种接受检阅和学习的态度面对面试,千万千万不要觉得自己主角光环加身,天下之大老子第一。相信我,这个世界牛人大把的,别人不说穿是因为给双方留面子,你可别认为是你真牛逼。谦虚,起码不会让你有成为一个跳梁小丑的机会。
2.专业基础知识
什么重要的话说三遍已经烂大街了,我就不说了。对于程序猿来说,专业基础知识绝对是重中之重,是面试成功的最基础要素。我说的专业基础知识,不是说你做了多少个项目,写了多少行代码,而是软件开发的基础知识。
我在面试的时候,有时候会遇到一些候选人,乍一看简历也有好几年工作经验,项目也写的满满的,但是却连“值类型引用类型本质区别”,“构造函数有哪些特点,何时被调用”,“类和接口区别是什么”这样的问题也回答不了,注意,是回答不了,也就是不知道,不是知道意思但是组织不了语言。这类候选人通常在连续回答不上几个问题后,开口为自己辩解:“我动手比较强,写代码都没问题,但是书上的概念我真的不太清楚”。能说出这个话,就说明此人根本就明白作为一个技术工作者最基本的专业素质是什么。(我在这里就不展开谈基础知识在开发中的作用以及对自身成长的作用,以后会专门撰文来讨论)所以千万不要觉得自己工作几年,有些代码经验就已经可以挑战更加高薪的工作。
在面试前,一定要先审视一下自身的基础知识掌握程度,如果有必要,自己买书回来或者网上找一些资料,利用空余时间系统的学习一遍,比如你所使用的语言本身,比如你擅长的框架底层实现,比如编译原理,比如多线程的知识,比如Http相关的知识等等。千万不要没有一点点基础知识储备或者基础知识储备不丰富就跑去面试,失败的几率非常大,如果眼睁睁的看着自己心仪的工作机会擦肩而过,我想是谁都会难过的吧。
3.沟通能力
面试的过程本质上就是一次沟通的过程,候选人在短短的时间内要尽量的向对方展现自己的长处,隐藏自己的短处,尽量让对方问题得到圆满答复并且留下较好印象。有些程序猿性格内向,在陌生人面前比较腼腆,话语不多。当然,这不能说是做错了,只能说是一些性格上的短处而已(如果很严重,那就有自卑的可能,需要重视并且纠正)。在面试时,候选人一定要精神焕发,昂首挺胸,眼神坚定,切记切记眼神不要飘忽不定,切记切记不要瓮声瓮气。有人会问我,“那我回答不上面试官的问题,或者一时没有想起来,心里没底了怎么办?”,怎么办??回答不上也不能被吓尿了啊,是吧,咱们遇到不会的问题,就老老实实的说“这个我不清楚”,或者“这个我不会”,千万千万不要不懂装懂,顾左右而言他,打算糊弄过去,我告诉大家,捣糨糊是过不去的,面试官的问题肯定是他非常清楚答案的,你忽悠面试官就是在忽悠你自己,有意思吗?当然,也不要胡乱回答,否则只会成为面试官和他的同事茶余饭后的笑话。
在面试时,尽量双眼直视面试官(但不要瞪着人家。。。),背挺直,手机开飞行模式,说话口齿清楚,利落干脆,回答得上就尽量说,回答不上直接说不知道,不要罗里吧嗦,特别是谈到薪酬,对方问你期望时,最好在现有基础上增加10%-20%,不要漫天要价,也不要不好意思,放心大胆的说出你的期望,如果对方觉得略高,会再跟你商量。务必一开口就给人真诚,干练,干脆,专业的印象。
4.过往项目经验
很多面试者不大重视自己的过往项目经验,这是我不能理解的地方。我每个做过的项目,虽然我在其中可能只是做一个模块甚至一个功能,但是我都会想办法搞清楚整个项目的业务流程,研发背景,内部模块功能,和外部如何实现集成,底层数据库的设计,整体系统架构设计等等。我在面试候选人的时候,通常都会问最近一个项目相关的东西,有很多候选人都会表示是ta自己一个人设计开发了这个项目,但是连有哪些功能模块,系统结构(注意,不是架构)都回答不出来。有些面试者,在面试一些中高级的程序员时,很喜欢从过往经验入手,你再一遍介绍的时候他可能随时提问。因为这样有2个好处,第一是预防一问一答的形式,候选人事先背了很多问题的答案,第二是从候选人过往项目经验入手,除了可以看出候选人是否虚假构建了项目经验,还可以判断该候选人对开发细节的把握以及对一些技术点的反应能力和掌握情况,毕竟“突然袭击”比“瞄准射击”要更加考验候选人。
所以,在面试前,应该好好把自己以前的项目经验都捋一捋,特别是上一个项目,从业务流程到产品设计到系统开发,特别是项目内一些你做过的细节地方,你准备在面试时拿出来说的,必须以此为点,相关的东西都查查资料看一看。再一个就是项目里面的闪光点,什么叫闪光点,就是高大上的东西,需要自己多了解了解,在面试的时候拿出来说也可以加分。比如我以前做过一个项目,是一个类似网页爬虫的东西,把爬下来的东西根据数据库里面的地址上传到设置的路径,再删除这个文件。当时我还是比较小白的阶段,懵懵懂懂的听人说多线程好像效率比较高,于是就用到了new Thread的多线程方式,确实解决了一些效率上的问题。后来换工作时,我又把这个项目拿出来看了一遍,并且着重看了看多线程相关的东西,知道了还有异步编程(当时好像C#还没有Task),于是就自己学习了一番,然后动手做做实验什么的,把多线程这一块理论联系实际又巩固了一遍。果然,后来面试的时候谈到这个上面的时候,面试官对这一块很有兴趣,越问越深,我也知无不言,为自己增分不少。
5.不要作弊
有些企业在面试程序员的时候,喜欢一开始扔一张试卷让候选人先做,然后再去面试。暂且先不谈做卷子考察方式的好坏,在做试卷的时候,万万不要用移动设备上网查询答案。本身作弊的行为就让人不齿,如果面试官在暗处进行观察,发现你作弊,那就太尴尬了。会就是会,不会就是不会,即便你用手机查答案把试卷写的满满的,在接下来面试的时候,面试官再就试卷上的问题展开一问你,你还是不会。所以不管有没有人监督,在面试的做试卷环节,千万不要作弊。
6.热门技术点的掌握
其实这是个增分项目,如果上面几点都已经通过面试的考核,那么这一点就会成为你绝对的亮点。首先要先自己了解一下当前热门的技术,然后通过分析自己申请的职位,去看看可能涉及到哪些热门的技术,然后再去专门的找资料进行学习和动手实验。比如你是搞互联网的,那么最好学习一下负载均衡相关的技术,学习分布式数据库的技术,学习缓存技术,学习页面静态化的技术;如果你是搞数据分析的,那么最好学习一下Hadoop,学习一下微软的Cube,学习一下惠普的Vertical;如果你是搞iOS的,那么可以看看Swift,可以看看Xamarin,可以看看WebSocket等等,当然,我只是举几个例子,不一定非要这样对应,你如果是搞Java的,也可以去看看Pathon如果你是搞.net的,也可以去看看Ruby on rails等等。所谓技多不压身,就是这个道理。
#拓展知识#
java基础:
1.接口的意义(百度)
规范、扩展、回调
2.抽象类的意义(乐视)
为其子类提供一个公共的类型
封装子类中得重复内容
定义抽象方法,子类虽然有不同的实现但是定义是一致的
3.内部类的作用(百度,乐视)
内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
创建内部类对象的时刻并不依赖于外围类对象的创建。
内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
内部类提供了更好的封装,除了该外围类,其他类都不能访问
4.父类的静态方法能否被子类重写,为什么?(猎豹)
不能
子类继承父类后,用相同的静态方法和非静态方法,这时非静态方法覆盖父类中的方法(即方法重写),父类的该静态方法被隐藏(如果对象是父类则调用该隐藏的方法),另外子类可继承父类的静态与非静态方法,至于方法重载我觉得它其中一要素就是在同一类中,不能说父类中的什么方法与子类里的什么方法是方法重载的体现
5.举1-2个排序算法,并使用java代码实现(美团)
6.java虚拟机的特性(百度、乐视)
2.斐波那契数列的递归与遍历实现
3.给定2,3,5面值的硬币若干,给出一个数字,计算拼凑这个数字最少用到硬币的个数
4.有10亿个数字,如何找出top100.(引申问题,链表与数组的的选用)
5.HashMap的内部数据结构(第二次问),Rehash的实现
6.ConcurrentHashMap的实现原理,与HashTable区别是什么(分Segment)
7.Java有哪些同步机制
8.数据库有哪些锁,哪些引擎,分别共享锁和排他锁的区别,应用场景有什么不同
9.B树和B+树的区别,为什么选用B+树作为数据库索引,B+数的孩子节点索引用什么方法查找(二分法……),为什么mysql推荐自增int作为主键
10.redis的分布式锁用了什么方法实现(setNX背后的数据结构)
11.synchronize都能修饰什么,有什么区别
这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。
2)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?
lock接口在多线程和并发编程中最大的优势是它们为读和写分别提供了锁,它能满足你写像ConcurrentHashMap这样的高性能数据结构和有条件的阻塞。Java线程面试的问题越来越会根据面试者的回答来提问。我强烈建议在你去参加多线程的面试之前认真读一下Locks,因为当前其大量用于构建电子交易终统的客户端缓存和交易连接空间。
3)在java中wait和sleep方法的不同?
通常会在电话面试中经常被问到的Java线程面试问题。最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。
4)用Java实现阻塞队列。
这是一个相对艰难的多线程面试问题,它能达到很多的目的。第一,它可以检测侯选者是否能实际的用Java线程写程序;第二,可以检测侯选者对并发场景的理解,并且你可以根据这个问很多问题。如果他用wait和notify()方法来实现阻塞队列,你可以要求他用最新的Java 5中的并发类来再写一次。
5)用Java写代码来解决生产者――消费者问题。
与上面的问题很类似,但这个问题更经典,有些时候面试都会问下面的问题。在Java中怎么解决生产者――消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。
6)用Java编程一个会导致死锁的程序,你将怎么解决?
这是我最喜欢的Java线程面试问题,因为即使死锁问题在写多线程并发程序时非常普遍,但是很多侯选者并不能写deadlock free code(无死锁代码?),他们很挣扎。只要告诉他们,你有N个资源和N个线程,并且你需要所有的资源来完成一个操作。为了简单这里的n可以替换为2,越大的数据会使问题看起来更复杂。通过避免Java中的死锁来得到关于死锁的更多信息。
7) 什么是原子操作,Java中的原子操作是什么?
非常简单的java线程面试问题,接下来的问题是你需要同步一个原子操作。
8) Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?
自从Java 5和Java内存模型改变以后,基于volatile关键字的线程问题越来越流行。应该准备好回答关于volatile变量怎样在并发环境中确保可见性、顺序性和一致性。
9) 什么是竞争条件?你怎样发现和解决竞争?
这是一道出现在多线程面试的高级阶段的问题。大多数的面试官会问最近你遇到的竞争条件,以及你是怎么解决的。有些时间他们会写简单的代码,然后让你检测出代码的竞争条件。可以参考我之前发布的关于Java竞争条件的文章。在我看来这是最好的java线程面试问题之一,它可以确切的检测候选者解决竞争条件的经验,or writing code which is free of data race or any other race condition。关于这方面最好的书是《Concurrency practices in Java》。
10) 你将如何使用thread dump?你将如何分析Thread dump?
在UNIX中你可以使用kill -3,然后thread dump将会打印日志,在windows中你可以使用”CTRL+Break”。非常简单和专业的线程面试问题,但是如果他问你怎样分析它,就会很棘手。
11) 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
这是另一个非常经典的java多线程面试问题。这也是我刚开始写线程程序时候的困惑。现在这个问题通常在电话面试或者是在初中级Java面试的第一轮被问到。这个问题的回答应该是这样的,当你调用start()方法时你将创建新的线程,并且执行在run()方法里的代码。但是如果你直接调用run()方法,它不会创建新的线程也不会执行调用线程的代码。阅读我之前写的《start与run方法的区别》这篇文章来获得更多信息。
12) Java中你怎样唤醒一个阻塞的线程?
这是个关于线程和阻塞的棘手的问题,它有很多解决方法。如果线程遇到了IO阻塞,我并且不认为有一种方法可以中止线程。如果线程因为调用wait()、sleep()、或者join()方法而导致的阻塞,你可以中断线程,并且通过抛出InterruptedException来唤醒它。我之前写的《How to deal with blocking methods in java》有很多关于处理线程阻塞的信息。
13)在Java中CycliBarriar和CountdownLatch有什么区别?
这个线程问题主要用来检测你是否熟悉JDK5中的并发包。这两个的区别是CyclicBarrier可以重复使用已经通过的障碍,而CountdownLatch不能重复使用。
14) 什么是不可变对象,它对写并发应用有什么帮助?
另一个多线程经典面试问题,并不直接跟线程有关,但间接帮助很多。这个java面试问题可以变的非常棘手,如果他要求你写一个不可变对象,或者问你为什么String是不可变的。
15) 你在多线程环境中遇到的共同的问题是什么?你是怎么解决它的?
【java基础面试大全】推荐阅读:
软件测试基础面试题09-12
java基础习题09-17
java面试小结06-18
java基础学习总结01-13
java程序员面试题(笔试&面试题)10-07
java基础教学大纲09-26
java经典面试题汇总07-17
java面试英文自我介绍11-26
高级Java面试题集合12-07
java前端开发面试题03-19