U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 常见问题解答 >

Java开发面试常见问题总结

来源:http://www.tudoupe.com时间:2022-08-01

1.JAVA的跨平台原则

编译JVA源代码生成一个编码文件,通过不同平台下载不同版本的JVM,将字节文件转换成相应的机器代码.注意的是,跨平台Java程序,不是JVM。JVM使用C/C++,是编译后的字节码,不能跨平台。

2. 数据类型及其在JAVA中各自的特点。

(1)基本数据类型

byte

1字节

数值型

short

2字节

数值型

int

4字节

数值型

long

8字节

数值型

float

4字节

数值型

double

8字节

数值型

boolean

1字节

布尔型

char

2字节

字符型

(2)引用数据类型:类(class)、接口(interface)、数组

3.JAVA面向对象的特性是什么?

封装、继承、多态、抽象 封装:通过类来体现,将实体封装成类,其中包含属性和方法

继承:允许代码重用类之间的继承特性

多态:通过将不同的子类传递到母对象,它们表现出不同的行为

抽象: 将实体类的共同特征抽象化,并将其归纳为抽象类.

4、封箱和拆箱?

基础类型属于数据,不属于类,自然也不属于Object的子类,无法使用相关方法。装箱就是自动将基本数据类型转换为包装器类型,拆箱就是自动将包装器类型装换为基本数据类型。

eg:Integer a = Integer.valueOf(123); //装箱 int b = a.intValue(); //拆箱

平等者之间的区别是什么?

(一)基本数据类型的比较,使用二进制数字(==)来比较两个值

(2)复合数据类型(类)之间的比较,比较的是在内存池的地址,使用equals。在Java语言中,通常equals交给开发者自行定义,满足什么条件的Object是equals的。

String, StringBuilder和 StringBuffer之间的区别?

(1)运行速度:StringBuilder > StringBuffer > String

字符串是一个字符串常数,另外两个是字符串变量,字符串对象在创建后不能更改,而字符串的操作实际上是一个连续的创建和检索过程,执行缓慢。

(2)线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的

StringBuffer对象在字符串缓冲区被多个线程使用时,可以使用同步的关键词,能够保证线程安全。

(3)使用场景

String适用于少量的字符串操作;StringBuilder适用于单线程下的在字符串缓冲区进行大量的操作的情况下;StringBuffer适用于多线程下的在字符串缓冲区进行大量的操作的情况下。

在JAVA中设置

Java中的集合分为两个主要类别:

Collection(value):包含list和Set,其中list是有序,可重复的;set是无序,不可重复的。

Map(键值)包含HashMap,HashTable,CurrentHashNap

8、ArrayList、Vector、LinkedList的区别?

  1. 区别:
  • Vector和ArrayList都是以类似数组的形式存储在内存中,LinkedList以链表的形式进行存储
  • 向量线程同步,ArrayList和LinkedList线程没有同步
  • LinkedList适合在指定的位置插入、删除等,不适合搜索,Vector, ArrayList适合搜索
  • 向量默认扩展是原件的两倍,而 ArrayList默认扩展是1.5倍

HashMap和HashTable有什么区别?

  • 都是使用key-value的形式来存储数据,区别是HashTable基于Dictionary类,而HshMap是基于AbstractMap。
  • HashMap是单行安全的, HashTable是多行安全的
  • HashMap仅仅支持Iterator的遍历方式,HashTable支持Iterrator和Enumeration两种遍历方式
  • HashMap可以允许存在一个为null的key和若干个为null的value,但是HashTable中的key和value都不允许为null

如何实现一个线程? 如何启动一个线程? 如何区分一个线程?

线程的实现方式有三种:第一种是继承Thread类,第二种是实现Runnable接口,第三种是实现java.util.concurrent下的Callable接口。

启动线程:调用 start() 方法 — 可以使线程运行,但不一定执行,并且 run() 将执行,如果它实际上在 main() 方法中被调用

分开线程:为线程设置名称

12、线程并发库和线程池的作用?

线程池的好处:

  • 限制线程的数目不会使系统运行缓慢或因太多线程而崩溃
  • 每次线程池不需要创建或摧毁,它会节省资源
  • 线程池不需要每次创建,并且更快地响应

13. 设计 模式 和 一般 设计 模式?

常见的23种设计模式是:样本、工厂模式、装饰师模式、代理模式

  1. 单例模式:
  2. 工厂模式:
  3. 装饰者模式:
  4. 代理模式:

14,HTTP、GET和 POST请求之间的区别是什么?

  1. GET请求数据将在地址栏中显示,而 POST不会显示
  2. 对于GET,特定的浏览器和服务器有URL的长度限制,这些限制在传输数据时
  3. POST比GET更安全

说你明白Servlet吗?

在Web服务器上运行的Java应用程序,它接收和响应客户端发送的请求,通常使用HTTP协议

使用方法:

  • 编译Java类以实现服务器端口
  • 部署一个良好的Java类到Web服务器上

Servlet的生命周期?

当用户第一次访问Servlet时,服务器将创建一个 Servlet 的实例,然后将执行Servlet中的init方法。任何一次请求都会创建一个线程访问Servlet中的service方法,根据不同的请求调用不同的doXX()方法。当服务器从服务器中删除或关闭服务器时,塞夫莱特的例子将被摧毁,然后将执行 destory() 方法。

17、Servlet中Forward和Redirect的区别

forward redirection: double request, redirection 允许您在您的网页应用程序之外访问资源。

redirect请求转发:服务器内部把对一个request/response的处理权交给另外一个客户端,传输的信息不会丢失。

JSP和Servlet有什么不同之处?

1、联系:
JSP是Servlet技术的一个扩展,基本上是 Servlet的简化方法,强调应用程序的外部表达。
在编译JSP之后,是“类服务器”。
2、不同点:
- Servlet的应用程序逻辑在Java文件中,并且完全与HTML在表示层中分开。 Servlet必须使用Writer输出的相应的HTML来实现HTML函数。
- JSP 的情况是Java和HTML可以组合成一个扩展名为.jsp 的文件。做界面展示比较方便,而嵌入逻辑复杂.
-JSP聚焦于视图,而Servlet主要用于控制逻辑

JSP嵌入对象和四个函数域

九大内置对象:

request、response、config、application、session、exception、page、out、pagecontext

四大作用域:

只在当前页面上使用

请求-只能在同一请求中使用

session—只能在同一个会话(session对象)中使用

上下文-只能在同一网页应用程序中使用

session 和 cookie 和场景的使用之间有什么区别?

区别:
1.在客户端存储的cookie数据,在服务器存储的សម័យ数据
2. cookie不是很安全,别人可以通过分析存放在本地的cookie并进行cookie欺骗,考虑到安全应该使用session
3. 该 会议 将 在 服务器 上 存储 一定 的 时间, 在 访问 增加 时 影响 到 服务器 的 性能 。
4.单个Cookie不能存储超过4k的数据,许多浏览器每站显示20个Cookie
5. 将重要信息保存在session中(登陆),将其他需要保留的信心存放在cookie中(购物车,cookie是可以在客户端禁用的,这时候要使用cookie+数据库的方式实现购物车,当cookie中不能取出数据,就从数据库中取)

21 MVC模式和MVC部件的实现

MVC是Model(模型)—View(视图)—Controller(控制器)的缩写

数据库分类和共同数据库?

关系数据库: MySQL, ORACLE, SQL Server, IBM DB2, Sybase

非相关数据库: Redis, Memcached, MongoDB, Hadoop

三种关系数据库模型?

模型是设计关系数据库表时遵循的三个标准。 要满足第二模型,你必须首先满足第一模型。 要满足第三模型,你必须首先满足第二模型

第一个模型(英语:First model (1NF))指数据库表的每个列为不可分割的基本数据项,不能在同一列中有多个值,即不能有多个值或不能有重复属性的实体中的属性。
第二种模型(2NF)要求数据库表中的每个实例或行必须具有独特的区域化。 通常将列添加到表中,以存储每个实例的唯一标识符。
第三个模型(3NF)要求数据库表不包含其他表中已经包含的非主键信息。
有时为了提高效率,你可以设置重复或推导字段。 订购(总价) 订购商品(单价)

交易的四个特征

  1. 原子:表示交易不可分割
  2. 一致性:表示要么都成功,要么都失败。失败了,要对前面的操作进行回滚
  3. 分离:一个交易被打开,不能被其他交易影响
  4. 持久性:表示交易已启动并不能终止,并在提交交易后将数据序列到数据库中

最大连接到MySQL数据库的数目

# The maximum amount of concurrent sessions the MySQL server will
# allow. One of these connections will be reserved for a user with
# SUPER privileges to allow the administrator to login even if the
# connection limit has been reached.
max_connections=100
默认的最大连接数为100

MySQL和Oracle的页面语句

为什么分页? 许多数据不能充分显示,所以需要进行分页显示

mysql:是使用关键字limit来进行分页的.LIMIT [offset,] rows:offset指定要返回的第一行的偏移量(也就是从哪个索引开始),第二行指定返回线的最大数目。初始线的偏差为0(而不是1)
oracle:通常使用rownum加上选择嵌入式查询

触发器的使用场景?

催化剂:催化剂需要有催化剂条件,条件满足后,该怎么办

应用程序场景:一些社交软件日志更新以通知朋友;一些论坛在插入新邮件时更改邮件的总数和最后的发布时间。

CREATE [or REPLACE] TRIGGER 触发器名
BEFORE | AFTER
[DELETE ][[or] INSERT] [[or]UPDATE [列名]]
ON 表名
[FOR EACH ROW ][WHEN(条件) ]
declare
……
begin
PLSQL 块
End ;

存储过程的优点

1.存储过程仅在创建时编译,不会在每次执行后重新编译。 一般SQL文档为每次执行编译,因此存储过程将大大提高数据库执行速度
2. 通常复杂的业务逻辑需要多条SQL语句,这些语句要分别从客户机发送到服务器,当客户机和服务器之间的操作很多时,会产生大量的网络传输.如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输会大大减少,降低网络负载.
3.存储过程可重复使用,可以减少数据库开发人员的工作量。
4. 存储 过程 可以 保护 直接 访问 基础 数据 对象, 并 使用 EXECUTE 权限 来 调用 存储 过程 而不 访问 基础 数据库 对象 。

29JDBC调用存储过程

加载驱动—获取连接—设置参数—执行—释放连接

简言之,JDBC的理解

JDBC:Java数据库连接

Java只定义接口,让数据库厂商自己实现接口,对于我们开发人员而言,只需要导入对应厂商开发的实现即可,然后以接口的方式进行调用(mysql+mysql驱动(实现)+jdbc)

数据库连接库的作用

  1. 限制数据库的连接数目,不要犹豫过度连接数据库,以免系统运行缓慢或崩溃
  2. 数据库连接不需要每次创建或摧毁,节省资源
  3. 数据库连接不需要每次创建,响应时间更快

简言之,HTML、CSS和JavaScript在Web开发中被定位

Html 超文本标记语言,定义网页的结构
Css层级样式表用于页面装饰
Javascript主要用于验证表格和动态交互(包括ajax)

AJAX的简要介绍

ajax是一个非同步的JavaScript和需要的xml.Throughajax,数据可以与服务器交换, andajax可以本地更新网页,这意味着它可以更新网页的一部分而不加载整个网页。

怎么实现ajax xmlhttpRrqueset对象,使用这个对象可以异步向服务器发送请求,获取响应,完成局部更新,open send responseText/responseXml局部响应.
使用场景来避免在登录时跳过页面,以及表示在注册时是否存在用户名、二次连接等。

JS与JQuery的关系

JQuery是一个包含js属性和方法的js框架,并增强了js的功能,使其更易于使用,并增强了js的功能。
原来是使用js是要处理很多兼容性的问题(比如注册事件等),由JQuery封装了底层,就不用处理兼容性问题.
原始的js域和事件绑定和jax操作在JQuery被capsulated之后非常困难和易于使用。

JQuery中的常见选择

ID选择器
Class选择器
标签选择器
通用选择器
层次选择器
属性选择器

bootstrap是什么

Bootstrap是一个移动设备优先的UI框架.我们不用写任何的css和js代码就能实现比较漂亮的有交互性的页面.我们程序员对页面的编写是有硬伤的,所以要自己写页面的话,就要使用类似bootstrap这样的UI框架.
平时经常用的:
模态框
表单,表单项
布局
栅格系统

在JQuery页面上加载完成事件

为什么需要页面加载事件很多时候我们需要获取元素,但是必须等到该元素被加载后才能获取,我们可以把js代码放到该元素的后面,但是这样就会造成js在我们的body中存在不好管理.所有页面加载完毕后,所有的元素当然已经加载完毕,一般获取元素做操作都要在页面加载完毕后.
$(function{} 表示页面结构已加载
Window.onload意味着页面已经装载

简单介绍MVC模式?

最经典的MVC模型是: jsp(View)+servlet(Controller)+javabean(Model)

1.当控制器收到用户的要求时
2.控制员叫javabean完成业务
3.完成业务后,通过控制器跳过jsp页向用户反馈
4.Jsp对用户作出回应

39,SpringMVC 的实施过程

  1. 当用户发送请求,被前端控制器(DispatcherServlet)捕获-----捕获请求
  2. 分析前端控制器,获取URL,通过URL调用HandlerMapping,获取所有由Handler配置的有关对象 -- 找到Handler
  3. 前端控制器根据得到的Handler,选择合适的HandlerAdapter,提取Request中的模型数据,填入Handler入参,开始执行Handler,最后返回一个ModelAndView对象.(执行Handler)
  4. 前端控制器根据返回的ModelAndViewm选择合适的ViewResolver(选择ViewResolver)
  5. 通过将模型和视图结合到ViewResolver中来渲染视图,并让前端控制器向客户端返回渲染结果(渲染和返回)

40. AOP 的 应用?

AOP:切断编程
核心原则: 使用动态代理来添加执行前后或异常发生后的相关逻辑.
我们主要使用AOP做:
交易的处理在执行方法之前,打开交易,在执行方法后提交交易,并在异常发生后滚动交易
管辖权的判决 管辖权是否在执行方法之前存在
日志记录 日志执行前的方法

41. 简要 介绍 SPRING 或 SPRING 的 两 个 主要 核心?

spring是j2ee应用程序框架,是轻量级的IOC和AOP的容器框架,主要针对javabean的生命周期进行管理的轻量级容器,可以单独使用,也可以跟其它框架组合使用.

(1).IOC(inversion of control)或DI(dependency injection)控制反转
原来:我的service要调用Dao,我就在service中创建Dao对象,这时Dao对象的创建的控制权在我手中
Spring:spring发现我的service依赖于Dao,就给我的service注入Dao对象,这时Dao对象创建的控制权在spring手中
核心原则:工厂模式+反射+配置文件

(2).AOP:切断编程
核心原则: 使用动态代理来进行执行前后或异常发生后的相关逻辑.
我们主要使用AOP做:
事务处理
权限判断
日志记录

弹簧交易的传播特性和隔离水平

错误阅读:从一个事务到另一个事务未提交的数据
不要重复阅读:从一个事务到另一个已提交的更新数据的阅读结果与多个查询不一致。
虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.

默认Mysql:可重读
默认的Oracle:阅读提交

Lilux通用指令

Cd跳转到目录
Pwd获取当前路径
Su 切换用户
在当前目录下查看文件和目录
Tail 查看文件
Rm –rf文件删除
Vi 修改文件
Mv移动/重命名文件或文件夹
Mkdir创建文件夹
Rm –f 删除文件夹
Tar 打包/解压
格雷普找到你想要的信息

46、数据库优化

位置:搜索、定位慢查询、优化

优化:

  1. 创建目录:创建一个合适的目录,我们可以在目录中查询并随后直接找到相应的记录
  2. 表:当一个表中有更多的数据,或当一个表中有越来越多的字段时,使用水平或垂直的表来优化
  3. 读写分离:当服务器无法满足需求时,使用读写分离方法集群
  4. 缓存:使用Redis缓存

如何查询及慢查询

在项目自验或项目转测之前,在启动mysql数据库时开启慢查询,并且把执行慢的语句写到日志中,在运行一定的时间后,通过查看日志,找到对应的慢查询信息.

使用EXPLAIN +慢查询语句,来详细分析语句的问题.

48.选择适当的索引

索引是一个帮助DBMS有效获取数据的数据结构.
分类:通用,独一无二,主键,全文本
1.一般索引:允许重复值出现
2.唯一的索引与正常索引相同,但没有重复记录(用户名;用户身份证;手机号码)
3.主键索引:是随着设定主键而创建的;也就是把某个列设为主键的时候,数据库就会给该列创建索引;唯一且没有null值
4.全文索引:用来对表中文本域(char,varchar,text)进行索引,全文索引针对myisam

使用索引的一些技巧

索引弊端:
1.占用磁盘空间。
2.插入和修改dml.(删除)操作,影响,减速
使用场景:
当然,这里的条件是经常使用的,如果你不问
2. 这个 字段 的 内容 不是 唯 一 性 价值 。
3.这个字段的内容不经常发生变化

具体技巧:
1.在创建多个列索引(复合索引)时,未使用的第一部分不会被使用(最左匹配)
2.对于类似的查询,如果索引中没有使用"%aa",那么索引中将使用"aa%"
3. 即使 没有 使用 索引 的 条件, 如果 有 或 没有 使用 索引 的 条件, 就 必须 单独 使用 索引 的 所有 必须 使用 的 字段 。
4.如果列类型是一个字符串,请确保使用条件中的参数引用数据,否则索引将失败
5.如果mysql估计全表扫描比索引快的话,索引不适用。 例:表中只有一个记录

50,数据库优化表

表被分成水平(按行)和垂直(按列)表

水平:在实际操作中,mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉.水平分表能够很大程度的减少这些压力.

垂直:如果一个表中的字段具有非常大的值(长文本、二进制等)并且很少被查询,例如商品细节的描述,那么你可以将一个字段放在表中并用外部键将它与原始表关联

水平分表策略:
1. 按时间分表:这种分表方式有一定的局限性,当数据有较强的时效性.如微博发布纪录,微信消息纪录等,这种数据很少会有用户查询几个月前的数据,这时可以按月分表
2.按空间范围表:通常采用严格的自添加ID要求,例如user_id级表
3. Hash分表(用的多):通过一个原始目标的id或者名称通过一定的hash算法计算出数据库存储表的表名,然后访问相应的表.

数据库的读写分离

数据库支持的最多并行连接数是有限的,如果用户有太多的并行访问,服务器不满足请求,则可以被分组。mysql的集群处理技术最常用于读写分离,

1.主流同步:如果集群必须确保每个数据库服务器的数据一致,数据库最终将数据永久化到磁盘上。 更改数据库数据的操作将写入主数据库,而其他数据库则将数据从主数据库同步
读写分离:使用负荷平衡实现主数据库的读操作,所有读操作都来自数据库

数据库优化缓存

在持久层(dao)和数据库(db)之间添加一个缓存层。如果用户访问的数据已经被缓存,则用户访问的数据从缓存中获得,而不访问数据库,而缓存是操作内存,访问是快速的

功能:减少数据库服务器的压力,减少访问时间

Java中常见的缓存:
1. hibernate的二进制缓存,不支持分布式缓存
2.Redis可以作为中央缓存来集中存储在缓存中的数据

优化SQL句子的小技巧

DDL优化:
1.通过禁用索引提供数据输入性能,主要用于将数据添加到数据的表中
2. 关闭唯一校验
3. 修改事务提交方式(导入)(变多次提交为一次)

DML优化:将多个插入语句合并为一个(变为多个提交为一个)

DQL优化:

按优化排序
多用索引排序
一般结果序列(非索引序列)
Group by 优化:如果对排序的结果没有排序的需求,可以考虑在其后面加上order by nul
子查询优化
Or优化:
1.或者双方都用指数字段解释,表现良好
2.或者双方,一方面不必要,性能差
3.如果name=”a” or name=”b”,这种方式,索引失效
Limit优化

雷迪斯介绍

Redis是一个key-value的nosql数据库,先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失数据,支持的数据类型比较多.

主要用于缓存中央缓存发布会议时缓存数据库数据和网络群

使用场景:

  1. 缓冲器:将经常需要查询和很少修改的数据转换为快速读取空间(内存),以减少下一次访问时间和减少 db 压力,
  2. 计量器:在磁盘中的计量器是解决库存溢出、库存溢出、系统溢出问题的原子存储操作
  3. 会话缓存服务器:当网络聚类时作为会话使用的缓存服务器

瑞迪斯储存物体的方式?

Json字符串:需要把对象转换成json字符串,当做字符串处理,直接使用set和get来设置或获取/
优点:易于安装和获取
缺点:没有专门的方法将对象转换为json

序列数是在序列中保存对象的序列。

如果你担心json传输对象的资源消耗,这问题需要在几个地方考虑,
1.使用json conversionlib有性能问题吗
2. 数据的数据量级别,如果是存储百万级的大数据对象,建议采用存储序列化对象方式.如果是少量的数据级对象,或者是数据对象字段不多,还是建议采用json转换成string方式.毕竟redis对存储字符类型这部分优化的非常好.具体采用的方式与方法,还要看你所使用的场景

索尔相似性匹配原理

Solr使用字典将用户输入分离为单词,然后将这些单词转换为向量。

然后,Solr创建了包含这些关键字的索引库中所有记录的 n 维 向量.Solr然后根据 n 维 向量剪切角的字符串值的大小确定相似度的大小.字符串越小,相似度越大,排名越好.相反,字符串越大,相似度越小,排名越低。

卢森的数据模型实际上是一个 n 维 向量.

高耦合问题:索引库同步

硬编码(Hard encoding):将索引库同步到相应的代码的代码。 然而,这种方法的耦合太高,容易造成不可预测的错误,这是供应商项目的一个大禁忌。
2.spring的aop:编写一个索引库同步的方法,利用aop的形式,将它和数据库数据更新的方法联系起来。这种方式也会造成耦合。
3.消息队列:然而,这个方法造成了一个问题,那就是消息消耗的失败。

解决两个系统之间的通信问题。
消息消耗失败:集中同步索引库,做一个定时任务。将消息队列位置的数据库添加到服务器上,我们使用雷迪斯缓存。每个消息都在消息队列中发送,使这个信息在红色中持久.然后我们定了时间(我们是晚上,减少用户时从 redis 中删除消息列表,批量同步索引库。

58、秒杀业务

第二杀手行动的主要操作:减少库存和增加订单
1.第一方法:数据库(小型及中小型网站)
Update goods set num=num-1 where id=id;
Insert orders values() where goods.id=goodsid

为了保持数据一致,需要进行交易

优化:
1数据库服务器和第二个杀人服务器在同一房间
避免使用事务和使用数据库的存储过程完成业务单位
存储过程逻辑:避免使用事务
(一)估计库存(数目)
(2)如果num>0,执行update和insert操作
(3)如果num<0,秒杀结束

2.第二模式:雷迪斯(中型网站)
将秒杀商品和订单都存在redis中,用户下单时,num>0下单(num-1):秒杀结束;

单点登录的核心是什么?

如何在单点登录的核心系统中共享身份信息

为什么索尔索引查询比数据库更快?

Solr使用Lucene API实现的全文检索。 全文检索基本上是一个查询索引。
并非所有字段都是索引的,而且如果你使用类似查询,很多字段可能不会被索引
使用Solr查询以更快地搜索数据库.

61、IO和NIO

序列和反序列

序列化一般指将结构化对象转换为无结构的字节流,这些字节流易于存储和传输

首先,序列不是Java独一无二的,所有基本的编程语言都提供了一种顺序的方法,序列是编程中解决问题的一种方法.JAVA序列是根据特定的协议格式(一种传统的方法)将对象置入缓冲区。它是用于容易的网络传输或永久存储。反序列化,就是将序列化后的buffer按照序列化时还原成原来的对象,这允许程序直接使用恢复对象。

网站安全问题(防止网站被盗)

如果请求数在单位时间内超过一定阈值,输入验证码可以大大降低接收率,如果请求数超过
也可以在阀门值上添加一个黑名单,也可以使用json返回页面内容,并且数据经常被转换成不同的格式,或
用户js动态生成页面内容

64、Spring对bean的管理

1.BeanFactory: BeanFactory采用了工厂设计模式,负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期。
2.ApplicationContext:除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:国际化支持、aop、事务等。
3.BeanFactory在分析配置文件时不会初始化对象,只使用object getBean()来初始化对象,ApplicationContext在分析配置文件时初始化所有配置文件中的对象,getBean()方法只是获取对象的过程。

SpringMVC和SpringBoot有什么区别?

春天是引擎;
Spring MVC 是基于Spring的一个 MVC 框架 ;
Spring Boot是一个基于Spring4的条件注册的快速开发集成包:
1.创建独立的春季应用程序
2.没有WAR文件部署的嵌入式Tomcat
3.简化模板配置
4.自动配置弹簧
5.提供预生产功能,如指标、健康检查和外部配置
6.在XML中绝对没有代码生成和配置要求

66.如何实现JS的跨域访问?

首先,JS的跨域访问意味着JS能够在不同域之间传输和交流数据,例如,使用ajax来请求不同域的数据,或者通过js获取页面中的不同域的帧(iframe)数据。只要协议,端口,域名的任何不同之处,都被当做不同的域。

实现方法:

  1. 通过jsonp的跨域:通过脚本标签介绍一个js文件,该js文件在成功装载后将执行在我们的url参数中指定的函数,它将传递我们需要的json数据作为参数。因此,Jsonp需要服务器侧页相应匹配。
  2. 修改 document.domain 为跨子域:
  3. 使用window.name来进行跨域:window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页是一个窗口,这个名称有读写权,window.name是一个在所有载入的页面中持续存在的窗口,由于新页的加载,它不会被重新定位.

Java虚拟机的生命周期?

负责运行一个java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出,这个虚拟机实例也就随之消亡。

简单地提到类装载机制.

类加载机制?类的负载是指类。 类文件中的二进制数据被读入内存中,将它放在运行时数据区的方法区,然后在stack.lang.Class对象中创建Java,用于封装方法领域的数据结构.包括五个阶段:装载、核查、准备、分析和初始化

外部 和 内部 联系 的 用途 以及 它们 的 影响 是 什么?

  1. 内部连接:返回与连接条件和查询条件匹配的连接表中的数据线(所谓的连接表是在查询时早期数据库中形成的中间表)
  • 隐形内部连接:形成的中间表是两个表的 Cartesian 体积

selecto.id,o.order_number,c.id,c.namefromcustomers c, orders owhere c.id=o.customer_id;

  • 显示内部连接:形成的中间表是条件下筛选的两个表的 Cartesian 体积

selecto.id,o.order_number,c.id,c.namefromcustomers cinnerjoinorders oon c.id=o.customer_id;

2.外部连接:外部连接不仅返回符合连接和查询条件的数据线,返回一些不一致的行。外连接分为三类:左外连接(left outer join)、右外连接(right outer join)、全外连接(full outer join)

  • 外部连接:还返回左栏中的数据线,它不满足连接条件,但满足查询条件

selecto.id,o.order_number,o.customer_id,c.id,c.namefromorders oleftouterjoin customers conc.id=o.customer_id;

  • 外部右连结:还返回右栏中的数据线,它不满足连接条件,但满足查询条件

selecto.id,o.order_number,o.customer_id,c.id,c.namefromorders orightouterjoin customers conc.id=o.customer_id;

  • 全外连接:全外=左外 union 右外,相当于数学合集(去掉重复)

selecto.id,o.order_number,o.customer_id,c.id,c.namefromorders ofullouterjoin customers conc.id=o.customer_id;

你知道的锁是什么? 简要介绍

锁定的基本概念:同时,只有一个线程才能进入这个锁定,其他线程等待到线程释放锁才能到达锁,事实上,在这个意义上的“锁”,锁定不是可访问的对象,而是代码。如果有多个线程访问对象,一个线程到达这个对象的锁上,但是其他对象仍然可以访问这个对象并修改它,只是获取不到锁,完全有可能不使用锁来修改。

答案:选择1和5

常见的锁:排它锁(synchronized)、共享锁、乐观锁和悲观锁(是一种锁的思想,不是状态)、分段锁、自旋锁、公平锁、非公平锁、可重入锁

解释内存泄漏和内存溢出?

  1. 内存泄漏(英语:Memory leak):指程序在申请内存后无法释放所申请的内存空间。 内存泄漏的累积最终导致内存溢出
  2. 内存溢出(英语:Memory overflow):在申请内存时,申请人没有足够的内存可用,或者,换句话说,有错误报告OOM,即内存泄漏

内存溢出的原因及其解决方法:

  1. 原因
  • 存储器中加载的数据量太大,不能同时从数据库中抽出太多的数据;
  • 集合类中的对象在使用后没有空,因此JVM无法检索;
  • 在代码或对象实体中存在过多的循环,产生过多的循环重复;
  • 使用第三方软件;
  • 启动参数内存值设置太小,

2.解决办法

  • 修改JVM启动参数直接增加内存(-Xms,-Xmx参数不可忘记添加。
  • 检查错误日志,看看OutOfMemory错误前是否有异常或错误
  • 搜索和分析代码以找到可能的内存溢出的位置

72.解释什么是平行线程和如何解决多个平行线程的问题?

线程同步是一个类实例对象,它同时创建多个线程对象,调用相同的资源,并引起线程安全问题。

解决方案:基本:确保代码具有容易引起问题的原子性质(破坏导致多线性并行安全问题的条件)。

  1. 使用同步的关键词,创建同步代码块,当执行到了synchronized(object)语句的时候,首先检查对象对象的标记位置,如果为0状态,显示其他线程正在运行,所以这个线程将暂时被封锁,让出CPU资源,直到另一个线程执行为止,恢复标记位置为1后,可以继续运行。
  2. 禁止共享资源 --ThreadLocal
  3. 禁止修改-ReadWriteLock

在数据库中实现三个表查询的一个例子?

您可以使用嵌入式查询实现三个连接查询表:
SELECT employee_name
FROM (table3 c LEFT JOIN TABLE1 a
ON c.employee_id=a.employee_id )
LEFT JOIN table2 b ON b.company_id=a.company_id
WHERE company_name =‘A’ and employee_age<30;

74.春天的交易特征?

原子原性: 强调事物的不可分割性.
一致性 (consistency):事务的执行的前后数据的完整性保持一致.
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
持久性(durability) :事务一旦结束,数据就持久到数据库

先自我介绍一下,他高中毕业了13年,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。了解大多数年轻的Java工程师,想要升技能,经常需要找到自己的成长或向班上汇报。但对于培训机构来说,学费大约是人民币,着实压力不小。当你不在系统时,自我学习的效率很低,而且很持久。也很容易停止天花板技术。所以我为你收集了一个"java开发工具"初衷也很简单,这是一个想帮助自己学习的朋友,却不知道该从哪里学习。同时减少每个人的负担.添加下方名片,你可以得到完整的学习信息

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息