logo资料库

背诵简历-专业技能.pdf

第1页 / 共91页
第2页 / 共91页
第3页 / 共91页
第4页 / 共91页
第5页 / 共91页
第6页 / 共91页
第7页 / 共91页
第8页 / 共91页
资料共91页,剩余部分请下载后查看
1. 具备扎实的Java基础,深入理解OOP编程思想,具有良好的编码习惯
JavaSE:
1 JDK/JRE/JVM 三者之间的联系与区别?
2 JVM
1 什么是类的加载?:
2 类加载的过程?
3 类加载器有什么?
4 类加载的三种方式?
5 双亲委派原则是什么?
6 JVM的内存划分?
7 GC回收过程与算法?
8做项目印象深刻问题?
3 基础
8种基本数据类型?
JDK1.8新特性?
创建对象的4种方式?
4几组比较
1成员变量与局部变量的区别?
2 StringBuilder、String、StringBuffer之间的联系与区别
3 重载重写的区别?
4 ==与equals区别?
5 throws与throw的比较?
6 equals与hashcode的区别?
7 接口与抽象类的区别?
8 短路与&&和逻辑与&与区别?
9 this与super区别?
10 Java 和 C++的区别?
11 int 与Integet的区别
12 final ,finally,finalize的区别?
5 集合
1集合框架的优点?
2 给我介绍一下集合吧?
3 ArrarList是如何实现线程安全的?
4 ArrarList是如何实现扩容的?
5 ArrayList的底层是如何实现?
6 ArrayList的三种遍历方式?
7 你可以说一下ArraryList和数组是如何进行转换的?
8 关于ArrayList和Vector区别?
9 Comparable 和Comparator 的区别?
10 hasMap是如何进行put的?
11 HashMap 的遍历方式?
12 HashMap与Hashtable的区别?
13红黑树的原理?
14 HashMap是如何实现线程安全的?
6 数组的优化?
7算法
1 冒泡排序?
2 选择排序?
3 二分法(折半法)查找?
8线程
1创建线程的5种方式?
继承Thread与实现runnable接口的区别?
2说一下线程生命周期(状态)?
3 什么时候会进入阻塞状态?
4 Thread 类中的 start() 和 run() 方法有什么区别?
5线程的睡眠和等待的区别(sleep 与 wait)?
6 线程唤醒(notify 与 notifyAll)的区别?
7 线程让步、中断、等待终止。
8 线程安全之锁机制
9说一下synchronized 和 Lock 的比较?
Lock 的几个实现类?
10 为什么要用线程池?
11说一下什么是线程?
12 说一下线程与进程的区别?
13线程是如何加锁的?(保证线程同步的方法有什么?)
14什么是死锁?
15死锁产生的4个必要条件?
9 JavaWeb
1 TCP与UDP协议的区别:
2在浏览器输入URL到显示主页的过程?
3 TCP的三次握手与四次挥手
4介绍一下什么是servlet?
5 转发与重定向的区别?
6 jsp与servle的区别?
7 JSP的九大内置对象:
8 JSP的四大作用域
9说一下Cookie 与session区别?
10 JavaWeb的三大组件?
11 HTTP响应状态码分类?
TCP粘包、拆包发生原因?
TCP粘包、拆包解决办法?
OOP:
1介绍一下面向对象编程特性?
2 面向对象和面向过程的区别?
良好的编码习惯
设计模式介绍
单例模式
简单工厂模式
代理模式(Proxy)
命令模式(Command)
策略模式(Strategy)
适配器模式
2. 熟悉Spring、SpringMvc、Mybatis等主流框架,有基于SSM开发项目的经验
Spring
1谈谈你对 Spring 的理解?
2 Spring的四大特征?
Spring中的容器是什么?
Sping是如何加载Bean配置文件(2种)?
bean的生命周期?
bean的作用范围?
Spring框架中的单例bean是线程安全的吗?
Spring如何处理线程并发问题?+
什么是bean后处理器?
bean常用属性?
IOC的概念?
IOC和DI的关系?
依赖注入四种方式?
Spring IOC 过程原理?
常用注解的区别?
@RequestMapping有那几种类型进行简写的?
IOC的实现方式是什么?
@Autowired 如何区别实现同一个接口的两个对象?
AOP的概念?
AOP两种代理方式以及区别?
AOP中Spring通知有哪些类型?(通知 Advice)
AOP实现方式?
AOP应用场景?
你用AOP做过/实现过什么功能?
Spring的事务管理ACID特性?
五个事务隔离级别?
七个事务传播行为?
不同的隔离级别有不同的数据一致性问题?
Spring 中体现的设计模式?
SpringMVC
说一下你对MVC的理解?
SpringMVC 的实现原理?
SpringMVC有那些组件?
SpringMVC拦截器的实现?
MyBatis
MyBatis是什么?
MyBatis缓存机制?
执行流程运行原理?
Mapper动态代理遵循的规则?
$和#区别?
动态sql?
如何进行批量插入?
ORM和半ORM的区别?
Mybatis 使用到的设计模式?
1:n和n:1在xml中如何映射?
MyBatis 与 与 Hibernate 有哪些不同?
Mybaits 的优点与缺点?
当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
SpringBoot
1.1.1.版本?1.X和2.X的区别?
1.1.2.配置文件的三种格式?
1.1.3.Spring Boot自动配置原理
1.1.4.bootstrap和application配置文件区别?
1.1.5.实现热部署有哪几种方式?
1.1.6.如何使用 Spring Boot 实现分页和排序?
1.1.7.springBoot如何整合数据源?
1.1.8.整合Dubbo呢?
1.1.9.如何做到的约定大于配置自动化配置原理?
1.1.10.Spring Boot 、Spring MVC 和 Spring 有什么区别
1.1.11.什么是 CSRF 攻击?
1.1.11.1.防范措施
你有用过SpringBoot是吗?
那你说一下用 Spring Boot有什么好处?
Spring Boot 特点?
如何定义多套不同环境配置?
运行springBoot有什么方式?
springBoot的starters是什么?
常见的 starter 会包几个方面的内容?
Spring Boot Starter 的工作原理?
说一下你常用的SpringBoot的Starter 例子吗?
Spring Boot 可以兼容老 Spring 项目吗,如何做?
JPA是什么?
常用的JPA注解有什么?
在使用方式的接口上查询数据库的方式?
3. 了解分布式系统构建,接触过springCloud、Dubbo分布式管理框架。
1.2.什么是分布式系统?
1.3.什么是 restful 风格
1.4.springCloud
Spring Cloud是什么
SpringCloud 和 和 SpringBoot 的关系
Eureka 介绍
Eureka 的自我保护机制
Spring Cloud几大组件以及作用?
Eureka 和 ZooKeeper 的区别?
什么是负载均衡之 Ribbon?
Nginx 和 Ribbon 的对比?
Ribbon 和 Feign 的区别?
什么是 Hystrix?它如何实现容错?
路由网关zuul与API Gateway的区别:
分布式配置中心Config是什么?
1.5.Dubbo
1.5.1.是什么?
1.5.2.Dubbo里面有哪几种角色?
1.5.3.Dubbo服务负载均衡策略?
1.5.4.Dubbo执行原理?
1.5.5.Dubbo底层实现10层?
1.5.6.Dubbo的通信协议?
1.5.7.Dubbo的序列化方式?
1.5.8.RPC原理
1.5.8.1.Topic1
1.5.9.Zookeeper 是什么?
1.5.10.Zookeeper 怎么保证主从节点的状态同步?
1.5.11.Dubbo直连?
1.5.12.Dubbo 安全问题token?
1.5.13.Zookeeper连接超时?
1.5.14.Dubbo连接超时?
1.5.14.1.解决办法
1.5.15.Zookeeper宕机怎么解决,怎么做到高可用
1.5.16.服务降级 Mock
1.5.17.集群容错方案
1.5.18.灰度发布
1.6.Dubbo 和 SpringCloud 的区别和联系
1.7.Zk和eruka的区别
1.8.RPC和SOA、SOAP、REST的区别
4. 熟悉MySQL的数据库操作,了解MySql数据库优化、MyCat分布式数据库中间件。
1说一下 MySQL的三大范式?
2 MySQL常用函数有什么?
3说一下Mysql 的执行流程?
4 常用的存储引擎有什么?
5事务:完整的业务
1事务的ACID特性是什么?
2事物的四个隔离级别
3 什么是脏读、不可重复读、幻读?
6 MySQL数据库的优化
1数据库结构优化
2查询语句优化
3索引及优化
4服务器优化
5存储引擎的选择优化
7 数据库中的索引是指什么?
8创建索引时候会考虑哪些因素?
B树与B+树有什么区别?
项目中使用了外键了吗?外键有什么作用?
MySQL创建有外键的表要注意的?
9 MyCat
1什么是MyCat?
2 搭建mycat的核心配置文件有哪些?
3 MyCat的分片规则?
5. 熟悉redis、了解Oracle、MongoDB等数据库。
Redis
你来说一下Redis是什么吧?
redis使用场景
redis 常见数据结构
你是怎样用redis的?
redis的持久化
你对 Redis 的持久化机制了解吗?
那你再说下 RDB 是怎么工作的?
那你要不再说下 AOF是怎么工作的?
那我该用哪一个呢?
过期键的删除策略?
存在问题及解决方法
内存淘汰机制?
Redis挂了怎么办 主从复制+哨兵、集群hash槽计算
主从复制是什么?
详细说下数据同步的过程?
主从复制的redis宕机的恢复手段有哪些,优劣
缓存雪崩,缓存穿透,缓存击穿,缓存预热,缓存降级
如何保证缓存与数据库双写时的数据一致性?
那你说下哨兵有哪些功能?
哨兵模式的脑裂问题?
Redis集群故障转移
实际项目中使用缓存有遇到什么问题或者会遇到什么问题你知道吗?
Redis 这么快,它的“多线程模型”你了解吗?
Redis 和 Memcached 的区别?
Oracle
Oracle与Mysql区别?
解释冷备份和热备份的不同点以及各自的优点?
索引 
oracle的锁又几种,定义分别是什么?
讲讲truncate和delete命令的区别 ?
Oracle 常用数据类型?
mongoDB
什么是MongoDB?
MongoDB的优势有哪些?
什么是文档?
什么是集合(表)?
在哪些场景使用MongoDB?
分析器在MongoDB中的作用是什么?
为什么MongoDB的数据文件很大?  
6. 熟悉Junit、Debug进行项目测试
JUnit简介?
junit常见注解含义以及执行顺序?
7. 熟悉Intellij IDEA、Ecplise等项目开发工具
8. 熟悉Linux服务器常见的操作指令、了解Tomcat、Nginx服务器部署
Linux 的目录结构是怎样的?
Linux常用的命令有哪些?
Linux查看日志的命令有什么?
部署tomcat过程?
Nginx特点?
Nginx负载均衡策略?
9. 熟悉H5、CSS、JavaScript、Jquery、Ajax、AngularJS等前端应用技
Ajax
Ajax怎么理解的?
实现流程是怎样的?
AngularJS
AngularJS特征有哪些?
AngularJS常用指令?
AngularJS、VUE理解?
Freemarker
Freemarker是什么?
常用的ftl语法?
JSP
JSP是什么?
常用指令?
Echarts
Echarts是什么?
ztree
ztree是什么?
ueditor
ueditor是什么?
10. 熟悉 Git、Maven 等项目版本管理及构建工具
11.了解shiro,spingSecurity等安全框架。
spring security 安全框架是什么?
spring security 框架原理?
springSecurity的使用过程?
BCrypt(哈希) 加密算法与MD5加密算法的区别?
shiro和spingSecurity的比较?
shiro的使用过程?
项目1
你是如何实现上传广告图片的?
电商概念SPU与SKU?
什么是Freemarker?
Freemaker的使用过程?
Freemarker常用FTL指令?
Freemarker常用内建函数?
分布式服务如何保证用户的session?
项目2
如何使用POI实现导入与导出?
如何使用ECharts实现成绩的数据可视化图表?
简历上的专业技能填写: 1. 具备扎实的 Java 基础,深入理解 OOP 编程思想,具有良好的编码习惯 2. 熟悉 Spring、SpringMvc、Mybatis、SpringBoot 等主流框架,有基于 SSM 开发项目的经验 3. 熟悉 MySQL 的数据库操作,了解基本的 MySql 数据库优化 4. 熟悉 redis、了解 Oracle、MongoDB 等数据库 5. 熟悉 Junit、Debug 进行项目测试 6. 熟悉 Idea 和 Eclipse 等开发工具 7. 熟悉 Git、Maven 等项目版本管理及构建工具 8. 熟悉 Linux 服务器常见的操作指令,了解 Tomcat、Nginx 服务器部署 9. 熟悉 H5、CSS、JavaScript、Jquery、Ajax、AngularJS 等前端应用技术 10. 了解分布式系统构建,接触过 Dubbo、SpringCloud 分布式管理框架 11. 了解 shiro,SpingSecurity 等安全框架 1. 具备扎实的 Java 基础,深入理解 OOP 编程思想,具有良好的编码习惯 JavaSE: 1 JDK/JRE/JVM 三者之间的联系与区别? JDK 是开发工具箱它包含 JRE,而 JVM 中的运行时依赖的环境在 JRE 中的。JVM 是 Java 的虚拟机,可以把字节 码转换为机器代码,还提供了内存管理与垃圾回收。 2 JVM 1 什么是类的加载?: 类的加载指的是将类的.class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内, 然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。 2 类加载的过程? 类加载的过程包括了加载、验证、准备、解析、初始化五个阶段 注意: 这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为通常会在一个阶段执行的过 程中调用或激活另一个阶段。 3 类加载器有什么? Java 语言系统自带有三个类加载器: 1 Bootstrap ClassLoader :最顶层的加载类,主要加载核心类库 2 Extention ClassLoader :扩展的类加载器 3 Application ClassLoader:应用程序类加载器 加载当前应用的 classpath 的所有类。 还有一个自定义加载器:通过继承 java.lang.ClassLoader 实现自定义的类加载器,主要有两个关键 的函数:findClass()与 defineClasss() 而 findClass 是用于用于寻找类文件,findClass 中又调用了有 defineClass() 方法。(define 定义) 4 类加载的三种方式? 隐式加载:new 显式加载:loadClass 与 forName。(两者区别是 forName 是得到 class 的时候已经完成初始化,loadClass 是得到 class 的时候还没有连接,Spirng 的延迟加载是使用 loadClass) (1)通过命令行启动应用时由 JVM 初始化加载含有 main()方法的主类。 ( 2 ) 通 过 Class.forName() 方 法 动 态 加 载 , 会 默 认 执 行 初 始 化 块 ( static{} ) , 但 是
Class.forName(name,initialize,loader)中的 initialze 可指定是否要执行初始化块。 (3)通过 ClassLoader.loadClass()方法动态加载,不会执行初始化块。 5 双亲委派原则是什么? 流程是: 当一个类加载器收到类加载任务,会先交给其父类加载器去完成,因此最终加载任务都 会传递到顶层的启动类加载器,只有当父类加载器无法完成加载任务时,自己才会尝试执行加载任务。 好处: 1 可以避免重复加载,父类已经加载了,子类就不需要再次加载 2 更加安全,很好的解决了各个类加载器的基础类的统一问题, 6 JVM 的内存划分? 分为线程私有区域(程序计算器,本地方法栈,虚拟机栈) 线程共享区域(java 堆,方法区) 程序计算器:用来记录当前指令的地址。通过改变计数器的值来执行下一条指令。 虚拟机栈:每个方法的调用就增加一个栈帧,用来放储局部变量表、方法出口等信息。 本地方法栈:与虚拟机栈作用相类似,后者执行 Java 方法服务,前者 native 方法服务。 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量。 java 堆:用来放对象的信息的,比较大的一个内存(GC 回收的内存)。 7 GC 回收过程与算法? 哪些可以回收? 什么时候可以回收? 怎样回收? 哪些对象可以回收的算法: 引用计算法:对象引用一次就加+1,0 是可以回收的,但会存在循环引用问题。 根搜索算法:又叫可达性分析,以根作为起点没有路径则为是失效的。 怎样回收? 标记清除算法:标记后进行清除,会出现内存碎片化缺点。 复制算法:使用同样的两块内存,当内存满时活对象复制到另一个内存中。内存用一半而已。 标记整理算法:将存活对象移向内存的一端。然后清除端边界外的对象。 分区收集算法:将堆空间划分为连续的不同小区间(独立),减少一次 GC 所产生的停顿。 分代收集算法:目前大部分 JVM 所采用的方法。 分为新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 新生代会频繁触发 MinorGC 进行垃圾回收((复制->清空->互换) 老年代主要存放生命周期长的内存对象,当新生代空间不够用时才触发复制到老年代。 永久代指内存的永久保存区域,主要存放 Class 和 Meta(元数据)的信息,Class 在被加载的时候被放入永久 区域,满了会出现 OOM 问题。 eden 新对象的出生地,当 eden 内存不够才会触发 GC,eden 与 form 的对象复制到 to。年龄够就去老年代。 from 放上一次存活的对象。 to 与 from 交换。
Full GC:JVM 由于要执行 GC 而停止了应用程序的执行 触发 FullGC 的条件 老年代空间不足 永久代空间不足 CMS GC 是出现 promotion failed,concurrent mode failure Minor GC 晋升到老年代的平均大小大于老年代的剩余空间 调用 System.gc()。 8 做项目印象深刻问题? 你在做项目编程中的时候出现那些印象深刻的问题? 出现程序(夹)卡死(就是 fullGC 了),引问题到 GC 回收上。 后来发现是因为触发了 fullGC,而什么时候会出来 fullGC,是因为 JVM 内存不足,要执行 GC 停止了程序的执 行。 3 基础 8 种基本数据类型? byte char short int long flaot double boolean(12248481 字节)1 个字节是 8 个占位。 JDK1.8 新特性? 增加了新的语法 Lambda 表达式 Lambda 操作符是对匿名内部类对象的一种简化写法 java8 中引入了一个新的操作符”->”,叫做箭头操作符,Lambda 操作符 常用内置函数式接口 Consumer :消费型接口 void accept(T t); Supplier :供给型接口 T get(); Function:函数型接口 R Apply(T t) Predicate:断言型接口 boolean test(T t) 创建对象的 4 种方式? 1.使用 new 关键字 2.使反射进行 a 通过 Class 类的 newInstance 方法 -> Class.forname().newInstance(); b 通过 Constructor 类的 newInstance 方法 -> Constructor constructor = Employee.class.getConstructor(); Employee emp3 = constructor.newInstance(); 3.使用 clone(克隆)方法 4.使用反序列化
JDK1.8 有什么锁? 1、自旋锁,自旋,jvm 默认是 10 次,由 jvm 自己控制,for 去争取锁 2、阻塞锁 被阻塞的线程,不会争夺锁 3、可重入锁,多次进入改锁的域 4、读写锁 5、互斥锁,锁本身就是互斥的 6、悲观锁,不相信这里是安全的,必须全部上锁 7、乐观锁,相信这里是安全的 8、公平锁,有优先级的锁 9、非公平锁,无优先级的锁 10、偏向锁,无竞争不锁,有竞争挂起,转为轻量锁 11、对象锁,锁住对象 12、线程锁 13、锁粗化 ,多锁变成一个,自己处理 14、轻量级锁 ,CAS 实现 15、锁消除 ,偏向锁就是锁消除的一种 16、锁膨胀 , jvm 实现,锁粗化 17、信号量,使用阻塞锁实现的一种策略 18、排他锁(不包含),X 锁,若事务 T 对数据对象 A 加上 x 锁,则只允许 T 读取和修改 A,其他任何事务都 不能再对 A 加任何类型的锁,直到 T 释放 A 上的锁。这就保证了其他事务在 T 释放 A 上的锁之前不能再读 取和修改 A Object 类有什么方法? o.equals(); o.hashCode(); o.toString(); o.getClass(); 4 几组比较 1 成员变量与局部变量的区别? 1.在类中的位置 成员变量:在类中方法外面 局部变量:在方法的内部或者在方法的声明中 2.在内存中的位置 成员变量:在堆内存(成员变量属于对象,对象进堆内存) 局部变量:在栈内存(局部变量属于方法,方法进栈内存) 3.生命周期 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,方法调用完毕就消失 4.初始化值 成员变量:有默认初始化值 局部变量:没有初始化值,必须定义,赋值,才可以使用
2 StringBuilder、String、StringBuffer 之间的联系与区别 StringBuffer 线程安全 StringBuilder 非线程安全 底层均为数组实现 StringBuffer,StringBuilder 可变 一、不同点: 1. 可变性 String 不可变 2. 线程安全 String 不可变可称为线程安全 3. 性能 在大量字符串拼接操作中 String 最差 在非线程安全环境中 StringBuilder 性能要比 StringBuffer 好 二、相似点 1. 实现 2. 继承及修改 均为 final 修饰,不可继承修改 三、使用策略 1. 基本原则 少量数据用 String,单线程大量数据用 StringBuilder,多线程大量用 StringBuffer 2. 大量数据操作中不用 String 类中”+”操作 影响性能,使用 StringBuilder/StringBuffer 的 append 进行操作(Java 中一条比较重要的优化原则) 3. 数据量大时,指定 StringBuffer/StringBuilder 的容量 默认 capacity=16,会影响性能 4.使用范围 StringBuilder 一般在局部变量中使用 String 在操作小的前提下都可以 5. 相同情况下,StringBuilder 相比 StringBuffer 能获得 10%-15%的性能提升 非线程安全下可使用 StringBuilder 提升性能 StringBuffer 一般在全局变量中使用,线程安全 3 重载重写的区别? 重载是在类内方法名相同而参数的类型、顺序、个数不同而实现重载。 重写是在继承父类后对父类的方法进行重写(方法名与参数一样)。返回值范围、抛出的异常范围都 小于等于父类,访问修饰符范围大于等于父类; 重写(覆盖)是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关 系。 4 ==与 equals 区别? 基本数据类型==比较的是值等不等,引用数据类型==比较的是内存地址; equals 比较的是内存地址,但 String 引用数据类型重写了 equals 比较的是值是否相等。 它的作用也是判断两个对象是否相等。分为重写了 equals 与没有重写 equals(相当于==)。 5 throws 与 throw 的比较? throws:声明一个方法可能产生的所有异常,不做任何处理但将异常往上传,谁调用抛给谁。 throw:则是用来抛出一个具体的异常类型。 1、throws 出现在方法函数头;而 throw 出现在函数体。 2、throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常。
6 equals 与 hashcode 的区别? 1. 如果两个对象相等,则 hashcode 一定也是相同的 2. 两个对象相等,对两个对象分别调用 equals 方法都返回 true 3. 两个对象有相同的 hashcode 值,它们也不一定是相等的 4. 因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖 5. hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无 论如何都不会相等(即使这两个对象指向相同的数据) 7 接口与抽象类的区别? 抽象类,可以有不抽象的方法, 接口:一定都是抽象的东西,而且只有常量。 接口:是为了解决 java 中的单继承问题,一个类可以继承多个接口 2. 接口中的实例变量默认是 final 类型的,而抽象类中则不一定 3. 一个类可以实现多个接口,但最多只能实现一个抽象类 现在有很多讨论和建议提倡用 interface 代替 abstract 类,两者从理论上可以做一般性的混用,但是在实际应 用中,他们还是有一定区别的。抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属 性上和行为上的。而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定 义的方法, 总之,在许多情况下,接口确实可以代替抽象类,如果你没有说属性上的继承的话。 8 短路与&&和逻辑与&与区别? 1 计算方式不一样但计算结果一样。 2 短路与&&比逻辑与&智能,短路与效率高。 3 短路与&&的同左边是 false 的时候就不会再执行右边。 9 this 与 super 区别? 1 this 指调用当前对象,它的用处是: 方法的局部变量和成员变量重名时候用 this。 调用本类中的其他构造方法,调用时要放在构造方法的首行。 2 super 是子类调用父类的东西。 子类调用父类构造方法的时候要放在第一行。 super 只能应用在成员方法和构造方法中。 3 两者都不能应用在静态方法内 this 与 super 都只能用在构造函数和实例方法内部,但 this 还可以用在成员变量的声明上。 10 Java 和 C++的区别? 1 都是面向对象的语言,都支持封装 继承 多态。 2 C++中使用指针来直接访问内存,java 中没有指针,更安全。 3 java 是单继承 ,而 C++支持多继承。 4 java 中有内存管理机制,可以自动回收内存。 11 int 与 Integet 的区别 https://blog.csdn.net/chenliguan/article/details/53888018?ops_request_misc=&request_id=&biz_id=102&utm_s ource=distribute.pc_search_result.none-task-blog-SOBAIDUWEB-0
12 final ,finally,finalize 的区别? final 是修饰符(关键字),表示不可以修改的,而修饰类的时候表示是不可以派生子类的。 static 和 final 一块使用 static final 用来修饰成员变量和成员方法,可简单理解为“全局常量”! 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 对于方法,表示不可覆盖,并且可以通过类名直接访问。 finally 是在异常处理时提供 finally 块,不管无异常发生,finally 结构使代码总会执行。使用 finally 可以维护 对象的内部状态,并可以清理非内存资源。特别是在关闭数据库连接这方面,如果程序员把数据库连接的 close()方法放到 finally 中,就会大大降低程序出错的几率。 finalize() Java 技术使用 finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。 5 集合 1 集合框架的优点? (1)使用集合类可以降低开发成本,而不用自己实现集合类。 (2)因为我们用的集合框架类是经过严格测试的,所以代码质量会得到提高。 (3)通过使用 JDK 附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 2 给我介绍一下集合吧? 集合分为单列集合 collertion 与双列集合 Map collertion 中又分为 list 与 set 集合 list 是有序可重复的集合 set 是无序不可以重复的集合 map 是无序集合。 list 集合主要的实现有三个分别是 ArrarList 与 linkedList 与 Vector ArrarList 的底层实现是数组,默认大小是 10 个,扩容是以 1.5 倍扩,它的查询快,增删改慢。 linkedList 的实现是链表,它的查询慢,增删改快。 vector 是线程安全的。 set 集合主要实现有三个分别是 hasSer 与 treeSer hasSer 的底层实现是哈希表,无序不可以重复,一般 add 增加数据的时候要重写这 equals 与 hasCode 两个 方法自定义唯一性。 Treeset 的底层实现是二叉树,可以进行默认排序,也可以自定义排序。自定义排序的时候有两种方式,1 实现 Comparable 接口完成排序(compareTo()方法进行),2 是实现 Comparator 接口完成排序。 map 集合主要的实现有 hasMap 与 treeMap 与 Hashtable treeMap 是可以对 Map 中的 key 进行排序,但自定义要要实现 Comaprable 或 Comparator 接口完成排序。 HashTable 是线程安全的要加 ynchronized 修饰。 默认的初始大小为 11。
hasMap 的底层实现是数组+链表+红黑树 默认大小是 16 每到容量的 0.75 的时候进行扩容,是先扩容 2 倍, 如果不够再扩容。 3 ArrarList 是如何实现线程安全的? 1 使用 Vector 类进行替换. 2 使用 Collections.synchronizedList(List)进行替换 List list2 = Collections.synchronizedList(new ArrayList<>()); 3 使用 java.util.concurrent(并发包/叫 JUC) 里的 CopyOnWriteArrayList 类进行替换。 CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList(); 4 ArrarList 是如何实现扩容的? arrarList 默认大小是 10,当集合个数大于容量的时候,就会以 1.5 倍容量去进行扩容,如果还不够大就在扩 容后的 1.5 倍再扩容。扩容后要对原来的集合进行 cope 到新的集合中。 (在 add()方法中调用确保内部容量方法,传入参数当前元素个数加一,当它大于实际数组大小的时候就调 用 grow()方法进行扩容。扩容是右移一位,进行扩容 1.5 倍,不够再进行扩容,通过 copeof()方法进行数组 的复制。) System.arraycopy()和 Arrays.copyOf()的区别? 看两者源代码可以发现`copyOf()`内部调用了`System.arraycopy()`方法区别: 1. arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里,而且可以选择拷贝的起点和长度以 及放入新数组中的位置 2. copyOf()是系统自动在内部新建一个数组,并返回该数组 5 ArrayList 的底层是如何实现? 它实现 List 接口,底层实现是动态数组,其容量能自动增长。操作都是对于数组进行操作的。 两个私有属性: transient Object[] elementData; private int size; elementData 存储 ArrayList 内的元素,size 表示它包含的元素的数量。 关键字 transient 不明白->为了在一个特定对象的一个域上关闭 serialization,可在此域前加关键字 transient。 有三个构造方法: 可以构造一个默认初始容量为 10 的空列表、 :public ArrayList() {this.elementData=10} 构造一个指定初始容量的空列表 以及构造一个包含指定 collection 的元素的列表:public ArrayList(Collection c) {} 以及很多操作方法:元素存储、读取、移除。 :public ArrayList(int initialCapacity) {} 6 ArrayList 的三种遍历方式? 1、第一种,随机访问,它是通过索引值去遍历 由于 ArrayList 实现了 RandomAccess 接口,它支持通过索引值去随机访问元素。 for (int i = 0; i < list.size(); i++){ value = list.get(i);
分享到:
收藏