- 博客(739)
- 资源 (25)
- 收藏
- 关注
转载 Java8特性之Optional:如何干掉空指针?
Optional的作用是什么?他都有哪些方法?阿里规范点名说尽量用Optional来避免空指针,那么什么场景用Optional?本篇文章围绕这三点来进行讲解。
2023-08-03 16:57:08 112
转载 Redis-布隆过滤器(Bloom Filter)详解
布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,是一种非常节省空间的概率数据结构,运行速度快,占用内存小,但是有一定的误判率且无法删除元素。它实际上是一个很长的二进制向量和一系列随机映射函数组成,主要用于判断一个元素是否在一个集合中。
2023-08-02 09:56:38 3338
原创 阿里Java开发手册~其它
【推荐】任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。【强制】在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。类的属性时,建议直接使用属性名取值即可,模板引擎会自动按。理论,视图的职责是展示,不要抢模型和控制器的活。【推荐】不要在视图模板中加入任何复杂的逻辑。,如方法、变量、类、配置文件、动态配置属性。如果想获取更加精确的纳秒级时间值,使用。,如果想获取整数类型的随机数,不要将。【强制】后台输送给页面的变量必须加。包装类对象,优先调用。类型,注意取值的范围。
2023-07-28 10:23:54 110
原创 阿里Java开发手册~注释规约
【推荐】代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑。【参考】好的命名、代码结构是自解释的,注释力求精简准确、表达到位。代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高。一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路。标记某代码是错误的,而且不能工作,需要及时纠正的情况。
2023-07-28 10:22:32 415
原创 阿里Java开发手册~并发处理
此静态变量 ,也就是说在类第一次被使用时装载,只分配一块存储空间,所有此类的对象。使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资。3. 【强制】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一。
2023-07-28 10:04:34 343
原创 阿里Java开发手册~集合处理
其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素。元素唯一的特性,可以快速对一个集合进行去重操作,避免使用。体现的是适配器模式,只是转换接口,后台的数据仍是数组。个元素,由于没有设置容量初始大小,随着元素不断增加,容。对原集合元素个数的修改,会导致子列表的遍历、增。把数组转换成集合时,不能使用其修改集合相关的方。【强制】使用集合转数组的方法,必须使用集合的。来接收返回的数据,此写法的泛型集合不能使用。带参方法,入参分配的数组空间不够大时,内部类,并没有实现集合的修改方法。
2023-07-28 09:58:59 681
原创 阿里Java开发手册~OOP 规约
判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,【强制】外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生。【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,的成员变量,删除一下,不得手心冒点汗吗?视线内,变量作用域太大,如果无限制的到处跑,那么你会担心的。值,能够表示额外的信息,如:远程调用失败,异常退出。公有方法是类的调用者和维护者最关心的方法,首屏展示最好。17. 【推荐】循环体内,字符串的连接方式,使用。
2023-07-28 09:52:00 125
原创 阿里Java开发手册~代码格式
【推荐】方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义。【推荐】没有必要增加若干空格来使某一行的字符与上一行对应位置的字符对齐。【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。【强制】大括号的使用约定。【强制】任何二目、三目运算符的左右两边都需要加一个空格。个空格,从第三行开始,不再继续缩进,参考示例。同样,右小括号和字符之间也不出现空格。【强制】 左小括号和字符之间不出现空格。都要增加几个空格,在变量比较多的。在多个参数超长,在逗号后换行。情况下,是一种累赘的事情。
2023-07-28 09:46:26 224
原创 阿里Java开发手册~常量定义
【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包。【推荐】如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示。子工程内部共享常量:即在当前子工程的。应用内共享常量:放置在一方库的。内共享常量、类内共享常量。类内共享常量:直接在类内部。
2023-07-28 09:41:27 109
原创 阿里Java开发手册~命名风格
【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。【推荐】如果使用到了设计模式,建议在类名中体现出具体模式。【推荐】如果是形容能力的接口名称,取对应的形容词做接口名。形式,但是类名如果有复数含义,类名可以使用复数形式。【强制】杜绝完全不规范的缩写,避免望文不知义。的理念,暴露出来的服务一定是接口,内部。
2023-07-28 09:39:42 138
原创 阿里Java开发手册~日志规约
推荐对日志进行分类,如将错误日志和业务日志分开存放,便于开发人员查看,也便于。来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘。,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。道日志文件属于什么应用,什么类型,什么目的,也有利于归类查找。日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适。方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。,上述日志不会打印,但是会执行字符串拼接操作,如果。【强制】避免重复打印日志,浪费磁盘空间,务必在。
2023-07-27 17:08:05 696
原创 阿里Java开发手册~异常处理
【强制】捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的。随意复制和粘贴代码,必然会导致代码的重复,在以后需要修改时,需要修改所有的副。【强制】异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低。无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过。【强制】捕获异常与抛异常,必须是完全匹配,或者捕获异常是抛异常的父类。如果预期对方抛的是绣球,实际接到的是铅球,就会产生意外情况。
2023-07-27 16:56:06 275
原创 阿里Java开发手册~服务器
的发生是有概率的,甚至有规律地相隔数月才出现一例,出现时的现场信息对查错。的连接数太多,可能无法建立新的连接,所以需要在服务器上。连接采用与文件一样的方式去管理,即一个连接对。【推荐】调大服务器所支持的最大文件句柄数。错误,导致新的连接无法建立。维护不一致的问题和潜在的安全风险。状态的连接,在高并发访问下,服。服务器所支持的最大句柄数调高数倍。【推荐】高并发服务器建议调小。1024,当并发连接数很大时很。【参考】服务器内部重定向使用。主流操作系统的设计是将。服务器默认所支持最大。与服务器的内存数量相关。
2023-07-27 15:23:15 73
原创 阿里Java开发手册~二方库依赖
【强制】二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚。【强制】依赖于一个二方库群时,必须定义一个统一的版本变量,避免版本号不一致。除非用户主动升级版本,否则公共二方库的行为不应该发生变化。进行查证,使版本号有延续性,正式版本号不允许覆盖升级。每个版本的变化应该被记录,二方库由谁维护,源码在哪里,都需要能。里只是声明版本,并不实现引入,因此子项目需要显式的声。【强制】二方库的新增或升级,保持除功能点之外的其它。里的依赖都会自动引入,并默认被所有的子项目继承。
2023-07-27 15:19:53 397
原创 阿里Java开发手册~应用分层
抛异常,因为已经处于顶层,无继续处理异常的方式,如果意识到这个异常将导致页面无法正常。渲染,那么就应该直接跳转到友好错误页面,加上友好的错误提示信息。【推荐】图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于。:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。:数据查询对象,各层接收上层的查询请求。层,产生的异常类型有很多,无法用细粒度的异常进。层通用能力的下沉,如缓存方案、中间件通用处理。层处理一致,如果是单独部署,则采用与。开放接口,基础平台,其它公司的。
2023-07-27 15:15:58 282
原创 阿里Java开发手册~ORM 映射
要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正等。当返回参数,即使所有类属性名与数据库字段一一对应,也需。【强制】更新数据表记录时,必须同时更新记录对应的。作为查询的字段列表,需要哪些字段必须明确写明。【推荐】不要写一个大而全的数据更新接口,传入为。是与属性值对比的常量,一般是数字,表示相等时带。,会置入字段名和属性值,但是值的类型不可控。反过来,每一个表也必然有一个与之对应。生成的代码中,需要进行对应的修改。时,不要更新无改动的字段,一是易出错。类,不管是不是自己的目标更新字。
2023-07-27 15:06:44 122
原创 阿里Java开发手册~SQL 语句
【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。【强制】不得使用外键与级联,一切外键概念必须在应用层解决。【参考】如果有全球化需要,所有的字符存储与表示,均以。,有可能造成事故,故不建议在开发代码中使用此语句。操作能避免则避免,若实在避免不了,需要仔细评估。【强制】数据订正时,删除和修改记录时,要先。速度快,且使用的系统和事务日志资源少,但。标准统计行数的语法,跟数据库无关,跟。,那么即使另一列有不同的值,也返回为。应直接返回,避免执行后面的分页语句。,避免出现误删除,确认无误才能执。
2023-07-27 15:01:50 151
原创 阿里Java开发手册~索引规约
【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必。能够建立索引的种类:主键索引、唯一索引、普通索引,而覆盖索引是一种查询的一种。存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据。特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过。索引的一部分,并且放在索引组合顺序的最后,避免出现。
2023-07-27 11:19:23 278
原创 阿里Java开发手册~建表规约
【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检。【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存。【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于。在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不。,独立出来一张表,用主键来对应,避免影响其它字段索。【强制】表达是与否概念的字段,必须使用。
2023-07-27 11:04:49 197
原创 阿里Java开发手册~安全规约
【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放限制,【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过。防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信。但是如果攻击人员使用的是特殊构造的字符串来验证,有可能导致死循环的结果。【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。如数量限制、疲劳度控制、验证码校验,避免被滥刷、资损。【强制】用户请求传入的任何参数必须做有效性验证。内容、修改他人的订单。
2023-07-27 10:56:45 1182
原创 Spring中事务失效的8中场景
这里以 MySQL为例,MyISAM引擎是不支持事务操作的,一般要支持事务都会使用InnoDB引擎,根据MySQL 的官方文档说明,从MySQL 5.5.5 开始的默认存储引擎是 InnoDB,之前默认的都是 MyISAM,所以这一点要值得注意,如果底层引擎不支持事务,那么再怎么设置也没有用。这两个例子中的事务都不会生效,因为它们发生了自身调用,就调用了该类自己的方法,而没有经过Spring的代理类,默认只有调用外部代理类的方法,事务才会生效,这也是老生常谈的问题了。这里大家可以先想一想,后面会揭晓答案。
2023-07-24 10:34:25 595
原创 代码命名规范
日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力。那它们有什么规律呢?Java项目的代码结构,能够体现它的设计理念。Java采用长命名的方式来规范类的命名,能够自己表达它的主要意图。配合高级的IDE,可以减少编码人员的记忆负担,靠模糊的匹配就能找到自己所需要的资源。为了让大家更好的理解命名的套路,我借鉴了最流行的Java接开源软件(spring系列,netty,libgdx,guava,logback等等),总结了10类常见的类命名。
2023-05-04 09:49:24 1111 1
原创 算法之美~回溯算法
为了有规律地枚举所有可能的解,避免遗漏和重复,把问题求解的过程分为多个阶段。每个阶段,都会面对一个 岔路口,先随意选择一条路走,当发现这条路走不通的时候(不符合期望的解),就回退到上一岔路口,另选一种继续走。0-1背包问题有很多变体,这里介绍一种比较基础的。有n个物品,每个物品重量不等,并且不可分割,现在期望选择几件物品,装到背包中。在不超过背包所能装载重量的前提下,如何让背包中物品的总重量最大?在一个8×8的棋盘,希望往里放8个棋子(皇后),每个棋子所在的行、列、对角线都不能有另外一个棋子。
2023-05-02 17:52:23 144
原创 算法之美~分治算法
给10GB的订单排序,可以先扫描一遍订单,根据订单的金额,将10GB的文件划分为几个金额区间。每次合并操作,都计算逆序对个数,把这个计算出来的逆序对个数求和,就是这个数组的逆序对个数了。可以将数组分成前后两半A1和A2,分别计算A1和A2的逆序对个数K1和K2,然后再计算A1和A2之间的逆序对个数K3。分治算法(divide and conquer)的核心思想其实是,分而治之,也就是将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归第解决这些子问题,然后再合并其结果,就得到原问题的解。
2023-05-02 10:45:17 891
原创 spring beancopier Cannot invoke “Object.getClass()“ because “cause“ is null异常处理
我们项目用到spring beancopier, 在别的机器上运行正常,代码拉到我机器上就不正常了,抛出异常信息如题。经研究发现,这个根源是太新造成的,把我的环境换成java8就好了。当然,也可以升级spring-core到5.3x以上版本。将Eclipse的jre库降级到JDK8。
2023-04-07 10:49:41 1832
原创 JUnit5用户手册~并行执行
配置top-level类并行,测试方法同一线程执行。配置top-level类串行,测试方法并行。默认的,测试方法在同一个线程。dynamic配置的系数。custom配置的策略类。并行执行,除非有资源锁。配置所有测试方法都并行。
2023-04-02 17:17:09 1481
原创 JUnit5用户手册~参数化测试
EmptySource:java.lang.String, java.util.List, java.util.Set,java.util.Map,原始类型数组(int[], char[][]),对象数组(String[],Integer[][])@NullAndEmptySource: @NullSource和@EmptySource。@NullSource:null,不能用于原始类型。
2023-03-31 22:13:40 562
Cryptography and Network Security Principles and Practice( 5th ).pdf
2012-05-30
Introduction to Algorithms(Second Edition).pdf
2012-05-29
classloader.zip
2011-07-19
JUnit.in.Action.2nd.pdf
2011-07-06
Flex4-in-Action.pdf
2011-07-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人