- 博客(181)
- 资源 (29)
- 收藏
- 关注
原创 通用权限系统-2023V1
一个通用的授权,其主体与选择、权限与选择、授权与规则均需要灵活可配,常规设计中的菜单、按钮、机构、组织、角色均为其特例。
2023-03-07 08:45:00 958
原创 java命名那些事儿二(命名单词速查)
本文将会整理一些开发过程中常见的用于命名单词,方便使用。对于成对词组、衍生词组则放到一起说明。本文将会陆续更新。
2023-03-03 18:05:42 1323
原创 java命名那些事儿一(命名规范).md
程序界两大难题,缓存一致性与命名那些事儿。本文为命名规范整理;下文为命名单词速查,整理了一些常见的命名使用到的单词。
2022-08-21 17:22:54 1134 1
原创 组内成员少量变化的数据增量存储方案
场景假定有个聊天组,组内有成员,成员可以加入和退出(较少发生),此时需求如下查询(历史上)某时间段内(最小单位日)所有存在过的具体成员查询某时间段内新增和退出的具体成员涉及的表为 group_member字段:member_id = 用户idcreated = 创建时间方案传统方案通常简单的方案就是新增两张表,分别 固化数据 + 事件日志存储如果查询某日的组内成员情况,可以每日固化数据对于成员的加入和退出,可以结合当日的 事件日志和前一日的固化数据精确计算结果缺点
2022-02-25 22:24:28 391
原创 维度预算实战海量数据增量统计查询
需求以下为笔者在实际项目过程中的简化场景,主要描述维度预算和查询的相关思路,部分细节可忽略(比如其它基于数据维度的分库分表)。简化场景假设当前有一个销售平台销售a、b、c、三种货物,后续可能销售其它货物这三种货物由fa、fb、fc三家厂家生产,后续可能新增其它厂家货物最终被销售网全国各地,已发货的货物认为售出货物可能被退货,退货货物不计入售出货物的销售数量非常大,售出 Max(并发)约 每秒 <= 200 , 总数据量年 约等于 1 亿简化要求ps: 实时
2022-01-26 16:07:29 1423
原创 hashids加密算法基础与扩展
前言hashids的核心原理是映射,将原有字符映射为其它字符,且此映射是可逆的,网上有具体的原理和库,本文主要描述相关思路。映射即通过某种规则将数据A变为数据B,如果可逆,则同样通过反操作可以将数据B映射为数据A所以可以编码,也可以编码,不同于hash256编码和MD5编码这种为了编码的安全性,通常需要将规则分为逻辑规则和初始数据部分逻辑规则就是基本的映射算法初始数据部分可以理解为辅助逻辑规则生成具体映射方法的参数因为映射是可逆的,所以信息不能损失,只能通过各种规则来变换,如此方可解
2022-01-26 08:54:54 579
原创 如何设计一个通用的开放平台下-数据存储
前言此开放平台的设计文档分为上、中、下三篇来说明,分别对应概念与总体流程、关键逻辑、数据存储三部分。存储设计存储方面,结合前文提到的功能和需求,这里以mysql库为例子,做一个表设计,默认表不使用外键,同时使用utf8mb4作为编码存储;除非特殊说明,默认所有字段非空;除开开发者,开放平台本身运维需要一些运营、开发人员,此部分设计同大多数的后台管理系统一致,本文不涉及。通用字段status 通用状态-1 = 删除 ( 不可读, 不可写 )0 = 禁用 ( 可读 , 不可写 )
2022-01-24 22:08:09 1153
原创 如何设计一个通用的开放平台中-关键逻辑与规则
前言此开放平台的设计文档分为上、中、下三篇来说明,分别对应概念与总体流程、关键逻辑、数据存储三部分。关键逻辑在开放平台的访问和使用中,实现需求功能时需要梳理的实现方式、思路。重复请求处理常见的方式有两种,根据实际情况选择一种即可。第一种开放平台默认将每一次请求都视为一次 全新的请求并处理.如果有重复的特殊需求 , 会在接口中特殊说明 , 在业务处理中来对重复请求做具体的处理 , 具体处理方式和具体接口相关.第二种重复请求由框架处理,通过唯一的请求id来标志此次请求,对重复的更新
2022-01-24 22:04:59 596
原创 如何设计一个通用的开放平台上-基本需求与总体流程
前言此开放平台的设计文档分为上、中、下三篇来说明,分别对应概念与总体流程、关键逻辑、数据存储三部分。需求简析背景企业之间需要数据交换,需要使用对方的功能时,如果规模较大,对接方比较多则需要有一个统一的对外的平台来完成这些功能。此平台负责对外提供各种功能,提供标准化的交互规则和文档来方便多方数据对接。功能点一般而言,开放平台需要支持如下功能支持认证与鉴权,主要需要对接入的第三方进行识别,以及不同接入方可以访问的不同接口权限、数据权限做核验。支持数据隔离,不同接入方产生或访问的数据是隔离的,
2022-01-24 22:02:21 893
原创 java进阶笔记之Files文件工具类
简介Files 是JDK1.7 之后系统封装的对文件操作的工具类 .示例源码简析ps: 直接调用FileSystemProvider方法实现的简单逻辑将不再注释 , 可以查看上篇: java进阶笔记之FileSystemProvider .重要方法walkFileTree遍历整个文件/文件夹树. 如果读取属性时发生IO异常则调用FileVisitor#visitFileFailed方法.ps: 默认实现是SimpleFileVisitor , 直接抛出异常. 也可以自定义实现,一般是
2021-01-20 16:03:12 446
原创 springboot amqp rabiitmq 使用fastjson自定义MessageConverter
简介支持byte[] 、CharSequence 两种类型直接传输 ,其余对象直接用fastjson转为json字符串传输 。byte[] 一般用来传输文件 , 而 CharSequence用来传输字符串效率更高。代码import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.SerializerFeature;import org.springframework.amqp.core.Message;impor
2020-12-01 19:56:28 2235 1
原创 java进阶笔记之Channel与AbstractInterruptibleChannel
简介什么是ChannelChannel = 通道 = 承上启下的I / O操作入口 , 即连接点对点的输入输出操作入口。通道表示一个打开的到一个实体的连接,如一个硬件设备,文件,网络套接字,或者能够执行一个或多个不同的I / O操作,例如读或写的程序组件。通道要么打开要么关闭。 通道是在创建开放的,一旦关闭则永久关闭。 一旦通道被关闭时,任何试图调用I / O的操作,都抛出 ClosedChannelException.Channel 和 Stream 不同Stream 是单向数据流 ,
2020-07-22 15:05:29 576
原创 java进阶笔记之FileSystemProvider
简介文件相关的操作最终通过 java.nio.file.spi.FileSystemProvider 来提供 ,其不同的底层系统有不同的实现. 此类主要定义了如何在其对应的文件系统定位和加载文件 , 以及文件中常见的删除 / 拷贝等操作 .子孙类: AbstractFileSystemProvider / WindowsFileSystemProvider / JarFileSystemProvider / ZipFileSystemProvider示例import com.alibaba.fas
2020-06-27 15:15:10 2790
原创 java进阶笔记之Paths与FileSystems
简介Paths中封装了活动Path的工具方法 , 其实现默认依赖于FileSystems , 是Path操作的增强工具类.使用Paths时会使用FileSystem默认的文件分隔符操作.ps: 在win 系统中 同样支持 " / " 文件分隔符 .FileSystems FileSystem的工厂类, 主要是提供了系统常用的文件系统的快捷方法, 并且支持加载自定义的文件系统.示例import org.junit.Test; import java.io.IOException;i
2020-06-24 09:15:17 2544
原创 java进阶笔记之Path
背景Path 是jdk1.7 推出的专用于访问文件的一种路径抽象.位于包 java.nio.file .public interface Path extends Comparable<Path>, Iterable<Path>, Watchable一种可用于在文件系统中定位文件的对象。它通常表示一个系统相关的文件路径。path 可以表示一个根、一个根和一系列名称,或者仅仅是一个或多个名称元素。使用空路径访问文件相当于访问文件系统的默认目录这个接
2020-06-15 21:28:26 358
原创 java进阶笔记之URI与URL.md
简介URL 和URI无物理上的直接联系( 不是继承和实现 ).URL = Universal Resource Locator = 统一资定位符 ( jdk1.0出现)通过网络来定位和访问某资源的标识符.网络资源位置通常包括用于访问服务器的协议(如http、ftp等)、服务器的主机名或者IP地址、以及资源文件在该服务器上的路径。可以定位和访问比如文件 , 数据 等.URL的语法表示形式为:protocol://userInfo@host:port/path?query#
2020-06-11 14:10:09 708 1
原创 java进阶笔记线程与并发之高性能随机数ThreadLocalRandom
简介java的随机数均根据seed生成,而新的seed由老的seed生成。java.util.Random 线程安全,但是在高并发情况下,需要对seed做同步处理,所以冲突越高,性能越低。ThreadLocalRandom 在多线程冲突时,具有更高的随机数产生性能。基本原理是运行时将seed放到(当前)Thread的变量: threadLocalRandomSeed 中,然后独立维...
2020-04-09 18:11:23 1722
原创 java进阶笔记线程与并发之StampedLock
简介StampedLock 是ReadWriteLock的一种实现,不支持重入(容易死锁),适用于读多写少的场景。StampedLock 在读取的节点是并发唤醒的,在读取上的性能理论上更高。一旦读写操作在1:1甚至以上,则synchronized的性能将更高,ReentrantReadWriteLock的性能急剧下降,StampedLock 性能缓慢下降。一般推荐使用synchr...
2020-04-08 17:59:35 181
原创 java进阶笔记线程与并发之ExecutorCompletionService
简介ExecutorCompletionService类是CompletionService接口的实现,ExecutorCompletionService内部管理者一个已完成任务的阻塞队列(可以自定义),ExecutorCompletionService引用了一个Executor, 用来执行任务submit()方法最终会委托给内部的executor去执行任务take/poll方法...
2020-04-06 17:01:55 374
原创 java 进阶笔记线程与并发之线程计数与同步工具
简介常见的线程计数和信息同步工具如下:CountDownLatch(一次性栅栏)、Semaphore(信号量)、CyclicBarrier(循环同步栅栏)、Exchanger(线程间交换器)和Phaser(灵活可重用同步栅栏)。示例import org.junit.Test; import java.util.concurrent.*;import java.util.concurr...
2020-04-05 22:42:19 332
原创 java进阶笔记线程与并发之CompletableFuture.md
java进阶笔记线程与并发之CompletableFuture.md简介CompletableFuture 源码简析allOf / anyOfthenAcceptXXX、acceptXXXwhenCompleteXXXxxxComposehandleGET、join思考参考简介什么是CompletableFutureCompletableFuture类实现了CompletionStag...
2020-04-05 22:36:38 252
原创 java进阶笔记线程与并发之CountedCompleter
说明CountedCompleter是ForkJoinTask的一个子类。其可以简单理解为处理业务和数量有关的一些FJT,一般分为如下几类:和数量无关,一般不使用CountedCompleter一个: findAny、searchFirst这种操作,只要在集合、流中找到一个就表示整个任务完成的指定数量的: 比如有的业务需要触发多次完成的。可能需要有序完成的,有序完成可以通过Count...
2019-10-21 22:11:48 2706
原创 java 进阶笔记线程与并发之Future简析
简介Future表示异步计算的结果。方法用于检查计算是否完成,等待计算完成,并检索计算结果。只有当计算完成时,才能使用get方法检索结果,如果需要,可以阻塞它,直到它准备好为止。取消由取消方法执行。还提供了其他方法来确定任务是正常完成还是被取消。一旦计算完成,就不能取消计算。如果为了可取消而不提供可用的结果,可以声明Future作为底层任务的结果返回null。说明Future<V>...
2019-10-21 21:55:19 206
原创 java 进阶笔记线程与并发之AbstractExecutorService
简介一个正常的submit、invokeAny 和 invokeAll 方法的通用实现。源码简析RunnableFuture/** * 成功执行run(),才会使Future完成,并得到它的结果。 * @see FutureTask * @see Executor * @since 1.6 * @author Doug Lea * @param <V> The re...
2019-10-21 21:53:07 176
原创 java 进阶笔记线程与并发之ForkJoinPool简析
简介ForkJoinPool是一个线程池,支持特有的的ForkJoinTask,对于ForkJoinTask任务,通过特定的for与join方法可以优化调度策略,提高效率。使用通常,我们继承使用ForkJoinTask任务的子类:RecursiveAction:用于没有返回结果的任务。RecursiveTask :用于有返回结果的任务。通过,在子任务类的compute()中,我们将...
2019-10-21 21:49:22 2292 2
原创 java 进阶笔记线程与并发之Executor、ExecutorService简析
简介Executor和ExecutorService都是接口,他们主要完成一个工作:执行和管理任务。即任务怎么运行、运行的结果、运行的统一启动与停止等等的管理。在java中,一个任务在同步时通常是一个方法,一个逻辑片段。但是更多情况,指的是异步执行的一段数据和逻辑。通常,我们将之封装为Thread,然后运行。但是这样有一个缺点:即任务的执行、管理 和 任务的定义耦合了在一起。Execu...
2019-08-31 17:09:31 244
原创 java进阶之synchronized学习
每一个java对象都拥有自己的监视器monitor,当其中某个代码或者自身被synchronized修饰后访问此内容的时候都必须先获得此对象的监视器,如果成功则执行具体逻辑;否则改线程进入Blocked状态,当监视器被占有者释放后,在同步队列中的线程就会有机会重新获取该监视器。
2019-08-27 17:31:28 140
原创 java AbstractOwnableSynchronizer与AbstractQueuedSynchronizer简析
AbstractQueuedSynchronizer(ASQ)提供了实现阻塞锁和依赖于FIFO等待队列和同步器(如信号量,事件等)相关的框架。同步队列节点分为独占节点和共享节点,等待队列使用相同的Node类,但是用不同的链接,唤醒后进入同步队列。同步队列中的节点自旋进入head,并根据前置节点状态决定是否阻塞以减少消耗。
2019-08-27 17:21:42 546
原创 java进阶之Condition接口
简介Condition Condition 是java5加入的,全限定名 java.util.concurrent.locks.Condition,是一个接口,主要功能是配合Lock是使用,实现对象监视器的功能。Condition 其作用和Object中的wait、notify 和 notifyAll 类似(Object中的这些方法需要配合synchronized使用)。大致功能如下:Con...
2019-07-07 08:58:48 158
原创 java进阶之Lock与ReentrantLock
简介Lock与ReentrantLock都是java.util.concurrent.locks包中常用的接口和类。其中ReentrantLock是Lock最常见的一个实现类。LockLock是一个接口:public interface Lock { //获取锁,会'休眠'到当前线程成功获取 void lock(); /** * 获取锁,和lo...
2019-06-07 16:10:48 311
原创 java进阶笔记之线程池
前言对于线程池,网上的资料非常的多,本文不准备重复介绍和说明,而仅仅对重点和注意事项说明。线程池中一些概念说明线程的创建、销毁都是需要消耗系统资源的,而线程池可以复用池中的线程,所以可能大幅减少这两个步奏带来的资源开销,从而提高效率。逻辑任务提交时,判断的顺序为 corePoolSize –> workQueue –> maximumPoolSiz配置说明workQueu...
2019-06-02 10:18:41 140
原创 java进阶笔记之多线程:Thread类
简介java中的线程是jvm中虚拟的一个进程中的多个执行序列,线程执行并不一定是并行执行,可能是均分cpu的时间块来在执行各个线程的代码,由于时间块足够小,所以表现为多个线程在“同时”运行。线程状态每个线程都有自己的运行状态。新建状态用new关键字和Thread类或其子类新建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪...
2019-03-24 17:49:58 156
原创 java进阶笔记之volatile和atomic原子操作
前言概念简介简称全称说明CASCompare and Swap比较并交换JUCjava.util.concurrentjava的一个类包,主要用于并发控制概念说明在现代计算机的cpu中,cpu对数据的读写取分为两个步奏,第一步:cpu从cpu自带的高速缓存(可能有L1、L2甚至L3等多级高速缓存)中查询对象,如果找到即使用。第二步:如果第一步中c...
2019-03-24 15:55:08 848
原创 异常解决:java.lang.IllegalStateException: Failed to introspect Class
java.lang.IllegalStateException: Failed to introspect Class异常详情原因解决办法异常详情Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.Unsatisfi...
2019-02-28 09:37:45 68441 5
原创 java进阶笔记之枚举Enum
简介java.lang.Enum类是从jdk1.5开始诞生的。枚举的的equals方法被重写为==方法,因为枚举实际上是"线程安全的单例模式"。Enum是所有枚举类型的基类,当我们新建一个枚举类的时候,默认会继承Enum类。Enum源码简析Enum的构造方法是protected的,并且我们无法直接调用,但是编译器会做出相关的响应。public abstract class Enum&l...
2018-11-09 22:26:53 211
原创 Scala快排List和Array数组效率实测
代码package com.tingfeng.scala.testimport scala.annotation.tailrecimport scala.util.{Random, Sorting}/** * 快速排序测试 */object SortTest { /** * 初始化一个数组,产生随机数字填充 * @param size * ...
2018-08-25 20:58:23 956
原创 Scala中while循环和for循环效率实测(2.12.6)
代码object LoopTest { def main(args: Array[String]): Unit = { val size = 10000000; printTime(whileTest(size)) printTime(forTest(size)) } def printTime(call : => Unit):Unit = {...
2018-08-23 16:17:49 1027
原创 java进阶笔记之Set(HashSet和TreeSet和LinkedHashSet等)
简介java的set用于存放值不重复的对象,其结构如图。 Set接口继承自Collection接口,而SortedSet接口继承自Set。AbstractSet是一个抽象类。 Set主要有两种实现HashSet和TreeSet、LinkedHashSet。AbstractSetpublic abstract class AbstractSet<E> exte...
2018-05-16 15:23:03 240
原创 java进阶之LockSupport
简介LockSupport是java.util.concurrent.locks包下的类,功能是对线程进行阻塞和唤醒。 LockSupport中以park开头的方法来阻塞当前线程,unpark来唤醒被阻塞的线程。 和传统的wait/notify机制不同的是,wait/notify是对当前线程阻塞和唤醒一个线程(而不能具体指定); 而LockSupport阻塞当前对象,但是唤醒时却可以唤醒...
2018-05-14 17:34:59 284
原创 java实例化时的属性、构造方法、继承代码、静态代码块的执行/初始化顺序
示例import org.junit.Test;public class ExtendsTest { static class A{ { System.out.println("A_3:init block 1"); } C c = new C("A"); static { ...
2018-05-10 16:43:16 428 2
run-jetty-run 1.3.5 eclipse 插件包.zip
2017-10-12
tingfengOfficeToPdf2016042902
2016-04-29
asorm1.0beta android Sqlite3 ORM 框架;
2016-03-29
asorm android Sqlite3 ORM 框架1.0
2016-03-29
Protocol Buffers windows protoc-2.6.1.exe WIN32
2016-03-18
hadoop-eclipse-plugin
2016-03-18
tomcat7 memcached需要的jar包河配置示例
2016-01-25
wg_pagenation 1.1
2015-10-08
wg_pagenation 1.0版本
2015-08-15
java图片验证码 选择 VerificationImage
2014-10-16
springsecuritytest自定义权限成功实例.rar
2014-09-06
ewsa wpa/wpa2 听风字典 8位 14位 字母 数字混合
2013-11-23
Total Commander(简称TC)V8.0 Beta16汉化绿色版totalcmdyy
2013-04-11
ewsa字典 wpa/wpa2 破解wifi1到8位纯数字密码
2012-08-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人