转载

2020java面试问题持续更新

A:java基础

B:java框架和环境工具

1: mybaits 如何防止 sql 注入

Mybatis持久化底层使用preparedstatemend,在编写sql时使用#{xxx}的方式实现预编译,显示sql参数为?,通过占位置方式替换占位符.或者使用存储过程

而使用${xxx}方式添加参数没有使用预编译有sql注入危险 

2.Spring

spring代理:一种是实现了接口的JDK动态代理,一种是无实现接口的Cglib代理

spring ioc:ioc控制反转主要强调程序之间的关系是由容器控制,容器控制对象控制了对外部资源的获取,而在传统中对象都是由我们创建获取依赖对象,而在ioc中对象则是容器创建注入依赖对象,对象是被获取的所以称为控制反转。

spring aop:aop面向切面编程,只要是管理层的业务,如日志、权限、事务等。aop将封装好的对象剖开找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块就是切面。切面将那些与业务逻辑无关却被多个业务模块共同调用的逻辑提取封装,减少代码重复、降低模块之间耦合、提高了系统的可维护性。

springMcv工作原理(重要)

简单理解:客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler-> HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象->前端控制器 DispatcherServlet 渲染数据(Moder)->将得到视图对象返回给用户

1.客户端(浏览器)发送请求,直接请求到 DispatcherServlet。

2.DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。

3.解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。

4.HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。

5.处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。

6.ViewResolver 会根据逻辑 View 查找实际的 View。

7.DispaterServlet 把返回的 Model 传给 View(视图渲染)。

8.把 View 返回给请求者(浏览器)

3.struts工作原理

1.检索匹配请求的actionMap实例。2.请求提交表单数据保存在actionForm中。3.根据配置是否开启表单数据验证。4.ActionServlert根据actionMap映射找到对应的action。5.执行action的execute()的方法返回一个actionForward。6.actionServlert请求转发actonForward对象找到指向jsp组件进行页面响应

4.Linux基本命令 查看线程

find / -name filename.txt 根据名称查找/目录下的filename.txt文件

ps -ef/grep tomcat 查看所有有关tomcat的进程

kill -9 19979 杀死终止线程号19979的进程

ls -al 查看文件包涵隐藏文件

ps aux|grep java 查看java进程

ps aux 查看所有进程

5. 微服务

微服务框架是一种架构模式架构风格,将单一应用程序划分为一组组服务,每个服务运行独立的进程。服务之间一般以(rpc,RestFul api)方式通信达到服务之间相互协调,配合。每个服务围绕具体的业务构建并能独立构建在运行环境中。

微服务框架sprngCloud

服务注册方式(Eureka),服务调用方式(Rest API),服务监控(spring BootAdmin),断路器(spring Clood  Netflix Hystrix),服务网关(spring clood  Netflix Zuul),分布式配置(spring Clood Config),服务追踪(Spring Cloud Sleuth),消息总数(Spring Cloud Bus),数据流(Spring Cloud Stream),批量任务(Spring Cloud Task)

Spring boot和 Spring Clood理解

SpringBoot 专注于快速方便的开发单个个体微服务。

SpringCloud 是关注全局的微服务协调、整理、治理的框架,它将 SpringBoot 开发的单体整合并管理起来。

Spring Clood熔断和服务降级   通过Hystrix实现   启用@HystrixCommand

熔断机制是对运行雪崩效应的一种保护机制,当链路中的某个服务不可用或者响应时间太长进行服务降级,熔断该节点微服务的调用,快速返回“错误”信息。检测节点调用链接正常时恢复链路

微服务优缺点和问题

开发简单效率高,耦合度低,开发技术多样性选择易于集成,单服务便于修改和维护

处理分布式系统的复杂性,多服务运维难度高,服务之间的通讯成本高

6.搭建缓存redis

web.xml

<!–mybatis和redis配置–>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-redis.xml,classpath:spring-mybaties.xml</param-value>

</context-param>

spring-redis.xml

<context:property-placeholder location="classpath:*.properties"/>

<!–设置数据池–>

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">

<property name="maxIdle" value="${redis.maxIdle}"></property>

<property name="minIdle" value="${redis.minIdle}"></property>

<property name="maxTotal" value="${redis.maxTotal}"></property>

<property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>

<property name="testOnBorrow" value="${redis.testOnBorrow}"></property>

</bean>

<!–链接redis–>

<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">

<property name="hostName" value="${redis.host}"></property>

<property name="port" value="${redis.port}"></property>

<property name="password" value="${redis.password}"></property>

<property name="poolConfig" ref="poolConfig"></property>

</bean>

<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="connectionFactory" >

<!–以下针对各种数据进行序列化方式的选择–>

<property name="keySerializer">

<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />

</property>

<property name="valueSerializer">

<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />

</property>

<property name="hashKeySerializer">

<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />

</property>

redis存储类型(string,Hash,List,Set,zset)

7.nginx

高可用,反向代理,负载均衡,异步非阻塞高并发低内存的反响代理服务器

nginx处理请求

5.1 nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket,再进行listen 然后再fork出多个子进程出来, 子进程会竞争accept新的连接。

5.2 客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后

5.3 某一个子进程会accept成功,然后创建nginx对连接的封装,即ngx_connection_t结构体

5.4 根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。
5.5 nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了

C:数据库优化

1.在查询条件上字段适当的建立索引(index)。适当的使用存储过程(procedure)。

2.避免在 where 子句中对字段进行 null 值判断、使用 != 或 <> 操作符、进行表达式、函数、算数运算操作如where num/2 = 100

3.使用union/union all 代替 where 子句中的 or ,用EXISTS替代IN、用NOT EXISTS替代NOT IN。

4.模糊查询条件%开头不走索引。

5.分页上应该先分页在进行表拼接。

6.查询上用具体字段代替*,避免向客户端返回大数据量。

7.尽量使用批量操作代替多条数据操作减少数据库连接。

最高效的删除重复记录方法 ( 因为使用了ROWID)例子: DELETE  FROM  EMP E  WHERE  E.ROWID > (SELECT MIN(X.ROWID) FROM  EMP X  WHERE  X.EMP_NO = E.EMP_NO);

D:前端 jquery ajax

$()是jquery()的别称,$()用于将任何对象包裹成jQuery对象。jquery支持不通选择器,如id选择器$("#id"),类选择器$(".class"),标签选择器$("div")。

jquery提供事件$("#id").click(function(){$("#id1").hide()})。

$(dcument).ready(function(){xxxxxxxxxx}):跨浏览器文档进入ready状态执行代码,$(function({xxxxxxxxxxxx})。

javaScript windows.onLoad事件等待文档dom、图片、视频、音频等外部文件加载完后执行。$(document).ready()只需要等待dom文档加载就执行。

$("[name=nameOfSelectTag]:selected") 找到所有select选中项

each()函数jquery迭代器;

$("p a")找出p标签下所有的超链接;$("p >a")只找出p标签下的超链接不含p下其他标签的超链接;

$("this")返回jquery对象,如$("this").val();   this表示当前元素

$("a").each( function(){  alert($("this").attr("href"));   })  提取所有超链接;

attr(name , value) 设置属性值;

$.ajax({ url:"xxxxx" ,asnyc :false });   jquery实现ajax

原文  https://www.maiyewang.com/archives/91524
正文到此结束
Loading...