1 异常场景再现 今天写代码,又出Bug了! 看看这两个方法的注解参数 1 绝大多数的原因 该控制器下有两个相同的url,导致spring容器不知道该url映射到哪个方法,在程序源挑错指南网站高票答案也可看出: 2 隐藏Bug !!! 在@RequestMapping注解中使用value,而非name!! 看来即使源码中说他们其实是一个人的两个名字而已,但实质上是真正的同卵双生的双胞胎!!!
要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间相互通信,分为下面四类: 1 文件共享 2 网络共享 socket编程问题,非本文重点,不再赘述 3 共享变量 4 线程协作 - JDK API 细分为: suspend/resume 、 wait/notify、 park/unpark JDK中对于需要多线程协作完成某一任务的场景,提供了对应API
0 相关源码 1 竞态条件与临界区 多个线程访问了相同的资源,向这些资源做了写操作时,对执行顺序有要求。 1.1 临界区 incr 方法内部就是临界区域,关键部分代码的多线程并发执行,会对执行结果产生影响。 1.2 竞态条件 可能发生在临界区域内的特殊条件。多线程执行incr方法中的i++关键代码时,产生了竞态条件 2 共享资源 如果一段代码是线程安全的,则它不包含竞态条件。只有当多个线程更新共
迭代对于我们搞 Java 的来说绝对不陌生。我们常常使用 JDK 提供的迭代接口进行 Java 集合的迭代。 Iterator iterator = list.iterator(); while(iterator.hasNext()){ String string = iterator.next(); //do something
2 回收无效对象的过程 当经可达性算法筛选出失效的对象之后,并不是立即清除,而是再给对象一次重生的机会 判断是否覆盖finalize() 未覆盖该或已调用过该方法,直接释放对象内存 已覆盖该方法且还未被执行,则将finalize()扔到F-Queue队列中 执行F-Queue中的finalize()虚拟机会以较低的优先级执行这些finalize(),不会确保所有的finalize()都会执行结
网络编程进化史 为什么学习呢! 业务逻辑无非是增删改减会用框架却不懂底层模型 教程计划 特色 URL解析与构造 DNS解析 从右向左解析域名 域名的层级 域名DNS查询的两种方式:递归与迭代 递归查询 迭代查询 协议 网络协议分门别类 应用层数据包格式
网络编程的本质是进程间通信 2 通信的基础是IO模型 输入流 文件,Java对象,字符串都可以是数据源 输出流 3 java.io 家族 字符流 字节流 4 设计模式 - 装饰器模式 奶茶店里面的装饰器模式(珍珠只是装饰) Socket也是一种数据源 Socket是网络通信的端点 Unix中的Socket是什么 ◆ Unix系统中一切皆是文件◆ 文件描述符表是已打开文件的索引 ◆ 每
package java.lang; /** * The {@code Void} class is an uninstantiable placeholder class to hold a * reference to the {@code Class} object representing the Java keyword * void. * * @author unasc
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 下面是本文所涉及到的主题列表: 为什么使用Selector? Selector的创建 向Selector注册通道 SelectionKey 通过Selector选择通道 wakeUp() close(
1. 什么是伪共享 CPU 缓存系统中是以缓存行(cache line)为单位存储的。目前主流的 CPU Cache 的 Cache Line 大小都是 64 Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。 2. 缓存行 由于共享变量在 CPU 缓存中的存储是以缓存行为单位,一个缓存行可以存储多个变量(存
1 ASCII American Standard Code for Information Interchange。最早最通用的单字节编码系统,因为发明时间早,所以ASCII编码表的设计较为简单。 结构 ASCII表是单字节字符表,此表中一个(英文)字符用一个字节表示 在ASCII中从00000000(第0个)~00011111(第31个)前32被用来作为控制字符表示各种类似:响铃、退格、换页
如果在加载类时内存不足,则它可能会静默失败,从而在数据库中留下无效的类。 稍后,如果您尝试调用或解析任何无效的类,则将在运行时引发ClassNotFoundException或NoClassDefFoundException实例。 如果要加载损坏的类文件,将会得到相同的例外。 您应该执行以下操作:验证该类实际上是否包含在您要加载到服务器的集合中使用loadjava -force选项来强制要加...
分层的目的,就是保证复用和相对稳定性! 开局一张图,后文全靠编 VO值对象(Value Object) new关键字创建,由GC回收。VO是值对象,精确点来说,它是业务对象,存活在业务层,由业务逻辑使用,其存活目的就是给数据提供一个生存地。 主要对应界面显示的数据对象。对于一个WEB页面,用一个VO对象对应整个界面的值。 VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应
@RunWith 当一个类用@RunWith注释或继承一个用@RunWith注释的类时,JUnit将调用它所引用的类来运行该类中的测试而不是开发者去在junit内部去构建它。我们在开发过程中使用这个特性。 @SpringBootTest 配置文件属性的读取 可以在运行SpringBoot为基础的测试类上指定的注释。在常规Spring TestContext框架之上和之上提供以下特性: 当定义没有
org.apache.ibatis.annotations包下有着 mybatis 所有的注解,让我们一文打尽! 1 @Mapper MyBatis映射器的标记接口 从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件但是源码中并没有对于这个注解的详细解释 添加了@Mapper注解之后这个接口在编译时会生成相应的实现类 需要注意的是:这个接口中不可以定义
添加测试类 Maven依赖自动刷新 自动导包
MBG全部指代MyBatis Generator: MyBatis Generator 1.3.4 扩展,可以设置 Mapper(Dao)后缀 运行MyBatis Generator 有4种运行MBG的方法,具体请看文档 运行 MyBatis Generator MBG下载地址:http://repo1.maven.org/maven2/org/mybatis/generator/mybatis
生成器设计思路: 连接数据库 -> 获取表结构 -> 生成文件 1 下载与安装 官网文档入口 最方便的 maven 插件使用方式 贴至pom 文件 2 新建配置文件 填充配置信息(官网示例) 项目实例 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUB
该插件主要是在mapper接口方法和mapper XML文件之间来回切换非常方便,极大的提高了开发效率 我们知道,mapper 接口一般会定义很多数据层从操作 API,如果没有映射,一个个去 xml 文件中寻找对应 sql 语句,无异于大海捞针,效率奇低!赶紧让我们把三剑客之一用起来! 在IDEA的设置中搜索 Plugins - free Mybatis Plugin 作用 详细参见https:
下载了最新的JUnit版本,是4.13,结果尝试使用发现总是报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing这样的错误, 一般的解决方案是,换一个低一点的版本就好了 还有人说,是缺少hamcrest的包。去官网又看了一下,结果发现这样一段话: junit.jar: Includes the Hamcrest classes.
一方:(一方包,一方库),一般指的是本项目或者本工程中的类和方法、接口等。二方:(二方包,二方库),一般指的是公司内部的依赖库,公司内部其他项目发布的jar包,如公司项目平台的核心依赖包。三方:(三方包,三方库),一般指的是外部的开源库或开源项目贡献的jar, 比如apache、google、Ali等发布的依赖
1 简介 一个线程集合。是为了更方便地管理线程。父子结构的,一个线程组可以集成其他线程组,同时也可以拥有其他子线程组。 从结构上看,线程组是一个树形结构,每个线程都隶属于一个线程组,线程组又有父线程组,根线程组——System线程组。 2 线程组树的结构 JVM创建的system线程组是用来处理JVM的系统任务的线程组,例如对象的销毁等 system线程组的直接子线程组是main线程组,这个线程
JDK 6 时提供。一种同步器,可以由一个线程独占。该类提供了创建锁和相关同步器的基础,这些同步器可能包含所有权的概念。AbstractOwnableSynchronizer类本身并不管理或使用这些信息。但是,子类和工具可以使用适当维护的值来帮助控制和监视访问并提供诊断。 public abstract class AbstractOwnableSynchronizer implemen
1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入 quit 命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java 没有提供一种安全直接的方法来停止某个线程,但是 Java 提供了中断机制。 如果对 Java 中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是
结合本人最近经常翻译 JDK 官方文档,特此整理翻译意见. 文档翻译规范 专有名词保持大写:HTML, HAML, SASS, REST…等等 约定翻译的名词 原文 中文 application 应用程序、应用 array 数组 attribute 属性 class 类别 code 代码 collection 集合 command-line 命令行 database 数据库 (database)
0 前言 全是干货的技术殿堂 P5 校招 springboot或者spring的加载流程对IOC和AOP的理解jdk和cglib实现的AOP实际上会在内存生成动态代理对象,还有什么其他办法实现AOP?经提示答出AspectJ以及实现原理Spring中的对象的作用域Singleton对象引用Prototype会发生什么项目中怎样使用微服务?两个服务之间调用的流程rpc与http的区别设计rpc协议
最近正是求职热季,群友也提了很多问题,特地来总结下 1 学历重要吗? 废话!硕士都满地跑了,本科生更要努力提高自己技术实力才能进好公司!优秀的人一直很优秀,自己欠的也都是要还的!谁再说读书无用论,建议先转行收租。 当然了,本科绝对可以工作了,但是考虑到这行业 35 中年危机,到时可能考虑公务员或者国企、大学教师等,此时研究生等高学历优势就凸显了。所以建议尽量读个 211 研究生(注意是 211
1. 【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerF
1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name / __name / $name / name_ / name$ / name__ 2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。 正例: renmin
1. 【强制】关于 hashCode 和 equals 的处理,遵循如下规则: 1) 只要覆写 equals,就必须覆写 hashCode。 2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须覆 写这两个方法。 3) 如果自定义对象作为 Map 的键,那么必须覆写 hashCode 和 equals。 说明: String
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号