JAVA面试(逐步更新)

一、JAVA基础

1、HashMap、HashTable、LinkedHashMap、TreeMap的区别

HashMap :  非线程安全,允许一条Key为null,允许多条value为null,无序,线程安全可使用 Collections的synchronized或者用concurrentHashMap

HashMap原理:通过哈希表,实质就是数组+链表,存储位置通过键值对的key的hash值对数组长度取模获得,取模结果一致的,即通过next指向

HashTable : 线程安全,不允许任何为null

LinkedHashMap:有序的

TreeMap:有序的,默认按照key值升序,线程安全

2、Collections

二、数据库

1、数据库优化

1.1数据库分库分表

1.1.1 垂直分库  多个数据库服务器,按照业务逻辑,分成不同的模块

1.1.2 垂直分表  大表拆成小表

1.1.3 水平分表 不同数据行存到不同表中,但仍在同一个数据库,降低单表数据量,优化查询

1.2跨库join

全局表、字段冗余、数据同步、系统层组装、简单的列表查询情况

2、redis

2.1.1 数据类型  String  自增 INCR  增加指定量 INCRBY 自减 DECR  减少指定量 DECRBY

hash    HMSET 新增  HGETALL 遍历   HSET 更改

list     底层为链表 LPUSH       RPUSH    LRANGE

set    sadd  smembers遍历  sismember是否包含  sunion 求并集

sorted set    zadd    zrange遍历

2.1.2 持久化方式

RDB(Redis DataBase) 存储的数据生成快照存储到介质中

AOF(Append Only File) 记录redis执行过的指令,该入口在redis.conf中配置

2.1.3 事务指令    MULTI   组装       EXEC 执行      DISCARD取消    WATCH  监控

2.1.4 主从同步原理

3、oracle

3.1 分页

    直接对rownum进行判断,只能从rownum=1开始,将rownum建成新的列,从而取任意行

   不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果

   所以直接用只能从1开始

    rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。

select * from student where rownum>=1;

--如果想要用rownum不从1开始,需按下面方法使用
select a1.* from (select student.*,rownum rn from student) a1 where rn >5;

--分页查询一
select * from (select a1.*,rownum rn from (select * from student) a1 where rownum <=5) where rn>=2;

--分页查询二
select a1.* from (select student.*,rownum rn from student where rownum <=5) a1 where rn >=3;

--分页查询三
select a1.* from (select student.*,rownum rn from student) a1 where rn between 3 and 5;

3.2 递归

4、mysql

4.1分页

4.2递归

5、sqlserver

5.1 分页

5.2 递归

三、JVM

1、执行程序的过程

加载.class文件、管理并分配内存、执行垃圾收集

2、内存分区

https://www.cnblogs.com/dolphin0520/p/3613043.html

四、框架

1、IOC和AOP

IOC:依赖注入的思想是通过反射机制来实现的,在实例化一个类时,通过反射调用类中的set方法将事先保存在HashMap中的类属性注入到类中。传统的对象创建方式都是由调用者来

创建被调用者的实例,而spring中由Spring来完成,然后注入调用者,即所谓的依赖注入或者控制反转,此举降低了组件间的耦合,更方便管理对象。

AOP:OOP的特点是封装继承和多态,是一种纵向的模式,AOP是对OOP的一种补充,面向切面,即横向。实现AOP的技术,主要分为两大类,一类是动态代理技术,二是采用静态织入

的方式,Spring实现AOP是采用JDK动态代理和CGLIB代理,JDK动态代理是创建一个接口的实现类来完成对目标对象的代理,核心的两个类是InvocationHandler和proxy.CGLIB代理原理类似,

但是生成的代理对象是目标对象的扩展类。

2、SpringMVC工作原理

用户发送请求到前端控制器(dispatchservlet),前端控制器请求处理映射器(HandlerMapping)去查找处理器(handler),找到以后返回执行链(HandlerExecutionChain)给前端控制器,

前端调用处理适配器(HandlerAdapter)去执行处理器(Handler),处理完成后,返回ModelAndView,前端控制器请求视图解析器(viewResolver)解析视图,返回view,前端控制器进行渲染并向

用户响应结果。

springmvc是框架,是项目中实际运行的代码,而springboot只是辅助工具,减少项目搭建的难度。

3、hibernate工作原理

核心接口: Configuration接口:负责配置并启动Hibernate

SessionFactory接口:负责初始化hibernate

Session接口: 负责持久化对象的CRUD操作

Transaction接口: 负责事务

Query接口和Criteria接口:负责执行各种数据库操作

运行过程:1.通过Configuration().configure(),读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<MappingResource=".../.hbm.xml"/>读取并解析映射信息

3.通过config.buildSessionFactory();创建sessionfactory

4.session.openSession()

5.session.beginTransaction()打开事务

6.persistent operate  持久化操作

7.session.getTransaction().commit()提交事务

8.关闭session,关闭sessionfactory

4.mybatis工作原理

核心接口:

1、Configuration : MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中

2、SqlSession: 表示和数据库交互是的会话,完成必要的数据库增删改查功能

3、Executor:  myBatis执行器,是myBatis调度的核心,负责SQL语句的生成和查询缓存的维护

4、StatementHandler: 封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数等

5、ParameterHandler: 负责对用户传递的参数转换成JDBC Statement所对应的数据类型

6、ResultSetHandler: 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合

7、TypeHandler: 负责java数据类型和JDBC数据类型的映射和相互转换

8、MappedStatement: mAPPEDsTATEMENT维护一条<select|update|delete|insert>节点的封装

9、SqlSource: 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回

10、BoundSql :表示动态生成的SQL语句以及相应的参数信息

五、分布式

1、DUBBO

原文地址:https://www.cnblogs.com/twicesana/p/9944742.html

时间: 2024-10-16 11:36:06

JAVA面试(逐步更新)的相关文章

转:最近5年133个Java面试问题列表

最近5年133个Java面试问题列表 Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我初入职场的时候,类似于 Vector 与 Array 的区别.HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在.如今,你将会被问到许多 Java 程序员都没有看过的领域,如 NIO,

Java面试宝典

http://www.cnblogs.com/bluestorm/p/6429894.html Java面试宝典 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性. 可扩充性:增加新的子类不影响已经存在的类结构. 接口性:多态是超累通过方法签名,想子类提供一个公共接口,由子类来完善或

Java面试参考指南(二)

访问修饰符 对于基本的OOPS(面向对象)概念,请看Java面试参考指南的第一部分.访问修饰符规定了一个类如何访问另一个类及它的成员(包括方法和变量). Java中有下列访问修饰符: private:私有变量和方法(非外部类)只能被声明它们的类的实例所使用. default:类中的数据.方法和它本身能够被声明为默认default.类中所有default成员都可以被本包中的其它类所访问. protected:相比default有更高的访问权限.只有成员变量和方法能够被声明为protected.父类

Java面试准备十六:数据库——MySQL性能优化

这里只是为了记录,由于自身水平实在不怎么样,难免错误百出,有错的地方还望大家多多指出,谢谢. 来自MySQL性能优化的最佳20+经验 为查询缓存优化你的查询 EXPLAIN你的SELECT查询 当只要一行数据是使用LIMIT 1 为搜索字段建索引 在Join表的时候使用相当类型的列,并将其索引 千万不要ORDER BY RAND() 避免SELECT * 永远为每张表设置一个ID 使用ENUM而不是VARCHAR 从PROCEDURE ANALYSE() 取得建议 尽可能的使用NOT NULL

java面试大汇总

java面试笔试题大汇总     第一,谈谈final, finally, finalize的区别. 最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统). 第四,&和&&的区别. 这个问得很少. 第五,HashMap和Hashtable的区

Java面试-数据库篇(二)

准备Java面试期间所见到的面试题和自己的整理归纳(仅供我个人学习使用的资料) 1. 主键 超键 候选键 外键 主    键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超    键: 在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键: 是最小超键,即没有冗余元素的超键. 外    键: 在一个表中存在

Java面试宝典2017

JAVA面试.笔试题(2017版)                 欲想成功,必须用功!   目录 一.                  HTML&CSS部分.......................................................................................... 9 1.HTML中定义表格的宽度用80px和80%的区别是什么?...................................... 9 2.CSS样

Java面试-框架篇(SSH-Spring)

主要转自http://blog.csdn.net/lovesomnus/article/details/46470255 Java面试-Spring面试题 1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台. Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发. Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不

网上整理的Java面试

1:static关键字什么意思?Java中是否可以覆盖(override)一个private或者static的方法? static关键字表示一个成员变量和成员方法可以在没有类的实例变量情况下被访问.Java中的static方法不能被覆盖,因为方法的覆盖是运行时动态绑定的,而static方法是编译时静态绑定的.static方法跟类的实例不相关的. 2:是否可以在static环境中访问非static变量? static变量是属于类的.当类被虚拟机加载时,会对static变量进行初始化,但是此时非st