Spring 面试
Spring 面试综合篇不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年。这是第一个支持注解的版本。 Spring 3.0 发布于 2009 年。它完全利用了 Java 5+ 的改进(如注解和泛型),并为 JEE6 提供了支持。 Spring 4.0 发布于 2013 年。这是第一个完全支持 Java 8 的版本。 Spring 4.3 发布于 2016 年。增强注解驱动开发,改进 HTTP 缓存支持,优化测试框架。 Spring 5.0 发布于 2017 年。支持响应式编程(Spring WebFlux),最低要求 Java 8+,兼容 Kotlin。 Spring 5.3 发布于 2020 年。支持 Java 17,改进 GraalVM 原生镜像兼容性,增强 WebSocket 功能。 Spring 6.0 发布于 2022 年。最低要求 Java 17+,支持 Jakarta EE 9+(取代 Java EE),提供 AOT(提前编译)支持。 Sp...
Java 容器之 List
Java 容器之 List List 是 Collection 的子接口,其中可以保存各个重复的内容。 List 简介List 是一个接口,它继承于 Collection 的接口。它代表着有序的队列。 AbstractList 是一个抽象类,它继承于 AbstractCollection。AbstractList 实现了 List 接口中除 size()、get(int location) 之外的函数。 AbstractSequentialList 是一个抽象类,它继承于 AbstractList。AbstractSequentialList 实现了“链表中,根据 index 索引值操作链表的全部函数”。 ArrayList 和 LinkedListArrayList、LinkedList 是 List 最常用的实现。 ArrayList 基于动态数组实现,存在容量限制,当元素数超过最大容量时,会自动扩容;LinkedList 基于双向链表实现,不存在容量限制。 ArrayList 随机访问速度较快,随机插入、删除速度较慢;LinkedList 随机插入、删除速度较快,随机访...
SQL 语法速成
SQL 语法速成 本文针对关系型数据库的基本语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、原理。 本文语法主要针对 Mysql,但大部分的语法对其他关系型数据库也适用。 SQL 简介数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。 数据表(table) - 某种特定类型数据的结构化清单。 模式(schema) - 关于数据库和表的布局及特性的信息。模式定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。数据库和表都有模式。 行(row) - 表中的一条记录。 列(column) - 表中的一个字段。所有表都是由一个或多个列组成的。 主键(primary key) - 一列(或一组列),其值能够唯一标识表中每一行。 SQL 语法 SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。 SQL 语法结构 SQL 语法结构...
Java 容器简介
Java 容器简介 容器简介数组与容器Java 中常用的存储容器就是数组和容器,二者有以下区别: 存储大小是否固定 数组的长度固定; 容器的长度可变。 数据类型 数组可以存储基本数据类型,也可以存储引用数据类型; 容器只能存储引用数据类型,基本数据类型的变量要转换成对应的包装类才能放入容器类中。 :bulb: 不了解什么是基本数据类型、引用数据类型、包装类这些概念,可以参考:Java 基本数据类型 容器框架 Java 容器框架主要分为 Collection 和 Map 两种。其中,Collection 又分为 List、Set 以及 Queue。 Collection - 一个独立元素的序列,这些元素都服从一条或者多条规则。 List - 必须按照插入的顺序保存元素。 Set - 不能有重复的元素。 Queue - 按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。 Map - 一组成对的“键值对”对象,允许你使用键来查找值。 容器的基本机制 Java 的容器具有一定的共性,它们或全部或部分依赖以下技术。所以,学习以下技术点,对于理解 Jav...
Spring 4 升级踩雷指南
Spring 4 升级踩雷指南前言最近,一直在为公司老项目做核心库升级工作。本来只是想升级一下 JDK8 ,却因为兼容性问题而不得不升级一些其他的库,而其他库本身依赖的一些库可能也要同步升级。这是一系列连锁问题,你很难一一识别,往往只有在编译时、运行时才能发现问题。 总之,这是个费劲的活啊。 本文小结一下升级 Spring4 的连锁问题。 为什么升级 spring4升级 Spring4 的原因是:Spring 4 以前的版本不兼容 JDK8。当你的项目同时使用 Spring3 和 JDK8,如果代码中有使用 JDK8 字节码或 Lambada 表达式,那么会出问题。 也许你会问,为什么不使用最新的 Spring 5 呢?因为作为企业软件,一般更倾向使用稳定的版本(bug 少),而不是最新的版本,尤其是一些核心库。 更多细节可以参考: https://spring.io/blog/2013/05/21/spring-framework-4-0-m1-3-2-3-available/ spring 4 重要新特性Spring 4 相比 Spring 3,引入许多新特性,这里列举几条较...
Spring Web 综述
Spring Web 综述快速入门下面,通过一个简单的示例来展示如何通过 Spring 创建一个 Hello World Web 服务。 (1)pom.xml 中引入依赖 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency> (2)定义 Controller Spring 构建 RESTful 服务的方法,HTTP 请求由 Controller 处理。 这些组件由 @RestController 注解标识。 【示例】下面的示例定义了一个处理 /greeting 的 GET 请求 12345678910111213141516import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.s...
Spring集成缓存
Spring 集成缓存中间件 Spring 中提供了缓存功能的抽象,允许你在底层灵活的替换缓存实现,而对上层暴露相同的缓存接口。 缓存接口Spring 的缓存 API 以注解方式提供。 开启注解Spring 为缓存功能提供了注解功能,但是你必须启动注解。你有两个选择:(1) 在 xml 中声明像上一节 spring-ehcache.xml 中的做法一样,使用<cache:annotation-driven/> 1<cache:annotation-driven cache-manager="cacheManager"/> (2) 使用标记注解你也可以通过对一个类进行注解修饰的方式在这个类中使用缓存注解。范例如下: 1234@Configuration@EnableCachingpublic class AppConfig {} 缓存注解使用Spring 对缓存的支持类似于对事务的支持。首先使用注解标记方法,相当于定义了切点,然后使用 Aop 技术在这个方法的调用前、调用后获取方法的入参和返回值,进而实现了缓存的...
Spring 集成调度器
Spring 集成调度器概述如果想在 Spring 中使用任务调度功能,除了集成调度框架 Quartz 这种方式,也可以使用 Spring 自己的调度任务框架。使用 Spring 的调度框架,优点是:支持注解@Scheduler,可以省去大量的配置。 实时触发调度任务TaskScheduler 接口Spring3 引入了TaskScheduler接口,这个接口定义了调度任务的抽象方法。TaskScheduler 接口的声明: 123456789101112131415public interface TaskScheduler { ScheduledFuture schedule(Runnable task, Trigger trigger); ScheduledFuture schedule(Runnable task, Date startTime); ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period); ScheduledFuture...
Java 国际化
Java 国际化背景知识通讯的发达,使得世界各地交流越来越紧密。许多的软件产品也要面向世界上不同国家的用户。其中,语言障碍显然是产品在不同语种用户中进行推广的一个重要问题。 本文围绕国际化这一主题,先介绍国际标准的语言编码,然后讲解在 Java 应用中如何去实现国际化。 语言编码、国家/地区编码做 web 开发的朋友可能多多少少接触过类似 zh-cn, en-us 这样的编码字样。 这些编码是用来表示指定的国家地区的语言类型的。那么,这些含有特殊含义的编码是如何产生的呢? ISO-639 标准使用编码定义了国际上常见的语言,每一种语言由两个小写字母表示。 ISO-3166 标准使用编码定义了国家/地区,每个国家/地区由两个大写字母表示。 下表列举了一些常见国家、地区的语言编码: 国家/地区 语言编码 国家/地区 语言编码 简体中文(中国) zh-cn 繁体中文(台湾地区) zh-tw 繁体中文(香港) zh-hk 英语(香港) en-hk 英语(美国) en-us 英语(英国) en-gb 英语(全球) e...
Spring集成Dubbo
Spring 集成 DubboZooKeeperZooKeeper 可以作为 Dubbo 的注册中心。 Dubbo 未对 Zookeeper 服务器端做任何侵入修改,只需安装原生的 Zookeeper 服务器即可,所有注册中心逻辑适配都在调用 Zookeeper 客户端时完成。 安装 在 ZooKeeper 发布中心 选择需要的版本,下载后解压到本地。 配置 12vi conf/zoo.cfg 如果不需要集群,zoo.cfg 的内容如下 2: 12345tickTime=2000initLimit=10syncLimit=5dataDir=/home/dubbo/zookeeper-3.3.3/dataclientPort=2181 如果需要集群,zoo.cfg 的内容如下 3: 12345678tickTime=2000initLimit=10syncLimit=5dataDir=/home/dubbo/zookeeper-3.3.3/dataclientPort=2181server.1=10.20.153.10:2555:3555server.2=10.20.153.1...