# JavaDemo **Repository Path**: jsjack_wang/JavaDemo ## Basic Information - **Project Name**: JavaDemo - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 4 - **Created**: 2018-01-04 - **Last Updated**: 2023-02-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 博客地址:blog.boomsecret.com #### JavaDemo 1.HttpsUtil GET POST PUT DELETE 2.HttpUtils GET POST 3.lombok使用 4.Jackson具体使用 5.PatternUtils使用(邮箱 用户名 汉字 手机号 URL 省份证号码) 6.IPUtils ip2long long2ip 7.正则表达式抓取网页中邮箱 8.JavaMail实现邮件发送 9.Serializable与Externalizable详解 10.transient关键字 11.easypoi导出Excel 12.类加载器工作原理 13.JDBC连接数据库 14.Jsoup解析HTML 15.注解Annotation, 记录某个方法被调用次数 16.静态代理 17.动态代理 18.cglib动态代理 19.单例模式(很有看头) 20.ThreadPoolExecutor具体使用 推荐博客:http://www.importnew.com/19011.html 21.redis工具类, 优化空间 21.1 可以通过泛型及序列化做优化 22.2 可以通过值和过期时间一起设置做优化 22.CountDownLatch用法 23.CyclicBarrier用法 24.ScheduledThreadPoolExecutor具体使用 25.Semaphore用法 26.StrategyPattern具体使用 27.观察者设计模式(ObserverPattern) 28.Java内置观察者模式 29.装饰者模式(DecoratorPattern) 30.装饰者模式在java中的应用(流) 31.Thread详解 32.工厂模式 33.工厂方法模式 34.自定义ClassLoader 35.DesUtils工具类 36.自定义类加载器,加载已经加密过的.class文件 37.爬虫爬取公众号(服务号)文章 38.protobuf 39.Undertow容器 Jetty Undertow Tomcat相关容器还是要看看源码的 40.适配器模式 41.外观模式 42.JodaTime 43.commons-lang3 44.commons-io 45.Md5Util简单加盐 46.CAS 47.快排 48.Java调用JS 49.Calendar取时间Demo 50.并行计算Fork/Join框架 常见方法——计算密集型,设为CPU个数+1;IO密集型,设为2*CPU个数+1 精确计算——( IO等待时间/CPU计算时间 + 1 )* CPU个数 51.zookeeper实现分布式锁 公平锁和非公平锁使用 读写锁使用 52.排他锁ReentrantLock(公平锁和非公平锁) 53.ReentrantReadWriteLock 公平与非公平 可重入 锁降级 锁中断 Condition支持 54.redis实现分布式锁 http://www.importnew.com/27477.html 55.内存分页 56.Comparable和Comparator 57.冒泡及其优化 58.nio aio bio bio 同步阻塞IO nio 同步非阻塞IO aio 异步非阻塞IO 59.atomic包下16个类 // 原子操作 AtomicBoolean AtomicInteger AtomicIntegerArray AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater // 原子操作 可以解决ABA问题 AtomicMarkableReference AtomicStampedReference // 函数运算操作 LongAdder LongAccumulator DoubleAdder DoubleAccumulator 60.locks(unsafe[park,unpark]) // 锁 Lock ReentrantLock ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock // 读写锁 ReadWriteLock ReentrantReadWriteLock // 提供锁方法(主要就是park/unpark) LockSupport // 对读写锁的优化 StampedLock Condition 61.Unsafe 类、对象和变量相关方法 内存管理 多线程同步 线程的挂起和恢复 内存屏障 其他 62.lock与synchronized区别 63.executor TimeUnit(时间工具类 时间转换 线程睡眠等) RejectedExecutionHandler(没有更多线程或队列插槽可用时 处理策略) ThreadPoolExecutor.AbortPolicy(直接抛出RejectedExecutionException) ThreadPoolExecutor.CallerRunsPolicy(直接运行提交的任务) ThreadPoolExecutor.DiscardOldestPolicy(丢弃最旧的任务) ThreadPoolExecutor.DiscardPolicy(丢弃最新的) Callable(有返回结果的任务) CompletionService(新异步任务的生产与已完成任务的结果消耗相分离的服务) ExeutorCompletionService(看了下源码 其实就是将执行完的任务 放到队列中去) Future(A Future represents the result of an asynchronous computation) RunnableFuture FutureTask RunnableScheduledFuture ScheduledFuture RunnableScheduledFuture ForkJoinTask (fork/join框架) ThreadFactory Executor(线程池) ExecutorService AbstractExecutorService ThreadPoolExecutor ScheduledThreadPoolExecutor ForkJoinPool(工作窃取算法) ScheduledExecutorService ScheduledThreadPoolExecutor 64.collections(数组 链表 树 table+链表) ConcurrentMap ConcurrentHashMap(1.7分段锁[hash + 链表] 1.8CAS[链表 + 红黑树]) 无序 ConcurrentNavigableMap ConcurrentSkipListMap(跳表是平衡树的一种替代的数据结构[空间来换取时间]) 有序 ConcurrentSkipListSet(ConcurrentSkipListMap实现) CopyOnWriteArrayList(CopyOnWrite容器 一种读写分离的思想 无序底层实现是数组) CopyOnWriteArraySet(利用CopyOnWriteArrayList实现的) Queue(不可以有null) ConcurrentLinkedQueue(An unbounded thread-safe queue based on linked nodes) CAS BlockingQueue (put/timeout-offer、take/timeout-poll) ArrayBlockingQueue (底层实现是数组) DelayQueue(An unbounded blocking queue of Delayed elements) PriorityQueue实现 起自层还是数组 LinkedBlockingQueue (An optionally-bounded blocking queue based on linked nodes) PriorityBlockingQueue (一个无界的blocking queue使用与PriorityQueue类相同的排序规则) 底层实现还是数组 SynchronousQueue (A blocking queue in which each insert operation must wait for a corresponding remove operation by another thread, and vice versa) 同步队列 TransferQueue LinkedTransferQueue (An unbounded TransferQueue based on linked nodes) 可以说是功能更强大的SynchronousQueue Deque (A linear collection that supports element insertion and removal at both ends) ArrayDeque (非线程安全) 数组 LinkedList BlockingDeque LinkedBlockingDeque ConcurrentLinkedDeque 65.tools Executors (没什么意思就不说了) Semaphore (信号量 有点意思) CyclicBarrier (阑珊 可以理解拦截线程到一个阀值 然后这些线程一起运行) 阑珊是一批一批的 CountDownLatch (可以理解为倒计时锁) Exchanger (可以理解为一对线程交互数据) Phaser(可以实现CountDownLatch/CyclicBarrier功能 phaser比它们更加灵活强大) 题外话Collections.synchronizedMap(Map m)/Hashtable全局锁synchronized 性能比较低 66.Thread (以前也写过 感觉很垃圾 所以今天重新看下 各种操作线程还是挺爽的) Thread.State NEW (尚未启动的线程处于此状态) RUNNABLE (在Java虚拟机中执行的线程处于此状态) BLOCKED (被阻塞等待监视器锁定的线程处于此状态) WAITING (正在等待另一个线程执行特定动作的线程处于此状态) TIMED_WAITING (正在等待另一个线程执行动作达到指定等待时间的线程处于此状态) TERMINATED (已退出的线程处于此状态) Thread.PRIORITY MAX_PRIORITY (线程可以拥有的最大优先级) MIN_PRIORITY (线程可以拥有的最小优先级) NORM_PRIORITY (分配给线程的默认优先级) 67.SPI(service provider interface) ServiceLoader 68.thrift客户端 server在springboot-demo的dev-thrift分支 69.线程三大核心原子性、可见性、顺序性 volatile 关键字只能保证可见性,顺序性,不能保证原子性 70.happen-before原则(8原则) 1.程序次序规则 一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作 2.锁定规则 一个unLock操作先行发生于后面对同一个锁的lock操作 3.volatile变量规则 对一个变量的写操作先行发生于后面对这个变量的读操作 4.传递规则 如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C 5.线程启动规则 Thread对象的start()方法先行发生于此线程的每个一个动作 6.线程中断规则 对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生 7.线程终结规则 线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行 8.对象终结规则 一个对象的初始化完成先行发生于他的finalize()方法的开始 71.ThreadPoolExecutor的参数配置 (具体还是要自己测试) IO密集型任务 (cpu*2) CPU 密集型任务 (cpu) 线程池进行隔离 比如一块业务用一个线程池 72.线程通信 等待通知机制 (wait notify) Condition通知机制 volatile共享内存 线程响应中断 管道通信 线程池 awaitTermination() 方法 CountDownLatch(和join差不多) (AQS) CyclicBarrier (AQS) join()方法 (join) 73.CAP和BASE CAP(分布式系统一般是AP/CP) C 一致性 A 可用性 P 分区容错性 BASE BA 基本可用 S 软状态 E 最终一致性 74.分布式事务 74.1 XA分布式事务协议 74.1.1 两阶段提交(2PC)--->强一致、中心化的原子提交协议 74.1.2 三阶段提交(3PC) 74.2 补偿事务(TCC) Try-Confirm-Cancel 75.限流 漏桶算法(有点像线程池越界规则) 令牌桶算法(RateLimiter) 76.解析HTML之前用的都是jsoup,最近发现neko还不错只是文档有点少 77.josql(用SQL查询Java对象数据) mvn install:install-file -DgroupId=net.sf.josql -DartifactId=josql -Dversion=1.5 -Dpackaging=jar -Dfile=josql-1.5.jar mvn install:install-file -DgroupId=org.JoSQL -DartifactId=gentlyWEB-utils -Dversion=1.1 -Dpackaging=jar -Dfile=gentlyWEB-utils-1.1.jar http://josql.sourceforge.net/manual/examples.html