java技术圈 为您找到相关结果 83

[转]CS231n课程笔记翻译:反向传播笔记

译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Backprop Note,课程教师Andrej Karpathy授权翻译。本篇教程由杜客翻译完成,堃堃和巩子嘉进行校对修改。译文含公式和代码,建议PC端阅读。 原文连接https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit 原文如下: 简介 目标:本节将帮助读者对反向传播形成直观而专业的理解。反向传播是利用链式法则递归计算表达式的梯度的方法。理解反向传播过程及其精妙之处,对于理解、实现、设计和调试神经网络非常关键。 问题陈述:这节的核心问题是:给定函数f(x) ,其中x是输入数据的向量,需要计算函数f关于x的梯度,也就是▽f(x)。 目标:之所以关注上述问题,是因为在神经...阅读全文

博文 2019-04-03 22:30:53 www.allocmem.com

关于java部分知识点的总结(一)

之前一直使用云笔记写自己遇到的一些体会,最近因为工作需要,准备回头梳理下以前自己学习的知识点,想把以前的记录下载博客里,既方便自己以后查阅,同时也能让自己有一个更深刻的记忆。 Cannot use this in a static context 在一个static代码块或者是static方法中,不能使用this和supper,因为static在jvm加载时就会初始化,而此时this和super可能并不存在。构造器也是隐式的static方法(关于以前记录的言论,但我现在google并没有找不出相应的资料) 延伸:关于static关键字: static修饰成员变量:静态变量,直接通过类名访问 static修饰成员方法:静态方法,直接通过类名访问 static修饰代码块:静态代码块,当JVM加载...阅读全文

博文 2019-04-04 17:44:08 www.allocmem.com

简析hashmap的实现原理

提一下哈希表,看下百科: 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。 简单理解:1.通过某种算法(使用key的hash算法),计算出key的磁盘散列值,优点为速度和易用。 2.hashmap底层实现仍为数组(HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。数组每个元素里存的是链表的表头信息,有了表头就可以遍...阅读全文

博文 2019-04-04 17:46:30 www.allocmem.com

[转]RDB和AOF持久化对比

自:http://www.cnblogs.com/rollenholt/p/3874443.html Redis提供了RDB持久化和AOF持久化,本篇文章中将会对这两种机制进行一些对比 RDB机制的优势和略施 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb(/var/lib/redis)。 可以通过配置(/etc/redis/redis.conf)设置自动做快照持久化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置 save 900 1 #900秒内如果超过1个key被修改,则发起快照保存 save 300 10...阅读全文

博文 2019-04-04 17:46:57 www.allocmem.com

[转]在Java中谈尾递归-

我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所以才会有有意思的东西可写,另外还有我发现把尾递归如果跟JAVA中的GC比对一下,也颇有一些妙处(发现还没有人特地比较过) (不过后来边写边整理思路,写出来又是另一个样子了) 转载请注明:博客园-阁刚广志,地址:http://www.cnblogs.com/bellkosmos/p/5280619.html 一、首先我们讲讲递归 递归的本质是,某个方法中调用了自身。本质还是调用一个方法,只是这个方法正好是自身而已 递归因为是在自身中调用自身,所以会带来以下三个显著特点: 调用的是同一个方法 因为1...阅读全文

博文 2019-04-04 17:50:57 尾递归和垃圾回收的比较

java构造函数以及static关键字

java构造函数以及static关键字 Author anteoy@gmail.com | Posted 2017-01-03 11:41:00 ###关于java构造器 原本无显示编码构造器,则有一个默认的隐式(隐藏的无参构造器),但是,当显示指定了构造器,则这个默认隐式的构造器将不存在,比如此时无法new无参的构造器(除非显示地编写声明无参的构造函数)。如下: “` package com.anteoy.coreJava.constructor; /** Created by zhoudazhuang Date: 17-1-3 Time: 上午10:46 Description : */ public class TestObj { public TestObj(){ } public ...阅读全文

博文 2019-04-04 17:49:08 www.allocmem.com

使用Prometheus监控服务器性能

最近一直在思考如何对线上服务做深度监控。基础的服务可用性监控很简单,定期Ping即可。但是怎样才能监控服务器的一些更加关键的数据呢?比如,每一个API Point的请求次数(QPS),最大响应时间,平均响应时间等。最终我希望实现的效果是有一个Dashboard,我可以清楚地看到各种参数曲线,对服务器的运行情况了然于胸。 绘制Dashboard不难,目前提供数据可视化的工具很多,随便选一个都能满足需要。关键问题是,怎样将整个流程打通? 服务器该以怎样的形式暴露出数据? 数据怎样被收集和存储起来? 存储起来的数据怎样提供给数据可视化工具? 怎样做到足够灵活,可以可视化自己感兴趣的任意数据? Prometheus 像QPS和响应时间这些数据,外部工具是没办法直接拿到的,必须要服务器以某种方式将数据...阅读全文

博文 2019-06-14 15:52:29 CJ Ting's Blog

Java中方法多态以及多接口实现

###关于java中方法多态 通过多子类重写父类或接口实现。 通过同类同方法(方法名相同,参数数量或者类型不同)实现,这里主要注意Java中判断同一方法的标准是方法名和参数,与返回值无关,如下,可简要看着yy(int a) “` package com.anteoy.coreJava.polymorphism; /** Created by zhoudazhuang Date: 17-1-9 Time: 下午9:07 Description :java识别是否为重复冲突函数,依靠的是函数名和参数,与返回值无关,如yy(int a) */ public class Polymorphism { //注释代码编译不通过,即使参数都为空 不允许仅仅只有返回值不同的同名函数 /*String yy(...阅读全文

博文 2019-04-04 17:49:16 www.allocmem.com

关于java部分知识点的总结(三)

之前一直使用云笔记写自己遇到的一些体会,最近因为工作需要,准备回头梳理下以前自己学习的知识点,想把以前的记录下载博客里,既方便自己以后查阅,同时也能让自己有一个更深刻的记忆。 dubbo构成: 2者(服务提供者【无状态】,服务消费者),2中心(服务注册中心,服务监控中心)。 (1) 连通性:连通流程 (2) 健状性:多数部分宕挂了,其余服务部分仍能正常使用 (3) 伸缩性:主要是伸,动态增加机器部署实例 public void ensureCapacity(int minCapacity) { int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) // any size if not default elemen...阅读全文

博文 2019-04-04 17:44:24 www.allocmem.com

自己写Stack 实现栈结构

前言: 栈的应用: 1. 可计算数学后缀表达式 2. 把正常中缀表达式转换为后缀表达式 3. 计算检测编译程序{}等括号符号是否正确,是否存在语法错误 4. 递归中需要实用栈存储方法信息,计算机中函数调用是通过栈(stack)这种数据结构实现,在递归中调用一层函数,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。 正文: java中使用数组实现栈 package com.anteoy.dataStructuresAndAlgorithm.javav2; import java.util.ArrayList; /** * Created by zhoudazhuang on 17-3-1. * Description: */ public class ListGo { public sta...阅读全文

博文 2019-04-04 17:51:06 www.allocmem.com

EOF是什么?

我学习C语言的时候,遇到的一个问题就是EOF。 它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。 比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。 int c; while ((c = fgetc(fp)) != EOF) { putchar (c); } 很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。 但是,后来我发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。 #define EOF (-1) 于是,我就困惑了。 如果EOF是一个特殊字符,那么假定每个文本文件的结尾都有一个...阅读全文

博文 2020-09-26 20:40:42 阮一峰的网络日志

自己写ArraryList GoArrayList

前言: java ArrayList的简易实现,代码中注释比较详尽,通俗易懂。 正文: GoArrayList.java package com.anteoy.dataStructuresAndAlgorithm.javav2.my; import java.util.Iterator; import java.util.NoSuchElementException; /** * Created by zhoudazhuang on 17-3-1. * Description: 简易Arrarylist实现 */ public class GoArrayList implements Iterable { //定义默认容量 private static final int DEF...阅读全文

博文 2019-04-04 17:50:42 www.allocmem.com

我理解的Linux IO模式及select,poll,epoll

前言 本文是在本人查阅部分资料,并综合了众多博客分析后,于此阐述的个人理解。若有错误,欢迎指正。 基本概念 用户空间和内核空间 操作系统核心-内核负责处理用户程序和硬件之间的驱动交互。内核是在用户程序(进程)和硬件之间一个中枢。目地:专门负责用户进程和硬件之间的交互,用户程序必须使用内核才能和计算机底层硬件进行交流。为了保证内核的安全,于是将内存划分开,比如针对linux 4G的内存空间,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。 进程切换 内核操作CPU上运行的进程,比如把正在CPU上运行的A进程切换为B进程,让另外一个进程等待...阅读全文

博文 2019-04-04 17:56:41 www.allocmem.com

golang 内存分析/动态追踪 — 源代码

golang pprof 当你的golang程序在运行过程中消耗了超出你理解的内存时,你就需要搞明白,到底是 程序中哪些代码导致了这些内存消耗。此时golang编译好的程序对你来说是个黑盒,该 如何搞清其中的内存使用呢?幸好golang已经内置了一些机制来帮助我们进行分析和追 踪。 此时,通常我们可以采用golang的pprof来帮助我们分析golang进程的内存使用。 pprof 实例 通常我们采用http api来将pprof信息暴露出来以供分析,我们可以采用net/http/pprof 这个package。下面是一个简单的示例: // pprof 的init函数会将pprof里的一些handler注册到http.DefaultServeMux上 // 当不使用http.DefaultS...阅读全文

博文 2019-05-27 12:00:14 lrita.github.io

Golang网络:核心API实现剖析(一) - Go语言中文网

这一章节我们将详细描述网络关键API的实现,主要包括Listen、Accept、Read、Write等。 另外,为了突出关键流程,我们选择忽略所有的错误。这样可以使得代码看起来更为简单。 而且我们只关注tcp协议实现,udp和unix socket不是我们关心的。Listenfunc Listen(net, laddr string) (Listener, error) { la, err := resolveAddr("listen", net, laddr, noDeadline) ...... switch la := la.toAddr().(type) { case *TCPAddr: l, err = ListenTCP(net, la) case *UnixAddr: .......阅读全文

博文 2019-06-12 18:48:57 Golang中文社区

Golang源码探索(三) GC的实现原理 - q303248153

Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短. 停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服务程序. 这篇文章将通过分析golang的源代码来讲解go中的三色GC的实现原理. 这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现, 运行环境是Ubuntu 16.04 LTS 64bit. 首先会讲解基础概念, 然后讲解分配器, 再讲解收集器的实现. 基础概念 内存结构 go在程序启动时会分配一块虚拟内存地址是连续的内存, 结构如下: 这一块内存分为了3个区域, 在X64上大小分别是512M, 16G和512G, 它们的作用如下: arena a...阅读全文

博文 2019-09-11 17:44:31 博客园

解剖Go语言map底层实现

map是Go语言中基础的数据结构,在日常的使用中经常被用到。但是它底层是如何实现的呢? Golang中map的底层实现是一个散列表,因此实现map的过程实际上就是实现散表的过程。在这个散列表中,主要出现的结构体有两个,一个叫hmap(a header for a go map),一个叫bmap(a bucket for a Go map,通常叫其bucket)。这两种结构的样子分别如下所示:hmap: 图中有很多字段,但是便于理解map的架构,你只需要关心的只有一个,就是标红的字段:buckets数组。Golang的map中用于存储的结构是bucket数组。而bucket(即bmap)的结构是怎样的呢? bucket: 相比于hmap,bucket的结构显得简单一些,标红的字段依然是“核心”...阅读全文

博文 2019-05-16 17:39:25 RyuGou的博客

go-generics/README.md at master · llgoer/go

Permalink Dismiss Join GitHub today GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together. Sign up Branch: master Find file Copy path go-generics/README.md Find file Copy path t2krew 翻译改进 8496cd0 Aug 5, 2019 2 contributors Users who have contributed to this file 459 lines...阅读全文

博文 2019-08-17 09:48:28 generics · GitHub

模式匹配 · 傻瓜函数式编程 · 看云

## 模式匹配 模式匹配并不是什么新功能。而事实上它和函数式编程也没有什么太大的关系。它之所以常常被认为是FP的一个特性,是因为在函数式语言已经支持模式匹配很长一段时间后的今天,指令式语言是还没有这个功能。 还是直接用例子来看看什么是模式匹配吧,这是一个用Java写的Fibonacci函数: ~~~ int fib(int n) { if(n == 0) return 1; if(n == 1) return 1; return fib(n - 2) + fib(n - 1); } ~~~ 再看看用我们基于Java修改过的新语言写出来的Fibonacci函数,这种新语言就支持模式匹配: ~~~ int fib(0) { return 1; } int fib(1) { return 1; }...阅读全文

博文 2019-08-17 10:21:05 www.kancloud.cn

Go语言黑魔法

今天我要教大家一些无用技能,也可以叫它奇技淫巧或者黑魔法。用得好可以提升性能,用得不好就会招来恶魔,嘿嘿。黑魔法导论为了让大家在学习了基础黑魔法之后能有所悟,在必要的时候能创造出本文传授之外的属于自己的魔法,这里需要先给大家打好基础。学习Go语言黑魔法之前,需要先看清Go世界的本质,你才能获得像Neo一样的能力。在Go语言中,Slice本质是什么呢?是一个reflect.SliceHeader结构体和这个结构体中Data字段所指向的内存。String本质是什么呢?是一个reflect.StringHeader结构体和这个结构体所指向的内存。在Go语言中,指针的本质是什么呢?是unsafe.Pointer和uintptr。当你清楚了它们的本质之后,你就可以随意的玩弄它们,嘿嘿嘿。第一式 - 获...阅读全文

博文 2019-09-16 16:41:50 知乎

Redis 高负载下的中断优化

背景2017年年初以来,随着Redis产品的用户量越来越大,接入服务越来越多,再加上美团点评Memcache和Redis两套缓存融合,Redis服务端的总体请求量从年初最开始日访问量百亿次级别上涨到高峰时段的万亿次级别,给运维和架构团队都带来了极大的挑战。原本稳定的环境也因为请求量的上涨带来了很多不稳定的因素,其中一直困扰我们的就是网卡丢包问题。起初线上存在部分Redis节点还在使用千兆网卡的老旧服务器,而缓存服务往往需要承载极高的查询量,并要求毫秒级的响应速度,如此一来千兆网卡很快就出现了瓶颈。经过整治,我们将千兆网卡服务器替换为了万兆网卡服务器,本以为可以高枕无忧,但是没想到,在业务高峰时段,机器也竟然出现了丢包问题,而此时网卡带宽使用还远远没有达到瓶颈。定位网络丢包的原因从异常指标入手...阅读全文

博文 2019-11-11 11:22:54 美团技术团队

LMDB中的mmap、Copy On Write、MVCC深入理解——讲得非常好,常来看看! - bonelee

lmdb创建完env对象,打开时,会做data file和lock file的mmap映射: env->me_lfd = open(lpath, O_RDWR|O_CREAT|MDB_CLOEXEC, mode); void *m = mmap(NULL, rsize, PROT_READ|PROT_WRITE, MAP_SHARED, env->me_lfd, 0); env->me_txns = m; env->me_fd = open(dpath, oflags, mode); env->me_map = mmap(addr, env->me_mapsize, prot, MAP_SHARED, env->me_fd, 0); 其他时刻都直接使用内存指针,通过系统级别的缺页异常获取对应...阅读全文

博文 2020-02-19 20:49:45 博客园

Docker 容器的显示问题及修复-社区博客

众所周知,Docker相比于虚拟机,在隔离性上略显不足,而这个不足的存在使得其在安全等方面可能存在着一些隐患(当然了,蜂巢采用在虚拟机中运行容器等的方法,使得运行在上面的业务绝对安全)。但今天的重点并不是要对这方面的问题进行探讨,本文主要是说明和解决因 Docker隔离性不足所引入的资源显示问题。 这是什么意思呢,请看以下示例(文中示例均基于 Docker 1.12.0): 由上面的示例我们可能会联想到这样的场景:如果我们在一台物理机上为不同用户提供了不同规格的容器作为开发机使用,但是每个用户进入容器却能看到完整的物理机资源,一方面这会让用户很困惑,另一方面又泄露了物理机信息,这对用户来说显得很不友好。 那么为什么会出现这种情况呢? 问题原因 虽然 Docker原生的资源查询接口可以正确地识...阅读全文

博文 2020-04-26 19:20:41 网易云

理解 Go make 和 new 的区别

new 和 make 都可以用来分配空间,初始化类型,但是它们确有不同。 new(T) 返回的是 T 的指针new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值。 123456789p1 := new(int)fmt.Printf("p1 --> %#v \n ", p1) //(*int)(0xc42000e250) fmt.Printf("p1 point to --> %#v \n ", *p1) //0var p2 *inti := 0p2 = &ifmt.Printf("p2 --> %#v \n ", p2) //(*int)(0xc42000e278) fmt.Printf("...阅读全文

博文 2019-05-15 19:18:54 三月沙

CS231n课程笔记翻译:反向传播笔记

译者注:本文[智能单元首发](https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit),译自斯坦福CS231n课程笔记Backprop Note,课程教师Andrej Karpathy授权翻译。本篇教程由杜客翻译完成,堃堃和巩子嘉进行校对修改。译文含公式和代码,建议PC端阅读。 原文连接[https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit](https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit) #### 原文如下: #### 简介 **目标**:本节将帮助读者对反向传播形...阅读全文

TCP、UDP数据包大小的限制_灿哥哥的博客

1、概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。 在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。 我们从下到上分析一下: 1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+...阅读全文

博文 2020-07-01 10:20:08 CSDN博客_udp包最大长度

如何把Go调用C的性能提升10倍? - LinkerLin的个人空间

目前,当Go需要和C/C++代码集成的时候,大家最先想到的肯定是CGO。毕竟是官方的解决方案,而且简单。 但是CGO是非常慢的。因为CGO其实一个桥接器,通过自动生成代码,CGO在保留了C/C++运行时的情况下,搭建了一个桥来沟通C/C++世界和Go的世界。这就意味着,兼容性很好,但是对C的函数的调用,必须先把当前的goroutine挂起,并切换执行栈到当前的线程M的主栈(大小2MB)。如果不做这个操作,那么只能在goroutine的栈上执行C函数调用,可是,goroutine的栈一般都很小,很容易就导致了栈溢出了。 调用C函数的时候,必须切换当前的栈为线程的主栈,这带来了两个比较严重的问题: 线程的栈在Go运行时是比较少的,受到P/M数量的限制,一般可以简单的理解成受到GOMAXPROCS...阅读全文

博文 2020-02-20 11:05:09 OSCHINA

GoLang内存模型

一、前言Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题(Java内存可见性问题可以参考拙作:Java并发编程之美一书)。。当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mutex(互斥锁)、RWMutex(读写锁)或者和sync/atomic中的原子操作。二、Happens Before原则当程序里面只有一个goroutine时候,虽然编译器和CPU由于开启了优化功能可能调整读写操作的顺序,但是这个调整是不会影响程序的执行正确性:a := 1//1 b := 2//2 ...阅读全文

博文 2020-02-20 23:01:56 知乎

梯度提升树(GBDT)原理小结 - 刘建平Pinard

在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ), GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Regression Tree),其实都是指的同一种算法,本文统一简称GBDT。GBDT在BAT大厂中也有广泛的应用,假如要选择3个最重要的机器学习算法的话,个人认为GBDT应该...阅读全文

博文 2020-03-24 11:41:00 博客园

【Spark调优】小表join大表数据倾斜解决方案

【使用场景】 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案。 【解决方案】 小表join大表转为小表broadcast+map大表实现。具体为: 普通的join是会shuffle的,而一旦shuffle,就相当于会将相同key的数据拉取到一个shuffle read task中再进行join,此时就是reduce join,此时如果发生数据倾斜,影响处理性能,而此时恰好一个RDD是比较小的,则可以采用广播小RDD全量数据+map算子来实现与join同样的效果,也就是map join,因为这样不会发生shuffle,也就不会发生数据倾斜。 也就是说,不使用join算子进...阅读全文

博文 2021-05-17 21:18:52 www.shuzhiduo.com

Druid SQL 解析器的解析过程 - beanlam

beanlam 3k Druid SQL 解析器的解析过程 druid 发布于 2017-01-14 这篇文尝试近距离地探究 Druid SQL 解析器如何工作。 Demo 代码 以这份代码为例 /** * * * @author beanlam * @date 2017年1月10日 下午11:06:26 * @version 1.0 * */ public class ParserMain { public static void main(String[] args) { String sql = "select * from user order by id"; // 新建 MySQL Parser SQLStatementParser parser = new MySqlStatem...阅读全文

博文 2020-08-09 20:31:06 SegmentFault 思否

Golang源码探索(三) GC的实现原理

Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短. 停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服务程序. 这篇文章将通过分析golang的源代码来讲解go中的三色GC的实现原理. 这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现, 运行环境是Ubuntu 16.04 LTS 64bit. 首先会讲解基础概念, 然后讲解分配器, 再讲解收集器的实现. 基础概念 内存结构 go在程序启动时会分配一块虚拟内存地址是连续的内存, 结构如下: 这一块内存分为了3个区域, 在X64上大小分别是512M, 16G和512G, 它们的作用如下: arena a...阅读全文

博文 2020-03-09 10:32:49 article.itxueyuan.com

Golang GC核心要点和度量方法

一. Go GC 要点先来回顾一下GC的几个重要的阶段: Mark Prepare - STW做标记阶段的准备工作,需要停止所有正在运行的goroutine(即STW),标记根对象,启用内存屏障,内存屏障有点像内存读写钩子,它用于在后续并发标记的过程中,维护三色标记的完备性(三色不变性),这个过程通常很快,大概在10-30微秒。 Marking - Concurrent标记阶段会将大概25%(gcBackgroundUtilization)的P用于标记对象,逐个扫描所有G的堆栈,执行三色标记,在这个过程中,所有新分配的对象都是黑色,被扫描的G会被暂停,扫描完成后恢复,这部分工作叫后台标记(gcBgMarkWorker)。这会降低系统大概25%的吞吐量,比如MAXPROCS=6,那么GC P期...阅读全文

博文 2020-03-09 10:28:08 wudaijun's blog

实战分析一个运行起来会卡死的Go程序

序言最近一位非常热心的网友建议结合demo来分析一下goroutine的调度器,而且还提供了一个demo代码,于是便有了本文,在此对这位网友表示衷心的感谢!这位网友提供的demo程序可能有的gopher以前见过,已经知道了具体原因,但本文假定我们是第一次遇到这种问题,然后从零开始,通过一步一步的分析和定位,最终找到问题的根源及解决方案。虽然本文不需要太多的背景知识,但最好使用过gdb或delve调试工具,了解汇编语言及函数调用栈当然就更好了。本文我们需要重点了解下面这3个内容。调试工具无法准确显示函数调用栈时如何找到函数调用链;发生GC时,如何STOP THE WORLD;什么时候抢占调度不会起作用以及如何规避。本文的实验环境为AMD64 Linux + go1.12Demo程序及运行现象p...阅读全文

博文 2020-03-09 18:25:15 知乎

x

es 6.3的插件xpack内置了sql, 和NPLChina的elasticsearch-sql插件相比,要少很多实用性的功能,但相比有蛮多性能上的优势。今天看看都有哪些sql优化点。 x-pack sql做的sql优化 PruneDuplicatesInGroupBy: 裁剪重复的group by 字段。以sqlselect * from table group by code,code,这里两次group by都是code,在elasticsearch-sql中,会被group by两次重复计算。xpack-sql做了这个优化,然而是一个没用的优化,因为xpack-sql不支持多字段group by,直接报错。 ReplaceDuplicateAggsWithReferences: 对...阅读全文

博文 2020-05-15 16:31:21 pack sql做的sql优化 | 甲鱼的大数据之旅

当执行kill -9 PID时系统发生了什么

我们时常遇到这样的需求:要杀死一个正在运行运行的进程。这时候可以在终端输入 1 kill -9 (其中9的意思是SIGKILL,完整的linux信号请看这里)之后你再用ps查看进程的时候,会发现那个进程已经被杀掉了。 本文将说明在LINUX系统下,用户在终端输入kill -9 之后,整个系统到底发生了什么,我们将深入到内核代码。一开始我在想这个问题的时候遇到了一些问题,比如进程是怎么知道自己收到信号的?在执行进程工作代码的同时还要不断轮询有没有新到的信号吗?代价也太大了吧?那是不是基于什么异步通知的方案呢?在说明LINUX是怎么做的之前,先解释一点基础的概念。 什么是信号(SIGNAL) 我自己的理解:信号之于进程,就好比中断之于CPU,是一种信息传递的方式。官方的解释...阅读全文

Hive学习之路 (十七)Hive分析窗口函数(五) GROUPING SETS、GROUPING__ID、CUBE和ROLLUP - 扎心了,老铁

概述 GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中,不能累加,而且需要根据不同维度上钻和下钻的指标统计,比如,分小时、天、月的UV数。 数据准备 数据格式 2015-03,2015-03-10,cookie1 2015-03,2015-03-10,cookie5 2015-03,2015-03-12,cookie7 2015-04,2015-04-12,cookie3 2015-04,2015-04-13,cookie2 2015-04,2015-04-13,cookie4 2015-04,2015-04-16,cookie4 2015-03,2015-03-10,cookie2 2015-03,2015-03-10,cook...阅读全文

博文 2020-04-23 10:24:42 博客园

长连接/websocket/SSE等主流服务器推送技术比较

最近做的某个项目有个需求,需要实时提醒client端有线上订单消息。所以保持客户端和服务器端的信息同步是关键要素,对此我们了解了可实现的方式。本文将介绍web常用的几种方式,希望给需要服务器端推送消息的同学在选型上有一点启发。一、推送技术常用的集中实现的实现方式1.1 短连接轮询:前端用定时器,每间隔一段时间发送请求来获取数据是否更新,这种方式可兼容ie和支持高级浏览器。通常采取setInterval或者setTimeout实现。(轮询示意图)通过递归的方法,在获取到数据后每隔一定时间再次发送请求,这样虽然无法保证两次请求间隔为指定时间,但是获取的数据顺序得到保证。 缺点:1、页面会出现‘假死’setTimeout在等到每次EventLoop时,都要判断是否到指定时间,直到时间到再执行函数,...阅读全文

博文 2020-05-15 15:26:05 知乎

TreeMap 实现原理

在用TreeMap之前我们要对TreeMap有个整体的认识。 1、TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合。 TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了NavigableMap接口,它支持一系列的导航方法, TreeMap实现了Cloneable接口,它可以被克隆 TreeMap introduction:A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided a...阅读全文

博文 2021-04-03 14:12:19 juejin.cn

高性能场景下,HashMap的优化使用建议

最近在技术博客中看到一篇关于 HashMap 的优化使用建议,觉得非常有意思,于是转载该篇博文,和大家一起分享技术。 HashMap 在JDK 7 与 JDK8 下的差别顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础。 1.1 获取key的HashCode并二次加工因为对原Key的hashCode质量没信心,怕会存在大量冲突,HashMap进行了二次加工。 JDK7的做法: h ^= (h >>> 20) ^ (h >>> 12);return h ^ (h >>> 7) ^ (h >>> 4); JDK8 因为对自己改造过的哈希大量冲突时的红黑树有信心,所以简单一些,只是把高16位异或下来。 return h ^ (h >>> 16); 所以即使...阅读全文

博文 2021-04-01 20:33:44 Chares's Blog

Go语言实战笔记(五)| Go 切片

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org,第一时间看后续笔记。 切片也是一种数据结构,它和数组非常相似,因为他是围绕动态数组的概念设计的,可以按需自动改变大小,使用这种结构,可以更方便的管理和使用数据集合。 内部实现 切片是基于数组实现的,它的底层是数组,它自己本身非常小,可以理解为对底层数组的抽象。因为机遇数组实现,所以它的底层的内存是连续非配的,效率非常高,还可以通过索引获得数据,可以迭代以及垃圾回收优化的好处。 切片对象非常小,是因为它是只有3个字段的数据结构:一个是指向底层数组的指针,一个是切片的长度,一个是切片的容量。这3个字段,就是Go语言操作底层数组的元数据,有了它们,我们就可以任意的操作切片了。 声明和初始化 切片创建的方式有好几种,我们先...阅读全文

博文 2020-03-11 10:53:47 飞雪无情的博客

JAVA反序列化 - 反射机制

推荐阅读时间:30min 全文字数:1w 前言 真正反序列化漏洞的利用,肯定需要了解java反射原理。因为java反序列化的payload大多与反射机制密切相关。 那么这篇文章就是主要讲述反射机制,算是基础知识。 除了反射机制之外,后续还基于commons-collections链最后的反射机制触发点,进行了详细的反射机制特性的绕过说明。由于它与反射机制密切相关,就放在这边进行统一归纳理解。 可以配合本人的另一篇文章commons-collections食用 java反射机制 在Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。 让jav...阅读全文

博文 2020-06-05 16:55:41 先知社区

Spring AOP基于注解的Around通知

@Around是一种建议类型,可确保方法执行前后的通知可以运行。 以下是@Around通知的语法: 语法 @Pointcut("execution(* com.yiibai.Student.getAge(..))") private void selectGetName(){} @Around("selectGetAge()") public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint){ System.out.println("[aroundAdvice] Around advice"); Object[] args=jp.getArgs(); if(args.length>0){ System.out.print("...阅读全文

博文 2020-04-23 14:23:23 Spring AOP教程™

分布式sql引擎原理分析-逻辑执行计划生成 - 云+社区

不管是传统数据库或者基于sql的分布式大数据分析工具,基本原理都是把一个sql转换成sql语法树(AST),通过对语法树的分析转换成执行计划。传统数据库会根据执行计划通过执行引擎并返回结果;而大数据sql分析工具,由于针对更大数据量而生,为了更好的扩展性、容错性和高可用,会把执行计划分成逻辑执行计划和物理执行计划,并且根据查询sql的特点切分逻辑计划,这样可以把分块的逻辑计划分配到更具扩展性的并行节点,最后根据逻辑执行计划转成物理执行计划进行查询。 本文档以当前流行的分布式大数据查询引擎Presto为切入点,分析一个query语句怎么生成为一个分段的逻辑计划。下图是当前流行大数据sql查询引擎(包括hive/sparksql),生成逻辑计划的过程:SQL引擎生成逻辑计划 从图中可以看到,当用...阅读全文

博文 2020-08-07 14:28:55 腾讯云

Spark入门之DataFrame/DataSet - justcodeit

目录Part I. Gentle Overview of Big Data and SparkOverview1.基本架构2.基本概念3.例子(可跳过)Spark工具箱1.Datasets: Type-Safe Structured APIs2.Structured Streaming3.Machine Learning and Advanced Analytics4.Lower-Level APIsPart II. Structured APIs—DataFrames, SQL, and DatasetsStructured API Overview1.Spark Types2.Structured API ExecutionBasic Structured Operations1.Sch...阅读全文

博文 2021-02-09 14:06:18 博客园

跨域资源共享 CORS 详解

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 本文详细介绍CORS的内部机制。 (图片说明:摄于阿联酋艾因(Al Ain)的绿洲公园) 一、简介 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。 因此,实现CORS通信的关键是服务器。只要服务...阅读全文

博文 2020-05-15 15:14:14 阮一峰的网络日志

Cglib及其基本使用 - 五月的仓颉

前言 最近一直在看Spring源码,其实我之前一直知道AOP的基本实现原理: 如果针对接口做代理默认使用的是JDK自带的Proxy+InvocationHandler 如果针对类做代理使用的是Cglib 即使针对接口做代理,也可以将代理方式配置成走Cglib的 之后要看AOP源码了,Proxy+InvocationHandler这套我已经很熟了,想着如果把Cglib研究研究,应该看AOP源码的时候会更快一些,因此本文就研究一下Cglib是什么、如何一些基本的使用、底层实现原理。 Cglib是什么 Cglib是一个强大的、高性能的代码生成包,它广泛被许多AOP框架使用,为他们提供方法的拦截。下图是我网上找到的一张Cglib与一些框架和语言的关系: 对此图总结一下: 最底层的是字节码Byteco...阅读全文

博文 2021-06-12 22:36:43 博客园

在(分区…在mysql 5.7中)转换rank() | 码农俱乐部 - Golang中国

首先,请注意一些有关原始查询的注意事项: it is not valid SQL; you have an aggregate function in the select clause (max(t.hour)), but no group by clause the order by clause of rank() is not optimized: it starts with columns that are part of the partition by clause, which is unecessary (we already know that all rows in the partition have the same values for these column...阅读全文

博文 2020-09-30 18:45:21 Go语言中文社区