自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 资源 (1)
  • 收藏
  • 关注

原创 Cats(二)

Cats 二单位元(Identity Law)结合律(Associative Law)Monoid(幺半群)& Semigroup(半群)Monoid(type class)Semigroup(type class)cats.Monoid& cats.Semigroup(type class)cats: Monoid Instancescats: Monoid Syntaxcats: Exercise: Adding All The Things单位元(Identity Law)单位元

2022-03-04 20:31:14 693

原创 Cats(一)

Cats 一Type classType class(接口)Type Class Instances(隐式值)Type Class Interface(带隐式参数的函数)使用 Type Class练习: 实现一个PrintableMeet Catscats.Show(type class)cats.Eq(type class)Controlling Instance Selection(控制 Instance的选择)Type classType class模式主要由3个部分组成:Type cla

2022-02-23 21:36:53 533

原创 Scala并发编程(二)之 Akka

Scala并发编程之 Akka概述Akka通信过程Actor Path入门案例定时任务案例两个进程之间的通信案例简易版 Spark通信框架实现案例概述Akka是使用 Scala开发的库, 它是基于事件驱动的, 用于构建高并发项目的工具包Akka特性:提供基于异步非阻塞, 高性能的事件驱动编程模型内置容错机制, 允许 Actor出错时, 进行恢复或重置轻量级的事件处理(每 GB堆内存几百万 Actor. *轻量级事件处理和重量级的划分, 主要看是否依赖操作系统和硬件, 依赖是重量级,

2022-02-12 18:30:02 1434

原创 Scala并发编程(一)之 Actor

Scala并发编程之 ActorJava并发编程对比 Actor并发编程创建 Actor步骤Actor发送& 接收消息发送消息接收消息实例 1: (!) 发送异步消息, 无返回值实例 2: (!?) 发送同步消息, 等待返回值实例 3: (!!) 发送异步消息, 返回值是 Future[Any]WordCount案例(单词计数)Java并发编程对比 Actor并发编程Java并发编程: 多线程读写共享资源时, 会将每个线程同步加锁, 并通过对象的逻辑监视器(Monitor)来控制共享资源的访问

2022-02-08 20:43:13 1359

原创 Scala(六)

Scala 六异常处理隐式转换泛型协变和逆变泛型上下限(上下界)上下文限定异常处理为了不让程序异常终止, 使用 try-catch语句. 将可能会出异常的代码封装在 try块中, 当发生异常时, catch捕获异常, 并处理Scala没有checked(编译期)异常, 而异常都是Runtime异常运行的时候捕获当异常发生, catch子句, 是按顺序捕捉的. 因此, 范围小的异常类写在前面, 范围大的异常类写在后面, 一旦前面的异常被捕获, 写在后面的异常类, 即使也在范围内也不会被捕获fi

2022-02-03 19:55:31 501

原创 Scala(五)

Scala 五模式匹配模式匹配-类型模式匹配-正则表达式模式匹配-对象样例类样例对象Option类型偏函数(PartialFunction)模式匹配模式匹配时, 会从第一个 case分支开始, 如果匹配成功, 则执行对应的逻辑代码, 并结束当前模式匹配. 如果所有 case都不匹配, 那么会执行 case _分支, 类似于 Java中 default语句如果没有 case _分支, 那会抛 scala.MatchErrormatch case语句, 可以匹配任何类型, 而不单是字面量(=>

2022-01-31 14:51:06 708

原创 Scala(四)

Scala 四集合数组(Array/ArrayBuffer)不可变数组: Array(Scala推荐使用不可变数组可变数组: ArrayBuffer不可变数组与可变数组的转换多维数组列表(List/ListBuffer)不可变列表: List可变列表: ListBufferSet集合(Set/mutable.Set)不可变: Set可变: mutable.SetMap集合(Map/mutable.Map)不可变: Map可变: mutable.Map元组衍生集合集合计算简单函数集合高级函数WordCount

2022-01-27 19:24:39 662

原创 Scala(三)

Scala 三包管理面对对象类(class):封装访问权限创建对象构造器继承和多态抽象类单例对象(伴生对象)特质/特征(Trait)特质(Trait)自身类型设计模式(Design Pattern)类型检查和转换枚举类和应用类Type定义新类型包管理两种包管理风格(package):一种和 Java一样, 每一个源文件一个包(包名和源文件所在路径可以不一致, 编译后, 编译器会自动按包结构放置字节码文件), 包名用(.)进行分隔, 以表示包的层级关系 com.company.scala1-1

2022-01-23 16:01:57 461

原创 Scala(二)

Scala 二函数式编程Scala函数函数参数函数精简化匿名函数(Lambda)函数柯里化(Currying) &闭包(Closure)递归(Recursion)控制抽象(Control abstraction)自定义 While循环惰性加载/懒加载(Lazy loading)面向对象编程:(-) 构成问题的各个事务分解成各个对象, 建立对象的目的不是为了完成一个步骤, 而是为了描述解决问题步骤中的行为(*对象的本质: 数据和行为的一个封装)函数式编程:(-) 将问题分解成一个个步骤,

2022-01-19 20:42:34 301

原创 Scala(一)

Scala 一Scala简介下载安装创建 Maven项目变量和常量数据类型自动类型转换(隐式转换)强制类型转换数值类型与 String类型间的转换运算符流程控制For循环控制While和 do..While循环控制循环中断文件IO官网 https://www.scala-lang.orgScala简介Martin Odersky, 从2001年开始设计 Scala. 将函数式编程语言的特点融合到 Java中, 以此推出了两种语言 Pizza& ScalaPizza和 Scala极大地推动了

2022-01-15 16:32:17 767

原创 Java设计模式之(代理模式)

Java代理模式Java代理模式静态代理:JDK代理/接口代理(动态代理):CGlib代理(动态代理):Java代理模式代理模式的基本介绍为一个对象提供一个替身, 控制该对象的访问. 即通过代理对象访问目标对象被代理的对象可以是远程对象, 创建开销大的对象或需要安全控制的对象代理模式主要有三种形式: 静态代理, JDK代理/接口代理(动态代理)和 CGlib代理(可在内存动态的创建对象, 而不需要实现接口)静态代理:特点: 代理对象与目标对象实现同一个接口, 然后通过调用相同的方

2022-01-11 20:13:57 370

原创 Netty(四)

Netty 四RPC基本介绍RPC基本介绍RPC(Remote Procedure Call 远程过程调用)是一个计算机通信协议. 用于在一个程序调用执行另一个程序的子程序(如方法)两个或多个程序部署在不同的服务器上, 只要都实现了 RPC, 互相之间调用方法是和本地调用一样RPC中, Client叫服务消费者, Server叫服务提供者常见的 RPC框架有: 阿里的 Dubbo, Google的 gRPC, Go语言的 rpcx, Apache的 thrift, Spring Cloud

2022-01-10 21:25:20 1239

原创 Netty(三)

Netty 三Netty Handler的调用机制Netty的编& 解码ByteToMessageDecoder解码器(继承自 ChannelOutboundHandlerAdapter)ReplayingDecoder解码器(继承自 ByteToMessageDecoder)整合 Log4j到 Netty便于排查问题Protobuf(全称为 Google Protocol Buffers)TCP粘包和拆包基本介绍Netty Handler的调用机制ChannelHandler充当处理入站&a

2022-01-08 13:31:09 513

原创 Netty(二)

Netty 二Netty模块组件Netty模块组件ServerBootstrap& Bootstrap:在 Netty, ServerBootstrap类是服务端的启动引导类, Bootstrap类是客户端的启动引导类. 主要作用是配置整个 Netty程序常见方法:public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup), 该方法用于服务器端设置两个 EventLoopGr

2022-01-05 22:03:52 300

原创 Netty(一)

Netty 一概述版本架构设计Reactor模式又分3种实现概述Netty是一个异步事件驱动的网络应用框架, 可以快速开发高性能服务器和客户端Netty对 JDK的 NIO API进行了封装, 解决了 Epoll Bug, 导致 Selector空轮询的问题& 改善了 NIO的使用繁琐& 难的等问题官网: https://netty.io版本版本分为 netty3.x, netty4.x和 netty5.x. 其中5.x, 出现重大 bug, 已被官网废弃, 目前推荐使用

2022-01-02 15:21:35 707

原创 Elasticsearch(四)

Elasticsearch 四Elasticsearch优化硬件选择:分片策略路由选择:写入速度优化:内存设置:重要配置:Elasticsearch优化硬件选择:$ vim config/elasticsearch.yml # 本地存储路径相关配置# path.data: /path/to/data# path.logs: /path/to/logs- 优化 I/O方案:(-) 使用 SSD(-) 使用 RAID0(又称条带化). RAID会提高磁盘 I/O, 代价是当一块硬盘故障时整个

2021-12-29 20:57:18 1051

原创 Elasticsearch(三)

Elasticsearch 三基本概念系统架构分布式集群分片原理 - 索引:文档分析:文档处理:基本概念索引(Index): 对应关系型数据库的库(*必须全小写类型(Type): 对应关系型数据库的表, 一个索引, 可以含一个或多个类型(*7.x开始已废除文档(Document): 一个文档对应数据表的一行数据, 以 JSON格式来表示字段(Field): 对应数据表的字段映射(Mapping): 对每个字段设置规则做格式方面的限制(*如数据类型, 默认值, 分析器, 是否索引等分片(Sha

2021-12-28 18:28:00 364

原创 Elasticsearch(二)

Elasticsearch 二下载 ElasticsearcLinux部署单机部署集群部署Windows集群安装 KibanaElasticsearch数据备份与恢复安装备份& 恢复工具数据备份脚本数据恢复脚本下载 Elasticsearchttps://www.elastic.co/cn/downloads/past-releases#elasticsearchLinux部署创建用户(ES不允许 root用户直接运行$ groupadd es; useradd -g es es;

2021-12-26 15:27:54 1301

原创 Elasticsearch(一)

Elasticsearch 一概述数据格式索引& 映射& 文档(创建/更新/删除/查询)高级查询Elasticsearch, Kibana, Beats和 Logstash(简称 ELK Stack概述官网地址: https://www.elastic.co/cnElasticsearch是基于 Lucene搭建的(Lucene是 Apache软件基金会的项目, 它是免费开源的提供全文搜索功能类库的工具包), 实时的存储, 可扩展到上百台服务器, 处理 PB级别的数据, 并使用

2021-12-23 21:07:03 614

原创 并发编程(十)

Concurrency Programming 十自定义线程池例子1自定义线程池例子2自定义线程池例子1class Pool { // 1. 连接池大小 private final int poolSize; // 2. 连接对象数组 private Connection[] connections; // 3. 连接状态数组 0 表示空闲, 1 表示繁忙 private AtomicIntegerArray states; // 4. 构造方法

2021-05-30 18:38:40 110

原创 并发编程(九)

Concurrency Programming 九共享模型之不可变可变和不可变类的使用例子不可变设计: 保护性拷贝(Defensive Copy)无状态类设计享元模式(Flyweight Pattern), 归类 Structual Patterns共享模型之不可变可变和不可变类的使用例子SimpleDateFormat日期格式化类, 由于是线程不安全的, 所以多线程调用时, 会时不时的抛异常 SimpleDateFormat sdf = new SimpleDateFormat

2021-05-25 20:07:45 182

原创 并发编程(八)

Concurrency Programming 八无锁并发: CAS(Compare And Swap)原子整数类原子引用类原子数组类原子字段更新器类原子累加器类Unsafe无锁并发: CAS(Compare And Swap)可在多核 CPU环境下无阻塞的方式来保证原子性. 它不是通过加锁的方式来保护共享变量的线程安全*特点: CAS适用于多核 CPU, 同时线程数不能多于核数的环境原理比较:悲观锁(synchronized/ReentrantLock): 当前线程抢到锁, 则其它线程会

2021-05-16 17:03:14 84

原创 并发编程(七)

Concurrency Programming 七Java JMM(Java Memory Model, 内存模型)可见性有序性volatile原理原子性终止模式之两阶段终止模式同步模式之 BalkingJava JMM(Java Memory Model, 内存模型)JMM定义了主存, 工作内存(抽象概念). 底层对应着 CPU寄存器, 缓存, 硬件内存, CPU指令优化等JMM体现在以下几个方面原子性: 保证指令不会受到线程上下文切换的影响可见性: 保证指令不会受 CPU缓存的影响有序

2021-05-06 21:13:21 111 1

原创 并发编程(六)

Concurrency Programming 六同步模式之顺序控制1. 固定运行顺序1.1 wait& notify版1.2 park& unpark版2. 交替输出2.1 wait& notify版2.2 ReentrantLock条件变量版2.3 park& unpark版同步模式之顺序控制1. 固定运行顺序1.1 wait& notify版public class App { private static Object obj = new O

2021-03-13 20:38:13 95

原创 并发编程(五)

Concurrency Programming 五死锁活锁饥饿ReentrantLock可重入可打断锁超时通过 ReentrantLock解决哲学家就餐问题公平锁条件变量死锁多个同步块使用同一个锁对象, 会严重降低程序的并发量. 此时可以通过多把锁(锁颗粒度细分化)方式, 给每个同步块(功能块)都分配专有锁对象, 来提升并发量. 但同一个线程获取多把锁(多个 synchronized同步块), 会容易引起死锁死锁演示代码 1:public class App { public

2021-03-12 21:21:29 94

原创 并发编程(四)

Concurrency Programming 四wait& notifywait& notify简单示例park& unparkpark& unpark原理wait& notify和 park& unpark的区别同步模式之保护性暂停异步模式之生产者/消费者wait& notify方法功能说明void wait()释放对象锁, 并将当前线程加到 Monitor.WaitSet内(阻塞等待)void notify()随

2021-03-10 19:16:14 133

原创 并发编程(三)

Concurrency Programming 三synchronized的3种锁1. 重量级锁: Monitor2. 轻量级锁2.1 锁膨胀(轻量级锁变为重量级锁)2.2 自旋优化(Adaptive Spinning)3. 偏向锁(Biased Locking)3.1 撤销3.2 批量重偏向3.3 批量撤销3.4 锁消除优化(Lock Elimination)3.5 锁粗化优化(Lock Coarsening)synchronized的3种锁偏向锁 2. 轻量级锁 3. 重量级锁1. 重量级锁:

2021-03-08 20:16:33 191 2

原创 并发编程(二)

Concurrency Programming 二并发之共享模型应用之互斥变量的线程安全常见线程安全类并发之共享模型临界区(Critical Section): 在一段代码块内, 存在多线程读写共享资源的操作, 称此段代码块为临界区竞争条件(Race Condition), 竞态条件: 不同的代码, 多线程读写相同的共享资源时, 由于执行顺序不同(字节码指令交错), 而导致结果无法预测, 称为发生了竞态条件应用之互斥互斥(Mutex): 通过竞争独占使用临界区, 同一时刻, 保证只能有一个线

2021-03-06 22:49:43 2281 9

原创 并发编程(一)

Concurrency Programming 一进程& 线程并发(Concurrent)& 并行(Parallel)同步(Synchronous)& 异步(Asynchronous)线程的五种状态(操作系统层面描述线程对象)线程的六种状态(Java API层面描述线程对象)创建线程实例线程阻塞直到获取结果(同步等待)线程类常用方法例子进程& 线程进程: 进程是用来加载指令, 管理内存和 IO的. 当一个程序被运行, 同时, 程序代码会从磁盘加载到内存, 这就是开启了

2021-03-06 09:37:37 228 3

原创 Java-AIO

Java AIOAIO概述Path接口Paths工具类Files工具类使用例子AIO概述AIO(Asynchronous IO)是 Java 1.7之后引入的包. 特点是异步非阻塞, 属 NIO的扩展, 又称 NIO.2主要新增 Path接口, Paths和 Files工具类Path接口java.nio.file.Path代表一个平台无关的路径, 表示目录结构和指定文件的位置常用方法:方法说明boolean isAbsolute()判断是否为绝对路径Path

2021-02-27 18:42:59 191 2

原创 Java-NIO

Java NIONIO概述NIO与传统 IO的区别通道(Channel)直接与非直接缓冲区通道& 缓冲区(Buffer)NIO非阻塞式网络通信阻塞式例子非阻塞式管道(Pipe)NIO概述Java NIO(New IO, Non-Blocking IO)是从 Java 1.4开始引入的全新的 IO. 特点是同步非阻塞, 面向缓冲区的NIO与传统 IO的区别IONIO面向流(Stream Oriented)单向的面向缓冲区(Buffer Oriented)双向的阻

2021-02-21 18:58:38 583 12

原创 Java-网络编程

Java TCP& UDP& URL网络层级标准(协议)Socket编程TCP网络通信UDP网络通信URL编程网络层级标准(协议)ISO七层模型: 过于理想化, 未能在因特网上进行广泛推广TCP/IP四层模型: ISO七层模型的简化版, 事实上的国际标准IP地址:计算机(通信实体)在 Internet上的唯一的标识IP地址分为: IPV4和 IPV6IPV4: 4个0~255的组成, 共4个字节, 约有42亿个IPV6: 8个无符号整数, 每个整数用四个十六进制位

2020-12-20 21:04:27 144

原创 Java-BIO

Java BIO概述IO流的分类文件流(节点流)缓冲流转换流标准输入& 输出流打印流数据流对象流随机存取文件流概述全程为 Block Input/Output(同步阻塞式输入/输出), 指的就是传统 IO, 是用于处理设备之间的数据传输. 如 读写文件, 网络通讯等数据的输入或输出操作是以流(Stream)的方式进行IO流的分类按照操作数据的单位: 字节流(8bit), 字符流(16bit)字节流: 非文本文件, 就是按照二进制形式进行读写操作. 如 .mp3,.avi,.r

2020-11-30 22:33:50 145

原创 Java-List& Set& Map

List& Set& MapArrayList / LinkedList / Vector特点及比较ArrayList特点:LinkedList特点:Vector特点:MapHashMap / LinkedHashMap / TreeMap / Hashtable / Properties特点及比较HashMap特点:LinkedHashMap特点:TreeMap特点:Hashtable特点:Properties特点:HashSet / LinkedHashSet / TreeSet特点及比

2020-11-23 21:02:44 129 1

原创 算法-马踏棋盘算法

马踏棋盘算法概述概述马踏棋盘算法也被称为骑士周游问题, 规则是将马随机放在国际象棋的6x6棋盘(board[05][05])的某个方格中, 马儿走棋规则(马走日字)进行移动, 且每个方格只进入一次, 走遍所有方格代码思路深度优先搜索(Depth First Search): 每当走到尽头未走完所有方格, 便会回退, 也就是会发生大量的回溯使用贪心算法(Greedy algorithm), 优化深度优先搜索时产生的回溯代码实现public class HorseChessbo

2020-11-14 19:49:05 561 1

原创 算法-最短路径算法(弗洛伊德算法 Floyd`s algorithm)

Floyd`s algorithm概述最短路径问题概述弗洛伊德算法(Floyd’s algorithm)也是最短路径算法, 用于计算图中各个顶点之间的最短路径. 与迪杰斯特拉算法(Dijkstra’s algorithm)不同的是, 迪杰斯特拉算法是指定某一个顶点到其它顶点的最短路径, 而弗洛伊德算法是每一个(所有)顶点到其它顶点的最短路径最短路径问题胜利乡有7个村庄(A,B,C,D,E,F,G)各个村庄的距离用边线权值来表示, 比如 A-B距离5公里计算出各个村庄到其它各个村庄的最

2020-11-13 19:17:47 791

原创 算法-最短路径算法(迪杰斯特拉算法 Dijkstra`s algorithm)

Dijkstra Algorithm概述最短路径问题概述迪杰斯特拉算法(Dijkstra Algorithm)是最短路径算法, 用于计算一个节点到其它节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想), 直到扩展到终点为止最短路径问题战争时期, 胜利乡有7个村庄(A,B,C,D,E,F,G), 现在有六个邮差, 从 G点出发, 需要分别把邮件分别送到 A,B,C,D,E,F,G六个村庄各个村庄的距离用边线权值来表示, 比如 A-B距离5公里计算出 G村庄到其

2020-11-12 20:22:07 325

原创 算法-最小生成树算法(克鲁斯卡尔算法 Kruskal`s algorithm)

Kruskal`s algorithm概述公交站问题概述克鲁斯卡尔算法(Kruskal`s algorithm)也是求最小生成树的算法, 也就是在包含 n个顶点的带权无向连通图中, 找出(n-1)条边的最小耗费生成树(Minimum Cost Spanning Tree), 简称 MST克鲁斯卡尔算法的时间复杂度为 O(eloge) e为网中的边数基本思想: 将所有的边, 按照权值从小到大进行排序, 并保证边的终点不构成回路(指每个边的终点不允许重合)公交站问题某城市有7个居民区(A,B,

2020-11-11 20:45:26 1254 2

原创 算法-最小生成树算法(普里姆算法 Prim`s algorithm)

Prim’s algorithm概述修路问题概述普里姆算法(Prim’s algorithm)是求出最小生成树的算法, 也就是在包含 n个顶点的带权无向连通图中, 找出(n-1)条边的最小耗费生成树(Minimum Cost Spanning Tree), 简称 MST普里姆算法的时间复杂度为: 邻接矩阵 O(v^2), 邻接表 O(elog2v) e为网中的边数修路问题有叫(A,B,C,D,E,F,G)的7个村庄, 现在需要将这7个村庄通过修路连通. 各个村庄的距离用边线权值来表示, 比如

2020-11-10 19:54:33 3564 1

原创 算法-贪心算法(Greedy algorithm)

Greedy Algorithm概述贪心算法最佳应用-集合覆盖两种方式概述贪心算法(Greedy Algorithm), 又称贪婪算法. 此算法对问题进行求解时, 在每一步选择中都采取最好或者最优(即最有利)的选择, 从而希望能够导致结果是最好或者最优的算法贪心算法最佳应用-集合覆盖假设有多个需付费的广播台, 及各个广播台有限制, 只能传递信号到部分区域. 问题: 如何选择最少的广播台, 让所有的地区都可以接收到广播信号广播台可覆盖地区K1北京, 上海, 天津K

2020-11-09 20:32:59 413

中文转拼音/中文转五笔/汉字转拼音/汉字转五笔 字典

Java 中文转拼音/中文转五笔/汉字转拼音/汉字转五笔 字典. 通过 https://blog.csdn.net/qcl108/article/details/100981774 提供的 Java代码使用.

2019-09-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除