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)


相关推荐

  • elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解「建议收藏」

    1.如何实现mysql与elasticsearch的数据同步?逐条转换为json显然不合适,需要借助第三方工具或者自己实现。核心功能点:同步增、删、改、查同步。2、mysql与elasticsearch同步的方法有哪些?优缺点对比?目前该领域比较牛的插件有:1)、elasticsearch-jdbc,严格意义上它已经不是第三方插件。已经成为独立的第三方工具。https://github.com/jp

  • 市场调研很难做?这些软件帮你理清思绪「建议收藏」

    市场调研很难做?这些软件帮你理清思绪「建议收藏」市场营销在进行市场调研,收集用户需求数据,追踪各市场策略的落实情况等日常工作时,需要使用各种图文工具帮助提高办公效率,推荐8个能够提高效率的神器。亿图脑图(MindMaster):专业思维导图绘制神器亿图脑图是一款国产专业思维导图绘制软件,素材丰富、模板多样,操作简单,易于上手,上千种素材和导图模板支持任意搭配,导图社区收纳各界大佬的思维导图支持编辑下载。5118:热点词汇挖掘神器市场达人可以通过5118官网,查询各个行业词库,了解行业热点,挖掘商机。石墨文档:实时协作办

  • Jenkins(2)docker容器中安装python3[通俗易懂]

    Jenkins(2)docker容器中安装python3[通俗易懂]前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

  • 哨兵2号(Sentinel-2)介绍、下载、预处理及批处理

    哨兵2号是高分辨率多光谱成像卫星,携带一枚多光谱成像仪(MSI),用于陆地监测,可提供植被、土壤和水覆盖、内陆水路及海岸区域等图像,还可用于紧急救援服务。分为2A和2B两颗卫星。第一颗卫星哨兵2号A于2015年6月23日01:52UTC以“织女星”运载火箭发射升空。6月29日,在轨运行4天的哨兵-2A卫星,传回了第一景数据,幅宽290km,卫星第一次扫描的范围是从瑞典开始,经过中欧和地中…

  • 在IIS上部署ASPNETMVC Beta网站[通俗易懂]

    在IIS上部署ASPNETMVC Beta网站[通俗易懂]在IIS上部署ASPNETMVCBeta网站在IIS上部署ASPNETMVCBeta网站,实际上和在IIS上部署其他类型的网站并没有太大的区别。个人觉得唯一比较有意思的是在配置IIS时,我们可以配置各种自定义的ISAPI扩展名(也在MVC应用配置的,通常在Global.asax中)第一步:安装MVC。当然,首先要下载MVCBeta,下载链接。安装的前提是.NETFramew

  • STM32标准库移植RT-Thread Nano添加FinSH与控制台[通俗易懂]

    STM32标准库移植RT-Thread Nano添加FinSH与控制台[通俗易懂]添加过shell后首先要在rtconfig.h中定义#defineRT_USING_FINSH为了方便,串口相关函数添加在board.c中使用串口中断实现命令的接收/**Copyright(c)2006-2019,RT-ThreadDevelopmentTeam**SPDX-License-Identifier:Apache-2.0**ChangeLogs:*DateAuthorNotes*2017-0

发表回复

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

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