栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java面试常见】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java面试常见】

文章目录

1.数据结构有哪些2.常用的SQL优化3.nginx怎么实现负载均衡4.动态SQL标签以及他们的用法5.jsp内置对象6.DOM元素操作对象7.Spring是什么,怎么理解它的aop,ioc8.数据库的慢查询是什么?9.String,StringBuffer,StringBuilder的区别10.HashMap的底层原理11.线程的状态,创建方式12.SpringCloud的核心组件13.Docker的基本指令14.Linux的基本指令15.springmvc的流程16.springmvc有哪些组件17.sleep()和wait()的区别18.spring的常用注解19.常用的集合

CollectionMap 21.spring是基于什么原理实现的22.vue的生命周期23.常见的几种排序算法24.mybatis中SQL写法25.java设计模式26.git指令27.说一下 spring mvc 运行流程?28.配置文件的优先级29.远程调用是通过什么实现的30.SpringCloud与SpringBoot区别31.什么是SpringCloud Bus?32.Nginx和Zuul的区别33.css、html、js的区别34.什么是XSS攻击?如何防范XSS攻击?35.CSRF 攻击是什么?如何防范?36.DI的实现原理37.微服务在项目中的应用38.SQL注入原理及防止SQL注入?39.java8相比java6,java7有什么新的特性

1.数据结构有哪些

数组、栈、队列、链表、树、散列表、堆、图

2.常用的SQL优化

(1)查询时,能不用* 就不用,尽量写全字段名。
(2)索引不是越多越好,每个表控制在6个索引以内。范围where条件的情况下,索引不起作用,比如where value<100
(3)大部分情况连接效率远大于子查询,但是有例外。当你对连接查询的效率都感到不能接受的时候可以试试用子查询,虽然大部分情况下你会更失望,但总有碰到惊喜的时候不是么…
(4)多用explain 和 profile分析查询语句
(5)有时候可以1条大的SQL可以分成几个小SQL顺序执行,分了吧,速度会快很多。
(6)每隔一段时间用alter table table_name engine=innodb;优化表
(7)连接时注意:小表 jion 大表的原则
(8)学会用explain 和 profile判断是什么原因使你的SQL慢
(9)查看慢查询日志,找出执行时间长的SQL进行优化
(10)尽量避免使用order by
(11)因为where子句后面的条件是执行顺序是从右到左,所以尽量把能过滤掉大部分数据的条件放在最后

3.nginx怎么实现负载均衡

通过配置nginx.conf文件实现负载均衡的机制

1.轮询机制
根据配置文件的顺序,依次访问服务器. 默认的负载均衡策略2.权重策略
如果需要设定访问服务器的频次(某个访问的多,某个访问的少),可以通过权重的策略实现.
例如: server localhost:8091 weight=9;3.IPHASH
如果需要用户与服务器进行绑定时,则设定IPHash4.最少连接least_conn
将用户的请求转发到有最少处理请求的服务器中,若A目前处理了5个请求,B处理了10个请求,当我的电脑再次访问nginx时,则我的请求将会转发到A服务器中,least_conn可与weight配合使用

4.动态SQL标签以及他们的用法

where标签说明 可以去除 where后边多余的and 或者 or


        select * from demo_user
            
                 id = #{id}
                and name = #{name}
                and age  = #{age}
                and sex  = #{sex}
            
    

set标签用法: 去除set条件中多余的,号


        update demo_user
            
                 name=#{name}, 
                  age = #{age}, 
                  sex = #{sex} 
            
            where id = #{id}
    

如果只需要一个条件有效,则使用分支结构用法


	        select * from rights where parent_id = #{id}
	 
25.java设计模式

Java 中的23 种设计模式:Factory( 工厂模式),Builder( 建造模式), Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)。工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。说一下你熟悉的设计模式

单例模式:保证被创建一次,节省系统开销。工厂模式(简单工厂、抽象工厂):解耦代码。观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。模版方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

26.git指令

git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
git commit -am “init” 提交并且加注释
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
git push origin master:develop
git push origin master:hb-dev 将本地库与服务器上的库进行关联
git checkout --track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库develop
git checkout -b dev 建立一个新的本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add .
git rm 文件名(包括路径) 从git中删除指定文件
git clone 路径 从服务器上将代码给拉下来
git config --list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git add [file name] 添加一个文件到git index
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -m “This is the message describing the commit” 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm --cached a.a 移除文件(只从暂存区中删除)
git commit -m “remove” 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来

27.说一下 spring mvc 运行流程?

spring mvc 先将请求发送给 DispatcherServlet。DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller。DispatcherServlet 再把请求提交到对应的 Controller。Controller 进行业务逻辑处理后,会返回一个 ModelAndView。Dispatcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象。视图对象负责渲染返回给客户端。 28.配置文件的优先级

spring boot 核心的两个配置文件:

bootstrap (. yml 或者 . properties):boostrap 由父ApplicationContext 加载的,比 applicaton 优先加载,且 boostrap 里面的属性不能被覆盖;application (. yml 或者 . properties):用于 spring boot 项目的自动化配置。

bootstrap.yml>bootstrap.properties>application.yml>application.properties

29.远程调用是通过什么实现的

Feign

补充:

为什么使用feign方式的服务调用(优化结构,简化服务调用过程代码的编写)如何基于feign方式实现远程服务调用(依赖,配置,feign接口的定义)@EnableFeignClient注解的作用是什么(描述配置类,例如启动类,用于告诉底层要启动feign start组件)@FeignClient注解的作用是什么(告诉Feign Starter,在项目 启动时,为此注解描述的接口创建实现类–代理类)
-如何理解基于Feign方式的远程服务调用(声明式远程服务调用–告诉底层做什么,底层封装了服务调用过程)Feign方式如何实现负载均衡(feign默认继承ribbon组件实现负载均衡,底层基于ribbon组件实现)feign接口指向的对象是谁(实现了接口的一个代理对象)

服务的消费方是如何调用服务提供方的服务的(RestTemplate) 30.SpringCloud与SpringBoot区别

SpringBoot专注于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。
SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

31.什么是SpringCloud Bus?

SpringCloud Bus是将分布式的节点用轻量的消息代理连接起来,用它可以用来广播配置文件的更新和服务的直接通讯,还有用于监控,如果配置文件一更新,只需要发送一次,就可以让客户端重新去读取配置文件

32.Nginx和Zuul的区别

不同点:

首先 , Nginx是C语言开发,而 Zuul 是Java语言开发
2)其次,Nginx负载均衡实现,采用服务器实现负载均衡,而Zuul负载均衡的实现是采用 Ribbon + Eureka 来实现本地负载均衡.

Nginx适合于服务器端负载均衡,Zuul适合微服务中实现网关

Nginx相比Zuul功能会更加强大,因为Nginx整合一些脚本语言( Nginx + lua )

Nginc 是一个高性能的HTTP 和反向代理服务器, 也是一个 IMAP / POP3 /SMIP 服务器. Zuul是 Spring Cloud Netflix 中的开源的一个API Gateway 服务器,本质上是一个web servlet 应用, 提供动态路由,监控,弹性,安全等边缘服务的框架. Zuul 相当于是设备和Netflix 流应用的Web 网站后端所有请求的前门

相同点:

可以实现负载均衡 (Zuul使用的是Ribbon实现负载均衡)

可以实现反向代理 (即隐藏真实ip地址)

可以过滤请求,实现网关的效果

33.css、html、js的区别

网页现在的新标准是W3C。目前的模式是html css javascript,如何理解呢,就是html是网页的结构,CSS是网页的样式,javascript是行为。结构就是盖房子先要把结构建出来,然后用CSS来装饰。其实你在用dreamweaver做网页时就已经用到了CSS,比如你用DW的属性面板来设置一个字的字体、颜色和大小,当你选好后,就会自动生成一个.style1的红色代码,在之间不知道你注意过没有,这就是CSS,这样讲的话你应该能理解html和CSS的区别了吧

34.什么是XSS攻击?如何防范XSS攻击?

XSS攻击又称CSS,全称Cross Site script (跨站脚本攻击),其原理是攻击者向有XSS漏洞的网站中输入恶意的 HTML 代码,当用户浏览该网站时,这段 HTML 代码会自动执行,从而达到攻击的目的。
非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。
持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。

也可以分成三类:
反射型:经过后端,不经过数据库
存储型:经过后端,经过数据库
DOM:不经过后端,DOM- xss是通过url传入参数去控制触发的。

解决方法:
1.利用 php htmlentities()函数对传入参数的非法的 HTML 代码包括单双引号等进行转义。但是,中文情况下, htmlentities() 却会转化所有的 html 代码,连同里面的它无法识别的中文字符也给转化了。
2.利用 php htmlspecialchars()函数对传入参数的非法的 HTML 代码包括单双引号等进行转义,需要注意的是第二个参数默认是 ENT_COMPAT,函数默认只是转化双引号("),不对单引号(’)做转义。更多的时候要加上第二个参数,应该这样用 : htmlspecialchars($string,ENT_QUOTES)对单双引号都进行转义。如果需要不转化任何的引号第二个参数使用ENT_NOQUOTES。
3.通过正则表达式过滤传入参数的html标签来防范XSS攻击

35.CSRF 攻击是什么?如何防范?

CSRF也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。

攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。、

如何防范?
1.验证 HTTP Referer 字段
2.使用验证码
3.在请求地址中添加token并验证
4.在HTTP 头中自定义属性并验证

36.DI的实现原理

依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现

getBean() 开始:区分两种情况

​ 单例、非延迟加载情况:

​ 1.容器启动后就会调用getBean() ->

​ 2.instantiateBean()实例话对象 ->

​ 3.BeanWapper 放入IOC容器 beanWarpperMap ->

​ 4.populateBean()依赖注入

​ 原型、延迟加载情况:

​ 当使用到Bean ,调用getBean时才实例化,流程同上

37.微服务在项目中的应用

实现更大数据量的存储。(增大系统容量)可以提高系统的高可用性。提高系统的可重用性。可更好提高系统的性能。 38.SQL注入原理及防止SQL注入?

1、SQL注入原理

就是通过利用一些查询语句的漏洞,将SQL语句传递到服务器解析并执行的一种攻击手段。

2,如何防止SQL注入?

1)不要使用动态SQL

2)不要将敏感数据保留在纯文本中

3)限制数据库权限和特权

4)避免直接向用户显示数据库错误

5)对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)

6)定期测试与数据库交互的Web应用程序

7)将数据库更新为最新的可用修补程序

39.java8相比java6,java7有什么新的特性

Lambda 表达式,允许像对象一样传递匿名函数

Stream API,充分利用现代多核 CPU,可以写出很简洁的代码

Date 与 Time API,最终,有一个稳定、简单的日期和时间库可供你使用

扩展方法,现在,接口中可以有静态、默认方法。

重复注解,现在你可以将相同的注解在同一类型上使用多次。

HashMap 使用散列表和红黑树实现。之前只使用了散列表。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703538.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号