- 博客(47)
- 收藏
- 关注
转载 深入解析 Go 中 Slice 底层实现
转载https://halfrost.com/go_slice/切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。一. 切片和数组关于切片和数组怎么选择?接下来好好讨论讨论这个问题。在 Go 中,与 C 数组变量隐式作为指针使用不.
2021-03-23 15:17:58
324
转载 虚拟网卡 TUN/TAP 驱动程序设计原理
简介虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。tun/tap驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。开
2021-03-08 16:34:47
1980
转载 linux 文件系统
基本概念准备块设备与字符设备 块设备与字符设备都属于物理外设块设备是随机对数据片段进行读写的 字符设备是以顺序对数据片段进行读写的 磁盘、CD-ROM盘、闪存就属于块设备。键盘、串口属于字符设备。扇区与块Sector: 扇区是块设备的最小寻址单元,也就是说,是物理上的最小单元 Block: 块是文件系统进行IO的最小单元,就是说,块是逻辑上的最小单元 由此看来,扇区与块的关系就很清晰了,块一定是扇区整数倍,而且一定要小于内存中一个页的长度。通常扇区的大小是512字节。i
2021-03-08 16:21:13
178
原创 二维数组棋盘中,0是白色,1是黑色,求能相连起来的黑色块的最大面积
//题目:一个二维数组代表一个棋盘,0表示白色,1表示黑色,算出相邻的黑色的最大面积type Node struct { I int J int}var area = make([]int, 0)var BlackM = make(map[string]int, 0)var Black = make([]Node, 0)// 只循环黑色节点,就是说把所有黑色节点的下标存入一个数组和一个map// 循环数组看每个黑色下标能连上的最大黑色节点,map用于判断相邻元素是否为黑色f.
2020-05-22 19:47:48
972
原创 内存有限制的大文件排序
外部排序:一、定义问题 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序 整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然后,对已经排 序的子文件进行多路归并排序。二、处理过程 (1)按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方...
2020-05-20 14:28:37
2145
转载 深入理解CAS原理
1、什么是CAS?CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。2、CAS算法理解对CAS的理解,CAS是一种无锁算法...
2020-04-26 19:10:18
332
转载 垃圾回收算法(计数、标记、复制),golang垃圾回收
Golang GC 发展Golang 从第一个版本以来,GC 一直是大家诟病最多的。但是每一个版本的发布基本都伴随着 GC 的改进。下面列出一些比较重要的改动。 v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier GC 算法简介这一小节介绍三种经典的 GC 算法:...
2020-04-17 17:59:10
606
原创 基于物品 的协同过滤推荐算法(ItemCF)
首先给用户行为定义相应的权重积分算法思路:给用户推荐那些和他们之前喜欢的物品相似的物品实例如下:算法步骤:用户对于商品的权重分数,为用户对商品操作的分数相加。余弦相似度计算计算逻辑,以物品1和物品2为例:根据用户对第一、二商品的操作分数,可以算出两个商品在这三个用户心目中的相似度,用户标本更多则更精准1.0×2+0.36×10+0.93...
2020-04-02 16:51:07
3019
转载 GoLang中的切片扩容机制
切片的容量[5]int 是数组,而 []int 是切片。二者看起来相似,实则是根本上不同的数据结构。切片的数据结构中,包含一个指向数组的指针 array ,当前长度 len ,以及最大容量 cap 。在使用 make([]int, len) 创建切片时,实际上还有第三个可选参数 cap ,也即 make([]int, len, cap) 。在不声明 cap 的情况下,默认 cap=len ...
2020-03-11 17:19:39
1959
转载 Raft算法
一文搞懂Raft算法目录raft算法概览 leader election term 选举过程详解 log replication Replicated state machines 请求完整流程 safety corner case stale leader State Machine Safety leader crash 总结 refe...
2019-12-26 18:58:02
251
1
原创 Redis的Hash实现
一 、Hash1.1 介绍Redis中的字典采用哈希表作为底层实现,一个哈希表有多个节点,每个节点保存一个键值对。在Redis源码文件中,字典的实现代码在dict.c和dict.h文件中。Redis的数据库就是使用字典作为底层实现的,通过key和value的键值对形式,代表了数据库中全部数据。而且,所有对数据库的增、删、查、改的命令,都是建立在对字典的操作上。同时,字典还是Redi...
2019-12-26 15:52:15
1531
转载 java string字符串有长度限制吗?
原文:https://www.jianshu.com/p/4f905b3bc63fString是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西容易被忽略的。就如本文我们要讨论的问题:Java中的String有没有长度限制?这个问题要分两个阶段看,分别是编译期和运行期。不同的时期限制不一样。01 编译...
2019-12-26 15:50:34
3353
原创 TCP三次握手,四次挥手
请画出三次握手和四次挥手的示意图 为什么连接的时候是三次握手? 什么是半连接队列? ISN(Initial Sequence Number)是固定的吗? 三次握手过程中可以携带数据吗? 如果第三次握手丢失了,客户端服务端会如何处理? SYN攻击是什么? 挥手为什么需要四次? 四次挥手释放连接时,等待2MSL的意义?1. 三次握手三次握手(Three-way Handsh...
2019-10-16 11:23:41
178
转载 延时任务队列-单机支持每秒10万延时消息高效触发(环形链表散列)
单机支持每秒10万延时消息高效触发(可部署多台提供更高并发)本文方案是看了58的一位架构师的分享,但并没有实现细节。本文是对方案的深入研究及代码实现业务场景1.下单之后如果三十分钟之内或12小时没有付款就自动取消订单2.下单成功后60s之后给用户发送短信通知3.用户希望通过手机远程遥控家里的智能设备在指定的时间进行工作。这时候就可以将用户指令发送到延时队列,当指令设定的时间...
2019-09-11 19:38:29
1102
转载 Go 性能调优之 —— 编译优化(逃逸分析、内联、死码消除)
编译优化本节介绍Go编译器执行的三个重要优化。逃逸分析 内联 死码消除Go 编译器的历史Go 编译器在2007年左右开始作为 Plan9 编译器工具链的一个分支。当时的编译器与 Aho 和 Ullman 的Dragon Book非常相似。2015年,当时的 Go 1.5 编译器从 C 机械地翻译成 Go。一年后,Go 1.7 引入了一个基于SSA技术的新...
2019-08-22 11:41:13
3125
转载 Golang silence最大容量
前言在《深入理解 Go Slice》中,我们提到了 “根据其类型大小去获取能够申请的最大容量大小” 的处理逻辑。今天我们将更深入地去探究一下,底层到底做了什么东西,涉及什么知识点?Go Slice 对应代码如下:func makeslice(et *_type, len, cap int) slice { maxElements := maxSliceCap(et.size)...
2019-07-17 16:23:25
1011
转载 docker基本原理和操作
什么是dockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc...
2019-03-27 11:45:10
373
转载 使用Golang 程序的性能优化及 Pprof
使用Golang 程序的性能优化及 Pprof程序的性能优化无非就是对程序占用资源的优化。对于服务器而言,最重要的两项资源莫过于 CPU 和内存。性能优化,就是在对于不影响程序数据处理能力的情况下,我们通常要求程序的 CPU 的内存占用尽量低。反过来说,也就是当程序 CPU 和内存占用不变的情况下,尽量地提高程序的数据处理能力或者说是吞吐量。Go 的原生工具链中提供了非常多丰富的工具供开发...
2019-01-02 17:16:13
537
转载 数据库索引和锁
转载:https://www.cnblogs.com/Java3y/p/9356414.html一、索引在之前,我对索引有以下的认知:索引可以加快数据库的检索速度 表经常进行INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度。 索引需要占物理和数据空间。 了解过索引的最左匹配原则 知道索引的分类:聚集索引和非聚集索引...
2018-07-26 19:21:31
437
转载 密码加密原理
为什么要在密码里加点“盐”盐(Salt)在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。以上这句话是维基百科上对于 Salt 的定义,但是仅凭这句话还是很难理解什么叫 Salt,以及它究竟起到什么作用。第一代密码早期的软件系统或者互联网应用,数据库中设计用户表的时候,大致是这样的结构:mysql> desc Use...
2018-06-29 10:55:27
3619
2
原创 堆排序实现百万级数据取若干数量的最大数字(java)
这些天看到了一道题,是一道比较出名的面试题,题目字面上比较简单。 输入若干个float数字(百万级以上) ,编写一个算法从中取出指定数量(100个以内)的最大的数字。 我们先分析一下这道题,从一堆数字里取出几个最大的数,以我们通常的思想去考虑,首先想到的是对这堆数字进行倒序排序,取出前几个就是我们要的结果,这样实现是没错的。可是注意看括号中的注释,输入的数字量级是百...
2018-03-09 12:55:59
4889
转载 hashmap存储实现原理(性能优化)
hashMap用了一个名字为table的数组;还有若干个名字为entry的链表。看hashMap是如何应用这些数据结构的。用插 入<key,value>举例:hashMap首先会通过key得到其hashCode,具体的hash函数就不说了(因为没多大意义);然 后把key的hashCode%table.length,就是拿hashCode模table数组大小,得到的余数就是key所在t...
2018-02-11 18:51:52
791
转载 java中synchronized用法
原文:http://blog.youkuaiyun.com/luoweifu/article/details/46613015 作者:luoweifu 转载请标名出处《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized.
2018-01-30 17:42:10
186
转载 JVM最大线程数
JVM最大创建线程数量由JVM堆内存大小、线程的Stack内存大小、系统最大可创建线程数(Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响。具体如下:-Xms 最小堆内存-Xmx 最大堆内存-Xss 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M操作系
2017-12-16 12:12:15
1111
转载 spring AOP的实现原理(动态代理)
看了很多aop的原理和例子,都解释的太抽象,不容易理解,总结来说spring 的aop主要是靠通知的形式实现的动态代理,在配置文件中配置或者使用注解,在对象使用时加入通用的功能,增加类的功能,下面这篇文章是我看到的众多文章中比较容易理解的一篇,可以参考一下。AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中
2017-12-05 20:42:52
1588
转载 JAVA gc垃圾回收机制
一、GC概要 JVM堆相关知识 为什么先说JVM堆? JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象。这些对象的建立方式就是那些new一类的操作,当对象无用后,是GC来负责这个无用的对象(地球人都知道)。JVM堆 (1) 新域:存储所有新成生的对象 (2) 旧域:新域中的对象,经过了一
2017-11-08 17:27:45
327
转载 mysql大数据高并发处理(优化)
一、数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的。 在一个系统分析、设计阶段,因为数据量较小,负荷较低。我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低
2017-11-01 09:57:53
3910
原创 ansj_seg 学习,自定义词典加载
原文地址http://blog.youkuaiyun.com/bitcarmanlee/article/details/53607776最近需要使用分词搜索,在网上查找了许多,看了很多分词工具的对比,感觉这个还是非常不错的,相比较与ik更适合我们使用1.给ansj来个硬广项目的github地址:https://github.com/NLPchina/ansj_seg 项目的文档
2017-08-22 16:01:55
5570
1
原创 linux设置定时任务
今天在服务器上部署项目的时候,项目中下载文件的代码发生了异常,提示是磁盘空间不足。之后我对磁盘进行了清理,由于我们项目中的下载文件也是定时任务,我总不能经常来清理这个磁盘吧,那太麻烦了,所以我定义了一个linux的定时任务。我们需要用命令开启定时任务的vi编辑器crontab -e在vi编辑器中我们编写定时删除的脚本* * * * * rm -rf /home/down/*
2017-08-16 17:39:09
509
原创 logback异常输出详细信息(调用堆栈)
可能使用logback或者log4j的大家都遇到过这种情况,想要在try catch中输出异常到日志的时候使用了logger.error(e.getMessage());但是这样输出后只有一行简单的异常提示,并没有详细的调用堆栈的信息,所以我们需要定义一个工具类来获取异常详细的调用堆栈。import java.io.IOException;import java.io.PrintWrite
2017-08-15 16:06:51
15931
转载 Stream语法详解
1. Stream初体验我们先来看看Java里面是怎么定义Stream的:A sequence of elements supporting sequential and parallel aggregate operations.我们来解读一下上面的那句话:Stream是元素的集合,这点让Stream看起来用些类似Iterator;可以支持顺序和并行的对原
2017-08-10 16:32:24
432
转载 lambda表达式语法
java8的安装工欲善其器必先利其器,首先安装JDK8。过程省略,大家应该都可以自己搞定。但是有一点这里强调一下(Windows系统):目前我们工作的版本一般是java 6或者java 7,所以很多人安装java8基本都是学习为主。这样就在自己的机器上会存在多版本的JDK。而且大家一般是希望在命令行中执行java命令是基于老版本的jdk。但是在安装完jdk8并且没有设置path的情况下,你
2017-08-10 16:30:04
1683
转载 【Java】jdk8 Optional 的正确姿势
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了Optional user = ......if (user.isPresent()) {return user.getOrders();} else {ret
2017-08-10 14:53:09
477
转载 java数组中的length属性到底属于java中的哪个类
原文地址: http://topic.youkuaiyun.com/u/20070606/15/b77a37ea-5b5b-49d1-8ab4-5968467a4a99.html果子的研究能力真是很强啊!里面几位前辈的底层能力更是值得敬佩。问题:在所有数组中有唯一的一个属性——length,那么这个属性是在Java的哪一个类中的呢?这些数组的这个属性是从哪来的?不明白。答案
2017-08-03 18:43:44
5850
转载 Rhino在java中的用法
引言JavaScript 与浏览器完美配合,使得 JavaScript 成为世界上最流行的语言之一。随着 Web 应用的发展,AJAX 功能实现越来越丰富,JavaScript 也越来越受到人们的关注。新一代浏览器正在不断崛起,HTML5 逐渐成形和发展壮大,JavaScript 也将发挥越来越重要的作用和价值。目前众多的浏览器如 IE8、FireFox4.0 等做出的调整重点基本是针对于
2017-07-08 16:37:53
3337
原创 oracle视图原理以及dml操作视图限制
1 视图的概念oracle视图实际上就是封装sql语句,对外提供一个别名,使用者不需要关心复杂的sql,视图执行之后会将执行的结果当做一个表来使用,相当于一个虚拟的表,如果想在视图上进行DML的操作,在创建时候有两个选项(1)选择项WITH CHECK OPTION表示对视图进行UPDATE INSERT DELETE操作时,要保证操作的数据满足视图定义的谓词条件,也就是视图子
2017-07-07 18:10:10
2922
转载 多线程面试题
1、解释实现多线程的几种方法?一Java线程可以实现Runnable接口或者继承Thread类来实现,当你打算多重继承时,优先选择实现Runnable。 2、Thread.start()与Thread.run()有什么区别?Thread.start()方法(native)启动线程,使之进入就绪状态,当cpu分配时间该线程时,由JVM调度执行run()方法。 3、为什么需要r
2017-07-05 20:43:01
253
转载 RabbitMQ原理及实现
RabbitMQ的官方网站https://www.rabbitmq.com/AMQP(Advanced Message Queuing Protocol),是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。RabbitMQ就是这个协议的实现。RabbitMQ在实现中包含下面几个组件:1.Server(broker): 接
2017-07-01 13:20:21
7798
原创 java简单的人机猜拳小游戏
今天翻以前的代码,偶然看见了自己刚学java的时候写的一个简单的猜拳小游戏,非常基础,不过挺有意思的,也包括了积分制,贴到这里让大家看看package game;public class Computer { static int i; public static int shownum() { i = (int) (Math.random() * 3); return i;
2017-02-20 19:31:58
1522
原创 swing常用类简单学习
这几天公司需要做一个通过opc和modbus协议从设备读取数据的项目,需要做一个小的窗体来对协议进行配置,以前从来没有用过java中的swing类,只是简单的听说过,所以也是一切从头在网上慢慢搜,比较系统的教程不太容易搜到,都是零碎的一点一点的知识点。接下来我就简单总结一下我学习swing 的过程。swing 不需要导入其他的jar包,jdk中直接就有,我最开始学习的时候挺困难的,因为
2017-02-20 18:21:17
1126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人