JAVA初级工程师面试题


一. Java的八大基本数据类型
答:可以分4种类型:布尔类型(boolean),字符类型(char),浮点类型(double,float),整型(byte,short,int,long)。
二. String,StringBuffer与StringBuilder的区别?
  1. string:是字符串常量,一旦创建就不能修改,对于已经创建的字符串如要改变就会重新创建再保存,string是定义final类型的,string不是数据类型,它是一个类。
  2. stringbuffer:是一个字符串可变的的,对于已经创建的字符串修改是不会重新保存的,执行效率较慢,线程安全。
  3. stringbuilder:也是字符串可变对象,同StringBuffer一样,可以对字符串进行操作,也不会新建对象。执行效率高效,但是线程不安全。
三. ArrayList和LinkedList的有什么不一样?
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
  总结:新增和删除LinedList比较好,查找ArrayList比较好。
六. Java中的==的equals有什么区别?
答:==比较的是2个对象的地址,而equals比较的是2个对象的内容。
七. 面向对象的特征
答: 继承,封装,多态。
八. 接口和抽象类的区别是什么?
接口是只能写方法。
实现接口,要重写它的方法
九. public、private、protected,default的区别
public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。
private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
十. Overload和Override的区别
重写(Override):是一个类中多态性的一种表现。

1.List Set Map的区别
list是一个有序列表,允许重复元素,允许 null
Set是一个无序列表,不允许重复元素,元素的位置是由hashCode决定的,最多包含一个null
list 和 set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合
map存储结构是没有顺序的,键不能重复,值可以重复,hashmap可以有一个null键
2.JAVA 语言如何进行异常处理
 
Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、throws 和 finally。一般情况下是用 try 来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;
  • try 用来指定一块预防所有“异常”的程序;
  • catch 子句紧跟在 try 块后面,用来指定你想要捕捉的“异常”的类型;
  • throw 语句用来明确地抛出一个“异常”;
  • throws 用来标明一个成员函数可能抛出的各种“异常”;
  • Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;
3.final, finally, finalize 的区别? 【基础】
答:final:修饰符(关键字);如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为 abstract的,又被声明为 final 的;将变量或方法声明为 final,可以保证它们在使用中不被改变;被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为 final 的方法也同样只能使用,不能重载。 finally:在异常处理时提供 finally 块来执行任何清除操作;如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
4.jsp和serverlet的区别
  1. 简单的来说Jsp就是含有Java代码的html, 而servlet是含有html的Java代码;
  2. Jsp最终也是被解释为servlet并编译再执行,Jsp 不过是servlet的另一种编写方式;
  3. Jsp擅长表示,servlet 擅长数据处理,在MVC三层结构中,Jsp 负责V (视图),servlet 负责C (控制),各有优 势,各司其职;
5.jsp页面中如何传递参数
  1. 直接在URL请求后添加
  2. jsp: param
  3. 设置session和request
6.什么是用例?如何确定用例?
在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。
7.javascript 常用的方面;【基础】
答:常用于数据输入校验和页面特殊效果等。
8.常用的 web 容器和开发工具;【基础】
答:最常用的容器包括:tomcat;
开发工具有:eclipse。
9.Web.Xml 的作用?【基础】
答:用于配置 web 应用的信息;如 listener、filter 及 servlet 的配置信息等
10.MyBatis中使用#和$书写占位符有什么区别?
答:#将传入的数据都当成一个字符串,会对传入的数据自动加上引号;
$将传入的数据直接显示生成在SQL中。注意:使用$占位符可能会导致SQL注射攻击,能用#的地方就不要使用$,写order by子句的时候应该用$而不是#。
11.#{}与${}的区别是什么?
答:   #{} 是预编译处理,${}是字符串替换。 
    1. Mybatis处理#{}时,会将sql#{}转换为?,然后使用PreparedStatement的set方法来赋值。
    2. 使用#{}能有效的预防SQL注入,提高系统的安全性。
12.MyBatis中的动态SQL是什么意思?
答:对于一些复杂的查询,我们可能会指定多个查询条件,但是这些条件可能存在也可能不存在,例如在58同城上面找房子,我们可能会指定面积、楼层和所在位置来查找房源,也可能会指定面积、价格、户型和所在位置来查找房源,此时就需要根据用户指定的条件动态生成SQL语句。如果不使用持久层框架我们可能需要自己拼装SQL语句,还好MyBatis提供了动态SQL的功能来解决这个问题。MyBatis中用于实现动态SQL的元素主要有:
  • - if
  • - choose / when / otherwise
  • - trim
  • - where
  • - set
  • - foreach
13.什么是IoC和DI?DI是如何实现的?
答:IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的”控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。IoC体现了好莱坞原则 – “Don’t call me, we will call you”。依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
举个例子:一个类A需要用到接口B中的方法,那么就需要为类A和接口B建立关联或依赖关系,最原始的方法是在类A中创建一个接口B的实现类C的实例,但这种方法需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生变动的时候需要修改代码并重新构建整个系统。如果通过一个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好用于关联接口B的方法(构造器或setter方法),将类A和接口B的实现类C放入容器中,通过对容器的配置来实现二者的关联。
依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。
14.JDBC连接数据库的步骤(这里说一下连接mysql数据库)
  1. 加载驱动程序。Class.forName("com.mysql.jdbc.Driver")。
  2. 建立数据库连接。通过DriverManager类的getConnection方法获取连接对象,同时要传入连接路径作参数,路径里包括我的数据库名称“myTest”,用户名,密码还有编码。
  3. 创建数据库操作对象Statement,用连接对象的createStatement()方法。servlet容器就会调用它的destroy()方法来销毁这个servlet,释放它所占用的资源。
  4. 调用statement执行sql。
  5. 关闭资源,关闭连接。
15.说一下CSS的基本选择器,它们的优先级是怎样?
答:id选择器,class选择器,元素选择器,优先级如前所述,由高到低。注意一下,两个class属性直接相连匹配的是既有class1又有class2的元素。两个class属性用空格相连匹配的是在class1属性元素下的拥有class2属性的元素。
16.jQuery里怎么设置或得到一个元素的属性
参考:attr()函数。
对象.attr("属性名") //获取属性的值 对象.attr("属性名","属性值") //设置属性的值
17.用户在浏览器上打开一个页面,这中间经历了哪些过程,用你知道的知识解释。
答:用servlet来举例,当你访问一个网页即在地址栏输入一个url,浏览器将请求数据打包,并将数据包发送给服务端容器,容器接收并解析数据包并将数据包中的参数封装到创建的request对象中,同时创建一个response对象。在web.xml中找到url访问路径所对应的servlet类,检查这个Servlet的实例对象是否已创建,若没有就调用构造函数创建一个实例并调用它的init()方法(servlet是单例,这个过程只执行一次)。并将request和response对象作为参数传给service()方法来处理请求(用来处理请求的方法,它是多线程且并不安全,不要用来操作全局变量),service()方法将会从request对象中获得客户端的请求参数,并将处理后的结果用response封装返回到客户端。服务器这边,当不需要这个servlet对象需要结束其生命周期时,servlet容器调用它的destroy()方法来销毁这个servlet对象,释放对象所占用的资源。这里延伸一点,为了缩短用户初次访问时的等待时间,可以将servlet的创建设置成在容器启动时,"1"在web.xml中配置这个,数值大于0即可。
18.在你的编程经历中,你常遇到的异常有哪些?你用过哪些包?(异常说几个实际中常用的即可,常见包即它们中常用的类说一下,这要平时稍稍看一下API)
常见的NullPointerException(空指针异常),ClassNotFoundException(类没有找到异常),ArrayIndexOutOfBoundsException(数组角标越界),ClassCastException(强制类型转换异常),NumberFormatException(数字格式异常),StackOverflowError(栈溢出错误),SQLException(操作数据库异常)。慢慢开始做项目了,还会经常出现下面一些:struts2时常遇见的,“There is no Action mapped for namespace / and action name ***Action”跳转时映射路径错误。Hibernate里常见的:“MappingException: Unknown entity”数据库和类的映射异常(没在hibernate.cfg.xml里配置mapping)。
常用的包,java.util包,API对它的解释是“包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)”里面集合的接口Collection, Iterable ,Map<k,v>等,比较对象类型的Comparator接口,表示枚举的Enumeration,对日期字符串格式化的Formattable接口
提供许多基础类的java.lang包,里面出除了提供像Boolean,Integer等封装类,还有Iterable接口,实现这个接口允许对象成为foreach的对象。线程相关的Runnable接口,比较对象和自然排序的Comparable接口
通过数据流、序列化、和文件系统输入和输出的java.io包,有启用类序列化功能的Serializable接口,刷新数据的Flushable 接口,关闭数据源的Closeable 接口
还有就是用数据库时用到的java.sql包,与数据库连接会话的Connection接口,驱动程序必须实现的Driver接口,查询数据后得到的结果集ResultSet接口,用于执行静态SQL语句的Statement,表示预编译的PreparedStatement
19.Mysql里怎样分页
答:MySql里分页比较简单,就是用limit。“limit  a,b”指从第a+1行开始的共b条数据(索引a从0开始)如下:
select * from a_student LIMIT 0,5; #返回第1到5行的数据 select * from a_student LIMIT 3,5; #返回从第4行开始的5条数据 select * from a_student LIMIT 5; #返回前5行数据
20.SpringMVC的流程
 
0
1.用户发送请求至前端控制器DispatcherServlet;
 
2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet; 4.DispatcherServlet 调用 HandlerAdapter处理器适配器; 
5.HandlerAdapter 经过适配调用具体处理器(Handler,也叫后端控制器);
6.Handler执行完成返回ModelAndView;
7.HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
8.DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析; 
9.ViewResolver解析后返回具体View;
10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
11.DispatcherServlet响应用户。
21.你怎么理解类继承和接口实现,有什么好处。在开发中两者怎样选择。
参考:实现是继承的一种,继承是类之间的一种关系,实现是对自身方法的扩展。在开发中,如果多个类的某个功能相同,则可以把这部分共同代码抽象出来,比如几乎每个JavaBean都需要的创建时间,创建人,修改时间,修改人,这些就可以抽取到一个Util中,其它的类都来继承这个Util类就可以了,这是继承的应用。但是若是多个类的实现的目标一样,但是实现的方式各不相同,这时就用多态。比如ArrayList和LinkedList,前者是便于查询的数组结构,后者是便于增删的链表结构。它们都可以用来存储数据,只是实现的方式稍有差别,所以它们都是实现了List接口。
22.页面间传值的几种方式
参考:get提交:*.jsp?a=xx & b=xx,直接放在访问路径的后面。只能传输字符串,这种方式传输数据小,且数据的值会出现在浏览器的访问路径里,不安全。
form表单,指定post提交。
jsp的内置对象request,<%request.setAttribute(name,"Ann");%>,想在next.jsp获取时
<%String getName=request.getParameter("name"); %>
 
23.JSP中常用的标签有哪些
参考:JSTL是JSP的标准标签库。先说下JSTL的核心标签,在用核心标签前要先在jsp的头里引入<%@ taglib prefix="c"       
  uri="http://java.sun.com/jsp/jstl/core" %>。常用的有out标签,输出。迭代遍历的forEach标签
<c:forEach var="stu" items="${stuList}"> <c:out value="${stu }"></c:out> </c:forEach>
条件判断的if标签
<c:if test="${score>95 }"> <p>那你很厉害噢!</p> </c:if>
还有格式化标签,在头里引入<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>,用来格式化并输出文本、日期、时间、数字。常用的有日期的格式化
<p><fmt:formatDate type="time" value="${now}"/></p> <p><fmt:formatDate pattern="yyyy-MM-dd" value="${now}"/></p>
24.JSP的几个内置对象,和它们代表的意义。还有四个域对象。
参考:四大作用域:page:当前页面的有效时间;request:请求开始到结束;session:会话开始到结束;application:服务器启动到停止。
9个内置对象分别是:request,response,pageContent,session,application,page,config,out,exception。说重点的几个。request,response的获取方式:
在SpringMVC里,直接在控制层方法的形参里获取或者用Spring的@Autowird注解。
 
public String hello(HttpServletRequest request,HttpServletResponse response) {...} 或者用Spring的注解 @Autowird private HttpServletRequest request;
request代表了客户端的请求信息,作用域为request,response代表对客户端的响应,作用域为page。重点说一下session,session的作用域为请求开始到结束,即为用户打开浏览器到关闭浏览器的这个时间。它是服务端自动创建用来记录和跟踪用户信息的,所以它存在服务器端。与此相对记录用户信息的还有cookie,它是保存在本地浏览器端的,session的session_id保存在本地浏览器的cookie里,当用户离开后再次访问时,浏览器端通过cookie里的session_id访问服务器端,就可以再次得到用户的信息。
(3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。
25.MySQL常用语句
  1. 连接本机MySQL
首先在打开 DOS 窗口,然后进入目录 mysql bin,再键入命令 mysql -u root -p,回车后提示你输密码,输入密码回车即可进入到 MYSQL 中了
  1. 退出 MYSQL 命令:exit(回车)
  2. 修改密码
首先在 DOS 下进入目录 mysql bin,然后键入以下命令:
mysqladmin -u root -p 旧密码 password 新密码
  1. MySQL 常用命令
  • create database name; 创建数据库
  • drop database name 直接删除数据库,不提醒
  • select 中加上 distinct 去除重复字段
 
0
 
0
 
0
 
0
 
0
26.Spring MVC的主要组件?
  1. 前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果 相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
2.处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
3.处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
4.处理器Handler(需要程序员开发)
5.视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析 根据视图逻辑名解析成真正的视图(view)
6.视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
27.谈谈你对SpringMVC 和struts2的区别
1.SpringMVC的入口是Servlet 
2.SpringMVC是基于方法开发的  请求的参数是传到形参上面
3.SpringMVC 是通过RequestMapper找到对应方法  把值传到形参上面得到数据
28.Spring 在ssm中起什么作用?
  • Spring:轻量级框架
  • 作用:Bean工厂,用来管理Bean的生命周期和框架集成。
  • 两大核心:
1、IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。
2、AOP:面向切面编程
29.IOC 在项目中的作用?
  • 作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。
30.Spring的配置文件中的内容?
  • 开启事务注解驱动
  • 事务管理器
  • 开启注解功能,并配置扫描包
  • 配置数据库
  • 配置SQL会话工厂,别名,映射文件
  • 不用编写Dao层的实现类
31.Spring下的注解?
  • 注册:@Controller @Service @Component
  • 注入:@Autowired @Resource
  • 请求地址:@RequestMapping
  • 返回具体数据类型而非跳转:@ResponseBody
32.什么是Mybatis的接口绑定,有什么好处?
Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
33.Mybatis工作原理?
 
0
原理:
  • 通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。
  • SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。
  • 完成数据库的CRUD操作和事务提交,关闭SqlSession。
 
 
 
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM