Java开发面试(持续更新)

一、集合

1.数组和集合的区别

  • 数组的效率高于集合类
  • 数组能存放基本类型和对象,而集合类中只能存放对象
  • 数组长度不可变,集合长度可变
  • 集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率

2.List、Set、Map的区别

Java提供的众多集合类由两大接口衍生而来:Collection接口Map接口
List和Set实现了Collection接口
HashMap和TreeMap实现了Map接口

List:
1.可以允许重复的对象。
2.可以插入多个null元素。
3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问

Set:
无序    元素不可重复
Map:
以Key-Value形式存储。Key可以不重复 Value可重复

二、Vue

1.Vue常用的组件有哪些

  • axios 使用axios实现前后端数据交互
  • easyUI 轻松的打造出功能丰富并且美观的UI界面
  • xlsx 实现前端解析xlsx文件内容
  • vue-json-excel 将后台的json数据导出excel表格

三、数据库

1、多表查询

  • 左连接(左外连接)
作用:在内连接的基础之上,保全左表的全部数据,右边没有的数据用NULL替代。
格式:select 列名 from 左表 left join 右表 on 从表.外键=主表.主键

SELECT * FROM emp e LEFT JOIN dept d ON e.`dept_id` = d.`id`
  • 右连接(右外连接)
 作用:在内连接的基础之上,保全右表的全部数据,左边没有的数据用NULL替代。
 格式:select 列名 from 左表 right join 右表 on 从表.外键=主表.主键
 
SELECT * FROM emp e  RIGHT JOIN dept d ON e.`dept_id` = d.`id`
  • 子查询 (一般而言在一个查询中,可以嵌套另一个查询. 子查询是一个完整的的SELECT语句)
-- a.子查询是单行单列的情况 原理:实际上就是子查询出来的结果是一个值,外部sql可以使用:= > >= < <= != ...

-- 查询工资大于5000的员工的部门名称
SELECT NAME FROM dept WHERE id IN (SELECT dept_id FROM emp WHERE salary > 5000)

-- b.子查询: 多行单列的情况 原理:实际上就是子查询的结果是多个值,可以当数组使用  外部查询可以使用 IN / ANY / ALL
SELECT * FROM emp WHERE salary > (SELECT MAX(salary) FROM emp WHERE dept_id = 1) 

 -- c.多行多列的情况原理:子查询出来的结果实际上就是一个新表,可以继续当虚拟表使用
SELECT e.*  , d.name 部门名称 FROM (SELECT * FROM emp WHERE join_date >= '2011-01-01') e
LEFT JOIN dept d ON e.dept_id = d.id;

2、事务

什么是事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

事务的特性
事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)读提交(read committed)可重复读(repeatable read)串行化(Serializable)
  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

四、框架

1、SpringBoot常用的注解

  • @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。
  • @Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。
  • @EnableAutoConfiguration 自动配置。
  • @ComponentScan 组件扫描,可自动发现和装配一些Bean。
  • @Controller:注解在类上,表示这是一个控制层bean
  • @Service:注解在类上,表示这是一个业务层bean
  • @Value:注解在变量上,从配置文件中读取。
  • @RequestMapping:作用就是映射URL路径,将http的请求地址映射到控制器(controller)类的处理方法上
  • @Responsebody:一般在异步获取数据时使用,将java对象转为json格式的数据
  • @CrossOrigin():解决跨域问题
  • @PostMapping:处理post请求

2、SpringBoot的优点(习惯优于配置)

  • 独立运行
    内嵌各种Servlet容器,Tomcat、Jetty等,只要打成一个Jar包就能独立运行(部署)
  • 简化配置
    spring- boot-start-web启动器自动依赖其他组件,减少了maven的配置
  • 自动配置
    SpringBoot能根据当前类路径下的类、jar包自动配置Bean
  • 应用监控
    SpringBoot提供一系列端点可以监控服务及应用

3、Spring的两大特性

IOC 控制反转
AOP 面向切面编程

五、Java基础

1、抽象类和接口的区别是什么

概念不同
抽象类:这个对象是什么 比如 它是一只动物 可以是狗,也可以是猫
接口:这个对象可以做什么 比如 狗会叫,猫也会叫

成员不同
抽象类:有构造方法,用于子类实例化使用
               成员变量可以是变量,也可以是常量
               成员方法可以是抽象的,也可以是非抽象的
`
接口:    没有构造方法
               成员变量只能是常量,默认修饰符:public static final
               接口中的所有方法都是抽象的

继承关系
抽象类只能单继承,接口可以多继承

2、解释一下static关键词

  • 修饰成员变量和成员方法:被static修饰的变量和方法是属于类的,而不属于某一个对象,使用类名.静态变量名类名.静态方法名()即可使用,而无需重新new一个对象。所有实例共用一个变量
  • 静态代码块:静态代码块定义在类中方法外,静态代码块在非静态代码块之前执行。
  • 静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。

3、线程池

  • 什么是线程池?
    线程池其实就是将多个对象放到一个容器当中。
  • 为什么使用线程池?
    可以重用线程,减少创建和销毁线程带来的消耗
  • 如何使用线程池

线程池的种类

1.ThreadPoolExecutor:线程池的真正实现方法

2.FixedThreadPool:一种固定线程数量的线程池

3.CahcehThreadPool:一种线程数量不定的线程池

4.SingleThreadExecutor:一种只有一个工作线程的线程池

5.ScheduledThreadPool:核心线程数量固定,非核心线程数不固定的线程池

4、数据传输格式

1.JSON:一种轻量级文本数据交换格式(易于阅读编写)
2.XML:可扩展标记语言(读取XML文档)
3.YAML:电脑可识别的数据序列化格式(解析成本低)

5、Ajax

  1. Ajax原理
    AJAX指的是异步的JavaScript及XML(Asynchronous JavaScript And XML),是一种创建快速动态的技术,通过在后台与服务器进行少量的数据交互,实现页面的异步更新,在不重新加载整个页面的情况下做到页面的部分刷新。

  2. Ajax使用步骤
    创建 XMLHttpRequest 对象(XHR)
    1.用户从 UI 发送请求,JavaScript 中调用 XMLHttpRequest 对象。
    2.HTTP 请求由 XMLHttpRequest 对象发送到服务器。
    3.服务器使用 JSPPHPServlet,ASP.net 等与数据库交互。
    4.检索数据。
    5.服务器将 XML 数据JSON 数据发送到 XMLHttpRequest 回调函数。
    6.HTMLCSS 数据显示在浏览器上。

六、liunx

1、常用命令

  • 查看日志
    -n 是显示行号;相当于nl命令
    tail 查看前多少行   比如 tail -n 100 test.log 查询日志尾部最后100行的日志;
    head 查看日志文件的头多少行    比如 head -n 10 test.log 查询日志文件中的头10行日志;
    cat根据关键字查询日志的所在行    比如 cat -n test.log |grep “debug” 查询关键字的日志(常用!~)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值