文章目录
- 面试题
- 1.Java序列化
- 问题:
- 2.java中==和eqauls()的区别
- 3.final有哪些用法
- 4.wait和sleep区别
- 5.Java跨平台
- 6.装箱和拆箱
- 7.instanceof
- 8.String,StringBuilder,StringBuffer的区别
- 9.Java中集合
- 10.HashMap和HashTable的区别
- 11.设计模式
- 12.HTTP中get请求和post请求的区别
- 13.说说你对servlet的理解
- 14.重定向和请求转发
- 15.Session和Cookie的区别和应用场景
- 16.SpringMvc模式和SpringMvc各部分的实现
- 17.数据库分类和常用数据库
- 18.事物的四大特征
- 19.Mysql存储过程
- 20.jdbc
- 21.AJAX
- 22.SpringMvc框架
- 23.Linux
面试题
1.Java序列化
定义:序列化是把对象改为可以存到磁盘或通过网络发送到其他运行中java虚拟机的二进制格式的过程,并可以通过反序列化恢复对象状态。
应用:
- 数据存储,将对象转化为字节的,并且放入磁盘的过程
- 网络通讯,将对象转化为网络通讯需要的字节形式在网络中进行传输
方式:Java中的类的序列化很简单,只要Java类实现java.io.Serializable接口,虚拟机就是把类序列化。
问题:
1)Java中的可序列化接口和可外部接口之间的区别?
没有解决,但是我感觉似乎重要
2)可序列化的方法要多少?如果没有方法,那么可序列化接口的用途是什么?
可序列化Serializable接口存在java.io包中,构成java序列化机制的核心。没有任何方法,在java中标记即可。当类实现java.io.Serializable接口时,它将在Java中变得可序列化,并指示编译器使用 Java 序列化机制序列化此对象。
3)serialVersionUID是什么?如果不定义,会发生什么?
serialVersionUID是一个private static final long型ID,用来作为对象的哈希码,用于对象的版本控制。
不指定serialVersionUID的后果是,当你添加或修改类中的任何字段时,已序列类将无法恢复,因为新类和旧序列化对象生成的序列化id不同。则已序列化类将无法恢复。
2.java中==和eqauls()的区别
需要比较的有三种:变量,包装类对象,一般对象
==是运算符,用于比较两个变量是否是相等,三种都可以使用他们进行比较,区别在于变量比较的变量的值,对象比较的是内存地址。
而equals是Object类的方法,用于比较两个对象是否是相等,默认比较的两个对象的地址,此时和==的结果是一样的。但是包装类对象重写了equals方法,使得包装类对象调用时比较的是对象的值。
3.final有哪些用法
final被用在三种情况:数据、方法和类
- 被final修饰的类不可用被继承
- 被final修饰的方法不可以被重写
- 被final修饰的变量不可改变
- 被final修饰的常量,在编译阶段会存入常量池中
4.wait和sleep区别
sleep()来自Thread类,和wait()来自Object类,调用sleep()方法的过程中,线程不会释放对象锁。而调用wait方法线程会释放对象锁。
sleep()睡眠后不让出系统资源,wait让其他线程可以占用CPU
sleep(milliseconds)需要指定一个睡眠时间,时间一到就会唤醒,而wait()需要配合notify()或者notifyAll()使用。
5.Java跨平台
Java能够实现一次编译,多平台运行
注意:
- 跨平台的是Java,不是JVM
- 不同平台部署不同JVM,java代码首先编译器为字节码对象,再由JVM将字节码翻译成机器语言,达到运行Java程序的目的.
6.装箱和拆箱
用途:基础类型是数据,不是对象,也不是Object的子类,不满足一切都是对象,
发生时机:
- 在调用方法时把基本数据类型作为参数,但是参数的类型是基本数据类型的包装类时。
- 给基本数据类型的包装类赋值为基本数据类型的时候,
- 基本数据类型和包装类数据类型进行比较时。
不发生自动装箱
当我们要调用的方法中存在重载的时候,即基本类型数据作为唯一参数的方法与该基本类型包装类作为唯一参数的方法重载,这时候自动装箱不起作用。
7.instanceof
instanceof :用来判断内存中实际对象A是不是B类型,一般用来做类的类型判断。
这也侧面说明了每个实例对象在堆中都有自己的类型信息
8.String,StringBuilder,StringBuffer的区别
-
使用场景
String: 适用于少量的字符串操作的情况
StringBuilder: 适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用于多线程在字符缓冲区进行大量操作的情况
-
运行速度:StringBuilder>StringBuffer>String
String为字符串常量,而StringBuilder和StringBuffer是字符串变量,即String对象一旦创建之后对该对象时不可更改的,但后者的对象是变量,是可以更改的.
JVM对String的操作是不断GC不断创建的过程所以更慢.
-
线程安全:StringBuilder是线程不安全的,StringBuffer是线程不安全的。
StringBuffer牺牲了性能,必要的方法上都带有synchronized关键字
StringBuilder牺牲安全性,只满足在单线程操作。
9.Java中集合
分类:value(Collection)和key-Value(Map)两种
存储value的有list和set两种:
- list是有序的,可重复
- set是无序的,不可重复的
存储KV的是map: HashMap,HashTable
10.HashMap和HashTable的区别
相同:HashMap和HashTable都可以使用存储KV数据
区别:
基类不同:HashTable基于Dictionary类,而HashMap是基于AbstractMap.
线程安全:HashMap是单线程安全,HashTable是多线程安全.
遍历不同:HashMap仅支持Iterator的遍历方式
…
11.设计模式
创建型模式(5种):简单工厂模式, 抽象工厂模式, 单例模式…
结构型模式(7种):装饰器模式, 代理模式 …
行为型模式(11种):
12.HTTP中get请求和post请求的区别
传输方式:
- get请求将请求数据附加在URL上
- post请求则把数据放到请求体中
传输数据大小:
- get传输的数据理论上有大小限制,并且只能传输ASCII编码
安全性:
- get请求将内容放在路径上,对外可见并且不能加密,不安全
- post请求将信息放在请求体中,对外不可见,也可以加密,相对安全
13.说说你对servlet的理解
servlet是运行在web服务器上的一小段代码用来接受和响应从客户端发送过来的请求,一般是HTTP协议
HttpServlet(抽象类)–继承了GenericServlet,并且实现了Service方法,在service方法中根据不同的请求方法,调用不同doXxx方法。因此我们在开发中,只需要写一个类继承HttpServlet,并覆盖doGet和doPost方法分别来处理.
生命周期: 第一次访问servlet的时候,服务器会创建一个Servlet实例,当servlet中服务器移除,关闭服务器.
14.重定向和请求转发
重定向(redirect)两次请求,两次响应,不携带信息
请求转发(forward)一次请求,一次响应,是服务器内部进行请求处理权的移交,可以携带信息
15.Session和Cookie的区别和应用场景
- Session和Cookie都是会话(session)跟踪技术.
- Cookie通过客户端记录信息确定用户身份
- Session是通过在服务器记录信息确定用户身份
16.SpringMvc模式和SpringMvc各部分的实现
SpringMvc包含5大组件: 前端控制器.处理器映射器,处理器适配器,控制器,视图解析器.
17.数据库分类和常用数据库
关系型:MySQL, Oracle, Sql Server
非关系型:Redis, MongoDB, Hadoop
18.事物的四大特征
- 原子性(Atomicity):表示事务内不可分割,要么都失败,要么都成功
- 一致性(Consistency):例如存钱操作,存之前和之后总数应该是一致的.
- 隔离性(Isolation):事务与事务之间是相互不影响的
- 持久性:(Durability):事务提交后,数据会被持久化保存
19.Mysql存储过程
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
优点:
- 只在创建时进行编译,而一般sql每次执行都会编译,提高了数据库执行速度.
- 复杂逻辑需要多条sql,存储过程不需要发送多条sql,降低了客户机压力.
- 存储过程是可重复使用的,减少数据库开发人员的工作量
- 安全
20.jdbc
jdbc调用过程: 获取驱动, 获取数据库驱动, 设置参数, 执行sql, 释放连接.
jdbc是sun公司定义的规范, 让数据库厂商自己实现接口, 作为开发者, 我们导入厂商的实现即可, 然后以接口的方式调用即可.
21.AJAX
AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
Ajax实现异步调用,
作用是什么?通过ajax与服务器进行数据交换,ajax可以使网页实现局部更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.
22.SpringMvc框架
传统MVC模式问题
1.所有的servlet和servlet映射都要配置在web.xml中,如果项目太大,web.xml就太庞大,并且不能实现模块化管理.
2.Servlet的主要功能就是接受参数,调用逻辑,跳转页面,比如像其他字符编码,文件上传等功能也要写在servlet中,不能让servlet功能单一.
3.接受参数比较麻烦,不能通过model接收,只能单个接收,接收完成后转换封装进model.
4.跳转页面方式比较单一(forward,redirect),并且当页面名称发生变化时,需要修改servlet源代码.
23.Linux
Linux是一个长时间运行比较稳定的操作系统,一般拿它当服务器.
Linux常用命令
cd 跳转到目录
pwd 获取当前路径
ls 查看当前目录下的文件和目录
mddir 创建目录
vim 创建/查看/编辑文件
:q! :wq
rm 删除文件
cp 复制文件
tar –xvf n.tar 解压压缩包中的文件到当前目录
grep root /etc/passwd