学习啦 > 实用范文 > 个人写作 > 自我评价 > 简历自我评价 > java工程师个人简历自我评价_JAVA软件工程师面试简历的自我评价(3)

java工程师个人简历自我评价_JAVA软件工程师面试简历的自我评价(3)

时间: 晶戌838 分享

java工程师个人简历自我评价_JAVA软件工程师面试简历的自我评价

  更多热门的Java工程师面 试简历、笔题、薪资待

  ☟欢迎赏析

  jjava工程师个人简历自我评价△熟练使用mvc框哦架搭建项

  jjava工程师个人面试简历△了解Linux

  jJava工程师面题及答案△GET POST区

  jjava工程师待遇前景△Java软件工程师月薪范围

  jjava工程师招聘榜△Javaweb开发工程师

  Java工程师面试题及答案

  一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?

  1. String是字符串常量,StringBuffer和StringBuilder是字符串变量。StringBuffer是线程安全的,StringBuilder是非线程安全的。具体来说String是一个不可变的对象,每次修改String对象实际上是创新新对象,并将引用指向新对象。效率很低。StringBuffer

  是可变的,即每次修改只是针对其本身,大部分情况下比String效率高,StringBuffer保证同步(synchronized),所以线程安全。StringBuilder没有实现同步,所以非线程安全。但效率应该比StringBuffer高。StringBuffer使用时最好指定容量,这样会比不指定容量快30%-40%,甚至比不指定容量的StringBuilder还快。

  二、VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?

  vector是同步的,arraylist和linkedlist不是同步的。底层方面,vector与arraylist都是基于object[]array实现的,但考虑vector线程安全,所以arraylist效率上回比vector较快。元素随机访问上,vector与arraylist是基本相同的,时间复杂度是O(1),linkedlist的随机访问元素的复杂度为O(n)。但在插入删除数据上,linkedlist则比arraylist要快很多。linkedlist比arraylist更占内存,因为linkedlist每个节点上还要存储对前后两个节点的引用。

  三、HASHTABLE, HASHMAP,TreeMap区别

  Hashmap和HashTable都实现了Map接口,但HashTable是线程安全的,HashMap是非线程安全的。HashMap中允许key-value值均为null,但HashTable则不允许。HashMap适合单线程,HashTable适合多线程。HashTAble中的hash数字默认大小是11,增加方式为old*2+1,HashMap中的hash默认大小为16,且均为2的指数。TreeMap则可以将保持的数据根据key值进行排列,可以按照指定的排序方式。默认为升序。

  四、ConcurrentHashMap和HashTable的区别

  两者均应用于多线程中,但当HashTable增大到一定程度时,其性能会急剧下降。因为迭代时会被锁很长时间。但ConcurrentHashMap则通过引入分割来保证锁的个数不会很大。简而言之就是HashTable会锁住真个map,而ConcurrentHashMap则只需要锁住map的一个部分。

  五、Tomcat,apache,jboss的区别

  Tomcat是servlet容器,用于解析jsp,servlet。是一个轻量级的高效的容器;缺点是不支持EJB,只能用于Java应用。

  Apache是http服务器(web服务器),类似于IIS可以用来建立虚拟站点,编译处理静态页面。支持SSL技术,支持多个虚拟主机等功能。

  Jboss是应用服务器,运行EJB的javaee应用服务器,遵循javaee规范,能够提供更多平台的支持和更多集成功能,如数据库连接,JCA等。其对servlet的支持是通过集成其他servlet容器来实现的。如tomcat。

  六、GET POST区别

  get是从服务器上获取数据,post是向服务器发送数据。

  get是把参数数据队列加到提交表单的action属性所指的URL中,值和表单内各个字段一一对应,在url中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在html header内一起传送到action属性所指的url地址。

  对于get方式,服务区端用request.QueryString获取变量值,对于post方式,服务器端用request.Form获取提交的数据。get传送的数据量较小,post较大,一般不受限制。get安全性比post要低,但执行效率较高。

  七、SESSION, COOKIE区别

  session数据放在服务器上,cookie则放在客户浏览器上。cookie不太安全,因为可以分析出本地cookie,并进行cookie欺骗,考虑安全应使用session。session会在一定时间内保存在服务器上,当访问增多时,会比较占用服务器的性能,考虑减轻服务器压力则应该使用cookie。单个cookie保持的数据不超过4k,很多浏览器都限制要给站点最多保存20个cookie。

  八、Servlet的生命周期

  主要分三个阶段:初始化——调用init()方法,响应客户请求阶段——调用service()方法,终止阶段——调用destroy方法。工作原理:客户发送一个请求,servlet调用service方法对请求进行响应,即对请求方式进行匹配,选择调用doGet、doPost方法等,然后进入对于的方法中调用逻辑层的方法,实现对客户的响应。自定义的servlet必须首先servlet接口。

  具体生命周期包括:装载Servlet、服务器创建Servlet实例、服务器调用Servlet的init()方法、客户请求到达服务器、服务器创建请求对象、服务创建相应对象、服务器激活Servlet的service方法,请求对象和响应对象作为service()方法的参数、service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息、service()方法可能激活其他方法以处理请求,如doGet(),doPost()

  九、HTTP 报文包含内容

  请求方法包括GET,POST,HEAD,PUT,TRACE,OPTIONS,DELETE。请求头如:Host、User-Agent、Connection、Accept-Charset等。请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少。请求正文为可选部分,如get就没有。

  十、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入

  使用PreparedStatement可以提升代码的可读性和可维护性,可以尽最大可能提高性能。因为Statement每次执行一个SQL命令都会对其编译,但PreparedStatement则只编译一次。PreparedStatement就类似于流水线生产。另一方面PreparedStatement可以极大提高安全性:它对传递过来的参数进行了强制参数类型转换,确保插入或查询数据时,与底层数据库格式匹配。

  SQL注入:就是通过将sql命令插入到web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令。如sql命令:select id from test where name='1' or 1=1; drop table test,但用PreparedStatement就可以避免这种问题。

  十一、redirect, forward区别

  redirect:服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示是新的url。forward是指服务器请求资源,直接访问目标地址url,把响应的内容读取过来并再发送给浏览器,浏览器并不知道资源从哪里来,所以地址栏不变。

  redirect不能共享数据,forward转发页面和转发到页面可以贡献request中的数据。redirect用于注销,forward用于登陆。forward效率高于redirect。

  十二、关于JAVA内存模型,一个对象(两个属性,四个方法)实例化100次,现在内存中的存储状态,几个对象,几个属性,几个方法。

  Java新建的对象都放在堆里,如果实例化100次,堆中产生100个对象,一般对象与其属性和方法属于一个整体,但如果属性和方法是静态的,则属性和方法只在内存中存一份。

  十三、谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的

  一级缓存为session基本的缓存,是内置的不能卸载。一个Session做了一个查询操作,它会把这个结果放在一级缓存中,如果短时间内这个session又做了同一个操作,那么hibernate就直接从一级缓存中获取数据。

  二级缓存是SessionFactory的缓存,分为内置缓存和外置缓存两类。即查询结果放在二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中获取结果。适合放在二级缓存中的数据包括:很少被修改的数据,不是很重要的数据,允许出现偶偶并发的数据,不会被并发访问的数据,参考数据。不适合放在二级缓存中的数据:经常被修改的数据,财务数据,绝对不允许出现并发,与其他应用共享的数据。

  十四、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化

  能够分析类能力的程序称为反射。反射机制可以用来:在运行中分析类的能力,在运行中查看对象,如编写一个toString方法供所有类使用。实现通用的数据操作代码。利用Method对象,这个对象很像C++的指针。

  反射性能优化方法主要为设置不用做安全检查。

  十五、谈谈Hibernate与Ibatis的区别,哪个性能会更高一些

  Ibatis相当较为简单,容易上手,Hibernate比较复杂,门槛较高。如果系统需要处理数据量很大,性能要求很高,需要执行高度优化的sql语句才能达到性能要求,则此时Ibatis会比较好。

  对不同数据库支持方面Hibernate较好,因为Ibatis需要修改的字段较多。另外Hibernate现已成为主流的o/r Mapping框架,开发效率高。

  十六、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理

  十七、线程同步,并发操作怎么控制

  线程同步不一定就是同时,而是协同步骤,或协同步调。线程同步就是多个线程在逻辑上互有因果关系,所以要对其执行顺序进行协调。

  线程并发是指同一时间间隔内,多个线程同时执行。如果线程在时间上能够区分,那么就可以上线程休眠指定的时间来进行同步,可用sleep()方法完成。如果线程在时间上不能区分,但在逻辑顺序上可以区分的话,那么可用jion()方法来完成,一个先执行完,然后执行另一个。如果线程设计较为复杂,那么就只有通过wait(),notify()方法来完成了

  十八、描述struts的工作流程。

  简略过程就是web应用启动,接收用户请求并进行匹配,返回用户请求信息。

  1. 在web应用启动时,加载并初始化ActionServlet,ActionServlet从struct-config.xml文件中读取配置信息,把它们存放到各个配置对象中。

  2. 当ActionServlet接收到一个客户请求时,首先检索和用户请求相配的ActionMapping实例,如果不存在,返回用户请求路径无效信息。

  3. 如ActionForm实例不存在,则创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。

  4. 根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的Validate()方法。如果Valiedate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,则表示表单验证成功。

  5. ActionServlet更加ActionMapping实例包含的映射信息决定请请求转发给哪个Action。如果相应的Action实例不存在,则先创建这个实例,然后调用Action的execute()方法。

  6. Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组建。

  7. ActionForward对象指向的jsp组件生成的动态网页,返回给客户。

  十九、Tomcat的session处理,如果让你实现一个tomcatserver,如何实现session机制

  当一个session开始时,Servlet容器会创建一个HttpSession对象,在某些情况下把这些HttpSession对象从内存中转移到文件系统中或数据库中。需要访问的时候将它们载入到内存中。这样的好处就是节省内存,当web服务器产生故障时,还可以从文件系统或数据库中恢复Session的数据。管理session有两个类:1)StandardManager,这是一个默认的类,当tomcat启动或重载时将会session对象保存到指定文件中。2)PersistentManager,管理方式更加灵活,具有容错能力,可以及时把Session备份到Session Store中,可以控制内存中Session的数量。

  二十、关于Cache(Ehcache,Memcached)

  Memcache:分布式内存对象缓存系统,占用其他机子的内存。很多互联网,负载均衡三台(以三台为例)web服务器可以共享一台Memcache的资源。传递的信息以键值对的形式存储。传递的数据要实现序列化。

  Oscache:页面级缓存(网上强调最多的东西),占用本机的内存资源。可 以选择缓存到硬盘,如存取到硬盘重启服务也可重新获得上次持久化的资源,而如果缓存到内存就不行。一般没必要缓存到硬盘,因为I/O操作也是比较耗资源,和从数据库取往往优势很小。Oscache存取数据的作用域分为application和session两种。

  EhCache:Hibernate缓存,DAO缓存,安全性凭证缓存(Acegi),Web缓存,应用持久化和分布式缓存。EhCache在默认情况下,即在用户未提供自身配置文件ehcache.xml或ehcache-failsafe.xml时,EhCache会依据其自身Jar存档包含的ehcache-failsafe.xml文件所定制的策略来管理缓存。如果用户在classpath下提供了ehcache.xml或ehcache-failsafe.xml文件,那么EhCache将会应用这个文件。如果两个文件同时提供,那么EhCache会使用ehcache.xml文件的配置。

  二一、sql的优化相关问题

  1. 对查询优化,避免全表扫描

  2. 尽量避免where子句中对段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。

  3. 尽量避免where子句中出现!=或<>,否则将导致引擎放弃使用索引而进行全表扫描。

  4. 尽量避免where子句中出现or来连接条件。

  5. 慎用in和not in,否则导致全表扫描

  6. where中不要用函数操作。

  7. Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

  8. 对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

  9. 尽可能的使用 varchar/nvarchar 代替 char/nchar,节省空间,提高查询效率

  10. select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

  二二、oracle中 rownum与rowid的理解,一千条记录我查200到300的记录怎么查?

  二三、如何分析ORACLE的执行计划?

  二四、 DB中索引原理,种类,使用索引的好处和问题是什么?

  原理:因为检索磁盘比对数据,需要大量的时间和IO,所以就需要构造某列的数据的btree、hash值、位图索引。一般的索引能快速的查找比对,而索引的值记录了磁盘的位置,直接读取数据库字段对应位置的内容。

  索引好处:加快数据检索速度、加速表与表之间的连接特别是实现数据的参考完整性方面有特别的意义、减少查询中分组和排序的时间,使用优化隐藏器,提高系统性能。

  缺点:创建和维护索引需要时间,索引需要占用物理空间,当对表中的数据惊醒增删改时所有也需要动态维护。

  二五、JVM垃圾回收实现原理。垃圾回收的线程优先级。

  JVM的堆空间中主要分为年轻代、年老代和永久代。年轻代和年老代是存储动态产生的对象。永久代主要是存储java类信息,包括解析得到的方法属性、字段等等。永久代基本不参与垃圾回收。年轻代分为一个eden区和两个相同的survior区。刚开始创建的对象都放置在eden区。这样主要是为了将生命周期短的对象尽量留在年轻代中。当eden区申请不到空间时,进行minorGC,把存活的对象拷贝到survior。年老代主要存放生命周期比较长的对象,如缓存对象。具体JVM垃圾回收过程如下:

  1、对象在Eden区完成内存分配。2、当Eden区满了,在创建对象就会申请不到空间,则触发minorGC,进行young(eden区和1survivor区的垃圾回收)。3、在minorGC时,Eden不能被回收的对象呗放入到空的survior(即Eden肯定被清空),另一个survivor里不能被GC回收的地想也会被放入到这个survivor,始终保证一个survivor是空的。4、当完成第三步的时候、如果发现survivor满了,则这些对象呗copy到old区,或者survivor并没有满,但有些对象已经足够old了,也被放入到old区。当old区北放满之后,进行fullGC。

  二六、jvm 最大内存设置。设置的原理。结合垃圾回收讲讲。

  JVM内存可以分为堆内存和非堆内存,堆内存给开发人员用的,非堆内存给JVM本身用的,用来存放类型信息,即使GC时也不会释放空间。

  堆内存设置:

  -Xms 初始堆内存,默认物理内存1/64,也是最小分配堆内存,当空余堆内存小于40%时,会增加到-Xms的最大限制。

  -Xmx 最大堆内存分配,默认物理内存1/4,当空余堆内存大于70%时,会减小打-Xms的最小限制。

  非堆内存设置:

  -XX:PermSize 非堆内存的初始值,默认物理内存的1/64,也是最小非堆内存。

  -XX:MaxPermSize 非堆内存最大值,默认物理内存的1/4。

  查看堆大小命令为Runtime.getRuntime().maxMemory()。

  二七、jvm怎样通过参数调整内存大小

  本地环境变量中JVM参数设置:

  new一个JAVA_OPTS:

  variable name: JAVA_OPTS

  variable value: -Xms256M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M

  eclipse中参数设置:在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

 >>>下一页更多精彩“java工程师待遇前景”

1166933