首页 课程 师资 教程 报名

2020年高级java程序员面试题

  • 2020-03-11 10:12:52
  • 3176次 动力节点


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


  答:


  1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。


  2、String不可变是因为在JDK中String类被声明为一个final类。


  3、StringBuffer是线程安全的,而StringBuilder是非线程安全的。


  ps:线程安全会带来额外的系统开销,所以StringBuilder的效率比StringBuffer高。如果对系统中的线程是否安全很掌握,可用StringBuffer,在线程不安全处加上关键字Synchronize。


  Vector,ArrayList,LinkedList的区别是什么?


  答:


  1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。


  2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。


  3、Vector线程同步,ArrayList、LinkedList线程不同步。


  4、LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。


  5、ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间。


  HashTable,HashMap,TreeMap区别?


  答:


  1、HashTable线程同步,HashMap非线程同步。


  2、HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。


  3、HashTable使用Enumeration,HashMap使用Iterator。


  4、HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。


  5、TreeMap能够把它保存的记录根据键排序,默认是按升序排序。


  详见:链接


  小编注:为什么没有第四题不要问我...学姐没写


  Tomcat,Apache,JBoss的区别?


  答:


  1、Apache是Http服务器,Tomcat是web服务器,JBoss是应用服务器。


  2、Apache解析静态的html文件;Tomcat可解析jsp动态页面、也可充当servlet容器。


  详见:链接


  GET,POST区别?


  答:


  基础知识:Http的请求格式如下。


  <requestline>主要包含三个信息:1、请求的类型(GET或POST),2、要访问的资源(如 esimg.jif),3、Http版本(http/1.1)


  <header>用来说明服务器要使用的附加信息


  <blankline>这是Http的规定,必须空一行


  [<request-body>]请求的内容数据


  区别:


  1、Get是从服务器端获取数据,Post则是向服务器端发送数据。


  2、在客户端,Get方式通过URL提交数据,在URL地址栏可以看到请求消息,该消息被编码过;Post数据则是放在Htmlheader内提交。


  3、对于Get方式,服务器端用Request.QueryString获取变量的值;对用Post方式,服务器端用Request.Form获取提交的数据值。


  4、Get方式提交的数据最多1024字节,而Post则没有限制。


  5、Get方式提交的参数及参数值会在地址栏显示,不安全,而Post不会,比较安全。


  详见:链接


  Session,Cookie区别


  答:


  1、Session由应用服务器维护的一个服务器端的存储空间;Cookie是客户端的存储空间,由浏览器维护。


  2、用户可以通过浏览器设置决定是否保存Cookie,而不能决定是否保存Session,因为Session是由服务器端维护的。


  3、Session中保存的是对象,Cookie中保存的是字符串。


  4、Session和Cookie不能跨窗口使用,每打开一个浏览器系统会赋予一个SessionID,此时的SessionID不同,若要完成跨浏览器访问数据,可以使用Application。


  5、Session、Cookie都有失效时间,过期后会自动删除,减少系统开销。


  详见:链接


  Servlet的生命周期


  答:


  大致分为4部:Servlet类加载-->实例化-->服务-->销毁


  下图是Tomcat中Servlet时序图。


2020年高级java程序员面试题


  1、WebClient向Servlet容器(Tomcat)发出Http请求。


  2、Servlet容器接收Client端的请求。


  3、Servlet容器创建一个HttpRequest对象,将Client的请求信息封装到这个对象中。


  4、Servlet创建一个HttpResponse对象。


  5、Servlet调用HttpServlet对象的service方法,把HttpRequest对象和HttpResponse对象作为参数传递给HttpServlet对象中。


  6、HttpServlet调用HttpRequest对象的方法,获取Http请求,并进行相应处理。


  7、处理完成HttpServlet调用HttpResponse对象的方法,返回响应数据。


  8、Servlet容器把HttpServlet的响应结果传回客户端。


  其中的3个方法说明了Servlet的生命周期:


  1、init():负责初始化Servlet对象。


  2、service():负责响应客户端请求。


  3、destroy():当Servlet对象推出时,负责释放占用资源。


  详见:链接


  HTTP报文包含内容


  答:


  主要包含四部分:


  1、requestline


  2、headerline


  3、blankline


  4、requestbody


  详见:链接


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


  答:


  1、PreparedStatement支持动态设置参数,Statement不支持。


  2、PreparedStatement可避免如类似单引号的编码麻烦,Statement不可以。


  3、PreparedStatement支持预编译,Statement不支持。


  4、在sql语句出错时PreparedStatement不易检查,而Statement则更便于查错。


  5、PreparedStatement可防止Sql助于,更加安全,而Statement不行。


  什么是SQL注入:通过sql语句的拼接达到无参数查询数据库数据目的的方法。


  如将要执行的sql语句为select*fromtablewherename="+appName+",利用appName参数值的输入,来生成恶意的sql语句,如将['or'1'='1']传入可在数据库中执行。


  因此可以采用PrepareStatement来避免Sql注入,在服务器端接收参数数据后,进行验证,此时PrepareStatement会自动检测,而Statement不行,需要手工检测。


2020年高级java程序员面试题


    以上就是动力节点Java培训机构小编介绍的“2020年高级java程序员面试题”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交