Java
某工程师$
Java Python Go JS .etc
展开
-
REPEATABLE-READ隔离级别 事务中无法读到其它事务提交了的最新数据
前言:业务要求一个简单的并发控制,使得一条数据只被确认一次,我的方案是 悲观锁,就是在事务中先对数据行加锁(MySQL InnoDB 行锁基于索引),判断是否已经确认过,未确认的情况下确认,已确认则事务提交释放锁。代码写完,结果发现未生效,就开始了满脑子问号的排查过程。业务代码结构如下: //不要这么做 //一没对异常进行处理 //二...原创 2020-01-18 14:51:16 · 977 阅读 · 0 评论 -
《Java性能优化权威指南》读书笔记(脑图)
原创 2019-10-12 17:01:51 · 248 阅读 · 0 评论 -
《Spring揭秘》读书笔记一:Spring框架总体结构
一、Core:整个Spring框架都是构建在Core核心模块之上。核心模块提供了IoC容器、框架内部使用的工具类(BeanWrapper对对象的属性赋值比反射更方便、DataSourceUtils用于管理数据库连接等)。IoC容器可以帮助我们以 依赖注入的方式管理对象之间的依赖关系。二、AOP:Spring提供了轻量的AOP框架,只支持方法执行级别的AOP,可以覆盖80%的需求。采用...原创 2018-09-12 10:48:20 · 276 阅读 · 0 评论 -
《Spring 揭秘》读书笔记二:IoC容器
基本概念一、IoC 即 Inversion of Control,控制反转 又叫 依赖注入。这使得 当我们需要一个对象实例时,不需要自己手动通过new的方式构建,而是直接从容器获取一个实例。现在,对象的构建以及依赖对象的注入工作都交给了 IoC容器,极大地减少了开发工作量。二、注入的方式:1、构造方法注入。对象构造完成之后,就立马可用。但是,当依赖较多时,构造方法的维护和管理是个问题,...原创 2018-09-13 15:53:24 · 227 阅读 · 0 评论 -
《Spring揭秘》读书笔记四:统一事务管理
一、背景和支撑事务代码混在业务代码之中,不便于维护。基于上一章介绍的 AOP可以想到,通过AOP的方式 将 Spring事务从 业务代码中剥离出来。 自己实现的话:声明一个注解,然后通过 AOP的 @annoation的 Pointcut 为 带有 自定义注解的方法 加入事务逻辑即可。二、Spring 统一的方式事务有多种实现,Spring 统一抽象出了 PlatformTran...原创 2018-09-17 17:53:07 · 549 阅读 · 0 评论 -
《Spring揭秘》读书笔记四:Spring MVC
从《Spring揭秘》中抄个图 都在图里了。 基于注解方式的原理:注解相关的 HandlerMapping 会 扫描所有的 带有 @Controller注解的 POJO,根据 类和方法上的 @RequestMapping注解中的 url和 请求方式等 参数, 可以定位到具体的类中的 对应方法,在 完成参数绑定的过程之后...原创 2018-09-17 17:59:39 · 309 阅读 · 0 评论 -
《Spring揭秘》读后感(给你们强烈安利这本书)
虽然网上有口皆碑,我还是要专门写个Blog来发表下我的感受。这本书讲的十分详细和透彻,读下来需要很大的毅力和勇气,第一遍读的过程说实话很煎熬,但是第二遍就好很多了。坚持读完,是绝对值的,而且你会有一种忍不住读第二遍的冲动。看别人的读书笔记真的不如自己读一波。看别人的读书笔记真的不如自己读一波。看别人的读书笔记真的不如自己读一波。...原创 2018-09-17 18:05:14 · 4445 阅读 · 0 评论 -
《Spring揭秘》读书笔记三:AOP
一、一张图看懂 OOP和AOP(来自 《Spring揭秘》)其中,竖着的各种业务流程对应了 OOP, 而 横着的针对各个流程的统一操作对应 AOP。可以将AOP看作是 对OOP的一种补充和增强。二、AOP的发展历史a、静态AOP:横切点和横切逻辑以Aspect形式实现之后,会通过特定的编译器将实现好的 Aspect编译并织入到对应的类中。好处是:直接以字节码的形式编译到Java...原创 2018-09-15 15:09:18 · 390 阅读 · 0 评论 -
Mybatis #{}和 ${}的区别
#{} 将传入的数据 都当成一个字符串,会在数据两侧 加上 “”, 可以有效的防止Sql注入。但是 注意 order by 不能配合 #{}。${}直接替换,无法防止sql 注入。...原创 2018-09-21 09:39:47 · 226 阅读 · 0 评论 -
关于《深入分析JavaWeb技术内幕》中 跨域名共享Cookie的笔记(第二次看还是需要花点时间,遂将自己的理解写下来)
图取自《深入分析JavaWeb技术内幕》事先应当知晓:a.com 中有会跳转到 b.net的地方, 存储session id的Cookie会受到域名的限制,跳转到b.net之后仍然需要保持之前的登陆状态(即 需要b.net访问时也带上 session id)核心步骤:跳转到b.net时会检查是否存在session id,不存在的话,遵循既定的系统设计,要获取到a.com下的sessio...原创 2019-01-07 11:29:54 · 245 阅读 · 0 评论 -
Java中的 String.join() 将列表以某个字符串分隔组装为一个字符串 (之前我都不知道,自己写方法)
之前用Python,有个很方便的 list.join 方法,将列表中的字符串以 特殊字符分隔 组装为一个字符串,后来换了Java,也会习惯的认为 Java的 List也会有类似的操作,但是 点不出来吖。 所以 要用到类似的操作时都是自己 写个循环方法。 但是,今天看同学写代码,刚好有类似的操作,然后使用了 String.join(), 当时就是一句 卧...原创 2019-01-16 13:45:45 · 725 阅读 · 0 评论 -
static inner class和非static inner class的实例化问题(can only instantiate non-static inner class...)
参考:https://blog.csdn.net/inter18099/article/details/8017117前言:过年回来,项目突然报错:can only instantiate non-static inner class... 代码如下:/** * @author fandong * @create 2018/12/10 */@Datapublic class...原创 2019-02-12 14:56:18 · 4549 阅读 · 0 评论 -
jdbc:oracle:thin方式连接 字符集为GBK的oracle数据库,读回来的中文字符串乱码的问题 一个后置解决方案
前言:大体思路就是 读回来之后,先编码回去,再用服务端的字符集解码写了个反射通用方法如下:/** * 解决乱码问题 先用 iso-8859-1 编码 再用 GBK解码 * @param o */ private void convertIsoToGbk(Object o) throws IllegalAccessException, Unsu...原创 2019-03-26 11:38:57 · 1668 阅读 · 0 评论 -
Comparison method violates its general contract. 问题分析
参考这篇:https://www.cnblogs.com/wendelhuang/p/7356797.html我的问题和这一篇的问题一样,引进了对 null值的处理,Java 1.6之前没有问题的,Java1.7、1.8之后更换了底层的排序算法,对我们自己实现的 Comparator接口的 compare方法有一定的要求:自反、传递、对称。以下对null的处理不满足上述要求的:if ...转载 2019-03-26 18:11:59 · 387 阅读 · 0 评论 -
Some Java interview questions and my answers which may be correct or not
Attention:答案我自己写的,不正确的可以严肃指正,看的时候要带着怀疑的态度,不要轻信任何答案,万一有错别字呢,而且我写的比较随意1、Java线程的状态new:创建好线程对象之后,处于此状态runnable、running: 调用 start() 启动线程之后进入此状态,一般是先 runnable,然后就等待操作系统分配时间片以及将其调度运行,runnable和running之...原创 2019-05-10 16:14:55 · 203 阅读 · 0 评论 -
@Scheduled不生效了:有一天我的定时任务突然不执行了
一、问题:之前定时任务一致好好的,某天突然服务没有执行,重启之后也不执行,本地起服务也不执行。。。。二、检查@EnableScheduling 这个注解一直都有加的声明为 @Scheduled(fixedDelay = 2) 的任务可以很好的执行@Scheduled(cron = "0 30 19 * * ?") cron表达式的 到点了就是不执行三、解决上...原创 2018-08-30 11:03:53 · 26866 阅读 · 3 评论 -
spring-boot 使用logback-spring.xml 日志分级 和 输出 异常堆栈信息 到 日志文件
<?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos原创 2018-08-15 15:54:11 · 1966 阅读 · 0 评论 -
Java基础知识(一)
Java中的基本数据类型 一共有8中数据类型:4种整型,2种浮点型,char类型和布尔类型 整形中最常用的是 int类型 大小范围 为 -21亿~+21亿,可表示10位的数字;long 类型的范围是 整形中最大的,可以表示 19位的数字。 浮点数类型中常用 double类型,有效位数为15位,是float类型的两倍,float类型很难满足日常需求。 布尔类型即 true和false两种...原创 2018-03-26 22:54:15 · 393 阅读 · 0 评论 -
Java基础知识五:异常、断言、日志和调试
异常分类:在Java中,所有的异常对象都是 派生于Throwable类的子类 。在下一层立即分解为 Error和Exception两个子类:Error类描述了 系统级错误和资源耗尽的问题,出现这种问题一般无能为力;在设计Java程序时,我们应该关注 Exception层次结构,Exception又分为两个分支,一个分支派生于RuntimeException,另一个分支包含其它异常。这么划分的依据是...原创 2018-04-01 23:35:58 · 268 阅读 · 0 评论 -
Java基础知识六:泛型程序设计
一、为什么使用泛型:没有泛型之前,比如ArrayList都是使用Object类型的数组,这就使得存储和取出的都是Object类型的对象。导致的问题:1、缺乏对入参的类型检查,任何对象都可以存入 2、返回的类型统一是Object类型,这就使得在使用之前必须要强制类型转换,不优雅也不安全。 泛型的出现很好的解决了这类问题,也提高了代码的可读性。二、泛型类:public class Pair<T&...原创 2018-04-02 16:15:45 · 244 阅读 · 0 评论 -
Java基础知识七:集合
一、接口和实现分离Java中的集合类库将 接口和实现分离。分离的好处是 可以使用 接口类型的引用 指向实际类型的 对象。这样 当发现具体的实现类型无法满足需要时,只需要更换具体的实现类型就可以了,兼容性很好。二、集合接口和迭代器接口Java中 集合(list set queue)的基本接口是 Collection接口,此接口包含 add方法和iterator方法。iterator方法返回一个实现...原创 2018-04-02 18:11:09 · 210 阅读 · 0 评论 -
Java基础知识八:多线程基础知识
一、使用最简单的线程执行一个任务:Thread t = new Thread(new Runnable() { @Override public void run() { } }); t.start();二、线程的状态 六种New 新创建:使用 new操作符创建一个线程时,还未运行 处于 ne...原创 2018-04-03 17:30:34 · 230 阅读 · 0 评论 -
Java基础知识二:对象与类
一、对象和引用: Date date = new Date(); new Date()其实是构建了一个Date类型的对象,然后返回了一个引用给 date,即date只是一个指向某个Date对象的引用,并不是实际的对象。 类的三大要素:域、构造器和方法。 假定又一个自定义的类 A,并且其中有一非静态方法 c,则 A a = new A(); a.c(params); 当调用c方...原创 2018-03-28 22:22:03 · 266 阅读 · 0 评论 -
Java基础知识三:继承和反射
继承:A extends B 表示 A类继承自B类,即 A类是B类的子类。在A类中,如果需要访问B类的某个私有域,则只能通过 super.get(), 通过super方法调用超类中的公有方法才可以获取超类的私有域,而不能直接访问 超类中的域或者方法。super和this的区别: this是当前对象的一个引用,而super不是一个引用,只是一个只是编译器调用超类方法的特殊关键字。this()可以调用...原创 2018-03-28 23:24:11 · 406 阅读 · 0 评论 -
小结六:脚本、编译和注解
一、Java有API可以发起和脚本的交互二、Java程序可以使用编译器对象来 编译Java代码三、注解注解:是插入到 源代码中使用其他工具(注解处理器)可以对其进行处理的标签。这些工具可以在源代码层次上进行操作,或者可以处理 包含注解的类文件。注解与编译器无关,不会改变程序的编译方式。Java编译器对于包含注解和不包含注解的代码会生成相同的虚拟机指令。注解需要配合相应的注解处理器,插入注解之后,由...原创 2018-05-08 22:45:54 · 292 阅读 · 0 评论 -
小结七:分布式对象
一、RMI编程模型RMI是Java的远程方法调用技术,之际Java分布式对象之间的方法调用。编程模型:远程对象的能力是由在客户端和服务器之间共享的接口所表示的。远程对象的接口必须扩展Remote接口。然后,服务器端必须提供这样的类,真正实现了在远程接口中声明的工作。RMI注册表:要访问服务器上的一个远程对象,客户端首先需要一个本地的指代远程对象的存根。而一开始时,客户端是没有存根的,想要获得存根就...原创 2018-05-08 23:08:04 · 973 阅读 · 0 评论 -
小结一:流与文件
一、流从文件、网络、内存块中 读入一个字节序列(输入流),写入一个字节序列(输出流)。抽象类 InputStream和 OutputStream构成了输入和输出类层次结构的基础。字符和字节的区别:字符有自己的编码规则,一个字符可能由很多个字节组成。流是面向字节的,所以不太适合处理以字符形式存储的信息。Java从Reader和Writer抽象类中派生出了一个单独的类层次结构,专门用于处理Unicod...原创 2018-05-07 17:36:10 · 223 阅读 · 0 评论 -
小结三:Java数据库编程
一、JDBC的设计JDBC是Java数据库连接API,编程人员可以通过这个API接口连接到数据库,并使用SQL完成对数据库的操作。JDBC的设计思想:根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器通过实际的驱动程序与实际的数据库进行通信。JDBC最终为了实现以下目标:1、通过使用标准的sql语句甚至是sql扩展,程序员就可以利用Java语言开发访问数据库的应用,同时还遵守Java语言...原创 2018-05-07 23:30:05 · 824 阅读 · 0 评论 -
小结二:Java网络
一、套接字Socket客户端套接字,可以通过ip和端口建立到远端的连接。ServerSocket服务端套接字,可以建立一个负责监控某个具体端口的服务器。一旦连接建立成功就可以 获取对应的 输入输出流,获取到流之后就可以做很多的事情。二、URL和URIURL:统一资源定位符 URI:统一资源标识符URI是个纯粹的语法结构,包含用来指定Web资源的各种组成部分。URL是URI的一个特例,包含了用于定...原创 2018-05-08 11:23:54 · 192 阅读 · 0 评论 -
小结四:Java国际化
一、LocaleLocale对象主要描述了 语言和位置(国家)两个要素。这两个要素决定了数字、日期时间和货币等的表现形式。Java内置了很多预先定义好的Locale对象,也可以使用 语言或者国家代码手动构造一个Locale对象。但是一般木有必要。许多格式化工具都可以接收一个 Locale对象(例如:NumberFormat),然后就可以使用对应的方式进行格式化。...原创 2018-05-08 11:46:05 · 227 阅读 · 0 评论 -
小结五:Java安全
一、简介Java语言和其他语言有所不同,在其他语言中安全是在事后才想到要去实现的,或者仅仅是对破坏的一种应对措施,而对Java技术来说,安全机制是一个不可分割的组成部分。Java提供了以下几种安全机制:1、语言设计特性(类型转换的检查、无指针操作、对数组的边界进行检查)2、访问控制机制。可以控制代码能够进行的操作(文件访问、网络访问等)3、代码签名。利用此特性代码的作者可以使用标准的加密算法来认证...原创 2018-05-08 17:32:56 · 239 阅读 · 0 评论 -
Java基础知识四:接口与内部类
接口:接口中的所有方法自动地属于public,不用手动添加 public修饰。接口当然是不可实例化的。一般使用接口类型的引用 指向 实际实现了接口的具体类型的对象,这样做使得兼容性大大提升。接口中可以包含常量,并且接口中的常量始终是 public static final的类型。类可以单继承,接口可以多实现。Cloneable:是一个非常重要的接口,如果类实现了Clonebale接口,那么这个类的...原创 2018-03-29 23:13:06 · 411 阅读 · 0 评论