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

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 02:32:49 article.itxueyuan.com

Go语言黑魔法

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

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

FEL表达式的用法 - QiaoZhi

Fel是开放的,引擎执行中的多个模块都可以扩展或替换。Fel的执行主要是通过函数实现,运算符(+、-等都是Fel函数),所有这些函数都是可以替换的,扩展函数也非常简单。 Fel有双引擎,同时支持解释执行和编译执行。可以根据性能要求选择执行方式。编译执行就是将表达式编译成字节码(生成java代码和编译模块都是可以扩展和替换的) FEL可以进行算数运算以及逻辑运算,也可以调用类的静态方法、非静态方法。 只需要一个jar包: 1. 简单使用 1. 简单计算 private static void calculate() { // 算数运算 FelEngine fel = new FelEngineImpl(); Object result = fel.eval("1.5898*1+75"); Sy...阅读全文

博文 2020-05-15 02:29:00 博客园

Lenky个人站点 » Socket选项系列之TCP_CORK

从上一节的内容可以看到,选项TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去,而选项TCP_CORK与此相反,可以认为它是Nagle算法的进一步增强,即阻塞数据包发送,具体点说就是:TCP_CORK选项的功能类似于在发送数据管道出口处插入一个“塞子”,使得发送数据全部被阻塞,直到取消TCP_CORK选项(即拔去塞子)或被阻塞数据长度已超过MSS才将其发送出去。举个对比示例,比如收到接收端的ACK确认后,Nagle算法可以让当前待发送数据包发送出去,即便它的当前长度仍然不够一个MSS,但选项TCP_CORK则会要求继续等待,这在前面的tcp_nagle_check()函数分析时已提到这一点,即如果包数据长度小于当前MSS &&((加塞 || …)|| …),那么缓存数据而不立即...阅读全文

博文 2021-11-05 07:20:05 www.lenky.info

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 06:12:19 juejin.cn

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 06:23:23 Spring AOP教程™

关于Java中bytes到String的转换

为什么想要写这个,是因为在上周,表格存储的一个客户,告知我们在将数据通过DataX从OTS导出到ODPS后,发现数据『丢失』了。而在调查过后,发现数据并不是所谓的『丢失』了,而是数据被『改变』了。 什么原因导致数据发生了『改变』呢?却是因为一个大部分Java程序员都会忽略的问题导致的,所以我觉得有必要单独拿出来讲讲。 首先看下如下代码: byte[] original1 = new byte[]{(byte)0xef, (byte)0x8f, (byte)0x8f}; byte[] transformed1 = new String(original1).getBytes(); System.out.println(Arrays.toString(original1)); System.ou...阅读全文

博文 2022-03-27 06:14:42 阿里云开发者社区

数据库范式(1NF 2NF 3NF BCNF)详解_Rocky

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。 范式说明 1.1 第一范式(1NF)无重复的列 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 说明:在任何一个关系数据库中,第一范式(...阅读全文

博文 2020-12-23 10:54:55 CSDN博客

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

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

Golang 并发赋值的安全性探讨 - 云+社区

我们知道 Golang 中变量的赋值不是并发安全的,实际情况果真如此吗? 1.什么是并发安全并发安全就是程序在并发情况下执行的结果是正确的。比如对一个变量简单的自增操作count++,在非并发下很好理解,而在并发情况下却容易出现预期之外的结果,这样的代码就是非并发安全的。因为count++其实是分成两步执行的,当分成了两步执行,那么其他协程就可以趁着这个时间间隙作怪。如一下 a b 两个协程同时 count++:count:= 1 a > 读取count : 1 b > 读取count : 1 a > 计算count+1 : 2 b > 计算count+1 : 2 a > 赋值count : 2 b > 赋值count : 2这就会发生明明 a b 协程计算了两次,可结果还是 2。2.str...阅读全文

博文 2021-09-13 07:06:54 腾讯云

Hadoop集群(第6期)_WordCount运行详解 - 虾皮

1、MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。 在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。 在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个...阅读全文

博文 2020-08-31 02:29:33 博客园

Thrift 服务器端的几种工作模式分析 - 云+社区

相关示例代码见:http://download.csdn.net/detail/hjx_1000/8374829 五、 Thrift服务器端几种工作模式分析与总结 Thrift为服务器端提供了多种工作模式,本文中将涉及以下5中工作模式:TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadedSelectorServer,这5中工作模式的详细工作原理如下: 1. TSimpleServer模式 TSimpleServer的工作模式只有一个工作线程,循环监听新请求的到来并完成对请求的处理,它只是在简单的演示时候使用,它的工作方式如图5.1所示: 图5.1 TSimpleServer的工作模式 TSimpleS...阅读全文

博文 2021-05-02 16:54:01 腾讯云

大小端序及socket通信字节序问题_憧憬,思考,奋斗,飞翔

大端小端序概念 讲概念前,先插个小东西,之前搞混高字节、高地址、低字节、低地址这几个概念,之后理解大小端序就费劲了些。故画了下图: 大端序(big-Endian):高字节保存在内存的低地址,低字节保存在内存的高地址。 小端序(little-Endian):高字节保存在内存的高地址,低字节保存在内存的低地址。 概念较抽象,可结合下图来理解: 大小端优缺点 存在即是合理,大端的优点就是小端的缺点,反之亦然。 大端优点:符号位在所表示数据内存的第一个字节,便于快速判断数据的正负和大小。 小端优点:内存的低地址存放数据低字节,大数强制转换小数时效率高,直接丢弃高地址数据即可;cpu在做数值运算时依次从低到高取数运算即可,效率高效。 Socket通信字节序问题 IP/TCP网络传输时采用网络字节序(即...阅读全文

博文 2021-08-30 12:15:30 CSDN博客_socket 大小端

TCP UDP包大小分析

1.关于MTU MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64Bytes最大不能超过1518Bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。 由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bits=6Bytes + SMAC源MAC地址48bits=6Bytes + Type域2Bytes)14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Byte...阅读全文

golang拾遗:为什么我们需要泛型 - apocelipes

从golang诞生起是否应该添加泛型支持就是一个热度未曾消减的议题。泛型的支持者们认为没有泛型的语言是不完整的,而泛型的反对者们则认为接口足以取代泛型,增加泛型只会徒增语言的复杂度。双方各执己见,争执不下,直到官方最终确定泛型是go2的发展路线中的重中之重。 今天我们就来看看为什么我们需要泛型,没有泛型时我们在做什么,泛型会带来哪些影响,泛型能拯救我们吗? 本文索引 没有泛型的世界 暴力穷举 依靠通用引用类型 动态类型语言的特例 动静结合 使用interface模拟泛型 interface会进行严格的类型检查 内置类型何去何从 性能陷阱 复合类型的迷思 最后也是最重要的 泛型带来的影响,以及拯救 彻底从没有泛型的泥沼中解放 泛型的代价 没有泛型的世界 泛型最常见也是最简单的需求就是创建一组操...阅读全文

博文 2021-08-18 06:24:27 博客园

Flink窗口全解析:三种时间窗口、窗口处理函数使用及案例

我写的《Flink原理与实践》已由人民邮电出版社出版,感兴趣的朋友请到电商平台购买,谢谢!微信公号:ilulaoshi 个人网站:https://lulaoshi.info/flink/chapter-time-window/window.html我们经常需要在一个时间窗口维度上对数据进行聚合,窗口是流处理应用中经常需要解决的问题。Flink的窗口算子为我们提供了方便易用的API,我们可以将数据流切分成一个个窗口,对窗口内的数据进行处理。本文将介绍如何在Flink上进行窗口的计算。一个Flink窗口应用的大致骨架结构如下所示:// Keyed Window stream .keyBy(...) <- 按照一个Key进行分组 .window(...) <- 将数据流中的元素分配到相应的窗口中 ...阅读全文

窗口函数--配合over(...)的选项 rows/range between ... preceding and ... following--工作备忘2016/9/30_数据库_Richie's 残酷舞台

说明:在使用over()函数进行统计(尤其是求和,求平均的等)的时候,有时候需要设定一个范围(时间,数值等),因此,oracle提供了窗口函数选项 rows/rang between ... preceding and ... following 分析函数的语法结构一般是:分析函数名(参数) OVER (PARTITION BY子句 ORDER BY子句 ROWS/RANGE子句) 即由以下三部分组成:分析函数名:如sum、max、min、count、avg等聚集函数以及lead、lag行比较函数等;over: 关键字,表示前面的函数是分析函数,不是普通的集合函数;分析子句:over关键字后面挂号内的内容;分析子句又由下面三部分组成:partition by :分组子句,表示分析函数的计算范...阅读全文

博文 2020-04-23 02:26:05 CSDN博客

Python一键转Jar包,Java调用Python新姿势! - 轩辕之风

粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我_),今天这篇文章换换口味,正经的来写写技术文。言归正传,咱们开始吧! 本文结构: - 需求背景 - 进击的 Python - Java 和 Python - 给 Python 加速 - 寻找方向 - Jython? - Python->Native 代码 - 整体思路 - 实际动手 - 自动化 - 关键问题 - import 的问题 - Python GIL 问题 - 测试效果 - 总结 需求背景 进击的 Python 随着人工智能的兴起,Python 这门曾经小众的编程语言可谓是焕发了第二春。 以 tensorflow、pytorch 等为主的机器学习/深度学习的开发框架大行其道,助推了 python 这门曾经以爬虫见长(py...阅读全文

博文 2020-10-27 08:05:48 博客园

入侵JVM? Java Agent原理浅析和实践

在平时的开发中,我们不可避免的会使用到Debug工具,JVM作为一个单独的进程,我们使用的Debug工具可以获取JVM运行时的相关的信息,查看变量值,甚至加入断点控制,还有我们平时使用JDK自带的JMAP、JSTACK等工具,可以在JVM运行时动态的dump内存、查询线程信息,甚至一些第三方的工具,比如说京东内部使用的JEX、pfinder,阿里巴巴的Arthas,优秀的开源的框架skywalking等等,也可以做到这些,那么这些工具究竟是通过什么技术手段来实现对JVM的监控和动态修改呢?本文会进行介绍和简单的原理分析,同时附带一些样例代码来进行分析。从JVMTI说起JVM在设计之初,就考虑到了虚拟机状态的监控、debug、线程和内存分析等功能,在JDK5.0之前,JVM规范就定义了JVMP...阅读全文

博文 2020-07-14 02:26:30 mp.weixin.qq.com

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

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

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

GROUP BY

# GROUP BY # description GROUP BY GROUPING SETS | CUBE | ROLLUP 是对 GROUP BY 子句的扩展,它能够在一个 GROUP BY 子句中实现多个集合的分组的聚合。其结果等价于将多个相应 GROUP BY 子句进行 UNION 操作。 GROUP BY 子句是只含有一个元素的 GROUP BY GROUPING SETS 的特例。 例如,GROUPING SETS 语句: SELECT a, b, SUM( c ) FROM tab1 GROUP BY GROUPING SETS ( (a, b), (a), (b), ( ) ); 其查询结果等价于: SELECT a, b, SUM( c ) FROM tab1 GROUP ...阅读全文

博文 2021-04-17 06:03:08 Apache Doris

CGI编程---简单实例_Gaoy9303的博客

要实现的效果:输入两个数,点击确定后,跳转页面显示二者的和 html代码: CGI1:hello CGI

请在下面填入数A 和 数B,按下确定后,可以获得二数相加的结果
A:<input name="num_a" size="5"/> B:<input name="num_b" size="5"/>
Result:<input name="result" size="10">
<input type="submit" value="OK">

HTML语言...阅读全文

博文 2021-06-14 12:54:16 CSDN博客

Java8中的“菱形继承”问题_潇兮水寒的博客

Java中的“菱形继承”问题 什么是菱形继承Java代码场景一场景二 简单结论解决办法 什么是菱形继承 一张图说明。在C++中允许多继承,D类继承自B、C,而B、C有同一个父类A。那么这个时候调用say方法是否成功?答案是不能,编译器并不能判断这个say来自哪个父类。 #include using namespace std; class A{ public: void say(){ cout<<"Say Hello"<阅读全文

博文 2021-06-11 13:43:50 CSDN博客_java菱形继承

15. 浮点数算法:争议和限制 — Python tutorial 3.6.3 documentation

15. 浮点数算法:争议和限制¶ 浮点数在计算机中表达为二进制(binary)小数。例如:十进制小数: 0.125 是 1/10 + 2/100 + 5/1000 的值,同样二进制小数: 0.001 是 0/2 + 0/4 + 1/8。这两个数值相同。唯一的实质区别是第一个写为十进制小数记法,第二个是二进制。 不幸的是,大多数十进制小数不能完全用二进制小数表示。结果是,一般情况下,你输入的十进制浮点数仅由实际存储在计算机中的近似的二进制浮点数表示。 这个问题更早的时候首先在十进制中发现。考虑小数形式的 1/3 ,你可以来个十进制的近似值。 0.3 或者更进一步的, 0.33 或者更进一步的, 0.333 诸如此类。如果你写多少位,这个结果永远不是精确的 1/3 ,但是可以无限接近 1/3 。...阅读全文

博文 2020-09-29 03:14:22 www.pythondoc.com

【hive】cube和rollup函数 - zzhangyuhang

cube 数据立方体(Data Cube),是多维模型的一个形象的说法.(关于多维模型这里不讲述,在数据仓库设计过程中还挺重要的,有兴趣自行查阅) 立方体其本身只有三维,但多维模型不仅限于三维模型,可以组合更多的维度 为什么叫数据立方体? 一方面是出于更方便地解释和描述,同时也是给思维成像和想象的空间; 另一方面是为了与传统关系型数据库的二维表区别开来 下图为数据立方体的形象图 其实并不用把cube理解得很高大上,只要理解为分别按照不同维度进行聚合. hive中也有cube函数,可以实现多个任意维度的查询 cube(a,b,c)则首先会对(a,b,c)进行group by, 然后依次是(a,b),(a,c),(a),(b,c),(b),(c),最后在对全表进行group by,他会统计所选列...阅读全文

博文 2022-07-08 08:28:34 博客园

JS异步编程之Promise详解和使用总结

前言 Javascript异步编程可以算是JS的难点之一。下面就异步编程方法之一的Promise进行详细介绍和总结。但说到Promise之前,我会简单提一下什么是JS异步和回调函数。 JS异步 JS异步是指在进行某些需要耗时不会立即返回结果的操作时,不会阻塞后面的操作,一旦该耗时的操作完成时,则会通知需要调用其结果的函数来做后续处理。这是一种异步非阻塞的操作,也就是说任务的排列顺序和执行任务是不一致的。 回调函数 和同步操作不同,异步操作即不会立即返回结果的操作(如发起网络请求,下载文件,操作数据库等)。如果我们后续的函数需要之前返回的结果,又怎样使之前的异步操作在其完成时通知到后续函数来执行呢? 通常,我们可以将这个函数先定义,存储在内存中,将其当做参数传入之前的异步操作函数中,等异步操作...阅读全文

博文 2021-08-29 03:14:21 juejin.cn

一次系统调用开销到底有多大?

首先说说系统调用是什么,当你的代码需要做IO操作(open、read、write)、或者是进行内存操作(mmpa、sbrk)、甚至是说要获取一个系统时间(gettimeofday),就需要通过系统调用来和内核进行交互。无论你的用户程序是用什么语言实现的,是php、c、java还是go,只要你是建立在Linux内核之上的,你就绕不开系统调用。图1 系统调用在计算机系统中的位置大家可以通过strace命令来查看到你的程序正在执行哪些系统调用。比如我查看了一个正在生产环境上运行的nginx当前所执行的系统调用,如下:# strace -p 28927 Process 28927 attached epoll_wait(6, {{EPOLLIN, {u32=96829456, u64=1403123...阅读全文

博文 2020-06-10 07:12:06 知乎

Linux 下各个目录的作用及内容 - JackyTang

在 Linux 下,我们看到的是文件夹(目录): 在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了Linux界命名混乱的局面。 无论何种版本的 Linux 发行版,桌面、应用是 Linux 的外衣,文件组织、目录结构才是Linux的内心。 FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式...阅读全文

博文 2020-07-13 15:26:10 博客园

deleted

Flink是下一代大数据计算平台,可处理流计算和批量计算。《Flink-1.9流计算开发:十三、min、minBy、max、maxBy函数》cosmozhu写的本系列文章的第十三篇。通过简单的DEMO来演示min、minBy、max、maxBy函数执行的效果 。需求本篇文章我们来区分min(max)与minBy(maxBy)之间的区别,下面案例是每10秒计算一次最近1分钟的最小值订单。解决方案 public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); ...阅读全文

博文 2021-10-11 11:48:10 腾讯云

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

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

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

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

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

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

JAVA8 之 Lambda 表达式与方法引用(二) - 当年明月123

在上一章我们介绍了函数式编程的概念和函数式接口。Lambda 表达式就是函数式编程的具体体现,它需要借助函数式接口才能应用在 Java 语言中。 定义 在编程语言中,lambda 表达式是一种用于指定匿名函数或者闭包的运算符。Lambda 可以很清晰地表达一个匿名函数,可以被传递。有了 Lambda 表达式之后,Lambda 表达式为 Java 添加了缺失的函数式编程特性,使我们能将函数当作一等公民看待。 在将函数作为一等公民的语言中,Lambda 表达式的类型是函数。但在 Java 中,Lambda 表达式是对象,他们必须依附于一类特别的对象类型-函数式接口,因为 Java 要保持向后兼容。 Java 的 Lambda 表达式是一种匿名函数,它是没有声明的方法,即没有访问修饰符,返回值声明...阅读全文

博文 2020-06-09 10:50:30 博客园

由阿里巴巴Java开发规约HashMap条目引发的故事-云栖社区

大热的《阿里巴巴Java开发规约》中有提到: 【推荐】集合初始化时,指定集合初始值大小。说明:HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可: public HashMap (int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); } 看到代码规约这一条的时候,我觉得是不是有点太 low 了,身为开发,大家都知道 HashMap 的原理。 什么?这个要通过插件监测?没必要吧,哪个开发不知道默认大小,何时 resize 啊,然后我和孤尽打赌随机咨询几位同学以下几个问题: HashMap 默认bucket数组多大? 如果new HashMap<>(19),bucket数组...阅读全文

博文 2020-07-14 09:57:56 阿里云

深入理解JDK动态代理机制

深入理解JDK动态代理机制本文是基于jdk1.8来对动态代理的底层机制进行探究的 Java中代理的实现一般分为三种:JDK静态代理、JDK动态代理以及CGLIB动态代理。在Spring的AOP实现中,主要应用了JDK动态代理以及CGLIB动态代理。但是本文着重介绍JDK动态代理机制,CGLIB动态代理后面会接着探究。 代理一般实现的模式为JDK静态代理:创建一个接口,然后创建被代理的类实现该接口并且实现该接口中的抽象方法。之后再创建一个代理类,同时使其也实现这个接口。在代理类中持有一个被代理对象的引用,而后在代理类方法中调用该对象的方法。 其实就是代理类为被代理类预处理消息、过滤消息并在此之后将消息转发给被代理类,之后还能进行消息的后置处理。代理类和被代理类通常会存在关联关系(即上面提到的持...阅读全文

博文 2021-06-12 14:15:56 简书

深入剖析Linux IO原理和几种零拷贝机制的实现

前言零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现零拷贝用到的最主要技术是 DMA 数据传输技术和内存区域映射技术。零拷贝机制可以减少数据在内核缓冲区和用户进程缓冲区之间反复的 I/O 拷贝操作。零拷贝机制可以减少用户进程地址空间和内核地址空间之间因为上下文切换而带来的 CPU 开销。正文1. 物理内存和虚拟内存由于操作系统的进程与进程之间是共享 CPU 和内存资源的,因此需要一套完善的内存管理机制防止进程之间内存泄漏的问题。为了更...阅读全文

博文 2021-08-17 04:10:56 知乎

[白话解析] Flink的Watermark机制 - 罗西的思考

[白话解析] Flink的Watermark机制 0x00 摘要 对于Flink来说,Watermark是个很难绕过去的概念。本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark概念。 0x01 问题 关于Watermark,很容易产生几个问题 Flink 流处理应用中,常见的处理需求/应对方案是什么? Watermark究竟应该翻译成水印还是水位线? Watermark本质是什么? Watermark是如何解决问题? 下面我们就来简要解答这些问题以给大家一个大致概念,在后文中,会再深入描述。 问题1. Flink 流处理应用中常见的需求/方案是什么 聚合类的处理 Flink可以每来一个消息就处理一次,但是有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户...阅读全文

博文 2022-05-09 09:31:25 博客园

hive中的lateral view 与 explode函数的使用_guodong2k的博客

explode与lateral view在关系型数据库中本身是不该出现的,因为他的出现本身就是在操作不满足第一范式的数据(每个属性都不可再分), 本身已经违背了数据库的设计原理(不论是业务系统还是数据仓库系统),不过大数据技术普及后,很多类似pv,uv的数据,在业务系统中是存贮在非关系型数据库中, 用json存储的概率比较大,直接导入hive为基础的数仓系统中,就需要经过ETL过程解析这类数据,explode与lateral view在这种场景下大显身手。 explode作用是处理map结构的字段,使用案例如下(hive自带map,struct,array字段类型,但是需要先定义好泛型,所以在此案例不使用): 建表语句: drop table explode_lateral_view; cr...阅读全文

博文 2022-08-04 06:32:34 CSDN博客_hive lateral

Hive中的explode使用全解

本节主要介绍explode和posexplode函数的使用。1、数据介绍 主要包括三列,分别是班级、姓名以及成绩,数据表名是default.classinfo。2、单列Explode 首先来看下最基本的,我们如何把student这一列中的数据由一行变成多行。这里需要使用split和explode,并结合lateral view实现。代码如下:select class,student_name from default.classinfo lateral view explode(split(student,',')) t as student_name 结果如下:3、单列Posexplode 接下来,我们想要给每个同学来一个编号,假设编号就按姓名的顺序,此时我们要用到另一个hive函数,叫做...阅读全文

博文 2022-03-27 05:57:59 知乎

统计去重后的数量 | Elasticsearch: 权威指南

速度优化edit 如果想要获得唯一值的数目, 通常 需要查询整个数据集合(或几乎所有数据)。 所有基于所有数据的操作都必须迅速,原因是显然的。 HyperLogLog 的速度已经很快了,它只是简单的对数据做哈希以及一些位操作。 但如果速度对我们至关重要,可以做进一步的优化。 因为 HLL 只需要字段内容的哈希值,我们可以在索引时就预先计算好。 就能在查询时跳过哈希计算然后将哈希值从 fielddata 直接加载出来。 预先计算哈希值只对内容很长或者基数很高的字段有用,计算这些字段的哈希值的消耗在查询时是无法忽略的。 尽管数值字段的哈希计算是非常快速的,存储它们的原始值通常需要同样(或更少)的内存空间。这对低基数的字符串字段同样适用,Elasticsearch 的内部优化能够保证每个唯一值只计...阅读全文

博文 2022-03-23 12:53:58 Elastic

spring扩展点之一:BeanFactoryPostProcessor和BeanPostProcessor - duanxz

2、BeanPostProcessors接口 public interface BeanPostProcessor { /** * Apply this BeanPostProcessor to the given new bean instance before any bean * initialization callbacks (like InitializingBean's {@code afterPropertiesSet} * or a custom init-method). The bean will already be populated with property values. */ //实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化...阅读全文

博文 2022-04-28 09:19:49 博客园

Hive典型应用场景之行列转换_小飞鱼_bigdata的博客

在使用Hive处理数据时,经常遇到行列转换的场景,本文将对Hive的行列转换操作做详细的说明。 行转列## 1)多行转多列 假设数据表 row2col: col1 col2 col3 a c 1 a d 2 a e 3 b c 4 b d 5 b e 6 现在要将其转化为: col1 c d e a 1 2 3 b 4 5 6 此时需要使用到max(case … when … then … else 0 end),仅限于转化的字段为数值类型,且为正值的情况。 HQL语句为: select col1, max(case col2 when 'c' then col3 else 0 end) as c, max(case col2 when 'd' then col3 else 0 end) a...阅读全文

博文 2022-03-27 05:58:44 CSDN博客_hive 行列互换

如何看异常堆栈信息 - ismallboy

​ 接口在线上服务器出现异常的时候,我们第一时间就是去服务器看下log,检查log是否有异常堆栈信息,如果有异常堆栈信息的话,再结合api的access log,是非常容易找出问题所在的,所以我们要学会看异常堆栈信息。异常堆栈信息如何看呢?下面我们一起来看一下。 下面是一个简单的demo: package person.ismallboy.console; ​ import java.io.IOException; ​ public class TestEx { private void fun1() throws IOException { throw new IOException("level 1 exception"); } ​ private void fun2() throws ...阅读全文

博文 2022-03-23 12:54:29 博客园

在Java中谈尾递归--尾递归和垃圾回收的比较 - 赛艇队长

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

博文 2022-07-27 06:09:23 博客园

CEP引擎Esper在入侵检测系统中的实践

目录 1、名词2、CEP引擎离线引擎实时引擎Esper:Fink CEP:Siddhi:3、逻辑架构图4、数据流图5、关于Storm中的数据分组6、实时Sigma引擎7、Esper规则模板8、Case Study9、结尾 1、名词 CEP(Complex Event Processing):复杂事件处理、复合事件处理 EPL(Event Processing Language):SQL-LIKE的事件处理语言,用于描述CEP任务 2、CEP引擎 离线引擎 待补充。 实时引擎 Esper: 优点:更新活跃,轻量级嵌入式引擎,规则验证方便,本地导入包后,即可运行。官方提供的文档和case study很全面,支持标准SQL语法,唯一编译型CEP引擎,吞吐量很大单机600W/S。 缺点:分布式需要自...阅读全文

博文 2022-12-22 01:38:33 Wayne's Blog

【原创】JVM系列03 | Java栈—方法是如何调用的? - 云+社区

本文是何适 JVM 修仙系列第 3 篇,文末有本系列文章汇总。上一篇介绍 Java 虚拟机结构时讲到 Java 栈同 Java 方法的调用密切相关,那么这篇就来探究下 Java 栈到底和方法的调用有什么关系。Java 栈分如下几部分介绍:栈帧局部变量表操作数栈帧数据1. 栈帧 线程被创建的时候 Java 栈被创建,Java 栈中保存着栈帧。线程中方法被调用时,对应着一个栈帧被压入 Java 栈;方法返回时,对应的栈帧从 Java 栈中弹出;方法中抛出异常时,对应的栈帧也会将栈帧弹出。举例说明:方法 1 中调用方法 2,方法 2 中调用方法 3,方法 3 中调用方法 4,当执行到方法 4 时,栈内存结构如下图:举例模拟栈溢出:因为每次方法调用都会生成一个栈帧,当函数调用数量很大,生成的栈帧内存...阅读全文

博文 2022-03-23 12:54:54 腾讯云

再聊 TCP backlog

这篇文章我们以 backlog 参数来深入研究一下建连的过程。通过阅读这篇文章,你会了解到下面这些知识: backlog、半连接队列、全连接队列是什么 linux 内核是如何计算半连接队列、全连接队列的 为什么只修改系统的 somaxconn 和 tcp_max_syn_backlog 对最终的队列大小不起作用 如何使用 systemtap 探针获取当前系统的半连接、全连接队列信息 iprouter 库中的 ss 工具的原理是什么 如何快速模拟半连接队列溢出,全连接队列溢出 注:本文中的代码和测试均在内核版本 3.10.0-514.16.1.el7.x86_64 下进行。 半连接队列、全连接队列基本概念 为了理解 backlog,我们需要了解 listen 和 accept 函数背后的发生了...阅读全文

博文 2022-11-02 09:14:44 HeapDump性能社区

SQL中的行转列和列转行 - 腾讯云开发者社区

导读SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。 给定如下模拟数据集,这也是SQL领域经典的学生成绩表问题。两张期望的数据表分别如下:1)长表:scoreLong2)宽表:scoreWide考察的问题就是通过SQL语句实现在这两种形态间转换,其中长表转为宽表即行转列,宽表转为长表即列转行。 01 行转列:sum+if在行转列中,经典的解决方案是条件聚合,即sum+if组合。其基本的思路是这样的:在长表的数据组织结构中,同一uid对应了多行,即每门课程一条记录,对应一组分数,而在宽表中需...阅读全文

博文 2022-07-08 08:56:53 腾讯云

IO设计模式:Actor、Reactor、Proactor - _raindrop

先看看io模型 先介绍两种高性能服务器模型Reactor、Proactor Reactor模型: 1 向事件分发器注册事件回调 2 事件发生 4 事件分发器调用之前注册的函数 4 在回调函数中读取数据,对数据进行后续处理 Reactor模型实例:libevent,Redis、ACE Proactor模型: 1 向事件分发器注册事件回调 2 事件发生 3 操作系统读取数据,并放入应用缓冲区,然后通知事件分发器 4 事件分发器调用之前注册的函数 5 在回调函数中对数据进行后续处理 Preactor模型实例:ASIO reactor和proactor的主要区别: 主动和被动 以主动写为例: Reactor将handle放到select(),等待可写就绪,然后调用write()写入数据;写完处理后续...阅读全文

博文 2023-02-02 04:00:37 博客园