前后端面试题
- 讲一下java中int数据占几个字节
- 面向对象的特征有哪些方面
- 有了基本数据类型,为什么还需要包装类型?
- 说一下"=="和equals方法究竟有什么区别?
- 讲一下java中的集合?
- 实现一个拷贝文件的工具类使用字节流还是字符流?
- 讲一下线程的几种实现方式?启动方式?区分方式?
- 线程池的作用?
- 讲一下什么是设计模式?常用的设计模式有哪些?
- 讲一下HashMap和HashTable的区别?HashTable和ConcurrentHashMap的区别?
- 简单介绍一下数据库的三范式?
- 事务四个基本特征或 ACID 特性。
- Struts2中的拦截器,你都用它干什么?
- 简单讲一下数据库的触发器的使用场景?
- 简单介绍下Ajax及原理?
- 简单讲一下SpringMVC的执行流程?
- Spring事务的隔离级别
- Redis对象保存?Redis的使用场景
- public、private、protected修饰符的权限和使用场景的要求是什么?
- 优化数据库
- 怎么把微信和业务平台绑定?
- 内置数据类型有哪八种?
- 讲一下http get和post请求的区别?
- 简单说一下servlet的生命周期?
- 用jdbc怎么调用存储过程?
- 什么是ORM?
- iBatis(mybatis)与Hibernate有什么不同?
- 说一下你对servlet的理解?或者servlet是什么?
- Servlet API中forward() 与redirect()的区别?
- JSP和Servlet有哪些相同点和不同点?
- 说一下session和cookie的区别?你在项目中都有哪些地方使用了?
- 说一下msyql的分页?Oracle的分页?
- 简单讲一下数据库的存储过程的使用场景?
- 简单说一下你对jdbc的理解?
- jQuery的常用选择器?
- JDBC中的PreparedStatement相比Statement的好处?
- 讲一下Spring的事务传播特性?
- Hibernate映射对象的状态?
- 介绍一下Hibernate的缓存?
- 项目开发流程?
- bootstarp是什么
讲一下java中int数据占几个字节
Int占 4个字节,32位
面向对象的特征有哪些方面
抽象:将不同类对象的共同特征总结出来构造类的过程,分为属性抽象和行为抽象,抽象只关注对象的哪些属性和行为,并不关注行为的细节是什么
封装:封装是指将抽象性函式接口的实现细节部分包装,隐藏起来的方法,为了防止该类的代码被其他类的代码随即访问
继承:继承父类的特征和行为,子类就有了父类的方法;继承父类的方法,子类就有了父类的特征,它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
多态:同一个类实例的相同方法,在不同情形有不同的表达形式,同一个接口,使用不同的实例执行不同的操作
有了基本数据类型,为什么还需要包装类型?
java是一门面向编程语言,为了让基本数据类型具有对象的特性,出现了包装类型,他相当于将基本类型包装起来,使其具有了对象的特性,并且为其添加了属性和方法,丰富了基本类型的操作
在往集合里面存储数据是,int,double这些类型是存不进去的,因为只能存储obj类型,所有这时候就需要用到包装类型了
说一下"=="和equals方法究竟有什么区别?
==如果两边是基本数据类型,就会判断值是否相等,如果是对象,判断对象的地址是否相等
eques方法用于判断对象的内容是否相等,不能用于基本数据类型
讲一下java中的集合?
Java存储集合分为两种
Value的Set,Key:Value的List
List:有序,可以重复
Set:无序,不能重复
实现一个拷贝文件的工具类使用字节流还是字符流?
使用字节流,因为在不清楚是使用字节流还是字符流的情况,使用字节流通用
讲一下线程的几种实现方式?启动方式?区分方式?
继承Thread类
实现Runnable接口
启动方式
先实例化
Thread thread = new Thread()
thread.setName()
thread.start()
thread.run()
给线程起名字来区分,起名字是必不可少的一过程
线程池的作用?
降低资源消耗:通过重复利用现有的线程来执行任务,避免多次创建和销毁线程。
提高响应速度:因为省去了创建线程这个步骤,所以在拿到任务时,可以立刻开始执行。
提供附加功能:线程池的可拓展性使得我们可以自己加入新的功能,比如说定时、延时来执行某些线程。
讲一下什么是设计模式?常用的设计模式有哪些?
设计模式是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性。我们使用设计模式最终的目的是实现代码的 高内聚 和 低耦合。
单例模式、简单工厂模式、代理模式
讲一下HashMap和HashTable的区别?HashTable和ConcurrentHashMap的区别?
HashMap:线程不安全,允许null值,是新版JDK提供的接口
HashTable:线程安全,不允许null值,是早期提供的接口
hashtable每次同步执行的时候都要锁住整个结构,ConcurrentHashMap锁的方式是锁住当前的桶
相同点: 实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用
简单介绍一下数据库的三范式?
列不可分割
非主属性依赖于主键
属性不依赖于其他非主属性
事务四个基本特征或 ACID 特性。
事务是并发控制的基本单位,是用户定义的一个操作序列。这些操作要不都执行,要不都不执行,是一个不可分割的工作单位。
原子性:表示事务内操作不可分割。要么都成功、要么都是失败.
一致性:要么都成功、要么都是失败,后面的失败了要对前面的操作进行回滚。
隔离性:一个事务开始后,不能后其他事务干扰。
持久性:表示事务开始了,就不能终止。
Struts2中的拦截器,你都用它干什么?
struts2中的的功能(参数处理、文件上传、字符编码等)都是通过系统拦截器实现的。
如果业务需要,当然我们也可以自定义拦截器,进行可插拔配置,在执行Action的方法前后、加入相关逻辑完成业务。
使用场景:
用户登录判断、用户权限判断
简单讲一下数据库的触发器的使用场景?
触发器,需要有触发条件,当条件满足以后做什么操作。
例如删除订单时要删除订单明细。
简单介绍下Ajax及原理?
Ajax是异步的javascript和xml。作用是通过AJAX与服务器进行数据交换,AJAX可以使网页实现局部更新。
实现方式是通过Ajax XmlHttpRequest对象,使用这个对象可以异步向服务器发送请求,获取响应,完成局部更新。
简单讲一下SpringMVC的执行流程?
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
Spring事务的隔离级别
Iso lation default default
ISOLATION_DEFAULT default:使用数据库本身使用的隔离级别
ISOLATION_DEFAULT read_uncommitted:读未提交(脏读)最低的隔离级别,可能导致脏读、不可重复读、幻读。
ISOLATION_DEFAULT read_committed:读已提交,ORACLE默认隔离级别,可能导致不可重复读、幻读
ISOLATION_DEFAULT repeatable_read:可重复读,解决不可重复读的隔离级别,可能导致幻读。
ISOLATION_DEFAULT serializable:串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面的所有子事务,这样就解决了脏读、不可重复读和幻读的问题了
Redis对象保存?Redis的使用场景
json字符串 或者 字节
计数器、缓存队列等
public、private、protected修饰符的权限和使用场景的要求是什么?
public:任意包任意类可以访问
可以任意访问属性和方法的使用
private:只有当前类可以访问
常用于封装保护数据,不能被继承
protected:同一包内可以访问和继承
在同一包内访问继承,受保护,在其他包内无法访问
优化数据库
使用事务、使用索引、优化SQL语句、使用外键、锁定表
怎么把微信和业务平台绑定?
用户注册实体中包含一个微信号的字段,当进行绑定时就是修改用户的微信号字段。
1、用户同意授权,获取code
2、通过code换取网页授权,openid,access_token
3、刷新access_token
4、拉取用户信息
5、检验授权凭证是否有效
内置数据类型有哪八种?
byte、char、int、short、long、boolean、char、float
讲一下http get和post请求的区别?
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET产生一个TCP数据包;POST产生两个TCP数据包。
简单说一下servlet的生命周期?
加载servlet的类——》实例化servlet的类——》调用servlet的init() 方法初始化servlet class——》调用service() 方法执行doget或dopost() 方法来响应请求——》调用destroy的方法结束servlet
用jdbc怎么调用存储过程?
加载数据库驱动类
获取数据库连接对象
创建CallableStatement对象
设置输入参数
注册输出参数
执行调用存储过程
关闭数据库操作对象
什么是ORM?
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。实现方式是通过ORM中间件在任何一个应用的业务逻辑层和数据库层之间充当桥梁
iBatis(mybatis)与Hibernate有什么不同?
二者都是ORM框架,不同点在于
1、hibernate要比ibatis功能强大很多。因为hibernate自动生成sql语句,ibatis需要在xml配置文件中写sql语句
2、ibatis可以出来复杂语句,而hibernate不能。
3、ibatis要比hibernate简单的多。ibatis是面向sql的,不用考虑对象间一些复杂的映射关系。
说一下你对servlet的理解?或者servlet是什么?
全称Java Servlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。其主要功能在于交互式的浏览和修改数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。Servlet是一个运行了 面向请求/ 响应 服务器中的网络模块。
Servlet API中forward() 与redirect()的区别?
forward是服务器端的转向而redirect是客户端的跳转。
Forward是一次请求中完成。而redirect是重新发起请求。
Forward是在服务器端完成,而不用客户端重新发起请求,效率较高。
使用forward浏览器的地址不会发生改变。而redirect会发生改变。
JSP和Servlet有哪些相同点和不同点?
相同点:它们本质上都是java类
不同点:
JSP经编译后变成Servlet
jsp更擅长表现于页面显示,Servlet更擅长于逻辑控制
Servlet的应用逻辑是在java文件中,并且完全从表现层中的HTML里分离开来。而JSP是Java和HTML可以组合成一个扩展名为.jsp的文件。
说一下session和cookie的区别?你在项目中都有哪些地方使用了?
cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session。
session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
使用场景:将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中,比如购物车
说一下msyql的分页?Oracle的分页?
Mysql是使用关键字limit来进行分页的 limit offset,size 表示从多少索引开始取多少位
Oracle的分页使用三层嵌套查询。
简单讲一下数据库的存储过程的使用场景?
通常,复杂的业务逻辑需要多条 SQL 语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载
简单说一下你对jdbc的理解?
它就是Java与数据库连接的桥梁或者插件,用Java代码就能操作数据库的增删改查、存储过程、事务等。
jQuery的常用选择器?
ID选择器、Class选择器、标签选择器、通用选择器、层次选择器、属性选择器
JDBC中的PreparedStatement相比Statement的好处?
大多数我们都使用PreparedStatement代替Statement
PreparedStatement是预编译的,比Statement速度快 效率高
代码的可读性和可维护性高
PreparedStatement可以防止SQL注入攻击,而Statement却不能。
讲一下Spring的事务传播特性?
多个事务存在是怎么处理的策略
propagation_required
例如:PROPAGATION_REQUIRED
Required 支持当前事务。如果当前没有事务,则开启新的事务
Supports 支持当前事务。如果当前没有事务,则以非事务的方式执行
Mandatory 支持当前事务,如果当前没有事务,就抛出异常。
requires_new 新建事务,如果当前存在事务,把当前事务挂起。
Not_support 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
Never 以非事务方式执行,如果当前存在事务,则抛出异常。
Nested 支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。
Hibernate映射对象的状态?
临时状态:刚刚用new语句创建,没有被持久化。
持久化状态:已经被持久化,加入到session的缓存中。
游离状态:已经被持久化,但不处于session中。
删除状态:对象有关联的ID,并且在Session管理下,但是已经被计划(事务提交的时候,commit())删除。
介绍一下Hibernate的缓存?
Hibernate中的缓存分一级缓存和二级缓存。
一级缓存就是Session级别的缓存,在事务范围内有效,是内置的不能被卸载。
二级缓存是SessionFactory级别的缓存,从应用启动到应用结束有效。是可选的,默认没有二级缓存,需要手动开启。
项目开发流程?
需求定义、需求设计、需求开发、产品提测、产品上线
bootstarp是什么
BootStrap是一个移动设备优先的UI框架。我们可以不用谢任何css,js代码就能实现比较漂亮的有交互性的页面。我们程序员对页面的编写是有硬伤的,所有要自己写页面的话就要使用类似于bootstrap这样的UI框架。
平时用得很多的:
模态框
表单,表单项
布局
删格系统