面试基础

1.java的跨平台性

用不同系统的jvm

2.搭建一个Java的开发环境

jdk 和 开发工具 web项目要有tomcat

3.java基本数据类型

byte (1字节)

short(2字节)

int (4字节)

long (8字节)

float (4字节)

double(8字节)

char (2字节)

boolean()

4.java面向对象特征

封装,继承,多态

5.装箱和拆箱

Java是一个面向对象语言,而基本数据类型不具备面向对象的特性

6.==和equals的区别

==比较的是两个变量之间的值是否相等,变量又可以分为基本数据类型变量和引用类型,如果是基本数据类型,直接比较值,而引用类型比较的是地址值

equals用来比较两个对象是否一样,实际上就是调用对象来进行比较

7.String

String 不可变 final char[]

StringBuilder 线程不安全 效率高 StringBuffer线程安全效率低

8.集合

Collection Map

Collecttion 有List和set

List是一个有序集合,可以重复

Set是一个无序集合,不可以重复,用equals和hashcode来进行判断

9.ArrayList和LinkedList

list常用的有ArrayList和LinkedList,区别和使用场景

ArrayList底层使用的是数组,LinkedList使用的是链表

数组优点 查询具有所有 查询特定的元素比较快 而插入和删除和修改比较慢

(数组在内存中是一块连续的内存,如果插入或删除是需要移动内存)

链表不要求内存是连续的,在当前元素中存放下一个或上一个元素的地址

查询时要从头部开始,一个一个找,所以查询效率低,而插入时,不需要移动内存,只需要改变引用对象即可,所以插入或者删除的效率高

ArrayList使用在查询比较多,但是插入和删除比较少

LinkedList使用在查询比较少,而插入和删除比较多

10.HashMap和HashTable的区别,HashTable和ConcurrentHashMap

相同点:HashMap和HashTable都可以使用来存储key–value的数据

区别:1.HashMap可以把null作为key或者是value的,而HashTable是不可以的

2.HashMap是线程不安全的,效率较高,HashTable是线程安全的,效率较低

想要线程安全并且效率高

ConcurrentHashMap通过把整个Map分为N个Segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍

11.实现一个拷贝文件的工具类是使用字节流还是字符流

拷贝的文件不确定是包含字符流,有可能有字节(图片,声音,图像等),未考虑到通用性,要使用字节流

12.讲一下线程的集中创建方式,怎么启动,怎么分区,线程池,线程并发库

1.通过继承Thread类实现一个线程

2.通过实现Runnable接口实现一个线程

​ 继承扩展性不强,Java总支持单继承,如果一个类继承Thread类就不能继承其他的类

3.覆写Callable接口实现多线程

4.通过线程池启动多线程

启动:调用start方法启动,而启动后执行run方法

区分:Thread.setName 这是一种规范,在线程创建完成后,都需要设置名称

线程并发库:

Java通过Executor提供4个静态方法创建线程池,分别为

newCachedThreadPool

newFixedThreadPool

newScheduleThreadPool

newSingleThreadExecutor

线程池的作用:

1.限定线程的个数,不会导致线程过多导致系统运行缓慢或崩溃

2.线程池不需要每次都去创建或销毁,节省资源

3.线程池不需要每次都去创建,响应时间更快

13.讲一讲什么是设计模式,常用的设计模式有哪些

设计模式就是经过前人无数次实践总结出,设计过程中可以反复使用的,可以解决特定问题的设计方法

单例模式(饱汉模式,饥汉模式):

1.构造方法私有化,出了让自己类能创建外其他地方都不能创建(饱汉模式是一出来就实例化,饥汉模式是需要的时候才创建)

2.在自己的类中创建一个单实例

3.提供一个方法获取实例对象

工厂模式:Spring IOC

​ 对象的创建交给一个工厂去创建。

代理模式:Spring AOP

包装模式:

14.讲一下Http get 和 post请求的区别

Get和Post请求都是http的请求方式,用户可以通过不同的http的请求方式完成对资源(url)的操作,具体讲Get一般用于获取/查询 资源信息,而Post一般用于更新资源信息

1.Get请求的提交的数据会在地址栏显示出来,而post不会

2.传输数据

3.安全性

15.说一下你对servlet的理解,servlet是什么

Servlet是用Java编写的服务器端的程序,servlet都要实现了servlet接口

16.servlet的生命周期

实例化,初始化,处理请求,服务结束

Servlet启动时,开始加载servlet生命周期开始,Servlet被服务器实例化后,容器运行init方法,请求到达时运行service方法,service方法自动派遣运行与之对应的doxx方法,当服务器决定讲实例销毁时,调用destroy方法

加载Servlet的class–>实例化Servlet—>调用Servlet的init方法完成初始化–>响应请求(Servlet的service方法)–>Servlet容器关闭时(Servlet的destroy方法)

17.Servlet API中的forward()和redirect()的区别

forward 转发 原来请求上跳转 一次请求

redirect 重定向 重新发起一次请求 两次请求

18.JSP和servlet有哪些相同点和不同点
19.session和cookie的区别

Session和Cookie都是会话跟踪技术,Cookie通过在客户端记录信息确定用户身份,Session通过在服务端记录信息确定用户身份,但是Session的实现依赖于Cookie,sessionId(session的唯一标识)

20.MVC的各个部分都有哪些技术来实现

M(Model) 模型 javabean

V(View) 视图 html jsp

C(Controller) 控制器 Servlet,Action

Jsp + Servlet + javabean 最经典的mvc模式,实际上就是model的实现方式

就是把视图和逻辑隔离开来

Model1 的方式 jsp + service + dao

Model2 的方式 jsp + servlet + service + dao

使用 struts2 和 springmvc这样mvc框架后,jsp + 核心控制器+action+javabean

21.数据库

数据库分类:

关系型数据库 非关系型数据库

mysql oracle redis,mogodb,hadoop

22.简单介绍一下关系型数据库三范式

范式就是规范

要想满足第一第二范式必须先满足第一范式,要满足第三范式必须先满足第二范式

第一范式:列数据不可分割

第二范式:主键,必须有唯一标识

第三范式:外键

反三范式,有的时候为了效率,可以设置重复的字段

24.事物四个基本特征 ACID 特性

事物是并发控制的单位

事物必须满足四大特征

原子性:表示事物内操作不可分割,要么都成功,要么都失败

一致性:要么都成功,要么都失败,后面的失败了要对前面的操作进行回滚

隔离性:一个事物开始后,不能受其他事物干扰

持久性:表示事物开始了,就不能终止

25.mysql数据库的最大连接数

服务器上的数据库只能支持一定数目同时连接,这时候需要我们设置最大连接数,在数据库安装时都会有一个默认的最大连接数 默认为100

26.mysql的分页 Oracle的分页

有很多数据的时候,不可能完全显示数据,所以要进行分段显示

Mysql是使用关键字limit来进行分页的limit offset size 表示从多少索引过去多少位

Oracle的分页 大部分情况下,是记不住的,要使用三层嵌套查询

27.数据库触发器的使用场景

触发器,需要有触发条件,当条件满足后做什么操作

trigger

28.简单讲一下数据库的存储过程的使用场景

1.存储过程只在创建时进行编译

2.降低网络负载

3.存储过程一次创建便可以重复使用

4.安全性高

29.简单说一下对jdbc的理解

Java数据库连接,数据库管理系统是很多的,每个数据库管理系统支持侧命令是不一样的

Java指定义接口,让数据库厂商自己实现接口,对于我们而言,只需要导入对于厂商开发的接口实现即可,然后以接口的方式进行调用(mysql + mysql驱动(实现)+jdbc)

30.简单写一个jdbc程序

加载驱动

获取连接

设置参数 statement preparedstatement

执行 executeQuery

释放连接

31.JDBC中的PreparedStatement相比Statement的好处

1.PreparedStatement是预编译的,比Statement速度快

2.代码的可读性和可维护性

3.安全性 PreparedStatement可以防止SQL注入攻击,而Statement却不能

32.数据库连接池的作用

1.限定数据库的个数,不会导致数据库过多导致系统运行缓慢或崩溃

2.数据库不需要每次都去创建或销毁,节省资源

3.数据库不需要每次都去创建,响应时间更快

33.简单说一下html,css,JavaScript在网页开发中的定位

Html 定义网页的结构 超文本标记语言

css 层叠样式表,用来美化页面

JavaScript 主要用来验证表单,用来做动态交互(ajax)

34.简单介绍一下AJAX

什么是Ajax 异步的JavaScript和xml

作用是Ajax 通过Ajax与服务器进行数据交互,Ajax可以实现网页的局部更新

怎么来实现Ajax XmlHttpRequest对象,使用这个对象可以异步向服务器发送请请求获取响应,完成局部更新

使用场景:登录失败时不跳转页面,注册时提示用户名是否存在,二级联动

35.js和jQuery的关系

jQuery是一个js框架,封装了js的属性和方法,并且增强了js的功能,使用起来更加便利

36.jQuery的常用选择器

ID选择器 通过ID获取一个元素

Class选择器 通过类(css)获取元素

标签选择器 通过标签获取元素

通用选择器(*) 获取所有元素

层次选择器 儿子选择器 > 获取下面的子元素

​ 后代选择器 空格 获取下面后代,包括儿子,孙子等后代

属性选择器 Tag{attrName = ‘test’} 获取有属性名位xxxx并且属性的值为test的所有xxx标签

37.什么是框架

是指为解决一个问题而设计的具有一定约束性的支撑结构

38.MVC模式

最简单的,最经典的jsp + servlet + JavaBean

1.当控制器收到用户的请求后

39.SpringMVC的执行流程

核心控制器捕获,查找handler,执行handler,选择ViewResolver,通过View Resolver渲染视图并返回

40.struts2 和 springmvc有什么不同

1.核心控制器

2.SpringMvc是基于方法设计,而Struts是基于对象

41.Spring中的两大核心

Spring是什么

Spring是轻量级的IOC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器

1.IOC或DI

​ 之前:IOC控制反转,Service需要调用DAO

​ 现在:Spring发现你Service依赖于dao,就给你注入

核心原理:工厂模式(容器)+反射+配置文件

2.AOP:面向切面编程

核心原理:使用动态代理的方式在执行方法前后或出现异常后做相关的逻辑

主要使用AOP来做

1.事物处理 执行方法前开启事物,执行完成后关闭事物,出现异常后回滚事物

2.权限判断 在执行方法前,判断是否具有权限

3.日志 执行前进行日志处理

42.Spring事物的传播特性

多个事物存在是怎么处理策略

propagation

Required 需要 如果存在一个事物,则支持当前事物,如果没有则开启

Support 支持 如果存在一个事物,则支持当前事物,如果没有则非事物执行

mandatory 必须的 如果存在一个事物,则支持当前事物,如果没有则抛出异常

Required_new 总是开启一个新事物 如果存在一个事物,则将这个存在的事物挂起

Not_Support 总是非事物的执行,并挂起任何存在的事物

never 绝不 总是非事物的执行 如果有一个活动的事物,则抛出异常

nested 嵌套的 如果有就嵌套,没有就开启事物

43.什么是ORM

对象关系映射 框架有:Hibernate , ibatis(MyBatis) ,

为了解决面向对象与关系数据库存在的互不匹配的现象框架

44.Mybatis和Hibernate有什么区别
45.有无使用过linux

Linux是一个长时间运行比较稳定的操作系统,所以我们一般会拿他作为服务器,我们的一些软件是没有软件包的,需要在Linux编译得到软件包

46.Linux的常用命令

pwd 获取当前路径

cd 跳转目录

su -u 切换到管理员

Ls-ls 列举目录

文件操作命令:

​ 文件

		Tail 查看  rm-rf  删除 vi

​ 文件夹 mkdir rm-r

47.你是使用什么来连接远程的Linux服务器的

需要依赖于Linux服务器安装ssh服务端,一般ssh服务的端口为22

使用ssh客户端连接Linux服务器

使用sftp客户端来连接sftp服务端,来上传和下载文件

Winscp Xftp

48.有没有使用过云主机

阿里云主机

云主机就是一些云服务运营商,提供的远程的服务器功能

使用ssh 和 sftp进行操作

49.有没有做过数据库优化方面的事情

1.查找,定位慢查询,并优化

2.创建索引

3.分表:

4.读写分离:当一台服务器不能满足需求时,采用读写分离的方式进行集群

5.缓存:使用ridis来进行缓存

6.一些常用的优化

50.如何查找定位慢查询

在项目自验或项目在测试之前,在启动mysql数据库时开启慢查询,并且把执行慢的语句写到日志中,在运行一定的时间后,通过查看日志找到慢查询语句

使用explain慢查询语句,来详细分析语句的问题

51.数据库优化

数据库表设计时需要遵循范式

3范式 1.列不可分割 2.主键 3.外键

52.选择适合的存储引擎

MYISAM 存储引擎

INNODB 存储引擎

MyISAM 和 INNODB区别

1.MYISAM不支持事物而INNODB支持

2.MyISAM 不用支持事物就不用考虑同步锁,查找和添加速度快

3.支持全文索引 MyISAM支持,INNODB不支持

4.锁机制 MyISAM支持表锁,INNODN支持行锁

5.外键 MyISAM 不支持外键,INNODB支持外键(通常不设置外键,通常是在程序中保证数据一致的)

53.数据库如何创建合适的索引

普通索引/唯一索引/主键索引/全文索引

54.索引使用场景

索引弊端

1.占用磁盘

2.对操作有影响,变慢

使用场景

如果不做查询没有意义

该字段的内容不是唯一的几个值

字段内容不是频繁变化的

55.数据库优化分表

分表分为水平分表和垂直分表

如果一个表中某个字段的值非常多,而且只有在很少的情况下会查询

考试详情,一般我们值关注分数,不关注详情

水平分表

1.按时间分表

2.按区间分表 id

3.hash分表

56.数据库优化读写分离

一台数据库支持的最大并发数是有限的,如果用户并发访问太多,

Mysql的集群处理技术最常见的就是读写分离

主从同步

​ 数据库最终会把数据持久化到磁盘上,如果集群必须确保每个数据库服务器的数据是一致的,mysql数据库的操作都是往主数据库去写,而其他的数据库从主数据库上同步数据

读写分离

​ 使用负载均衡来实现写的操作都往主数据库去,而读的操作往从服务器上去

57.数据库优化缓存

在持久层(dao)和数据库(db)之间添加一个缓存层

缓存是操作内存的,访问速度快

作用:减少数据库服务器压力,减少访问时间

Java中常用的缓存

redis

58.有没有使用过redis redis是什么

Redis是一个key-value的nosql数据库,先存到内存中,会根据一定的策略持久化到硬盘也不会丢失数据,

主要用来做缓存数据库数据和web集群时当作中央缓存存放session

59.redis的使用场景

缓存:把经常需要查询的,很少修改的数据,放到读写速度很快的空间(内存),以便下次访问减少时间,减轻压力,减少访问时间

计数器:redis中的计数器是原子性的内存操作

​ 可以解决库存溢出问题

session 缓存服务器:

​ web 集群时作为session缓存服务器

60.redis对象保存方式

json字符串

​ 需要把对象转换为json字符串,当作字符串处理,直接使用set get设置获取 优点:设置和获取比较简单

​ 缺点:没有提供专门的方法,需要把对象转换为json

字节:

​ 需要做序列化,就是把对象序列化为字节保存

61.redis数据淘汰机制
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值