- 博客(278)
- 收藏
- 关注
原创 代理模式
目录1 简介2 实现1 简介在代理模式中,一个类代表另一个类的功能,通过创建具有现有对象的对象,以便向外界提供功能接口;意图:为对象提供一种代理以控制对这个对象的访问;主要解决:在直接访问对象时带来的问题。比如:要访问的对象在远程机器上,在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大、某些操作需要安全控制等)直接访问会给使用者或系统结构带来很多麻烦。我们可以在访问此对象时加上一个对此对象的访问层;如何解决:增加中间层;关键代码:实现与被代理类组合;应用场景:1 Windows里
2021-06-30 16:06:59
137
原创 基于Thrift框架的RPC通信的介绍及案例演示
目录Thrift整体架构TProtocolTSocket是基于TCP socket实现TTransport的接口TTransport主要作用是定义了IO读写操作以及本地缓存的操作iprot_:the input (read) protocoloprot_:the output (write) protocolThrift整体架构黄色部分是用户实现的业务逻辑;褐色部分是根据Thrift定义的服务接口描述文件生成的客户端和服务器端代码框架;红色部分是根据Thrift文件生成代码实现数据的读写操作;
2021-06-28 17:40:34
949
原创 小朋友过河问题(动态规划)
1 题目描述每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少?2 解题(Java)2.1 解题思路先将所有人按花费时间递增进行排序,排序后数组假设为a,假设前i个人过河花费的最少时间为dp[i];有两种方案:1 最快和最慢过去,最快回来,这是希望最快速度送回来;2 最快和次快过去,最快回来,最慢和次慢过去,次快回来,最快和次快过去,这是希望一次过俩最慢的,利
2021-06-24 20:41:51
744
2
原创 为什么有了synchronized,还需要volatile?
目录1 简述2 sychronized的问题3 volatile的附加功能1 简述Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurrent包等;2 sychronized的问题3 volatile的附加功能...
2021-06-22 14:13:49
2572
原创 volatile关键字详解
1 简介Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurrent包等;2 volatile的用法volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量,无法修饰方法及代码块;volatile的用法比较简单,只需要在声明一个可能被多线程同时访
2021-06-22 09:13:05
370
原创 synchronized关键字详解
目录1 简介2 synchronized的用法3 synchronized的实现原理4 synchronized与原子性5 synchronized与可见性6 synchronized与有序性1 简介Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurrent包等;synchronized关键字在需要原子性、可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是“万能”
2021-06-21 19:55:59
195
原创 Redis
1 redis简介是一种数据库,不过与传统数据库不同的是,redis的数据存储在内存中,因此读写速度非常快;被广泛应用于缓存方向,以及经常用来做分布式锁;redis提供了多种数据类型来支持不同业务场景;除此之外,redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案;...
2021-06-19 16:34:24
334
原创 IO知识点汇总
目录1 字节流、字符流1.1 字节与字符1.2 字节流1.3 字符流1.4 互相转换2 输入流、输出流3 字节流和字符流之间的相互转换3.1 字符流转成字节流3.2 字节流转成字符流4 同步和异步、阻塞和非阻塞4.1 同步/异步4.2 阻塞/非阻塞4.3 同步、异步和阻塞、非阻塞之间的区别5 Linux5种IO模型5.1 阻塞式IO模型5.2 非阻塞IO模型5.3 IO复用模型5.4 信号驱动IO模型5.5 异步IO模型6 BIO、NIO和AIO6.1 BIO6.2 NIO6.3 AIO7 Netty1
2021-06-14 20:01:40
1626
2
原创 MySQL:6 补充知识
目录1 inner join、outer join 和 full join2 子查询和 join 查询3 where 和 on4 where 和 having5 order by 和 group by6 查询顺序7 优先级8 数据库备份1 inner join、outer join 和 full joininner join(内连接)返回两表中连接字段相等的记录。outer join(外连接)left join(左外连接)返回左表中所有记录和右边中连接字段相等的记录。right
2021-06-06 16:00:09
112
原创 MySQL索引
1 定义索引是对数据库表中一列或者多列的值进行排序的结构。2 目的数据库索引好比一本书的目录,能提高查询效率;为表设置索引要付出一定代价:增加了数据库的存储空间;在插入和修改时需花费更多的时间(因为索引也要随之变动);3 分类3.1 聚集索引索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储其真实的数据行,不再有另外单独的数据页。3.2 非聚集索引表数据存储顺序与索引顺序无关;叶子结点包含索引字段值和数据页数据行的地址,其行数量与数据表中行数量一致;一个
2021-06-06 10:47:48
338
2
原创 Linux常用命令
目录修改权限列出目录中的文件更换当前目录创建目录删除目录新建文件复制文件删除文件移动文件文件编辑文件搜索查看当前系统的网卡信息查看与某台机器的连接情况关机重启查看进程查看占用端口的进程杀死进程压缩文件打包修改权限chmod列出目录中的文件ls更换当前目录cd创建目录mkdir删除目录rmdir新建文件touch复制文件cp删除文件rm移动文件mv文件编辑vim文件搜索find查看当前系统的网卡信息ifconfig查看与某台机器的连接情况ping关机sh
2021-06-06 09:56:24
163
原创 MySQL建表字段数据类型对应Java数据类型
MySQL含义对应Javaint整数型intbigint长整型longfloat浮点型float、doublechar定长字符串Stringvarchar可变长字符串StringBuffer、StringBuilderdate日期类型java.sql.DateBLOB二进制大对象(存储图片、视频等流媒体信息)Binary Large ObjectObjectCLOB字符大对象(存储较大文本,比如可以存储4G的字符串...
2021-06-03 09:05:47
304
原创 Leetcode笔记
目录1 StringBuider删除对应索引元素2 StringBuider添加元素3 String截取元素4 数字转字符串5 字符串转数字6 字符数组转字符串1 StringBuider删除对应索引元素StringBuider.deleteCharAt(index);2 StringBuider添加元素StringBuider.append(element);3 String截取元素String.substring(beginindex):截取从beginIndex至字符串末尾的字符串;S
2021-06-03 08:55:56
1084
1
原创 Java字符串和数字/日期相互转换
目录1 数字转换成字符串2 字符串转换成数字1 数字转换成字符串String s = String.valueOf(a);String s = Integer.toString(a);String s = a + “”;注:其他数据类型类似。2 字符串转换成数字转整型:int i = Integer.parseInt(s);转浮点型:double d = Double.parseDouble(s);注:其他数据类型类似。...
2021-05-25 17:50:09
1616
原创 7 倒排索引
倒排索引((Inverted Index))是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一 组文档中的存储位置的映射。以英文为例,下面是要被索引的文本 T0、T1、T2:T0 = “it is what it is”T1 = “what is it”T2 = “it is a banana”得到反向文件索引:“a”: {2}“banana”: {2}“is”: {0, 1, 2}“it”: {0, 1, 2}“what”: {0, 1}...
2021-05-22 15:23:56
118
原创 6 数据库
当遇到大数据量的增删改查时,一般把数据装进数据库中,从而利用数据的设计实现方法,对海量数据的增删改查进行处理。而数据库索引的建立则对查询速度起着至关重要的作用。
2021-05-22 15:21:32
102
原创 5 Trie 树(字典树)
目录Trie 树(字典树)1 10 个频繁出现的词2 寻找热门查询Trie 树(字典树)Trie 树,即字典树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是最大限度地减少无谓的字符串比较,查询效率比较高。Trie 的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有 3 个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符;从根节点到某一节
2021-05-22 15:20:42
427
原创 4 布隆过滤器
目录布隆过滤器1 寻找通过 URL2 垃圾邮件过滤布隆过滤器布隆过滤器(BloomFilter)是一种空间效率很高的随机数据结构,可以看做是对位图(bit-map)的扩展;原理是:当一个元素被加入集合时,通过 K 个 Hash 函数将这个元素映射成一个位阵列(Bitarray) 中的 K 个点,并将它们置为 1。在检索一个元素是否在一个集合中时,我们只要看看这些点是不是都是 1 就能大约判断出集合中有没有它了:如果这些点有任何一个 0,则被检索元素一定不在;如果都是 1,则被检索元素很可能存在集合中
2021-05-22 15:08:52
146
原创 3 位图
目录位图(Bit-map)1 2.5 亿个数的去重2 整数的快速查询位图(Bit-map)位图(Bit-map)就是用一个 bit 位来标记某个元素对应的 value, 而 key 即是该元素。由于采用了 bit 为单位来存储数据,因此在存储空间方面,可以大大节省;位图通过使用 bit 数组来表示某些元素是否存在,可进行数据的快速查找、判重、删除,一般来说数 据范围是 int 的 10 倍以下;例如要对 {4,7,2,5,3} 进行排序,可以设置一个范围为 0~8 的比特数组,读入数据之后将比特数
2021-05-22 14:51:51
334
原创 2 哈希分治
目录hash 映射1 寻找 TOP IP2 寻找热门查询3 寻找频数最高的 100 个词4 寻找共同的 URLhash 映射为了便于计算机在有限的内存中处理大数据,我们通过一种映射散列的方式让数据均匀分布在对应的内存位置(如大数据通过取余的方式映射成小数据存放在内存中, 或大文件映射成多个小文件),而这种映射散列的方式便是我们通常所说的 hash 函数,好的 hash 函数能让数据均匀分布而减少冲突;对于海量数据而言,由于无法一次性装进内存处理,不得不把海量的数据通过 hash 映射的方法分割成相应
2021-05-22 14:32:41
281
原创 1 概述
海量数据处理是指基于海量数据的存储、处理、和操作。正因为数据量太大,所以导致要么无法在较短时间内迅速解决,要么无法一次性装入内存。对于时间问题,可以采用巧妙的算法搭配合适的数据结构(如布隆过滤器、哈希、位图、堆、 数据库、倒排索引、Trie 树)来解决;对于空间问题,可以采取分而治之(哈希映射)的方法,也就是说,把规模大的数据转化为规模小的,从而各个击破;此外,针对常说的单机及集群问题:单机就是指处理装载数据的机器有限(只要考虑 CPU、 内存、和硬盘之间的数据交互);集群的意思是指机器有
2021-05-22 13:45:19
96
原创 Spring
1 Profileprofile是用来完成不同环境下,配置动态切换功能的;profile配置方式:2.1 多profile文件方式:提供多个配置文件,每个代表一种环境:- application-dev.properties/yml开发环境- application-test.properties/yml测试环境- application-pro.properties/yml生产环境2.2 yml多文档方式:- 在yml中使用 — 分隔不同配置profile激活方式:3.1 配置文件:
2021-05-21 11:06:53
506
1
原创 有效电话号码(shell)
目录1 题目描述2 解题(正则表达式)1 题目描述给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个单行 bash 脚本输出所有有效的电话号码。你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)你也可以假设每行前后没有多余的空格字符。示例:假设 file.txt 内容如下:987-123-4567123 456 7890(123) 456-7890你的脚本应当输出下列有效的
2021-05-16 20:43:28
494
原创 1_Redis初探
目录1 Redis 简介2 Redis 数据结构2.1 STRING(字符串)2.2 LIST(列表)2.3 HASH(散列)2.4 SET(集合)2.5 ZSET(有序集合)3 Redis 与 Memcached3.1 数据类型3.2 数据持久化3.3 分布式3.4 内存管理机制3.5 线程模型1 Redis 简介Redis 是一个速度非常快的非关系型数据库(non-relational database)/ NoSQL 数据库;Redis 不使用表,也不会预定义或者强制去要求用户对 Redis
2021-05-16 15:02:22
215
原创 数据结构与算法
1 Prim算法(求最小生成树)将最小生成树中的顶点作为一个集合,非最小生成树中的顶点作为另外一个集合,利用最小索引优先队列存储所有的横切边;随意选取起点,加入到最小生成树中(标记该顶点),同时初始化最小索引优先队列;调用最小索引优先队列的delMin(),将最小横切边对应的顶点加入最小生成树中(标记该顶点),同时遍历该顶点的邻接表,新增或更新横切边(更新最小索引优先队列);重复3,直到最小索引优先队列为空;2 Kruskal算法(求最小生成树)使用最小优先队列PriorityQueue&
2021-05-14 09:16:34
204
原创 3 死锁
目录1 死锁概念及产生原理2 死锁产生的必要条件3 处理方法3.1 鸵鸟策略3.2 死锁检测与死锁恢复3.2.1 每种类型一个资源的死锁检测3.2.2 每种类型多个资源的死锁检测3.2.3 死锁恢复3.3 死锁预防3.3.1 破坏互斥条件3.3.2 破坏占有和等待条件3.3.3 破坏不可抢占条件3.3.4 破坏循环等待3.4 死锁避免3.4.1 安全状态3.4.2 单个资源的银行家算法3.4.3 多个资源的银行家算法1 死锁概念及产生原理概念:多个并发进程因争夺系统资源而产生相互等待的现象;原理:当一
2021-05-07 15:56:20
287
原创 统计词频(shell)
目录1 题目描述2 解题(Java)1 题目描述写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。为了简单起见,你可以假设:words.txt只包括小写字母和 ’ ’ 。每个单词只由小写字母组成。单词间由一个或多个空格字符分隔。示例:假设 words.txt 内容如下:the day is sunny the thethe sunny is is你的脚本应当输出(以词频降序排列):the 4is 3sunny 2day 1说明:
2021-04-27 11:32:56
503
原创 6 应用层
1 域名系统DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传来保证可靠性。在两种情况下会使用 TCP 进行传输:如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节
2021-04-24 14:51:25
131
原创 5 运输层
目录1 UDP 和 TCP 的特点2 UDP 首部格式3 TCP 首部格式4 TCP 的三次握手5 TCP 的四次挥手6 TCP 可靠传输7 TCP 滑动窗口8 TCP 流量控制9 TCP 拥塞控制10网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。运输层提供了进程间的逻辑通信,运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个运输层实体之间有一条端到端的逻辑通信信道。1 UDP 和 TCP 的特点用户数据报协议 UDP(User Datagram Pro
2021-04-19 21:28:48
154
原创 4 网络层
目录1 概述2 IP 数据报格式3 IP 地址编址方式4 地址解析协议 ARP5 网际控制报文协议 ICMP6 虚拟专用网 VPN7 网络地址转换 NAT8 路由器的结构9 路由器分组转发流程10 路由选择协议111 概述因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务;使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络;与 IP 协议配套使用的还有三个协议:地址解析协议 ARP(
2021-04-19 16:23:38
137
原创 操作系统
目录1 进程和线程的区别1 进程和线程的区别(1拥有资源:进程是资源分配的基本单位,但线程不拥有资源,线程可以访问隶属于进程的资源2调度:线程是独立调度的基本单位,同一进程中,线程的切换不会引起进程切换;但从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换3系统开销:创建或撤销进程时,系统要为之分配或回收资源,如内存空间、I/O设备等,所付出的开销远大于创建或撤销线程时的开销;类似地,在进行进程切换时,涉及当前执行进程CPU环境的保存及新调度进程CPU环境的设置,占用很多开销,而线程切换只需保
2021-04-18 16:43:03
684
原创 MySQL数据库
目录InnoDB和MyISAM的区别试述事务的概念及事务的四个特性。恢复技术能保证事务的哪些特性?并发操作可能会产生哪几类数据不一致?采用什么方法能避免不一致的情况?什么是封锁?基本的封锁类型有几种?试述它们的含义。什么是活锁?试述活锁产生的原因和解决方法。什么是死锁?试给出预防死锁的方法试给出检测死锁的一种方法。当发生死锁后,如何解除死锁?什么样的并发调度是正确的调度?事务不可串行化发生的两种情况两段锁(2PL)协议两段锁协议和防止死锁的一次封锁法的不同实体完整性和参照完整性1/2/3NF外连接/左外连接
2021-04-18 16:42:05
834
原创 计算机网络
目录三次握手和四次挥手为什么不能用两次握手代替三次握手进行连接?为什么释放TCP连接要四次挥手HTTP为什么不用get向服务器上传数据?TCP和UDP一次互联网页面的访问请求过程OSI七层协议TCP/IP四层协议cookie和session三次握手和四次挥手(1三次握手(TCP建立连接过程):1.1客户端A发送建立连接请求报文段1.2服务器B发送确认报文段1.3客户端A发送确认报文段(第3步执行后,A的TCP通知上层应用进程,连接已经建立;当B的TCP收到A的确认后,也通知其上层应用进程,连接已经建立)
2021-04-18 16:40:43
1075
1
原创 JVM
目录JVM的运行机制JVM的构成垃圾收集器JVM的内存区域解析如何确定对象可以被回收常用的垃圾回收算法JVM垃圾回收策略元空间相比永久代的优势运行时常量池Java中的4种引用类型JVM的运行机制(1. JVM是用于运行Java字节码的虚拟机,它运行在操作系统之上,不与硬件设备直接交互;2. Java源文件在通过编译器编译后生成.字节码文件(.class文件),字节码又被JVM中的即时编译器和解释器编译成机器码在不同的平台(Windows、Linux、Mac)上运行;3. Java在不同平台上运行时不需要
2021-04-18 16:39:30
433
1
原创 设计模式
目录简单工厂模式单例模式备忘录模式简单工厂模式(1 创建型模式,在创建对象时不会对客户端暴露创建逻辑,使用一个共同的接口来指向新创建的对象,新创建的对象由一个工厂根据不同条件创建 2 优点:(1)屏蔽产品的具体实现,调用者想创建一个对象,只要知道其名称就可以了;(2)扩展性高,如果想增加一个产品,只要增加一个实体类就可以 3 缺点:使用简单工厂模式会增加系统中类的个数(引入新的工厂类),增加了系统的复杂度 4 应用场景:数据库访问,当用户不确定最后系统采用哪一类数据库时 5 实现:(1)创建一个 Sha
2021-04-18 16:38:07
165
原创 Java多线程
目录Java线程创建的4种方式实现Runnable接口比继承Thread类的优势5种常用的线程池同步机制/异步机制/阻塞调用/非阻塞调用Java中的锁概述乐观锁与悲观锁公平锁与非公平锁独占锁和共享锁活锁与死锁重量级锁和轻量级锁、偏向锁可重入锁自旋锁分段锁synchronizedReentrantLock读写锁并发与并行synchronized和Lock的区别synchronized各种加锁场景的作用范围Thread的状态sleep和wait的区别Java线程创建的4种方式(1 继承Thread类:1.1
2021-04-18 16:36:17
197
原创 Java基础
语言按值传递和按引用传递的区别面向对象的三大特性的理解== 和equals的区别static 关键字的作用Synchronized 用在普通方法和 static 上的区别说说你对索引、存储引擎的理解类的hashcode是什么如果两个对象的hash码相同,equals一定为true吗什么是泛型方法区里存放什么什么是 NIOBIO、NIO、AIO概念和区别线程和进程介绍一下jdk 中线程池的类型线程池的 BlockQueue 的作用实现多线程同步的方式Java怎么保证多线程的安
2021-04-18 16:34:13
379
1
原创 3 数据链路层
1 基本概念1.1 链路一条点到点的物理线路段,中间无任何其他交换节点。1.2 数据链路除了物理线路之外,还要有通信协议来控制这些数据的传输。2 基本问题2.1 封装成帧将网络层传下来的分组添加首部和尾部,用于标记帧的开始和结束。3 信道分类4 信道复用技术5 CSMA/CD 协议6 PPP 协议7 MAC 地址8 局域网9 以太网10 交换机11 虚拟局域网12...
2021-04-17 21:46:22
128
原创 2 物理层
目录1 通信方式2 带通调制1 通信方式根据信息在传输线上的传送方向,分为以下三种通信方式:单工通信:单向传输半双工通信:双向交替传输全双工通信:双向同时传输2 带通调制模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。...
2021-04-15 20:20:28
110
原创 1 概述
目录1 网络的网络2 ISP3 主机之间的通信方式4 电路交换与分组交换5 时延6 计算机网络体系结构7 计算机网络的性能指标1 网络的网络网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。2 ISPISP(Internet Service Provider,互联网服务提供商):可以从互联网管理机构获得很多IP地址,同时拥有通信线路及路由器等联网设备,个人或机构向ISP缴纳一定费用就可以接入互联网;移动、电信等都是有名的ISP;目前的互联网是一种多层次IS
2021-04-15 20:12:48
128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人