Java笔试面试题总结

1.Git的作用是什么?

第一,版本控制;
第二,作为开源代码库,
第三,用于开源项目的维护

2.Spring中获取对象实例的实现方式是?

3.spring中的Bean自动装配支持哪几种?
4.springbean的初始化和销毁的方法是?
5.Spring事务?
6.Spring中的bean的作用域是?
7.项目中用什么做压力测试的工具?
8.什么中间件可以实现mysql的读写分离?
9.项目中使用redis时,redis的持久化策略有哪些?
10.项目中使用Nginx实现负载均衡集群时,负载均衡的策略有哪些?
11.flume的工作机制是什么?
12.关于Hbase行键列族的概念,物理模型,标的设计原则是什么?
13.Hadoop的启动进程有哪些,运行模式有哪些?
14.Hbase的特点是什么?
15.Spark和Flink的了解?
16.Hive与关系型数据库的关系?
17.mllib支持的算法有哪些?
18.ajax的作用和实现原理是什么?
19.描述spring创建对象的个数?
20.spring创建对象的原理?
21.如果页面想更改某个属性的值,在不动后台代码的情况下如何debug调试运行?
22.在多线程中sleep方法和wait方法的区别?
23.谈谈对JVM的理解,并描述JVM加载class文件的原理机制?
24.讲下mybatis缓存?
25.mybatis动态SQL是做什么的?都有哪些动态SQL?简单描述动态SQL的执行原理?
26.#{}和${}的区别是什么?
27.拦截器和过滤器的区别?
29.tomcat容器是如何创建servlet类实例?用的原理是什么?
30.如何看待MapReduce的map端的shuffle?

31.如何解决kafa的数据丢失问题?

32.为什么要用flume导入hdfs,hdfs的架构是怎么样的?

33.hive中存放的是什么?

34.用java写一个单例类

单例模式的三个特点:

  1. 将构造方法私有化(保证外部不能直接构造)
  2. 有一个静态属性指向实例
  3. 提供一个公有的静态方法向外面提供这个实例。

饿汉式

public class Singleton {
    private Singleton() {
    }
 
    private static Singleton instance = new Singleton();
 
    public Singleton getInstance() {
        return instance;
    }
}
懒汉式
public class Singleton {
    private Singleton() {
    }
 
    private static Singleton singleton;
 
    private static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

35.请说明linux如下脚本的作用。find/APP/ido/xu/-mtime+7-name"isTester.tar."-exec rm -rf();

APP/ido/xu/:在此文件夹下常见备份文件
-mtime+7:七天前的备份文件
isTester.tar. :名称为它的前缀的备份文件
-exec rm -rf :执行删除操作

36.简单介绍三种以上的设计模式,说明使用场景和使用原因?

设计模式

  1. 工厂设计模式:主要解决的是接口选择的问题
    使用场景:
    1.日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
    2.数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能变化时。
    3.设计一个连接服务器的框架,需要三个协议,POP,IMAP,HTTP,可以把这三个作为产品类,共同实现一个接口。

  2. 单例模式:一个全局使用的类频繁地创建与销毁。
    使用场景:
    1.要求生产唯一序列号。
    2.web中的计数器,不要每次刷新都在数据库加一次,用单例先缓存起来。
    3.创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。

  3. 责任链模式:在处理消息的时候过滤很多道。
    使用场景:
    1.有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定
    2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
    3.可动态指定一组对象处理请求。

37.事务的ACID是指什么?

事务的ACID是指

  1. 原子性:事务中各项操作,要么全做要么全不做,任何一项操作的失败都会导致整个事务的失败;
  2. 一致性:事务结束后系统状态时一致的;
  3. 隔离性:并发执行的事务彼此无法看到对方的中间状态;
  4. 持久性:事务完成后所做的改动都会被持久化,即使发生灾难性的失败。通过日志和同步备份可以在故障发生后重建数据。

38.简单介绍一下mysql的复合索引和使用条件

用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);
复合索引是有顺序的,复合索引遵循的是向左原则,只要在查询的时候,是按照复合索引从左到右的顺序依次查询,,不管查询条件是否完全满足所有的符合索引的列,都可以使用部分的复合索引。

39.什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?

**1. XSS攻击:**跨站脚本攻击,是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户1提交的数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料,利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
2. SQL注入攻击:就是输入域页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用构造动态SQL语句,或者作为存储过程的输入参数,这类表单特别容易受到SQL注入的攻击。
3. CSRF攻击: 跨站点请求伪造,攻击者盗用你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至购买商品,虚拟货币转账等。

40.mysql查询过程,从客户端发送请求到返回结果,数据库执行的查询过程有哪些步骤分别是什么?

  1. 客户端发送一个查询给服务器。
  2. 服务器先检查查询缓存,如果命中,则直接返回缓存中的结果。如果没有没有命中,则进入下一阶段(解析器)。
  3. 服务器由解析器检查sql语法是否正确,然后由预处理器检查sql中的表和字段是否存在,最后由查询优器生成执行计划。这一步很耗资源。
  4. mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询。
  5. 将结果返回给客户端。

41.TinyURL是一个可以缩短URL的服务,例如:当您输入一个比较长的URL时,https://lectcode.com/problems/design-tinyurl,这个服务会返回一个比较短的URL,http://tinyurl.com/4e9iAk。请为TinyURL服务设计一个encode和decode的方法。

(Tips:encode和decode的算法是没有具体要求的,您只需确保一个长的URL可被encode成一个短的URL,较短的URL可以被decode为长的URL)

42.有长数组A和短数组B,都存储的是正整数,不使用额外的数据结构,查询两个数组中重复的元素并列出,列出你认为时间与空间复杂度最低的最优解(思路即可)

43.MySQL数据库如有下表Student学生表(sid学号,sname姓名,sage年龄,ssex性别),Course课程表(cid课程编号,name课程名称,tid教师编号)SC成绩表(sid学号,cid课程编号,score成绩) Teacher教师表(tid教师编号,tname教师姓名)写一个SQL实现查询“语文”课程比“数学”课程成绩高的所有学生的学号姓名

SELECT student.sid,student.sname from student,
(SELECT * from sc where cid=(SELECT cid from course where `name`='语文')) as Chinese,
(SELECT * from sc where cid=(SELECT cid from course where `name`='数学')) as Math
where student.sid=Chinese.sid
and Chinese.sid=Math.sid
and Chinese.score<Math.score;

44.JVM常用的调试工具有哪些?

(1)jps

jps -q	只输出LVMID
jps -m	启动时main()的参数
jps -l	输出主类全名
jps -v	输出虚拟机进程启动时的参数

(2)jstat

jstat -class LVMID 250 20				监视类装载卸载等信息
jstat -gc LVMID 250 20					监视堆状况信息
jstat -gccapacity LVMID 250 20			监视堆状况信息,主要是各个区域使用到的最大最小空间
jstat -gcutil LVMID 250 20				监视堆状况信息,主要是已使用的百分比
jstat -gccause LVMID 250 20-gcutil差不多,只不过会额外输出上一次GC产生的原因
jstat -gcnew LVMID 250 20				监视新生代
jstat -gcnewcapacity LVMID 250 20		监视堆状况信息,主要是新生代各个区域使用到的最大最小空间
jstat -gcold LVMID 250 20				监视老年代
jstat -gcoldcapacity LVMID 250 20		监视老年代,主要是各个区域使用到的最大最小空间
jstat -compiler LVMID 250 20			JIT编译过的方法
jstat -printcompilation LVMID 250 20	JIT编译过的方法

(3)jinfo

jinfo LVMID		打印配置信息

(4)jmap堆信息

jmap -dump:live,format=b,file=heap.bin 29494

(5)jhat(分析jmap生成的文件)

jhat heap.bin
http://localhost:7000/

(6)jstack

jstack -F LVMID		打印线程信息
jstack -l LVMID		除了堆栈外,显示关于锁的附加信息
jstack -m LVMID		如果调用本地方法的话,可以显示C/C++的堆栈

(7)jconsole

JDK自带bin目录下,这个工具很简单,随便点点就可以知道起功能了

(8)jvisualvm

visualvm功能比较强大,插件也比较多,值得好好研究。

45.linux下的tomcat配置jvm内存在那个文件中?

catalina.sh

46.linux显示磁盘的空间使用情况及挂载点的命令是什么?

df-h

47.mysql中的InnoDB存储引擎使用的数据结构是哪种?

B+Tree

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值