java 中值传递和引用传递的区别是什么?实际开发中要注意什么?
值传递传递的是对象的一个副本,改变了对象的副本,也不会影响到源对象的值;引用传递传递的是对象的引用,类似对象的指针,引用的改变也会改变源对象的值。
java 都有什么数据类型? 自动拆箱是指什么?
-
8个基础类型:
- byte
- shot
- int
- long
- float
- double
- boolean
- char
-
自动拆箱是对象包装类型和基础类型的一个转换,例如: Integer 转 int,Long 转 long 等,反过来就是自动装箱
java 是否支持多重继承?
不支持
进程和线程的区别是什么?
- 进程可以理解成是执行着应用程序,有完善的数据空间和代码空间
- 线程存在于进程中,有可共享的数据,也有自己独立的堆栈。
同步方法和同步方法代码块区别是什么?
同步颗粒度的区别
什么是 java 虚拟机?有什么用?
java虚拟机是一个运行java目标代码假想的计算机,java 虚拟机在不同的计算机平台都有实现,可以运行 java 代码编译出来的字节码,做到一次编译随处运行。
java虚拟机中的垃圾回收是什么意思?怎么运作?
- java虚拟机中分配的对象不再有任何引用之后就会被虚拟机的一个清理线程进行处理,释放其占用的内存空间
- 目前有以下几种算法:
- 计数法
- 标记-清除法
- 复制法
- 标记-压缩法
- 增量算法
- 分代法
静态变量和实例变量的区别是什么?
- 静态变量属于一个类,虚拟机加载字节码之后不需要创建实例对象就能使用
- 实例变量属于某个对象,必须创建了实例对象之后,实例变量才会被分配空间且实用。
创建线程都有什么方式? 哪种更适合大型项目中使用?为什么?
- 继承Thread类
- 实现Runnable接口
- 实现 Runnable 接口更适合大型项目使用,因为只能继承一个父类,但是可以实现多个接口。
数据压缩传输的优势和缺点分别是什么?何时使用?
用cpu时间换空间或带宽。优点是数据传输量减少,缺点是 服务器 cpu 消耗变高。传输大量有重复内容的数据时可以使用压缩传输。
数据库都有哪些锁?有什么区别?
- 类型—说明—加锁—解锁
- 共享锁(读锁)—多个客户可同时读同一个资源,互不干涉—执行select时—数据被读取后立刻解锁
- 排他锁(写锁)—写入时候其他客户不能读写改记录—insert,update,delete时—事务完成解锁
数据库的死锁是什么意思?怎么避免?
多个事务操作对同一条记录做写操作,相互等待对方释放,造成相互的阻塞,形成死锁。 具体发生死锁场景具体分析,不外乎:修改表的写顺序,缩短事务的执行时间等。
怎么优化 sql 语句?
通过 explan 等工具对语句进行进行分析后再做评估
什么是缓存?都有哪些实现方式?缓存的使用都要注意什么?
- 广义上的缓存就是在读写不平衡的场景下,用于缓解数据供给源的压力的缓冲区,该缓冲区读写性能通常都比其数据供给源效率高。
- 可用磁盘、内存、特定的服务器等做实现,例如: memcached ,redis 等
- 缓存数据的时效性,命中率的估算
进阶问题: Memcached 和 Redis 的区别
都是内存型非关系型数据库,memcached 数据类型单一,无法持久化;redis 数据类型丰富,还能做持久化;
对 HTTP 协议是否了解? get 和 post 的根本区别?
HTTP 协议是超文本传输协议;从协议的定义上来看,唯一的区别就是: get 用于获取数据 post 用于修改数据,其他没有区别,回答数据长度,安全等都是道听途说
HTTP 响应都有哪些部分组成?
- HTTP 响应由3部分组成:
- 响应码
- 响应头
- 响应正文
对数据结构是否了解?简单描述几种数据结构的定义和特点
- 数组: 相同数据类型按一定顺序排列的组合
- 链表: 非连续非顺序存储,可快速插入和删除元素
- 栈,队列: 可用数组和链表实现,分别是先进后出和先进先出
对分布式应用是否了解?开发分布式应用需要注意什么?
分布式应用就是多个计算节点组成集群提供相同功能服务的应用。注意要点最重要的是无状态。
都使用什么版本管理工具?有什么区别?分别描述它们的特点.
git,svn 等
数据库连接池有什么用?
允许程序重复使用同一个数据库连接,不需要重新建立连接;释放超过空闲时间的数据库连接,避免数据库连接泄漏;
是否遇到过内存溢出?一般都是什么情况下会溢出?怎么解决?
- 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存;
- 原因:
- 内存中加载的数据量过于庞大,如一次从数据库取出过多数据,如与数据库锁表有关;
- 代码中存在死循环或循环产生过多重复的对象实体;
- 启动参数内存值设定的过小;
- 解决方法:
- 就是修改JVM启动参数,直接增加内存;
- 检查错误日志;
- 使用内存查看工具动态查看内存使用情况,分析后再做处理;
如果把一个对象引用设置为 null,虚拟机是否会马上释放其占用的内存?
不会,在下一次垃圾回收时,这个对象将会是可被回收的。
异常处理块中的 finally 有什么用?
无论是否有异常抛出,finnally 代码块中的代码都会被执行,常用于资源回收等善后操作。
SQL注入的过程和防范
- 判断Web环境是否可以SQL注入,只有对数据库进行动态查询的业务才可能存在SQL注入;
- 寻找SQL注入点,通过输入一些特殊语句,可以根据浏览器返回信息,判断数据库类型,从而构建数据库查询语句找到注入点;
- 猜解用户名和密码。数据库中存放的表名、字段名都是有规律可言的。通过构建特殊数据库语句在数据库中依次查找表名、字段名、用户名和密码的长度,以及内容。
- 寻找WEB管理后台入口。通常WEB后台管理的界面不面向普通用户;
- 入侵和破坏;
- 防止:转义或过滤一些特殊字符,如%等。参数较验等。”
简单的介绍下单元测试
单元测试是指编写测试代码,用来检测特定的、明确的、细颗粒的功能。 单元测试的主要测试内容:
- 接口功能测试
- 边界条件测试
- 通路测试覆盖测试:保证每一条代码,每个分支都经过测试
单元测试方法:Junit Mock
JSON相对XML的优点有哪些?(主要考察有没有用过JSON)
- 更小:冗余字符少
- 更快
- 更易解析: 第三方库(jacksongsonjson-lib)
- 更简单:格式化处理,看一眼就知道是什么啦
- 前端处理时更方便
解释Spring支持的几种bean的作用域
- singleton : bean在每个Spring ioc 容器中只有一个实例。
- prototype:一个bean的定义可以有多个实例。 <知道上面这两个就好啦>
- request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
- session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
- global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。 缺省的Spring bean 的作用域是Singleton.
SPRING MVC 的常用注解
- @Controller 控制器
- @RequestMapping 该注解是用来映射一个URL到一个类或一个特定的方处理法上。
- @ResponseBody
- @Scope
Hibernate自带的分页机制是什么?
获得Session对象后,从Session中获得Query对象。 用Query.setFirstResult():设置要显示的第一行数据, Query.setMaxResults():设置要显示的最后一行数据
使用过哪些项目构建工具?(知道也可以)
ant maven gradle
什么是java范型?为什么要用java范型?
*泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 *泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
你了解的算法有那些?描述下实际开发中的应用场景。
*加密算法和其他算法就是一堆,此处不一一列举。
你了解的web服务器有那些?简单描述下各自的特性以及优化经验。
*jetty glassfish nginx tengine apache Websphere weblogic resin
你用过的数据库那些?数据量达到多大?数据量达到一定程度后是怎么处理的?
*范围比较广,可以随意发挥。
写出至少10个linux命令及其作用。
*太多不一一列举。