面试:第六章:面试题收集,终于找到一个看得懂的JVM内存模型了

3.POST的安全性要比GET的安全性高。

http中重定向和请求转发的区别?

本质区别:转发是服务器行为,重定向是客户端行为。

重定向两次请求

Cookie和Session的区别

Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。

Session 是存储在 web 服务器端的一块信息。

1、无论客户端做怎样的设置,session都能够正常工作。当客户端禁用cookie时将无法使用cookie。

2、在存储的数据量方面:session能够存储任意的java对象,cookie只能存储String类型的对象。

分布式如何实现session共享

在单点登录中,如果cookie被禁用了怎么办?

单点登录的原理是后端生成一个 session ID,然后设置到 cookie,后面的所有请求浏览器都会带上 cookie,

然后服务端从 cookie 里获取 session ID,再查询到用户信息。所以,保持登录的关键不是 cookie,而是通过

cookie 保存和传输的 session ID,其本质是能获取用户信息的数据。除了 cookie,还通常使用 HTTP 请求头来传

输。但是这个请求头浏览器不会像 cookie 一样自动携带,需要手工处理。

什么是jsp,什么是Servlet?jsp和Servlet有什么区别?

jsp本质上就是一个Servlet,它是Servlet的一种特殊形式(由SUN公司推出),每个jsp页面都是一个servlet

实例。

Servlet是由 Java提供用于开发 web服务器应用程序的一个组件,运行在服务端,由servlet 容器管理,用来生

成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接

口。

区别:

jsp是html页面中内嵌的Java代码,侧重页面显示;

Servlet是html代码和Java代码分离,侧重逻辑控制

jsp有哪些域对象和内置对象及他们的作用?

内置对象:page/exception/application/pagecontext/session/config/request/response

四大域对象:

(1)pageContext  page域-指当前页面,在当前jsp页面有效,跳到其它页面失效

(2)request request域-指一次请求范围内有效,从http请求到服务器处理结束,返回响应的整个过程。

在这个过程中使用forward(请求转发)方式跳转多个jsp,在这些页面里你都可以使用这个变量

(3)session session域-指当前会话有效范围,浏览器从打开到关闭过程中,转发、重定向均可以使用

(4)application context域-指只能在同一个web中使用,服务器未关闭或者重启,数据就有效

什么是xml,使用xml的优缺点,xml的解析器有哪几种,分别有什么区别?

xml是一种可扩展性标记语言,支持自定义标签

优点:用于配置文件,格式统一,符合标准

缺点:xml文件格式复杂,数据传输占流量

Xml常用解析器有2种,分别是:DOM和SAX;

Ajax是一种创建交互式网页应用的的网页开发技术;Asynchronous JavaScript and XML”的缩写。

Ajax的优势:

通过异步模式,提升了用户体验。

优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。

Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。

Ajax的最大特点:

可以实现局部刷新,在不更新整个页面的前提下维护数据,提升用户体验度。

jsonp原理

JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,

被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的

限制,即JavaScript只能访问与包含它的文档在同一域下的内容。

jsonp 的最基本的原理是:动态添加一个

据。 然后以 javascript 语法的方式,生成一个 function , function 名字就是传递上来的参数 jsonp。最后将

json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义

好的 callback 函数里。

常用的Linux命令

列出文件列表:ls 【参数 -a -l】

创建目录和移除目录:mkdir  rmdir

用于显示文件后几行内容:tail

打包:tar -xvf

打包并压缩:tar -zcvf

查找字符串:grep

显示当前所在目录:pwd

创建空文件:touch

编辑器:vim  vi

列出文件列表:ls 【参数 -a -l】

创建目录和移除目录:mkdir  rmdir

用于显示文件后几行内容:tail

打包:tar -xvf

打包并压缩:tar -zcvf

查找字符串:grep

显示当前所在目录:pwd

创建空文件:touch

编辑器:vim  vi

Mybatis 框架中的mapper 方式中的 # 也能很大程度的防止sql注入($无法防止sql注

入)。

Mysql性能优化

1、当只要一行数据时使用limit 1

3. 用not exists代替not in

4. 对操作符的优化,尽量不采用不利于索引的操作符

如:in    not in    is null    is not null    <>  等

在千万级的数据库查询中,如何提高效率?

使用explain sql 来分析sql语句

1)数据库设计方面

a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询

可能不会去利用索引

d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的

效率

e. 应尽可能的避免更新索引数据列

f. 尽量使用数字型字段

Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的ioc和 aop,ioc 提供了依赖注入的容器, aop解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。

Spring MVC提供了一种轻度耦合的方式来开发web应用。它是Spring的一个模块,是一个web框架。

Spring Boot实现了自动配置,降低了项目搭建的复杂度。它主要是为了解决使用Spring框架需要进行大量的配置太麻烦的问题,所以它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。

Spring 是一个“引擎”;

Spring MVC 是基于Spring的一个 MVC 框架;

Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。

SpringMVC的工作原理

a. 用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获;

b. DispatcherServle对请求URL进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping

将请求映射到处理器HandlerExcutionChain;

c. DispatchServlet根据获得Handler选择一个合适的HandlerAdapter适配器处理;

d. Handler对数据处理完成以后将返回一个ModelAndView()对象给DisPatchServlet;

e. Handler 返回的 ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet 通过

ViewResolver试图解析器将逻辑视图转化为真正的视图View;

h. DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给

客户端;

开启注解处理器和适配器

springmvc.xml 中通过开启 mvc:annotation-driven来实现注解处

理器和适配器的开启。

如何解决get和post乱码问题?

解决 post 请求乱码:我们可以在 web.xml 里边配置一个 CharacterEncodingFilter 过滤器。 设置为 utf-8.

解决 get 请求的乱码:有两种方法。对于 get 请求中文参数出现乱码解决方法有两个:

1. 修改 tomcat 配置文件添加编码与工程编码一致。

2. 另 外 一 种 方 法 对 参 数 进 行 重 新 编 码 String userName = New

String(Request.getParameter(“userName”).getBytes(“ISO8859-1”), “utf-8”);

谈谈你对Spring的理解

Spring是一个开源框架,为简化企业级应用开发而生。Spring是一个IOC和AOP容器框架。

在Spring容器中为一个bean配置依赖注入有三种方式:

· 使用属性的setter方法注入  这是最常用的方式;

· 使用构造器注入;

· 使用Filed注入(用于注解方式).

Spring容器的主要核心是:

控制反转(IOC)

依赖注入(DI)面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程

中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事物管理,记录日志等

公用操作处理的过程就是面向切面编程的思想。AOP底层是动态代理

Spring中的设计模式

1单例模式 2模板方式模式 3前端控制器模式 4试图帮助 5依赖注入 6工厂模式

简单介绍一下Spring bean的生命周期

1bean定义 2bean初始化 3bean调用 4bean销毁

spring结构

(1)核心容器:包括Core、Beans、Context、EL模块。

(2)AOP、Aspects模块:

Spring能帮我们做什么?

Spring能帮我们根据配置文件创建及组装对象之间的依赖关系

Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制

Spring能非常简单的帮我们管理数据库事务

Spring还能与第三方数据库访问框架(如Hibernate、JPA)无缝集成

Spring还能与第三方Web(如Struts、JSF)框架无缝集成

Spring配置文件有什么作用?

Spring配置文件是个XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。

什么是Spring IOC 容器

IOC 控制反转:Spring IOC 负责创建对象,管理对象。通过依赖注入(DI),装配对象,配置对象,并且管理这

些对象的整个生命周期。

IOC的优点是什么?

IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试

什么是Spring的依赖注入?

,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而

是通过 spring 容器帮我们 new 指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反

转”

Mybatis中#和$的区别?

#相当于对数据 加上 双引号,$相当于直接显示数据

#方式能够很大程度防止sql注入。

.$方式无法防止Sql注入

$方式一般用于传入数据库对象

一般能用#的就别用$.

Mybatis的编程步骤是什么样的?

1、创建SqlSessionFactory

2、通过SqlSessionFactory创建 SqlSession

3、通过sqlsession执行数据库操作

4、调用session.commit()提交事务

5、调用session.close()关闭会话

使用MyBatis的mapper接口调用时有哪些要求?

1. Mapper接口方法名和mapper.xml中定义的每个sql的id相同

2. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

3. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

4. Mapper.xml文件中的namespace即是mapper接口的类路径。

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。

MyBatis中用于实现动态SQL的元素标签主要有:

if

where

set

choose(when,otherwise)

trim

foreach

Redis的特点?

内存高速缓存数据库

该软件使用C语言编写,典型的NoSQL数据库服务器,Redis是一

个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。

Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和

数据持久化的特征。

Redis常见的性能问题都有哪些?

(1)、Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是

非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

(2)、Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会

不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF

日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一

次。

(3)、Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服

务load过高,出现短暂服务暂停现象。

(4)、Redis 主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave 和 Master 最好在同一个局域

网内

Redis最适合的场景有哪些?

(1)、会话缓存(Session Cache)

(2)、全页缓存(FPC)

(3)、队列

(4)、排行榜/计数器

(5)、发布/订阅

Redis的数据结构有五种

String——字符串

String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可

以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。

Hash——字典

在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值

(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。

List——列表

List 说白了就是链表(redis 使用双端链表实现的 List),相信学过数据结构知识的人都应该能理解其结构。

Set——集合

Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集

合性的数据。

Sorted Set——有序集合

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进

行有序排列

Redis的优缺点

a) 性能极高 – Redis 能支持超过 100K+ 每秒的读写频率。

b) 丰富的数据类型 – Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets数据类型操作。

c) 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。

Redis的持久化

RDB 持久化:该机制可以在指定的时间间隔内生成数据集的时间点快照

AOF 持久化:记录服务器执行的所有写操作命令

消息队列 ActiveMQ 如何使用ActiveMQ解决分布式事务?

在互联网应用中,基本都会有用户注册的功能。在注册的同时,我们会做出如下操作:

1. 收集用户录入信息,保存到数据库

2. 向用户的手机或邮箱发送验证码

等等…

但是在分布式架构中,用户和发送验证码是两个独立的服务,它们都有各自的数据库,那么就不能通过本地事物

保证操作的原子性。这时我们就需要用到ActiveMQ(消息队列)来为我们实现这个需求。

在用户进行注册操作的时候,我们为该操作创建一条消息,当用户信息保存成功时,把这条消息发送到消息队列。

验证码系统会监听消息,一旦接受到消息,就会给该用户发送验证码。

1.如何防止消息重复发送?

解决方法很简单:增加消息状态表。通俗来说就是一个账本,用来记录消息的处理状态,每次处理消息之前,都去

状态表中查询一次,如果已经有相同的消息存在,那么不处理,可以防止重复发送。

Dubbo

dubbo reference注解问题

@Reference 只能在 springbean 实例对应的当前类中使用

dubbo的启动流程

1服务端开始启动,向注册中心(zookeeper)进行注册

2消费者向注册中心订阅服务端自己所需要的服务

3注册中心接收到会以(notify)通知方式通知消费者

4消费者开始向服务端消费自己所需要的服务

5同时,异步的向监控中心记录下有多少服务端在启动,多少消费者在消费。

Dubbo的客户端和服务端有三种连接方式,分别是:广播,直连和使用zookeeper注册中心

Dubbo注册中心和广播注册中心配置类似,不过需要指定注册中心类型和注册中心地址,这个时候就不是把服务

信息进行广播了,而是告诉给注册中心进行管理,这个时候我们就需要有一个注册中心。

官方推荐使用zookeeper作为注册中心。

调用关系说明:

1)服务容器负责启动,加载,运行服务提供者。

2)服务提供者在启动时,向注册中心注册自己提供的服务。

3)服务消费者在启动时,向注册中心订阅自己所需的服务。

4)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台

调用。

6)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Nginx反向代理为什么能够提升服务器性能?

对于后端是动态服务来说,Nginx 有个好处是它会把 Request 在读取完整之前 buffer 住,这样交给后端的就是一个完整的 HTTP

请求,从而提高后端的效率,而不是断断续续的传递(互联网上连接速度一般比较慢)。 同样,Nginx 也可以把

response 给 buffer 住,同样也是减轻后端的压力。

负载均衡策略

1、轮询:这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。

2、最少连接:把请求分配到连接数最少的server

3、权重:使用weight来指定server访问比率

4、ip_hash:每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。

Zookeeper

简单介绍一下zookeeper以及zookeeper的原理

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务

ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、 功能稳定的系统提供给用户

znode节点每个代表一个属性,包含当前版本,数据版本,建立时间和修改时间等

Activity 工作流

工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触

发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人

与软件系统协作完。

tomcat集群

单一服务器终究无法满足需要处理的负荷量

修改 tomcat1, tomcat2 的 server.xml 文件添加集群内容

在 web 开发中,如果对象被保存在了 Session 中,tomcat 在重启时要把 Session 对 象序列化到硬盘,这个对象就必须实现 Serializable 接口。如果对象要经过分布式系统进行 网络传输或通过 rmi 等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现 Serializable 接口。

Java中的String,StringBuilder,StringBuffer三者的区别

速度快慢为:StringBuilder > StringBuffer > String

String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的(StringBuffer中很多方法可以带有synchronized关键字)

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
在这里插入图片描述

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-vFO96xoF-1710439428853)]
[外链图片转存中…(img-V5PntT0U-1710439428854)]
[外链图片转存中…(img-zWpa5ewS-1710439428854)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-6ggT6ZTa-1710439428855)]

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
[外链图片转存中…(img-9u3Ot5nH-1710439428856)]

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

[外链图片转存中…(img-NKncuVWJ-1710439428856)]

最新整理大厂面试文档

[外链图片转存中…(img-kxw7DbXn-1710439428857)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值