2019Java面试总结(3~5年工作经验)

1. 金融项目的数据类型?

BigInteger BigDecimal

2.MyBatis中 “#” 和 “$” 的区别?

#是处理预编译操作的,防止sql注入,配置参数要用#,不用 。 因 为 。因为 不安全,容易被sql注入。
自己可以写代码用#
主 要 是 处 理 字 符 串 操 作 , 主要是处理字符串操作, 配置参数后面加上1=1永真条件试一试

3.对应的端口号?

mysql 3306 oracle 1521 mongodb 27017 redis 6379 zookeeper 2181 tomcat 8080 http 80 svn 3690 https 443 sqlserver 1433

4. 封装的线程池有哪些?

fixedThreadPool 定长线程池
SingleThreadPool 单例线程池
CachedThreadPool 缓存线程池
ScheduledThreadPool

5. Spring ioc 的简单实现方式?

bean注入方式有三种 :接口注入 Setter注入 构造器注入

6. 通过反射如何获取一个对象的值?

编写一个工具类 获取getClass(),然后调用getMethods(),得到返回值类型,得到参数类型,循环输出!

7. 用jdk动态需要实现一个什么接口

实现一个自己定义的接口

8. dubbo用的是什么负载均衡策略

RandomLoadBalance:按权重随机调用,这种方式是dubbo默认的负载均衡策略
RoundRobinLoadBalance:轮询,按公约后的权重设置轮询比率
LeastActiveLoadBalance:最少活跃次数
ConsistentHashLoadBalance:一致性hash

9. dubbo的线程模型

  1. all : (AllDispatcher类)所有消息都派发到业务线程池,这些消息包括请求/响应/连接事件/断开事件/心跳
  2. direct : (DirectDispacher类)所有消息都不派发到业务线程池,全部在IO线程上直接执行
  3. message : (MessageOnlyDispatcher类)只有请求响应消息派发到业务线程池,其他连接断开事件/心跳等消息,直接在IO线程上执行
  4. execution:(ExecutionDispatcher类)只把请求类消息派发到业务线程池处理,但是响应和其它连接断开事件,心跳等消息直接在IO线程上执行
  5. connection:(ConnectionOrderedDispatcher类)在IO线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到业务线程池处理
    扩展接口 ThreadPool 的SPI实现有如下几种:
  6. fixed:固定大小线程池,启动时建立线程,不关闭,一直持有(缺省)。
  7. cached:缓存线程池,空闲一分钟自动删除,需要时重建。
  8. limited:可伸缩线程池,但池中的线程数只会增长不会收缩。只增长不收缩的目的是为了避免收缩时突然带来大流量引起性能问题

10. dubbo的协议

1、dubbo 协议 (默认)
2、rmi 协议
3、hessian 协议
4、http 协议
5、webservice 协议
6、thrift 协议
7、memcached 协议
8、redis 协议
9、rest ( 就是 RestFull)

11. 事务隔离级别?传播特性?

脏读,幻读,不可重复读,SERLALIZABLE
PROPAGATION_MANDATORY 表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常
PROPAGATION_NESTED 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。
PROPAGATION_NEVER 表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。
PROPAGATION_NOT_SUPPORTED 表示该方法不应该在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间被挂起。
PROPAGATION_SUPPORTS 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION_REQUIRES_NEW 表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。
PROPAGATION_REQUIRES 表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。

12. 是同liux命令查询出现多少次

grep -o hello test.log | wc -1

13. 上传,下载的liux命令

rz 弹出对话框 sz 文件名

14. 两台liux服务器传输用什么命令

设有两机,均为局域网,两机可相互通信无问题,中间无防火墙。
两机IP分别为:A:192.168.1.240 B:192.168.1.102
假设A,B机的SSH都允许root登录
设要把 A上的 /root/abc.zip 传到 B机并放到/abc目录,可以在A机上用命令
scp /root/abc.zip [email protected]:/abc/
若 SSH端口不是默认的22,比如,是端口1234 则加-P参数:
scp -P 1234 /root/abc.zip [email protected]:/abc/
也可以在B机上用命令:
scp [email protected]:/root/abc.zip /abc/

15. fastDFS分了多少组

一开始分了两个组 然后他有扩容交给了运维人员

16. redis用的集群还是单点

就是单点登录的实现说一说

17. 单点登录故障

增加硬盘,做镜像。让出错的概率降低。网卡与网线的单点问题。系统里面最容易物理损坏的就是网线,
网卡绑定(NIC bonding)是一个很简单、很通用的办法,建议你配置多个网卡。SSH服务器和Telnet
服务器共存。毕竟SSH和Telnet,都不是百分之百靠谱的事;IDC机房的单点。由于中国特色的“南北
互通”,所以选择IDC机房的时候,一定要有冗余。靠谱的DNS解析。

18. 有许多属性配置文件,JVM怎么优化?

修改JVM的参数

什么是springBoot?

SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。
特点:让文件配置变的相当简单、让应用部署变的简单(SpringBoot内置服务器并装备启动类代码),可以快速开启一个Web容器进行开发。

SpringBoot工程的使用特点?

(1)一个简单的SpringBoot工程是不需要在pom.xml手动添加什么配置的,如果与其他技术合用 比如postMan(文档在线自动生成、开发功能测试的一套工具)、Swagger(文档在线自动生成、开发功能测试的一套工具),则需要在pom.xml中添加依赖,由程序自动加载依赖jar包等配置文件。
(2)我们之前在利用SSM或者SSH开发的时候,在resources中储存各种对应框架的配置文件,而现在我们只需要一个配置文件即可,配置内容也大体有 服务器端口号、数据库连接的地址、用户名、密码。这样,虽然简单 但在一定问题上而言,这也是极不安全的,将所有配置,放在一个文件里,是很危险的,但对于一般项目而言并不会有太大影响。
(3)在SpringBoot创建时会自动创建Bootdemo1Application启动类,代表着本工程项目和服务器的启动加载,在springBoot中是内含服务器的,所以不需手动配置Tomact,但注意端口号冲突问题。

springBoot通过什么方式简化配置?

通过注解,需要在pom.xml中添加依赖,由程序自动加载依赖jar包等配置文件。

前台Ajax请求Controller中的方法,怎么返回json数据?

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的

request域中对象设置username值,在前端html怎么取到这个值?

如果在jsp页面中,我们使用EL表达式 k e y 就 可 以 拿 到 值 了 如 果 在 h t m l 5 中 , 我 们 需 要 这 样 写 [ [ {key}就可以拿到值了 如果在html5中,我们需要这样写[[ keyhtml5[[{key}]],经过实际验证是ok

什么是sql注入?

sql注入是一种注入攻击,可以执行恶意sql语句。它通过将任意sql代码插入数据库查询,使攻击者能够完全控制web应用程序后面的数据库服务器。攻击者可以使用sql注入漏洞绕过应用程序安全措施,绕过网页或web应用程序的身份验证和授权,并检索整个sql数据库的内容,还可以使用sql注入来添加,修改和删除数据库中的记录

如何防止SQL注入攻击?

不要使用动态注入
不要将敏感数据保留在纯文本中
限制数据库权限和特权
避免直接向用户显示数据库错误
对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)
定期测试与数据库交互的Web应用程序
将数据库更新为最新的可用修补程序
总结:SQL注入是一种流行的攻击攻击方法,但是通过采取适当的预防措施,例如确保数据加密,保护和测试Web应用程序,以及您是最新的补丁程序,您可以采取有意义的步骤来保持您的数据安全。

Java中couurent包下面util包,JAVA.util.courrent包?

java.util.concurrent 包下的几个类和接口:
Executor 接口 > ExecutorService 接口 > ScheduledExecutorService 接口
ThreadPoolExecutor 类,实现了 ExecutorService 接口(意味着同时也实现Executor 接口)。一般使用 Executors 工厂方法中提供的几个线程池。
ScheduledThreadPoolExecutor 类,实现了 ScheduledExecutorService 接口(同上)。用于定期或延迟执行命令。其中,Executors 方法也提供了对应的线程池。
Executors 类 提供了几个工厂方法实现,用于创建 ExecutorService、 ScheduledExecutorService 等接口的实现。
坤是啥?

简单说一下线程池?

线程池是用来方便创建多个线程的一个工具,当需要创建大量线程的时候,用Thread来创建线程已经不合适了,这时就可以使用线程池,通过线程池来控制创建线程。线程池的顶级接口是Executor

collection 和map共同的父类?

iterable

hashset获取第5个元素,咋获取?

hashset集合无法得到里面的第n个元素。
PS:因为hashset集合是无序集合,集合元素顺序不固定,所以无法指定获取第n个元素。
HashSet 集合:
HashSet 类是一个实现 ICollection 接口和 ICollection 泛型接口的 set 集合。从 .NET Framework 4开始,HashSet 类实现了 ISet 类。
HashSet 集合类型:
UnionWith:并集或 Set 加法
IntersectWith:交集
ExceptWith:Set 减法
SymmetricExceptWith:余集

给一个业务场景:做后台权限管理系统,登录才能访问,根据权限的不同,访问到不同的功能。说一下设计思路

menu 菜单表
id(主键)
menu_name(菜单名)
parent_menu_id(父菜单id)
level(菜单级别:0,一级菜单,1,二级菜单……可以无限级)
role 角色表
id(主键)
role_name(角色名)
role_menu 角色关联菜单表
id(主键),
role_id(角色id),
menu_id(菜单id)
四.user 用户表
id,
user_name
user_role用户角色表
id,
user_id(用户id),
role_id(角色id)

写过AOP?AOP常见的注解?

@aspect 定义切面
@pointcut 定义切点
@before 标注Before Advice定义所在的方法
@afterreturning 标注After Returning Advice定义所在的方法
@afterthrowing 标注After Throwing Advice定义所在的方法
@after 标注 After(Finally) Advice定义所在的方法
@around 标注Around Advice定义所在的方法
我们如何在定义切点(Pointcut)的时候指定一类Joinpoint呢?有两种方式 简单的方法名指定以及正则表达式两种方式。
常用的@AspectJ形式Pointcut表达式的标志符:

mysql中关联左边三条数据,右边三条数据,用左关联,有2条数据关联上,一条数据查不到,最终有几种数据?没关联上怎么展示?

maven用过?编译时候怎么调过测试类?

mvn install -DskipTests = true

maven 检查依赖冲突和版本冲突?

mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false
mvn -U dependency:tree -Dverbose
dependency: tree是检查版本冲突的
enforcer:enforce是用来检查重复类的
简单地用 dependency:tree往往并不能查看到所有的传递依赖。不过如果你真的想要看所有的,必须得加一个 -Dverbose参数,这时就必定是最全的了。
全是全了,但显示出来的东西太多有时候会很烦,加上 Dincludes或者 Dexcludes,就会包含或者排除你指定的依赖了, dependency:tree就会帮你过滤出来:比如:
mvn dependency:tree -Dverbose -Dincludes=asm:asm 就会出来asm依赖包的分析信息。

SVN提交冲突怎么办?怎么解决?

a.手工合并SVN冲突文件(检查和修改文件中的冲突标志)。
b.用一个临时文件(三个中的一个)覆盖你的工作文件。
c.运行svnrevert来放弃所有的修改。
一旦解决了你的冲突,需要通过命令svnresolved让subversion知道并删除三个临时文件。这时才可以提交。
A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)
B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。
C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。

谈一下对分布式的理解?

分布式框架系统定理: C —— 数据一致性 A —— 服务可用性 P —— 服务对网络分区故障的容错性,分布式框架很难都满足,一般符合其中两者;包括dubbo在内的其它使用zookeeper的分布式框架是满足CP,因为当客户端发送请求时,集群正在进行master选举或者半数以上的机器宕掉,服务可用性就很难做到;而对于持续集成,快速演化微服务来说,可用性就显得尤为重要,spring cloud由此诞生

分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。企业级应用需求经常随时间而不断变化,这也对企业级应用平台提出了很高的要求。企业级应用平台必须要能适应需求的变化,即具有可扩展性。比如移动互联网2C应用,随着互联网企业的业务规模不断增大,业务变得越来越复杂,并发用户请求越来越多,要处理的数据也越来越多,这个时候企业级应用平台必须能够适应这些变化,支持高并发访问和海量数据处理。分布式系统有良好的可扩展性,可以通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业的业务增长带来的计算需求。

分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式系统由独立的服务器通过网络松散耦合组成的。每个服务器都是一台独立的PC机,服务器之间通过内部网络连接,内部网络速度一般比较快。因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。此外,因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。比如,对分布式应用来说,采用不同编程语言开发带来的单个应用服务的性能差异,跟网络开销比起来都可以忽略不计。因此,分布式系统每个节点一般不采用高性能的服务器,而是性能相对一般的普通PC服务器。提升分布式系统的整体性能是要通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)。

为什么使用线程池?

怎么用减少线程创建的次数?
首先线程是CPU调用,cpu掉高数据量,存储量达,CPU占用量特别高,创建线程池不让他重复创建线程池

Ajax发送方式有几种?

MQ怎么保证信息不丢失?

Activemq有两种通信方式,点到点形式和发布订阅模式。
如果是点到点模式的话,如果消息发送不成功此消息默认会保存到activemq服务端直到有消费者将其消费,所以此时消息是不会丢失的。

Jdk1.8新特性

1.Lambda表达式 2.函数式接口 3.方法引用和构造器调用 4.Stream API 5.接口中的默认方法和静态方法 6.新时间日期API

Mybatis缓存机制

mybatis提供了缓存机制减轻数据库压力,提高数据库性能
mybatis的缓存分为两级:一级缓存、二级缓存
一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效
二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的

Spring cloud 都有哪些组件

a)服务发现——Netflix Eureka
b)客服端负载均衡——Netflix Ribbon
c)断路器——Netflix Hystrix 三种状态
d)服务网关——Netflix Zuul
e)分布式配置——Spring Cloud Config

Equals是怎么进行字符串对比的?

a)先比较字符串长度,如果字符串长度不相等就返回false,如果相等就会把字符串转换成数组,一个一个比较
如何会导致内存溢出?内存溢出报的异常?举个场景?
a)当一直压栈且没有出口时,会导致内存溢出
b)场景:比如说递归没有出口

你可能感兴趣的:(2019Java面试总结(3~5年工作经验))