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开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。
最新整理面试题
上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新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)]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。