java中深层的东西比较

1:进程和线程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位

区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
4)二者均可并发执行.

每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重2要区别

2.多线程同步和互斥有几种实现方法,都是什么?

同步有两种方法。一种同步方法,一种同步代码!分别是synchronized,wait与notify

线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。
线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。
线程间的同步方法大体可分为两类:用户模式和内核模式。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而用户模式就是不需要切换到内核态,只在用户态完成操作。
用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区。内核模式下的方法有:事件,信号量,互斥量。

临界区(Critical Section)和互斥量(Mutex)

两者都可以用于同一进程中不同子线程对资源的互斥访问。

互斥量是内核对象,因此还可以用于不同进程中子线程对资源的互斥访问。

互斥量可以很好的解决由于线程意外终止资源无法释放的问题。

3:抽象类与接口的区别

  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

  2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

  3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

  4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

  5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

  6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

  7.接口中的方法默认都是 public,abstract 类型的。

 

 

 

绝对想你所想,超乎想象!够详细,够给力! 目录 1. Jvm内存空间结构是什么样的? 1 程序计数器 1 Java栈 1 本地方法栈 2 堆 2 方法区 3 2. Jvm堆内存的划分结构和优化 3 2.1. 原理 6 2.1.1. 年轻代 6 2.1.2. 年老代 6 2.1.3. 持久代 7 2.2. 参数说明 8 2.3. 疑问解答 9 2.4. 垃圾回收器选择 10 2.4.1. 串行收集器 10 2.4.2. 并行收集器(吞吐量优先) 10 2.4.3. 并发收集器(响应时间优先) 11 2.4.4. 其它垃圾回收参数 11 2.5. 辅助信息参数设置 12 2.6. 关于参数名称等 13 3. JVM服务参数调优实战 14 3.1. 大型网站服务器案例 14 3.2. 内部集成构建服务器案例 15 4. 常量池在jvm的哪个空间里边? 17 5. jvm垃圾回收是什么时候触发的? 17 5.1. 那究竟GC为我们做了什么操作呢? 17 5.1.1. Jvm怎么判断对象可以回收了? 18 5.2. 下面我们来看一下几种垃圾收集算法 18 5.2.1. 在JDK1.2之前,使用的是引用计数器算法, 18 5.2.2. 根搜索算法 19 5.2.3. 引用的分类 19 5.3. 方法区也是会被回收的 20 5.4. 下面我们来逐一介绍一下每个垃圾回收器。 22 5.4.1. 1、 Serial收集器 22 5.4.2. 2、 ParNew收集器 23 5.4.3. 3、 ParallelScavenge 23 5.4.4. 4、 ParallelOld 24 5.4.5. 5、 SerialOld 24 5.4.6. 6、CMS 24 5.4.7. 7、 GarbageFirst(G1 ) 26 6. 常量池如何触发的垃圾回收? 28 7. 垃圾回收从哪里开始检测树进行回收?根节点是什么? 28 7.1. 目前java中可作为GC Root的对象有 29 8. Redis怎么判断对象可以清理了? 29 9. Redis怎么提高命中率? 29 10. Finalize中调用垃圾回收方法,再调用方法会回收么? 29 11. Int进行自增操作,如何保证线程安全? 30 12. Int a=1是原子方法,布尔类型进行赋值是原子方法么? 30 12.1. 多线程原子操作的安全性 31 13. Cas怎么实现unsafe? 32 13.1. Unsafe 32 13.2. CAS 32 13.3. 由CAS分析AtomicInteger原理 33 13.4. CAS的缺点 35 14. Map数据结构? 35 14.1. 一、定义 36 14.2. 二、构造函数 36 14.3. 三、数据结构 36 14.4. 四、存储实现:put(key,vlaue) 38 14.5. 五、读取实现:get(key) 41 15. 一百万数据放Arraylist数组,怎么放? 在哪个代? 42 15.1.1. 调整数组容量 42 16. Hashmap和 concurrentHashmap除了线程安全 还有什么区别,put的时候是怎么处理的。 43 17. 数据库组合索引,储存在一个叶子节点还是多个? 44 17.1. 索引的利弊与如何判定,是否需要索引: 44 17.1.1. 索引的好处 44 17.1.2. 索引的弊端 44 17.1.3. 如何判定是否须要创建索引 44 17.2. 复合索引优化 45 17.3. 下面是一些常见的索引限制问题 45 17.3.1. 使用不等于操作符(<>, !=) 45 17.3.2. 使用 is null 或 is not null 45 17.3.3. 使用函数 45 17.3.4. 比较不匹配的数据类型 46 17.4. 关于索引的排序 46 18. 数据库没有orderby默认如何排序。 46 19. 分布式事务如何实现。 46 19.1. 1 事务/分布式事务 47 19.1.1. 1.1 事务 47 19.1.2. 1.2 分布式事务与 XA 规范 47 19.2. 2 两阶段提交协议 47 19.2.1. 2.1 预提交阶段 48 19.2.2. 2.2 提交阶段 48 19.3. 3 分布式事务应用框架 48 19.3.1. 3.1 角色 48 19.3.2. 3.2 交互时序 49 19.3.3. 3.3 关键点 50 19.3.4. 参考 50 20. Jvm底层源码 51 21. 二叉树怎么实现的? 51 22. Executourservice 数据结构。哪种只能执行一个线程。 Cache怎么实现的 fixed线程如果中断,线程回自己销毁么? 51 23. 栅栏的原理和实现。 51 23.1. 1. CyclicBarrier简介 51 23.2. 2. CyclicBarrier数据结构 52 23.3. 3. CyclicBarrier源码分析(基于JDK1.7.0_40) 52 23.3.1. 3.1 构造函数 52 23.3.2. 3.2 等待函数 53 23.4. 4. CyclicBarrier的使用示例 57 23.4.1. 示例1 57 23.4.2. 示例2 59 24. Blockingqueue有几种形式?各自的编码方式。 72 24.1. Queue接口 72 24.2. BlockingQueue接口 73 24.2.1. ArrayBlockingQueue 74 24.2.2. LinkedBlockingQueue 78 24.2.3. LinkedBlockingDeque(双向并发阻塞队列) 84 24.2.4. PriorityBlockingQueue(优先阻塞队列) 85 24.2.5. 总结一下阻塞队列 90 25. Tomcat 如何管理servlet? 90 26. Servlet生命周期 90 27. 没有缓存,如何实现领券并发操作? 92
<think>嗯,用户问Spring Boot是什么,我之前刚回答过XML中的SQL代码是手动还是自动生成的问题,现在他们可能是在继续学习后端开发的相关技术。Spring Boot作为一个流行的Java框架,用户可能是刚入门,需要了解基础概念。 首先,我需要确定用户的背景。他们可能已经接触过Spring框架,或者在学MyBatis之类的ORM工具,现在想进一步了解Spring Boot。也有可能他们完全是新手,所以需要从基础讲起,但不要过于简单,避免显得不专业。 接下来,用户的需求可能不仅仅是定义,而是想了解Spring Boot的作用、为什么使用它、有什么优势,以及如何快速上手。可能他们还关心与Spring的关系,是否有必要学习,或者是否适合他们的项目。 用户可能没有说出来的深层需求是希望有一个清晰的指南,帮助他们决定是否选择Spring Boot,或者如何开始使用。所以回答需要结构清晰,分点说明核心概念、解决的问题、优势、核心功能、使用场景以及快速入门步骤。 要避免使用太多技术术语,但又要准确。比如,解释自动配置时,可以提到不需要手动配置XML,而是通过依赖自动处理。内嵌服务器也是一个关键点,说明为什么方便。 需要比较Spring Boot和传统Spring的区别,这样用户能明白它的改进之处。同时,提供简单的代码示例,比如主类和控制器,让用户直观感受如何使用。 可能用户会担心学习曲线,所以强调Spring Boot的简化特性,减少配置,让开发更高效。另外,提到社区支持和丰富的资源,如Spring Initializr和Spring Boot Actuator,增加他们的信心。 最后,总结部分要强调Spring Boot的优势,适合的场景,以及鼓励用户开始使用,给予积极的方向。整个回答需要逻辑清晰,逐步深入,帮助用户构建全面的理解,同时解决可能的疑问。</think>### 一、核心定义 **Spring Boot 是基于 Spring 框架的快速开发脚手架**,其核心目标是**简化 Spring 应用的初始搭建和配置过程**。通过约定大于配置(Convention over Configuration)的设计理念,开发者可以快速构建生产级 Spring 应用。 --- ### 二、解决了哪些痛点? | **传统 Spring 开发痛点** | **Spring Boot 的解决方案** | |----------------------------------|----------------------------------------| | 复杂的 XML/Java 配置 | 零配置启动(通过自动配置实现) | | 依赖版本冲突频繁 | 内置依赖版本管理(starter POMs) | | 部署需要外部 Web 服务器 | 内嵌 Tomcat/Jetty/Undertow 服务器 | | 项目结构缺乏标准 | 标准目录结构约定 | | 监控管理功能缺失 | 内置 Actuator 模块提供健康检查等功能 | --- ### 三、核心特性 #### 1. **自动配置(Auto-Configuration)** - **工作原理**:根据类路径(Classpath)中的 jar 包自动配置 Bean - **示例**:若检测到 `spring-boot-starter-data-jpa`,自动配置数据源和 JPA 相关 Bean - **验证方式**:启动时查看控制台输出的 `CONDITIONS EVALUATION REPORT` #### 2. **起步依赖(Starters)** - **典型依赖包**: ```xml <!-- Web 开发场景 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 数据库场景 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` - **优势**:依赖包版本自动对齐,避免冲突 #### 3. **内嵌服务器** - **支持列表**: ```properties # 切换服务器类型(默认 Tomcat) server.servlet=jetty ``` - **部署对比**: - 传统方式:打包 WAR 部署到外部 Tomcat - Spring Boot:直接执行 `java -jar app.jar` --- ### 四、技术架构 ```mermaid graph TD A[Spring Boot] --> B[自动配置] A --> C[起步依赖] A --> D[内嵌服务器] A --> E[Actuator 监控] B --> F[基于条件注解 @Conditional] C --> G[依赖包聚合] D --> H[Tomcat/Jetty/Undertow] E --> I[健康检查/Metrics/日志] ``` --- ### 五、快速入门示例 #### 1. **创建主类** ```java @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` #### 2. **编写 REST 接口** ```java @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello Spring Boot!"; } } ``` #### 3. **启动验证** ```bash # 访问接口 curl http://localhost:8080/hello # 输出: Hello Spring Boot! ``` --- ### 六、与传统 Spring 的对比 | **能力维度** | **Spring** | **Spring Boot** | |------------------|-------------------------------------|-------------------------------------| | **配置方式** | 需手动配置 XML/JavaConfig | 自动配置 + 按需覆盖 | | **项目启动速度** | 较慢(需加载大量配置) | 快(自动配置延迟初始化) | | **依赖管理** | 需手动管理版本 | 通过 starter 统一管理 | | **部署方式** | 依赖外部服务器 | 内嵌服务器一键启动 | | **监控能力** | 需集成第三方工具 | 内置 Actuator 提供完整监控能力 | --- ### 七、典型应用场景 1. **微服务开发** 快速构建独立运行的微服务模块(结合 Spring Cloud) 2. **RESTful API 开发** 通过 `spring-boot-starter-web` 快速创建 API 服务 3. **批处理任务** 使用 `@Scheduled` 注解实现定时任务: ```java @Scheduled(fixedRate = 5000) public void reportTask() { System.out.println("定时任务执行: " + new Date()); } ``` 4. **数据访问** 整合 MyBatis/JPA: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 ``` --- ### 八、进阶功能 #### 1. **配置管理** - **多环境配置**: ```properties # application-dev.properties(开发环境) server.port=8081 # application-prod.properties(生产环境) server.port=80 ``` - **启动命令指定环境**: ```bash java -jar app.jar --spring.profiles.active=prod ``` #### 2. **监控端点** 通过 Actuator 提供的 HTTP 端点: ```text /health # 健康状态 /metrics # JVM/系统指标 /loggers # 日志级别查看 /env # 环境变量查看 ``` --- ### 九、学习资源推荐 1. **官方文档** [Spring Boot Reference Guide](https://docs.spring.io/spring-boot/docs/current/reference/html/) 2. **初始化工具** [Spring Initializr](https://start.spring.io/)(在线生成项目骨架) 3. **调试技巧** 启动时添加 `--debug` 参数查看自动配置报告: ```bash java -jar app.jar --debug ``` --- ### 十、总结 - **核心价值**:**让开发者专注于业务逻辑**,而非框架配置 - **适用场景**:快速构建独立运行的、生产级别的 Spring 应用 - **学习建议**:从 starter 项目入手,逐步掌握自动配置原理和定制方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haorantiangang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值