java基础(一)https://juejin.cn/post/7084216461597605901
java基础(二)https://juejin.cn/post/7133274653857939470
java基础(三)(简答版)https://juejin.cn/post/7137521923663069191
Java基础(三)(简答版)
一、Java【1~8】
1. Java是否支持多继承?
答: 接口支持,类不支持。
2. List都有哪些?
答: 常用的有ArrayList、LinkedList、Vector等。
3. ArrayList默认大小是多少,它又如何扩容?
答: JDK1.7前的默认大小是10,之后的是0;每次扩容约1.5倍。
4. ArrayList和LinkedList的底层数据结构是什么
答: 前者是数组结构;后者是链表结构。 (另外,Vector和ArrayList的区别是,前者V是线程安全的;后者A是线程不安全的。)
5. String是基础类型吗?String是可变的吗?
答: 不是,是引用类型;不可变。
6. final关键字的含义
答: 定义常量,之后不可修改。(定义方法:不能被重写;定义类:不能被继承;定义变量:不能再次赋值)
7. 是否熟悉HashMap?它能做什么?底层原理和扩容机制又是怎么样的?
答: 熟悉;
- 能键值对的映射(key-value) 比如,小明是一个学生,家住南方,key是小明;value记录小明的信息:学生、家住南方。
- 底层原理:数组 + 链表(一个数组结构,数组中每一项又是一个链表)
- 扩容机制:当数组容量达到75%时,会创建一个原来大小两倍的数组。
8. 传统HashMap的缺点(就是JDK1.8之前的HashMap,也是为什么引入红黑树的原因)
答: 过长的链表查询会消耗时间过长,为了解决链表可能出现过长的情况,引入了红黑树。(树化阈值为8是比较理想;树节点小于等于6时,会退化成链表)
9. HashMap和HashTable的区别
答: HashTable 比 HashMap 多个 Synchronized,即 HashTable是线程安全的;HashMap是线程不安全的,HashMap也比HashTable更快;HashMap可以接受null的键和值,HashTable则不能(equlas()方法需要对象,因为HashMap是后出的API经过处理才可以)。
10. String a = new String("qwer");生成了几个对象?为什么?
答: 两个对象;一个 “qwer”(常量池) ,一个 new String(对象)
11. String a = "qwer"; String b = "qwer"; a == b 输出什么?生成了几个对象?为什么?
答: 一个; a 和 b 都是引用常量池里的 “qwer”。
12. String a = "qw"+"er";生成了几个对象?为什么?
答: 三个; 常量池里 “qw” “er” “qwer”。
二、Spring【1~7】
1. Spring有几种配置方式
答: 三种;注解配置、XML配置、Java Config配置(相当于spring的配置文件XML;@Bean 和 @Configuration)
2. Spring常见的注解有哪些?
答: @Controller(表现层的注解)、@Service(业务层的注解)、@Repository(持久层的注解)、@Autowired(作用:自动注入bean)、@Value(注入基本类型和String类型的数据)、@Configuration(指定 Spring 配置类)、@Transactional(定义事务)、@RestController(@Controller和@ResponseBody的结合)、@RequestMapping(映射web请求,就是完整url中跟的部分)
3. 一些重要的 Spring 模块
答: 七大模块;
| 模块名 | 作用说明 |
|---|---|
| Spring AOP | 面相切面编程 |
| Spring ORM | 对象关系映射;Hibernate、Mybatis、JDO |
| Spring Core | 基础和核心部分;bean工厂、控制反转IOC和依赖注入 |
| Spring Dao | 提供了JDBC的抽象层 |
| Spring Context | 应用程序上下文;依赖于Spring Core |
| Spring Web | 提供了web的一些工具类的支持,如多方文件上传 |
| Spring MVC | Web应用的Model-View-Controller(MVC)实现 |
4. 谈谈对 Spring IOC 的了解
答: IOC全程(Inversion Of Control)直译过来是控制反转;控制反转是把传统上由程序代码直接操控对象(new对象)的调用权交给ioc容器,由容器来实现对象的创建,依赖,销毁,初始化等等。
5. 简单说说Spring Bean的生命周期
答: 可以分为4个周期:①实例化②属性赋能③初始化④销毁
6. @Resource和@Autowired注解的区别
答: @Resource 是 jdk 的注解,反射机制是通过 ByName() 方法;@Autowired 是 Spring 的注解,反射机制是ByType() 方法
7. @Service、@Controller、@Component、@Repository的区别
答: @Component 是 @Service、@Controller、@Repository 的元注解(其他三个进行拓展);这四个的功能是一样的。主要区分不同的业务层。
| 注解名 | 业务层 |
|---|---|
| @Service | 逻辑层(业务逻辑) |
| @Controller | 控制层(表现层) SpringMVC的注解 |
| @Component | 组件层(注入到 Spring 进行管理) |
| @Repository | 资源层(持久层) |
三、SpringBoot【1~6】
1. 为什么要使用SpringBoot?(用SpringBoot的好处)
答: 内嵌Tomcat;不需要XML配置(可以用Java Config);无须部署WAR文件;高效配置,快速开发。
2. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
答: @SpringBootApplication(开启 Spring Boot 的各项能力)、@EnableAutoConfiguration(允许自动配置注解)、@Configuration(指定 Spring 配置类)、@ComponentScan(开启组件扫描)
3. 不重启服务器,如何对 Spring Boot 更改加载?(实现热部署)
答: 通过 devtools 依赖。即:
<!-- devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional=true,依赖不会传递 -->
<optional>true</optional>
</dependency>
4. 说说Shiro的认证和授权(Shiro的认识)
答: 作用:能完成认证、授权、加密、会话管理、与Web集成、缓存等操作。
- 用户认证:用户身份识别(即登录)
- 用户授权:访问控制
- 密码加密:加密数据(防偷窥)
- 会话管理:用户访问应用时保持的连接关系 Subject(主体)、SecurityManager(Shiro心脏,功能交互都通过它)、Realm(携带认证和授权的数据)、Cryptography(数据加密解密模块)、CacheManager(缓存控制器)、Session(生命周期在SessionManager)、SessionManager(会话管理)、SessionDAO(回话crud,存储会话到Redis或ehcache的增删改查)
5. 设计模式的了解情况
答: 六大原则:① 开闭原则(Open Close Principle) ②里氏代换原则(Liskov Substitution Principle) ③ 依赖倒转原则(Dependence Inversion Principle) ④ 接口隔离原则(Interface Segregation Principle) ⑤ 迪米特法则(最少知道原则)(Demeter Principle) ⑥ 合成复用原则(Composite Reuse Principle)
- 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
- 结构型模式(7种):代理模式、桥接模式、适配器模式、装饰器模式、外观模式、享元模式、组合模式。
- 行为型模式(11种):观察者模式、策略模式、模板方法模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
6. SpringBoot 和 SpringCloud 分别是什么?说说它们的区别
答: SpringBoot 是提供一个默认配置,从而简化配置过程的轻量级 Spring;SpringCloud是为了给微服务的一个综合管理框架。 SpringBoot单独可以使用,SpringCloud必须要SpringBoot使用的前提下才能使用。它俩出现都是为了简化开发,但是又是完全不同的两个软件开发框架(一个简化配置文件;一个管理微服务)。
7. 持续更新中。。。
答:
四、其他更多
1. 两个int类型的变量a,b,如何不借助额外变量去交换两个变量a,b的值?
直接相加相减操作即可。(a = a + b; b = a - b; a = a - b;)
2. #{} 和 ${} 的区别
两者都是mybatis中国sql语句的占位符。#{}在解析的时候会将其替换成?占位符,然后通过jdbc的preparedStatement对象添加参数值,并做预编译处理,可以防止sql注入。${}会被解析成动态sql语句,感觉入参直接替换,不会进行处理,有可能会受到sql注入。
3. Redis的数据类型
答: ① string:session、计数、分布式锁等等;② hash:适合用来存一个对象;③ list:消息队列、文章列表;④ set:无序集合,可以用来实现并集交集差集(即能实现共同关注之类的功能);⑤ ZSet:有序集合(可做排行榜之类的功能)
4. Redis的应用场景
答: 计数器、分布式session、分布式锁、缓存、过滤、消息队列
5. 如何优化SQL语句?
答: ① 拒绝 select * ,只查需要的字段; ② 分析sql执行流程,看看有没有走索引; ③ 尽量走覆盖索引; ④ 尽量不连表,拒绝外键;⑤ 拒绝大事务操作;等等。
6. 已知初始化 int a, b, c, 求a是b和c的公倍数为 true 的逻辑表达式
答: (a%b==0) && (a%c==0)
7. 写下熟悉的排序算法,分析复杂度。
| 排序方法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 | 复杂性 |
|---|---|---|---|---|---|---|
| 直接插入排序 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 简单 |
| 希尔排序 | O(nlog2n) | O(n2) | O(n1.3) | O(1) | 不稳定 | 较复杂 |
| 直接选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 | 简单 |
| 堆排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(1) | 不稳定 | 较复杂 |
| 冒泡排序 | O(n2) | O(n2) | O(n) | O(1) | 稳定 | 简单 |
| 快速排序 | O(nlog2n) | O(n2) | O(nlog2n) | O(nlog2n) | 不稳定 | 较复杂 |
| 归并排序 | O(nlog2n) | O(nlog2n) | O(nlog2n) | O(n) | 稳定 | 较复杂 |
| 基数排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(n+r) | 稳定 | 较复杂 |
8. MyISAM和InnoDB的区别
答:
9. 有个id转换,8位十六进制的数,需要有规则的转换为10位十进制的数。如:已知“ABCD1234”,两个组,“AB” “CD” “12” “34”,然后倒序再合并,为“3412CDAB”,该数转为十进制数是“873647546”,9位数,需要在前面补一位0,结果为“0873647546”。最后,求这个十六进制转十进制转换规则。
答:
最后
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是南方者,一个热爱计算机更热爱祖国的南方人。
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)