小菜鸟之JAVA面试题库1
四次挥手
客户端发送释放连接报文,关闭客户端到服务端的数据传输
服务端收到后,发送确认报文给客户端
服务端发送释放连接报文,关闭服务端到客户端的数据传输
客户端发送一个确认报文给服务端
----------------------------------------------------------------
UDP和TCP区别 TCP:
可靠,传输大小无限制,连接需要建立时间,开销大 UDP:
不可靠,传输大小在64K以下,不需要简历连接,开销小
----------------------------------------------------------------
视图:
集合几张表的数据,字段来自一个或多个数据库的表。
触发器: 不能直接调用执行,通过数据库相关表实现级联更改,
当有操作影响到触发器保护的数据时,触发器自动发生。
项目中要慎用触发器,滥用会导致数据库难以维护。
存储过程: 将常用的或很复杂的工作,预先用sql语句写好并用指定名称存储起来,
以后要调用相同服务时,直接execute即可。
进行了预编译,不用每次编译,提高了数据库的执行速度。
----------------------------------------------------------------
JVM五大空间 Java栈,
存放快速执行的任务,基本数据类型的引用,和对象的引用.
(递归函数如果没有退出,就会溢出,发生在Java栈)
线程隔离 本地方法栈,保存native方法进入区域的地址.
线程隔离 堆,new 出来的类对象(留意垃圾回收器)
线程共享 寄存器,保存下一条将要执行的指令地址.
线程隔离 方法区,又叫静态区,存放所有的类,静态变量,静态方法,常量区.
线程共享 java栈和本地方法栈的区别?
-------------------------------------------------------------------------
java为什么能跨平台?
编译器先将java源程序编译生成.class文件,
再由虚拟机对字节码解释执行成相应平台的机器语言,
这个过程由类加载器完成。不同平台有不同的JVM,一次编译,多处运行。
-------------------------------------------------------------------------
反射机制? 一种机制,能在运行时获取类的基本信息.,调用对象的属性,方法.
获取Class对象?Class的forName()全限定名,类.getClass(),类.class
----------------------------------------------------------------
TCP的跨平台? 它是传输层协议,封装了windows和linux的底层函数
----------------------------------------------------------------
工厂模式和抽象工厂模式的区别 1:工厂方法模式 一个抽象产品类,
可以产生出多个具体产品类。 一个抽象工厂类,可以产生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。
--------------------------------------------------------------------------------
2:抽象工厂模式 多个抽象产品类,每个抽象产品类可以产生出多个具体产品类。
一个抽象工厂类,可以产生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。
--------------------------------------------------------------------------------
JDBC步骤 1.加载数据库驱动
2.通过DriverManager获取数据库链接
3.通过Connection对象创建Statement对象
4. 查: 增删改:
5.关闭数据库会话close()
-------------------------------------------------------------------------
序列化和反序列化 将对象转换为字节流保存起来,在以后根据保存的信息,
在内存重新创建一个对象
1 类实现Serializable
2序列化 ObjectOutputStream os os.writeObiect()
3反序列化 ObjectInutStream oi oi.readObject()
4 static的变量不能被序列化
5不想 被序列化 就加transient
6增加成员变量的话 把versionid写死强制和另一个一样,那么就会增加成员变量给它个初始值
--------------------------------------------------------------------------------
IO流 IO流三种解码方式
1,string:new string(byte[ ],字符集) byte[] getbytes(字符集)
2,转换流 inputStreamReader(inputStream,字符集) outputStreamReader(outputStream,字符集) 3 Scanner(inputStream,字符集) 只可以读 为什么记事本写代码可以编译? 记
事本存的内容就是写入的字符内容,比如写入‘a’就是编码97, 但是比如word写代码就不能编译
,因为word是带有格式的,存储的时候除了字符内容外还存储了格式内容。
(eclipse虽然也有颜色,但是并未存储这些信息,只是在显示的时候取出内容判断关键字后显示出来)
字节流和字符流: 字节流与字符流的区别 操作代码的不同之外 字节流在操作的时候本身是不会用到缓冲区(内存)的,
是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的 字节流在操作文件时,即使不关闭资源(close方法),
文件也能输出, 但是如果字符流不使用close方法的话,
则不会输出任何内容, 说明字符流用的是缓冲区
,并且可以使用flush方法强制进行刷新缓冲区,
这时才能在不close的情况下输出内容 那开发中究竟用字节流好还是用字符流好呢?
字节流和字符流默认都是采用与操作系统相同的编码格式,
对于windows下文本文件的读写,有时为了解决汉字显示的乱码问题,
在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,
包括图片也是按字节完成,而字符是只有在内存中才会形成的,
所以使用字节的操作是最多的。
如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),
并且采用边读边写的方式(节省内存)。
------------------------------------------------------------------------------------------------
论述什么是MVC架构,并结合你熟悉的一种MVC架构进行阐述其工作原理?
Mvc架构是一种框架模式,有三个模,模型,视图,控制器。Sping mvc
,前端控制器(DispatcherServlet)接受用户的请块求。处理器映射器(HandelMapping)根据url不同去找不同的的处理器。
处理器(Handle)处理业务逻辑。
处理器适配器(Handle Adapter)
把处理器包装成适配器。视图解析器(View)进行视图解析,
处理并解析成相应页面。 mvc好处: 能做到代码重用 分层架构的设计,
易于维护和扩展 更好的分工,程序员可以专注于自己擅长的领域
----------------------------------------------------------------
业务层:面向接口编程() 持久层ORM 业务板块为什么要先写个接口
,写一些方法,在业务中重写这些方法? spring IOC 实现代码的解耦,
创建对象不用每次new一个对象,交给spring容器创建和托管。
Resource是 j2ee自动装配的注解, 先按名,再按类型
。autowire是spring自动装配的注解,可以指定类型
----------------------------------------------------------------
get post 区别 get,post都是提交方式。get在请求头里面,数据量有限。
post放在请求体里面,不受限制。 与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用
。 然而,在以下情况中,请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据库) 向
服务器发送大量数据(POST 没有数据量限制) 发送包含未知字符的用户输入时,
POST 比 GET 更稳定也更可靠
----------------------------------------------------------------
那每次request请求Servlet都会经历一次生命周期吗?
不会,第一次发出请求时,服务器会创建一个servlet实例, 调用servlet的init方法,
如果服务器已经存在一个servlet实例,那就直接使用这个实例;
然后调用service方法。 当server退出,或者reload时,此servlet会被distory
----------------------------------------------------------------
request和session的区别 生命周期不一样,request在一次请求完毕或者获取参数结束后,
就会被释放,占用资源少,相对安全。
session的生命周期在一个会话内,在这个绘画内,session一直存在,
差不多半个小时左右会被释放,占用资源大,可以实现会话跟踪,相对不怎么安全。
----------------------------------------------------------------
SqlSessionFactory 是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.
SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,
每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.
同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,
应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory是创建SqlSession的工厂.
----------------------------------------------------------------
SqlSession 是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection.
SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法, 它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句. 每个线程都应该有它自己的SqlSession实例.
SqlSession的实例不能被共享, 同时SqlSession也是线程不安全的,
使用完SqlSeesion之后关闭Session很重要,应该确保使用finally块来关闭它.
----------------------------------------------------------------
数据库连接池的用处 在JDBC编程中,每次创建和断开 connection对象都会消耗一定的时间和IO资源。
频繁地创建,断开数据库会影响数据库的访问效率,甚至导致数据库崩溃。
数据库连接池负责分配,管理和释放数据库连接, 允许应用程序重复使用现有的数据库连接,而不是重新建立。
要考虑多线程问题,用synchronized。用栈,队列。
public class Demo8 { public static void main(String[] args){ int x=1;int y=2;x=x+y;y=x-y;x=x-y;// y=1,x=2 } } -