- 博客(68)
- 资源 (13)
- 问答 (2)
- 收藏
- 关注
原创 手把手教你实现NIO群聊系统
前面我们一起学习了NIO的基础知识,下面将用我们学习到的知识实现一个简单的群聊系统。需求:编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)示意图分析:详细设计如下:先编写服务器端1.1. 服务器启动并监听 66671.2 服务器接收客户端信息,并实现转发 [处.
2020-09-23 22:30:29
452
原创 什么还不懂Java NIO,看这一篇博客就够了!
Java NIO 编程1.1 Java NIO 基本介绍Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的。NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO 有三大核心部分: Channel(通道) , Buffer(缓冲区
2020-09-23 00:02:42
835
原创 Java BIO编程
1. I/O 模型1.1. I/O 模型基本说明I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能Java 共支持 3 种网络编程模型/IO 模式:BIO、NIO、AIOJava BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 【简单示意图】Java NIO : 同步非阻塞,服务器实现模式为一个线
2020-09-11 23:19:42
357
原创 Netty的介绍以及应用场景
1.1 Netty 的介绍Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下,面向 Clients 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景1.2 Netty 的应用场景1.
2020-09-11 22:40:36
1367
原创 Spark(八) -- 百亿级大数据实时计算实战 Spark Streaming对接Kafka
Spark Streaming整合Kafka1.1 Kafka快速回顾1.1.1 核心概念图解Broker : 安装Kafka服务的机器就是一个brokerProducer :消息的生产者,负责将数据写入到broker中(push)Consumer:消息的消费者,负责从kafka中拉取数据(pull),老版本的消费者需要依赖zk,新版本的不需要Topic: 主题,相当于是数据的一个分类,不同topic存放不同业务的数据 --主题:区分业务Replication:副本,数据保存多少份(保证
2020-05-29 23:20:24
1011
原创 Spark(七) --一文带你了解Spark Streaming对接Flume
1. Spark Streaming 对接FlumeFlume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中。以下将介绍Flume采集日志后直接对接Spark Streaming 两种方式 – push 和 poll。(使用的spark streaming版本为1.6.1, 使用flume版本为1.6.0)1.1 Flume通过pus
2020-05-15 23:06:46
587
原创 Spark(六) --一文带你了解Streaming核心原理实战
Spark Streaming实战1. WordCount1.1. 需求&准备图解● 首先在linux服务器上安装nc工具nc是netcat的简称,原本是用来设置路由器,我们可以利用它向某个端口发送数据yum install -y nc● 启动一个服务端并开放9999端口,等一下往这个端口发数据nc -lk 9999● 发送数据1.2. 代码实现:import org.apache.spark.streaming.dstream.{DStream, Recei
2020-05-13 23:13:18
841
原创 Spark(五) --一文带你了解Streaming核心原理
第一章 Spark Streaming引入1.1. 新的场景需求思考一下下面这样的场景需求, 仅仅通过传统的批处理/离线处理/离线计算/处理历史数据可以完成吗?● 商品推荐京东和淘宝这样的商城在购物车, 商品详情等地方都有商品推荐的模块商品推荐的要求快速的处理, 加入购物车以后就需要迅速的进行推荐数据量大需要使用一些推荐算法●工业大数据现在的工场中, 设备是可以联网的, 汇报自己的运行状态, 在应用层可以针对这些数据来分析运行状况和稳健程度, 展示工件完成情况, 运
2020-05-13 22:52:06
437
原创 大厂程序员必备十大基础算法 -- 马踏棋盘算法
1. 马踏棋盘算法(骑士周游)1.1 马踏棋盘游戏介绍马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部 64 个方格游戏演示: http://www.4399.com/flash/146267_2.htm1.2 马踏棋盘游戏完成思路马踏棋...
2020-04-24 23:04:39
504
原创 大厂程序员必备十大基础算法 -- 弗洛伊德算法
1. 弗洛伊德算法1.1 应用场景-最短路径问题胜利乡有 7 个村庄(A, B, C, D, E, F, G)各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何计算出各村庄到 其它各村庄的最短距离?1.2 弗洛伊德(Floyd)算法介绍和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算...
2020-04-22 20:53:10
578
原创 大厂程序员必备十大基础算法 -- 迪杰斯特拉算法
1. 迪杰斯特拉算法1.1 应用场景-最短路径问题看一个应用场景和问题:战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何计算出 G 村庄到 其它各个村庄的最短距离?如果从其它点出...
2020-04-21 23:23:31
551
原创 大厂程序员必备十大基础算法 -- 克鲁斯卡尔算法
1. 克鲁斯卡尔算法1.1 应用场景-公交站问题看一个应用场景和问题:某城市新增 7 个站点(A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通各个站点的距离用边线表示(权) ,比如 A – B 距离 12 公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?1.2 最小生成树在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子...
2020-04-20 20:46:17
537
原创 大厂程序员必备十大基础算法 -- 普里姆算法
1. 普里姆算法1.1 应用场景-修路问题看一个应用场景和问题:有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边,连接即可,但是总的里程数不是最小.正确的思路,就是尽可能的选择少...
2020-04-16 21:26:16
516
原创 大厂程序员必备十大基础算法 -- 贪心算法
1. 贪心算法1.1 应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号1.2 贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都...
2020-04-15 23:17:21
504
原创 大厂程序员必备十大基础算法 -- KMP算法
1. KMP 算法1.1 应用场景-字符串匹配问题字符串匹配问题:有一个字符串 str1= “010101010101010010101010101”,和一个子串 str2=“0101010100”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-11.2 暴力匹配算法如果用暴力匹配的思路,并假设现在 str1 匹配到 i 位置...
2020-04-15 22:59:40
478
原创 大厂程序员必备十大基础算法 -- 动态规划算法
1. 动态规划算法1.1 应用场景-背包问题背包问题:有一个背包,容量为 4 磅 , 现有如下物品要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复1.2 动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求...
2020-04-15 21:37:03
399
原创 大厂程序员必备十大基础算法 -- 分治算法
1. 分治算法1.1 分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法...
2020-04-14 22:08:09
293
原创 大厂程序员必备十大基础算法 -- 二分查找算法(非递归)
1. 二分查找算法(非递归)1.1 二分查找算法(非递归)介绍前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的队列(100 个数,即 n=100)中寻到目标数 ...
2020-04-14 21:37:42
245
原创 进大厂必备的数据结构知识 -- 图的介绍以及遍历
图1.1 图基本介绍1.1.1 为什么要有图前面的博客介绍了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图。1.1.2 图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:1.1.3 图的常用概念顶点(verte...
2020-04-14 21:28:24
317
原创 什么面试官问的B树、B+树、B*树,你还不懂?
多路查找树1.1 二叉树与B 树1.1.1 二叉树的问题分析二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题:问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时, 速度有影响问题 2:节点海量,也会造成二...
2020-03-24 20:19:59
612
1
原创 平衡二叉树窥秘
平衡二叉树(AVL 树)1.1二叉排序树可能的问题给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST)。上边 BST 存在的问题分析:左子树全部为空,从形式上看,更像一个单链表.插入速度没有影响查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢解决方案-平衡二叉树(AVL)1.2 基本介绍...
2020-03-22 19:37:07
229
原创 春招某大厂:不会二叉排序树还想进来?
前言2020 注定是多灾多难的一年,疫情尚未完全散去,不少大厂已经开始了疯狂挖人,于是笔者难耐寂寞向某一线互联网大厂投了一份简历,开始了被虐之旅。。。。于是笔者在一个寂静的夜晚痛定思痛,总结数据结构面试相关的文章,希望能帮助各位读者以后面试百战百胜,对面试官进行绝地反击,吊打问你的面试者,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer!正文面试官: 你了解二叉排序树吗?我: 了解一点...
2020-03-19 21:56:41
234
原创 什么?听说你还不用java实现文件的压缩与解压!
1. 赫夫曼编码1.1 基本介绍赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法。赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间。赫夫曼码是可变字长编码(VLC)的一种。Huffman 于 1952 年提出一种编码方法,称之为最佳编码。1.2...
2020-03-14 22:58:32
327
1
原创 树的实际应用 -- 赫夫曼树与赫夫曼编码(一)
1 赫夫曼树1.1 基本介绍给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近1.2 赫夫曼树几个重要概念和举例说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的...
2020-03-13 22:38:54
308
原创 二叉树(四) -- 堆排序
1 .堆排序1.1 堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说...
2020-03-09 22:14:24
423
原创 Spark(三) --一个WordCount中到底几个RDD?
1. RDD的依赖关系1.1 WordCount中的RDD以下代码中的WordCount会生成几个RDD? scala> val rdd1000 = sc.textFile("hdfs://hadoop01:9000/wc").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)rdd1000: org.apache.spark.r...
2020-03-05 22:56:38
494
1
原创 Spark(二) -- 计算模型(RDD)
1. 弹性分布式数据集RDD1.1. RDD概述1.1.1. 什么是RDDRDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,...
2020-03-05 22:31:23
489
原创 Spark(四) -- SparkSQL
Spark SQL and DataFrame1. Spark SQL1.1 Spark SQL概述1.1.1 什么是Spark SQLSpark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。1.1.2 为什么要学习Spark SQL我们已经学习了Hive,它是将Hive SQL转换成MapRedu...
2020-03-02 22:47:31
288
原创 听说你还不懂SpringBoot?
一文带你了解SpringBoot1. SpringBoot介绍在这一部分,我们主要了解以下3个问题:什么是SpringBoot为什么要学习SpringBootSpringBoot的特点1.1.什么是SpringBootSpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品:我们可以看到下面的一段介绍:...
2020-03-01 21:49:58
473
原创 二叉树(三) -- 线索化二叉树
1.线索化二叉树1.1 先看一个问题将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树. 问题分析:当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 }但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上.如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办?解决方案-...
2020-02-29 22:08:05
406
原创 二叉树(二) -- 二叉树的顺序存储
1.顺序存储二叉树1.1 顺序存储二叉树的概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组, 看下面的示意图要求:上图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]要求在遍历数组 arr 时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历由上图可知顺序存储二叉树的特点...
2020-02-26 23:14:35
647
原创 二叉树(一) -- 二叉树的概念与遍历(前序、中序、后序)、查找以及删除结点
1 二叉树1.1 为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低操作示意图:链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,...
2020-02-25 22:40:16
296
原创 Zookeeper的简单运用 -- 基于ZK的分布式共享锁、应用系统服务器上下线动态感知
Zookeeper的简单运用1. ZooKeeper Java APIorg.apache.zookeeper.Zookeeper:Zookeeper 是在 Java 中客户端主类,负责建立与 zookeeper 集群的会话, 并提供方法进行操作。org.apache.zookeeper.WatcherWatcher 接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑, 包...
2020-02-24 22:37:02
333
原创 ZooKeeper 概述以及集群的搭建
1. Zookeeper1.1. ZooKeeper 概述Zookeeper 是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题。ZooKeeper 本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些...
2020-02-23 23:30:10
327
原创 哈希表(数组+链表实现)
1.1 哈希表(散列)实际需求- 某公司上机题有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id 时,要求查找到该员工的 所有信息.要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)1.2 哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结...
2020-02-23 11:32:16
3536
原创 查找算法 -- 线性、二分、插值、斐波那契
1.1 查找算法介绍在 java 中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找1.2 线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含某个指定的数。 要求: 如果找到了,就提示找到,并给出下标值。代码实现public class SeqSearch { public static vo...
2020-02-22 18:27:40
297
原创 排序算法(四) -- 归并排序、基数排序
1.归并排序1.1 归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer) 策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。1.2 归并排序思想示意图 1-基本思想:1.3 归并排序思想示意图 2-合并相邻有...
2020-02-21 16:12:18
524
1
原创 排序算法(三) -- 希尔、快排
1.希尔排序1.1 简单插入排序存在的问题我们看简单的插入排序可能存在的问题.数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是:{2,3,4,5,6,6}{2,3,4,5,5,6}{2,3,4,4,5,6}{2,3,3,4,5,6}{2,2,3,4,5,6}{1,2,3,4,5,6}结论: 当需要插入的数是较小的数时,后移的次数明显...
2020-02-21 13:06:19
376
原创 排序算法(二) -- 冒泡、选择、插入排序
1.冒泡排序1.1 基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 flag 判断元素是否进行...
2020-02-19 15:32:12
178
原创 排序算法(一) -- 算法的时间复杂度和空间复杂度
1.排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。2.排序算法的分类内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。常见的排序算法分类(见右图):3. 算法的时间复杂度3.1 度量一个程序(算法)执行时间...
2020-02-19 11:14:49
651
jQuery案例.zip
2019-12-23
scala-intellij-bin-2018.3.2.zip
2019-12-06
传智播客Springmvc+mybatis由浅入深学习笔记
2017-12-12
史上最全Ajax学习PPT+demo源码
2017-10-13
spring springmvc hibernate mySql图书管理系统完整项目+book.sql
2017-09-29
关于visual studio2012连接Oracle11g win64问题
2016-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人