本文目录一览:
- Java高级软件工程师会面试哪些问题
- 作为一个面试官,我会问初级java工程师哪些问题?
- 一般java面试都会问些什么问题
- 求JAVA软件工程师面试题,最好比较齐全,发邮箱xuyang211@yeah.net,好的话加分哦。
- 应聘JAVA工程师,面试官常问一些什么问题?
Java高级软件工程师会面试哪些问题
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网络、操作系统等知识。因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对Java高级开发工程师职位的考核纲要,希望可以帮助到需要的人。
1 Java基础
1.1 Collection和Map
- 掌握Collection和Map的继承体系。
- 掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特点和实现原理。
- 掌握CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的实现原理和适用场景。
1.2 IO
- 掌握InputStream、OutputStream、Reader、Writer的继承体系。
- 掌握字节流(FileInputStream、DataInputStream、BufferedInputStream、FileOutputSteam、DataOutputStream、BufferedOutputStream)和字符流(BufferedReader、InputStreamReader、FileReader、BufferedWriter、OutputStreamWriter、PrintWriter、FileWriter),并熟练运用。
- 掌握NIO实现原理及使用方法。
1.3 异常
- 掌握Throwable继承体系。
- 掌握异常工作原理。
- 了解常见受检异常(比如FileNotFoundException)、非受检异常(比如NullPointerException)和错误(比如IOError)。
1.4 多线程
- 掌握Executors可以创建的三种(JAVA8增加了一种,共四种)线程池的特点及适用范围。
- 掌握多线程同步机制,并熟练运用。
1.5 Socket
- 掌握Socket通信原理。
- 熟练使用多线程结合Socket进行编程。
2 Java虚拟机
2.1 JVM内存区域划分
- 掌握程序计数器、堆、虚拟机栈、本地方法栈、方法区(JAVA8已移除)、元空间(JAVA8新增)的作用及基本原理。
- 掌握堆的划分:新生代(Eden、Survivor1、Survivor2)和老年代的作用及工作原理。
- 掌握JVM内存参数设置及调优。
2.2 类加载
- 掌握类的加载阶段:加载、链接(验证、准备、解析)、初始化、使用、卸载。
- 掌握类加载器分类及其应用:启动类加载器、扩展类加载器、应用程序类加载器、自定义加载器。
3 J2EE
- 掌握JSP内置对象、动作及相关特点和工作原理。
- 掌握Servlet的特点和工作原理。
- 掌握Spring框架的IOC和AOP实现原理(反射和动态代理)。
- 至少掌握一个MVC框架(Spring MVC,Struts等)的工作原理,并熟练运用。
- 至少掌握一个ORM框架(Hibernate,MyBatis等)的工作原理,并熟练运用。
4 数据结构与算法
- 掌握线性表和树的特点并熟练运用。
- 掌握常用排序和查找算法:插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序,顺序查找、二分查找、哈希查找。
- 熟练运用常见排序和查找算法思想解决编程问题。
- 了解几大基本算法:贪心算法、分治策略、动态规划。
5 计算机网络
- 掌握网络的分层结构,及每层的功能特点。
- 掌握TCP/IP的通信原理(三次握手、四次挥手)
6 数据库
- 掌握复杂的SQL语句编写。
- 掌握数据库的优化(SQL层面和表设计层面)。
- 至少掌握一款数据库产品。
- 熟悉高并发、大数据情况下的数据库开发。
7 Web技术
- 掌握AJAX的工作原理。
- 至少熟悉一款JS框架(比如JQuery)。
8 设计模式
- 熟悉常见的设计模式。
- 会将设计模式理论应用到实际开发中。
9 Linux
- 熟练运用Linux常见命令。
- 熟悉Linux操作系统基本概念及特点。
- 熟悉Shell脚本。
10 操作系统
- 掌握操作系统的进程管理。
- 了解操作系统的I/O。
11 正则表达式
- 掌握常见正则表达式符号。
- 熟练运用正则表达式解决实际问题(比如匹配电话号码、邮箱、域名等)。
作为一个面试官,我会问初级java工程师哪些问题?
初级java工程师多数是刚毕业或者工作1,2年的新人。对于新人,面试中基础问题会问道很多,因为先要考察这个人的基础。 关于基础类的题目,我在面试初级java工程师的时候一般会问下面两大类问题,每类5个题目,这样下来我就基本可以了解这位工程师的程度了。
java基础类
- 描述一下java的访问修饰符,和它们之间的区别?
- int和Integer 区别?
- 如何定义一个单精度浮点类型的变量?
- equals和==的区别?
- 将一个数组作为参数传递到一个方法中,在方法中,数组内的元素值被改变了,那么在方法外部,这个数组内的元素是否也被改编了?
面向对象基础类
- 重载和重写的区别?
- 构造方法能不能重载?
- 抽象方法(abstract)是否可以被final、static、native修饰?
- 当父类引用指向子类对象的时候,子类重写了父类方法和属性,那么当访问属性的时候,访问是谁的属性?调用方法时,调用的是谁的方法?
- 抽象类和接口有什么异同? 最后,如果前面问题回答的不错,会补充两个编程习惯问题。
- 在你写过的代码中,你写过超过2层的循环吗,怎么实现的?
- 在你写过的代码中,if语句最多嵌套了几层,最多有多少分支,怎么实现的? 最后两个题其实比较陷阱,但是正是一个反向的思考才能了解面试者之前的工作状态。 如果面试者在平日里就有好的习惯,自然不用担心。
一般java面试都会问些什么问题
- 请你自我介绍一下你自己?
- 你觉得你个性上最大的优点是什么?
- 说说你最大的缺点?
- 你对加班的看法?
- 你对薪资的要求?
求JAVA软件工程师面试题,最好比较齐全,发邮箱xuyang211@yeah.net,好的话加分哦。
我有的哟。嘿嘿
UMLStart 5.0
面向对象的编程语言有封装、继承、抽象、多态等4个主要的特征。
封装
是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。 让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。 把握一个原则:把对同一事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。
抽象
抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。抽象包括行为抽象和状态抽象两个方面。例如,定义一个Person类。 使用抽象可以避免考虑一些与目标无关的细节。我对抽象的理解就是不要用显微镜去看一个事物的所有方面,这样涉及的内容就太多了,而是要善于划分问题的边界,当前系统需要什么,就只考虑什么。
继承
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。
多态
多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。
- 抽象类可以有构造方法,接口中不能有构造方法。
- 抽象类中可以有普通成员变量,接口中没有普通成员变量。
- 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
- 抽象类中可以包含静态方法,接口中不能包含静态方法。
- 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
- 一个类可以实现多个接口,但只能继承一个抽象类。
内部类就是在一个类的内部定义的类,内部类中不能定义静态成员。
Linux
- 创建目录:
mkdir
加文件名 - 列表:
ls
- 查看当前位置:
pwd
- 复制文件:
cp
加文件名+要复制到的位置 - 删除文件:
rm
加文件名
JavaScript
网景公司开发的一种脚本语言,不需要编译,可写着页面,也可以单独写一个js文件,由浏览器解析执行。 其作用是:
- 数据验证
- 与网页进行交互
- 获取浏览器的信息 Ajax关键技术之一(可以通过javascript,访问浏览器内置的一个对象 XmlHttpRequest)。
JavaScript事件处理机制
事件绑订
类似与java当中注册监听器。 事件绑订的方式有三种方式:
- 绑订到html标记之上:
以上代码,表示,当点击click时,产生click事件。<a id="a1" href="javascript:;" onclick="f1();">click</a>
- 绑订到dom节点之上:
var a = document.getElementById('a1'); a.onclick = f1;
事件冒泡
子节点产生的事件会向上抛给父节点。 如何取消冒泡:
event.cancelBubble = true;
字节流和字符流
- 字节流:
InputStream
、OutputStream
- 字符流:
Reader
、Writer
JavaBean
广义:java类就是JavaBean,狭义:封装数据(get set)的java类。
MVC
MVC:三层框架开发模式
- V:视图
- C:控制器
- M:模型 JSP action JavaBean oracle,Mysql 表示层 ——业务层 ————数据层 (struts2) (hibernate|OJB|EJB-(cmp)|JDO|)
模型
负责业务逻辑 业务数据的加工规则以及保障业务逻辑能够正常执行所添加的一些基础服务,比如事务、安全、日志、性能等等。
视图
负责表示逻辑 业务数据的展现以及用户操作的界面。
控制器
负责流程控制逻辑 视图向控制器发送请求,控制器依据一定的规则,调用对应的模型来处理请求;模型处理的结果发送给控制器,控制器选择合适的视图,生成相应的界面,提供给用户。 模型:使用 java 类(javabean)或者被容器管理的 javabean(比如 ejb,spring 容器中的javabean)来封装。 视图:使用 jsp(包括 html、css、javascript)(也可以使用其它技术,比如 FreeMarker模板技术等等)。 控制器:使用 Servlet/Filter;所有的请求都发送给控制器,控制器依据请求的内容调用不同的 model来处理(当然,也可以调用同一个 model 的不同方法);控制器依据model返回的结果,来选择不同的视图展示结果数据。
EJB组件有三种类型
- SessionBean(会话Bean),用于封装业务逻辑
- EntityBean(实体Bean),用于封装对数据库的操作
- MessageDrivenBean(消息驱动Bean),封装基于消息的处理机制
什么是ORM技术,有何作用和优势
Object-Relation-Mapping对象关系映射,用于实现对象和关系数据库之间的映射,当应用程序需要对数据库操作时,只需要对这些对象操作即可。
文件流
从文件到内存是输入流(read读取) 从内存到文件是输出流(write print) 判断一个文件是否存在:
File f = new File();
if(f.exists()){
System.out.println("yes");
}else{
System.out.println("No");
}
多线程
启动线程:start()
Thread线程安全同步:synchronized
hashSet put
get
remove
(线程同步)
实现多线程:继承Thread类和实现Runnable接口
实现同步:synchronized
、wait
、notify
集合
- List:有顺序的,元素可以重复
- Set:无顺序的,元素不可重复(值不相同)
- Map
Arraylist
特点:查询效率高,增删效率低 HashSet:采用哈希算法来实现Set 接口,唯一性保证
LiskedList
特点:查询效率低,增删效率高 TreeSet:在元素添加的同时,进行排序,也要给出排序规则 treeMap HashMap:轻量级,线程不安全,允许key 或者value 是null Hashtable:重量级,线程安全,不允许key 或者value 是null
Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements) Map提供key到value的映射
JDBC(事务处理)
setAutoCommit(false)
不自动提交commit
提交rollback
回滚
Jdbc中常用的接口
PreparedStatement
:表示预编译的 SQL 语句的对象。SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句,可以传参数,对象时确定sql。CallableStatement
:用于执行 SQL 存储过程的接口。如果有输出参数要注册说明是输出参数。Statement
:用于执行静态 SQL 语句并返回它所生成结果的对象,在执行时确定sql。Connection
ResultSet
访问数据库
- 连接Oracle数据库:
Class.forName("oracle.jdbc.driver.OracleDriver"); //注册一个数据库驱动,将驱动加载到当前的JVM中
Connection con=DriverManager.openConnection("jdbc:oracle:thin:@localhost:1521:DataBase","UserName","Password"); //链接到指定数据库
PreparedStatement ps=con.prepareStatement("select * from [table]"); //执行SQL 语句
ResultSet rs=ps.executeQuery(); //保存结果集
while(rs.next) //遍历结果集
{
rs.getString(1) 或 rs.getString("字段名");
}
//关闭流
WEB
- forward:转发,传递request保留上一个页面中request的所有值
- redirect:转跳,直接改变了浏览器的地址
什么是转发?
一个web组件(servlet/jsp)将未完成的处理及相关的数据转交给另外一个web组件继续完成。最常见的情况是:一个servlet将加工之后的数据(比如通过查询数据库)转交给一个jsp来生成相应的界面。
什么是cookie
cookie 是一种在客户端(浏览器)维护用户状态的状态管理技术。浏览器在访问服务器时,服务器发送一个消息头(set-cookie)及对应的值给浏览器,浏览器会将该消息头对应的值保存到内存或者硬盘上。当浏览器下次访问服务器时,会将这些值再发送给服务器。通过这种方式来维护用户的状态(也就是说,将用户的状态写到了消息头对应的值里面)。 创建cookie:
Cookie cookie = new Cookie(String name,String value);
response.addCookie(cookie);
什么是session
浏览器访问服务器时,服务器会创建一个对象(session对象),并且,将sessionId(是一个字符串,每一个session对象都有唯一的一个sessionId)以cookie的方式(默认情况下)发送给浏览器。浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId找到对应的session对象。通过这种方式,来维护用户的状态。 创建 session:
HttpSession session = request.getSession();
URL重写实现 session技术
当用户禁止 cookie 之后,如果实现 session 机制(如果实现 sessionId 的跟踪),需要使用url重写机制: 简单地说,所谓 url 重写,指的是在 url 地址后面添加 sessionId;具体来讲,要访问某个需要使用 session机制的组件,不能够直接在浏览器地址栏输入该组件的地址,而应该使用服务器生成的该组件的地址(该地址中包含了 sessionId)。当使用服务器生成的地址去访问某个组件时,会将 sessionId 传递给服务器,服务器通过 sessionId 找到对应的session对象。 使用的方法: 在链接,表单提交中使用:
response.encodeURL(String url);
在重定向时,使用:
response.encodeRedirectURL(String url);
例如:
response.sendRedirect(response.encodeRedirectURL("xxxxx"));
Servlet的体系结构是什么?
- Servlet
- GenericServlet
- HttpServlet
- 自定义 JSP和Servlet的区别、共同点、各自应用的范围:
- Jsp主要在于页面的显示动态生成页面,可以与html标记一起使用,其还是要生成为一个servlet。
- Servlet:主要是控制的处理,如调用业务层,跳转不同的jsp页面。 Mvc:
- Jsp: V
- Servlet: C
自定义的servlet?
- extends HttpServlet
- 并覆盖doPost或doGet方法
- 在web.xml中进行部署
应聘JAVA工程师,面试官常问一些什么问题?
面试啊,一般不会问太具体的问题,语法会在笔试里考,然后一般面试分技术面试和综合面试。一般情况是,你过了笔试,然后去技术面试,然后综合面试。技术面试官一般是拿着你的简历和笔试试卷,一开始会问你那些写错的地方。然后问你有什么项目经验,如果有,会追问项目的种种,比如你开发了一个图书馆信息管理系统,会问你用了什么框架,比如你说用了struts,然后他会问你struts的基本原理,你大致讲一下对struts框架对servlet的封装和配置文件,然后他会问一些你数据库的东西,主要是你数据是如何设计的~。大致是这个流程。然后综合面试就是问你在学校干了什么 班干部什么 学校活动 学生会 还有 项目都可以随便说说,聊聊。 有些技术面试官会问你一些智力题(通常这样的面试官都不是项目经理,是稍微懂点技术的人力资源,比较2的反正) 技术题目可以在网上搜索,另外就是看程序员面试宝典这本书。 技术面试官还会问你对其他技术,(你会的东西都应该写在简历上),比如你简历上说你会Hibernate,那他也会问你Hibernate的相关东西。OOP思想什么的,设计模式也会涉及的。