Java面试抽集[通俗易懂]

Java面试抽集[通俗易懂]Java面试抽集

大家好,又见面了,我是你们的朋友全栈君。

Servlet生命周期

1.加载和实例化
2.初始化
3.请求处理
4.服务终止

Spring优点

1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

Spring bean的配置方式

1.传统的XML配置方式
2.基于注解的配置
3.基于类的Java Config

属性的注入方式有哪些

1.使用类的无参数构造创建,首先类中得有无参构造器(重点)
2.使用静态工厂创建
3.使用实例工厂创建

Mybatis执行流程

1.加载全局配置文件(MybatisConfig.xml),这个配置文件中通常是别名设置,拦截器的设置,(当ssm整合后,环境配置与mapper映射文件的注册会转移到spring配置文件中)
2.xml全局配置文件会产生一个构建者类,叫做xmlconfigBuilder,这个类是用来通过xml配置文件来构建Configuration对象实例的,构建的过程就是解析(MybatisConfig.xml)配置文件调用parse产生configuration对象
3.随后产生的就是Mybatis的配置类(Configuration),这个类可以作为项目的全局配置对象
4.接下来便是SqlSessionFactory(会话工厂)的构建者类,(SqlSessionFactoryBuilder),configuration配置对象,就可以调用会话工厂构建者类中的build方法完成对会话工厂对象的构建.
5.产生SqlSessionFactory(会话工厂),是用来生成会话的接口,有一个实现类(DefaultSqlSessionFactory)这个实现类是真正的会话的工厂类,并且它是单例的.会一直存在到服务器关闭
6.通过调用会话工厂的实现类中(DefaultSqlSessionFactory)的openSession()方法完成SqlSession对象的创建.
7.产生sqlsession,该接口是会话,并且是非线程安全的.每一次对数据库的访问都需要创建一个sqlsession,当得到结果后sqlsession就会被废弃,所以声明周期短.
8.当然这当中还有一个Excutor执行器接口,这才是内部真正对数据库进行操作的操作者,他才是真正的干事的.
9.另外就是StatementHandler该类是Statment处理器,封装了对数据库各种操作方法,使用时候,就调用其中的一些方法.
10.最后就是结果集处理器(ResultSetHandler),这个处理器的作用就是对结果进行处理并返回的.
Springmvc执行流程

Shiro的优点

1.简单的身份认证, 支持多种数据源
2.对角色的简单的授权, 支持细粒度的授权(方法级)
3.支持一级缓存,以提升应用程序的性能;
4.内置的基于 POJO 企业会话管理, 适用于 Web 以及非 Web 的环境
5.非常简单的加密 API
6.不跟任何的框架或者容器捆绑, 可以独立运行

Shiro架构核心组件有哪些:

1.Authenticator:管理登陆登出
2.Autorizer:授权器赋予主体有那些权限
3.session Manager:shiro自己实现session管理器
4.session DAO:提供了session的增删改插
5.Cache Manager:缓冲管理器
6.Raelms:和数据库交互的桥梁

shiro认证过程

创建SecurityManager -> 主体提交认证 -> SecurityManager认证 -> Authenticator认证 -> Realm验证

shiro 授权过程

创建SecurityManager ->主体授权 -> securityManager授权 -> Authorizer授权 ->Realm获取权限数据

Redis介绍

Redis本质上是一个Key-Value类型的内存数据库;redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。
1.支持多种数据类型存储
2.支持持久化
3.功能丰富
4.简单稳定,基于c语言开发

怎么同时更新redis和数据库

1.先更新数据库,后更新缓存
2.先删除缓存,后更新数据库
3.先更新数据库,后删除缓存
可以用消息队列去处理

批量操作数据库

将数据写入隔离区,如果成功完成,则将隔离区的数据写入正式区;
如果失败,则清空。
所谓隔离区,如果是数据库操作,则是临时表;如果是文件操作,则是临时文件

Mvc设计模式

M(model) 模型 javaBean
V(view) 视图 html/jsp/volicity/freemaker
C(contron)控制器 servlet/action
最经典的MVC模式:jsp + servlet + javabean

面向接口

降低重复性 使用共通接口 统一调度

jdbc

Java数据库连接,我们可以用它来操作关系型数据库。JDBC接口及相关类在java.sql包和javax.sql包里。我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。
JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。

Hibernate工作原理及为什么要是用

读取并解析配置文件
读取并解析映射信息,创建SessionFactory
打开Sesssion
创建事务Transation
持久化操作
提交事务
关闭Session
关闭SesstionFactory

Restful风格

一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息

注册bean的方法

@ComponentScan
@Bean
@Import

前端数据怎么提交到后台

1、通过表单提交
2、通过网页链接提交
3、通过ajax提交

Ajax具体实现

1.创建XMLHttpRequest对象。
2.设置请求方式。
3.调用回调函数。
4.发送请求。

负载均衡

常见的有:软件负载均衡、硬件负载均衡、DNS负载均衡。

分布式

(1)分布式协调
(2)分布式锁
(3)元数据/配置信息管理
(4)HA高可用性

实现网站在线人数思路

1、用session 记录用户数

java权限设置符

Private、default、Protected、Public

设置Privae的目的

实现数据隐藏,以免意外更改

多线程死锁产生原因

1、互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用
2、不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
3、请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有。
4、循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。

同步锁互斥锁

1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,也没有固定的执行顺序。
2:同步是线程通过一定的逻辑顺序占有资源,有一定的合作关系去完成任务。

内部类会不会生成class文件

会的匿名内部类编译后会生成class文件,名称是 1、2…数字

数据库优化

1、选取最适用的字段属性
2、使用连接(JOIN)来代替子查询(Sub-Queries)
3、使用联合(UNION)来代替手动创建的临时表
4、事务
5、锁定表
6、使用外键
7、使用索引
8、优化的查询语句
Ps:使用缓存

离散度底,建立索引会出现什么问题

有重复的数据时,查找数据会检索大量的数,非常浪费资源、性能和时间;
建立索引的字段,一定要是离散度高的字段,不然会导致上述的问题。

类初始化顺序

1.静态属性:static 开头定义的属性
2.静态方法块: static {} 圈起来的方法块
3.普通属性: 未带static定义的属性
4.普通方法块: {} 圈起来的方法块
5.构造函数: 类名相同的方法
6.方法: 普通方法

加载方式

一.静态加载
1、由 new 关键字创建一个类的实例
在由运行时刻用 new 方法载入
二.动态加载
1、调用 Class.forName() 方法
2、调用某个 ClassLoader 实例的 loadClass() 方法
通过该 ClassLoader 实例的 loadClass() 方法载入。应用程序可以通过继承 ClassLoader 实现自己的类装载器。
通过反射加载类型,并创建对象实例

Final fnally. fnalize区别

Final :最终的
fnally:出现异常时,必须执行的
fnalize:垃圾回收前,必须执行的

垃圾回收机制

Java程序员在编写程序的时候不再需要考虑内存管理;
Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”;
垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。
Ps:java里面会存在内存泄漏,由于对象不可达的原因,也将其称为“对象游离”。

Main方法线程和垃圾回收线程一起结束的原因

还未调用回收器线程,或还未回收完成所有,主线程已经结束了,并不是主线程结束,虚拟机就结束。

Mysal, Oracle sqlsevice区别

oracle:数据完整性,安全性要求较高的场合;
sqlserver(sybase和ms):ms的sqlserver简单,好用,用于企业级的数据应用,性能没有问题,支持所有大型 rdbms的特性;
mysql:基本免费,功能不错,适合个人网站及一些小企业的网站应用;

代码规范

1.见名知意
2.开头小写驼峰式
3.多注释,代码优美

Springboot和之前xml有什么区别

springboot减少了xml的配置,使用起来更加的方便,同时也占用更多的资源。

Redis简介

是一个nosql(非关系式数据库),key-value,可持久化,内存,分布式的,缓存的数据库

创建线程的方法

1)继承Thread类创建线程
2)实现Runnable接口创建线程
3)使用Callable和Future创建线程
4)使用线程池例如用Executor框架

Jdbc连接数据库的流程

1)加载(注册)数据库驱动(到JVM)。
2)建立(获取)数据库连接。
3)创建(获取)数据库操作对象。
4)定义操作的SQL语句。
5)执行数据库操作。
6)获取并操作结果集。
7)关闭对象,回收数据库资源(关闭结果集–>关闭数据库操作对象–>关闭连接)。

为什么设计jdbc

jdbc提供了高标准的api接口,统一了连接数据库的规范

项目介绍

做项目时,遇到了什么问题,怎么解决的

首先检查自己代码是否写错或是遗漏,然后百度或翻书籍或是以前的项目,不行就问同事、朋友;再解决不了就报告给组长,不能耽误项目工期。

项目重点

销售》需求文档》报价》签合同,首款》 UI设计》测试》部署》上线,应用服务器一台, redis一台, 数据库一台

介绍最近的项目

关键点 说辞
能考虑到代码的扩展性,有参与框架设计的意识 我的项目XX保险项目,用到SSH技术,数据库是Oracle,(这个是铺垫),开发的时候,我会先和项目经理一起设计框架,并参与了框架的构建,连接数据库的时候,我们用到了DAO,这样做的理由是,把SQL语句封装到DAO层,一旦要扩展功能模块,就可以不用做太多的改动。
有调优意识,能通过监控发现问题点,然后解决 在开发阶段,我就注意到内存的性能问题和SQL运行的时间问题,在压力测试阶段,我会通过xx工具来监控内存和数据库,发现待提升的代码点,然后通过查资料来优化。最后等项目上线后,我们会部署监控系统,一旦发现内存和数据库问题,我们会第一时间解决。
动手能力很强,肯干活,会的东西比较多,团队合作精神比较好 在项目里,我不仅要做开发的工作,而且需要自己测试,需要自己根据一些日志的输出到数据库或Java端去debug,当我开好一个模块时,需要自己部署到Linux上测试。或者,一旦遇到问题,如果是业务方面的,我会及时和项目经理沟通,如果是技术方面的,我会自己查资料,如果是测试方面的,我会及时和测试的人沟通。
责任心比较强,能适应大压力的环境 被问“你如果在项目里遇到问题怎么办?”回答:遇到问题我先查资料,如果实在没法解决,不会拖,会及时问相关的人,即使加班,也会在规定的时间内解决。
有主见,能不断探索新的知识 在项目里,我会在保证进度的前提下和项目经理说我的想法,提出我的解决方案。在开发过程中,我会先思考一下,用一种比较好的方式,比如效率最高的方法实现。 另外你要找机会说出:平时我会不断看一些新技术(比如大数据Hadoop),会不断深入了解一些框架和技术的实现底层。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106549.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 霍尔传感器测速代码_arduino直流电机调速

    霍尔传感器测速代码_arduino直流电机调速标题本人目前是一个大一菜鸟,零基础学的编码器方面,希望我的经验对你有些帮助。分享一下霍尔编码器电机的使用与测速,我用的是25GA-310直流减速电机带霍尔传感器。先来看一下最基本的接线方法————-S1与S2连接单片机上的S(我这里用的2号和3号,是中断引脚);——G与V连接单片机上的G与V(对着接就行);——VM与GM接航模电池的正极与负极;测速…

  • 我的程序里

    我的程序里我的程序里没有一点点防备也没有一丝顾虑突然错误出现在我的日志里带给我惊喜身不自已可是你偏又这样在我不知不觉中悄悄的消失从我的堆栈里没有音讯剩下了报警短信你存在我某一个模块里我的梦里,我的心里,我的

  • 为什么领导不喜欢提拔老实人?退休的领导说出了实话

    为什么领导不喜欢提拔老实人?退休的领导说出了实话

  • VB学习之路 ——基本语句

    VB学习之路 ——基本语句一:选择结构问题总结1.一个很简单的If(表达式)……..Then的问题,在VB的程序编写时候,如果在if….Then后面只有一条需要执行的语句,并且将执行的一条语句直接放在了Then的后面,则不需要后面加上EndIf,加上就报错。即使要执行的语句有多条如果非要放在Then后面不加EndIf就必须每条语句之间用冒号间隔。如果将执行的语句放在了Then的后面,即…

  • AbstractMethodError 错误「建议收藏」

    AbstractMethodError 错误「建议收藏」问题描述:tomcat部署的war包,启动tomcat的时候正常,但是访问项目的时候一直报500,查看tomcat的报错日志如下:java.lang.AbstractMethodError:javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;处理方法:查了一下和依赖中的一些jersey相关的包冲突导致的,可以看看pom.xml文件中的两个依赖,<dependency&gt.

  • 王坚十年前的坚持,才有了今天世界顶级大数据计算平台MaxCompute

    王坚十年前的坚持,才有了今天世界顶级大数据计算平台MaxCompute

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号