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

antlr4 + spark sql对业务sql进行解析

antlr4 + spark sql对业务sql进行解析通过Spark Sql实现SQL解析 在大数据平台开发过程中,会遇到血缘分析,对SQL解析并进行权限的鉴权,需要提前对SQL进行基本语法校验,这些场景都需要对SQL进行解析。 常用的sql解析工具 阿里 Druid:支持的数据库类型不少,但是解析时需要制定数据库类型,并且在使用中,对hive的语法解析版本比较老,兼容性不太好 2.Hive原生sql解析:由于在大数据平台进行业务开发时,开发人员写的SQL并一定是完全符合hive规范的,因为在运行时是先通过spark进行解析的,所以也并不能完全满足需要 3.General SQL Parser(未测试)这款工具在解析的时候也是需要指定数据库 最后通过调研之后,决定还是采用spark原生的s...阅读全文

博文 2020-08-09 14:48:10 简书

Java8中lambda表达式无法抛出受检异常的问题

Java8中lambda表达式无法抛出受检异常的问题 问题提出 昨天写代码的时候遇到了一个需要在Java8流中抛出异常的问题,结果一直编译报错,先看下代码: //编译通过 Stream.of("a", "b", "c").forEach(str -> { throw new RuntimeException(); }); //编译失败 Stream.of("a", "b", "c").forEach(str -> { throw new IOException(); }); 把异常catch住处理的场景就不说了,这里要讨论的是如果希望把异常向上抛的时候该怎么做? 问题分析 从上面的代码片段可以看出,RuntimeException是可以编译通过的,而IOException不行,因此先看下Ja...阅读全文

博文 2020-04-17 08:21:36 简书

git submodule以及被忽略的.gitignore

###引言: 不积跬步,无以至千里;不积小流,无以成江海。原本自以为对git相关的东西以及原理已经有了不错的认识和理解,然而当碰到一个小小的problem才发现自己掌握得并没有自己想象的那么好,好记性不如烂笔头,于是决定把自己对.gitignore以及submodule的部分理解简单记录下来,由于个人能力有限,如有不当之处,欢迎指正。 ###git submodule git submodule在项目中虽一直在使用(用于维护自有公共类库),不过对此知之甚少,于是抽空做一个小小的总结。可运行git submodule –help获取帮助doc。 目地:多项目维护共用公共类库starjazz 步骤: ####在项目中初始化submodule 1. 在即将引用的项目中初始化此git submodu...阅读全文

博文 2019-04-04 09:54:22 www.allocmem.com

关于HTTP的Content-Length与Chunk编码方式_YotWei-CSDN博客_content

最近在学习netty,里面提到了一个TCP拆包粘包的问题,查阅资料了解到了几种解决的办法,例如 使用特殊分隔符 定长数据帧以及 自定义消息头+消息体,在消息头中定义数据包的长度 关于最后一种实现手段,最典型的代表就是我们常见的HTTP协议。 关于Content-Length Content-Length是HTTP头部的一个字段,用于表示HTTP的body数据的长度。但是在HTTP 1.0的时候,Content-Length字段可有可无,因为HTTP 1.0的每一个网络请求都是短连接,在发起TCP三次握手后,服务端返回数据,随后四次挥手,这个连接在HTTP请求结束后会立即关闭,浏览器在读到EOF(-1)的时候就可以认为数据传输完毕。下面用一个Java程序验证一下 public class Ht...阅读全文

博文 2020-06-29 12:06:32 length chunk

git本地版本落后仓库几个版本pull冲突相关

git中本地落后仓库几个版本pull冲突,但是自己又不想提交本地的代码到远程仓库,可以尝试使用下面的方法: 一种是使用git fetch,但是自己这个用得少 另外就是使用git pull git pull = git fetch + git merch 解决冲突时利用git stash 把本地代码保存起来 1.git pull origin master 报错:有冲突 不能拉取下来(本地和远程在同地方都有改动 ) 来自 https://git.coding.net/zhoudafu/ISM_D * branch master -> FETCH_HEAD 更新 ac5fccd..170cf6f error: The following untracked working tree files ...阅读全文

博文 2019-04-04 09:44:44 www.allocmem.com

java golang tcp socket导致线上服务器出现大量close_wait的完整示例

tcp断开连接的四次挥手 先说说tcp的四次挥手,这里假定A端为主动发起关闭端,B端为被动接收关闭请求端。A把tcp的数据包中标识位FIN置为1,seq为一个随机数,发送这个包给B端,自己进入FIN_WAIT_1状态;B端收到了马上给A端回复ack(A端收到ack进入FIN_WAIT_2状态),然后自己进入CLOSE_WAIT状态。然后这个时候需要业务代码处理,把自己需要发给客户端的数据发送完,然后业务代码主动调用相应语言库函数提供的close函数,来触发关闭操作:给A端发送FIN seq的数据包,这是第三次握手。这个时候自己进入last ack状态。 A端此时收到包然后给B端口发送相应ack.A端自己此时进入time_wait状态。 B端收到ack后从last_ack就顺利进入close状...阅读全文

博文 2019-05-21 03:53:37 www.allocmem.com

算法之时间复杂度简析

算法之时间复杂度简析 前言 最近准备对算法进行一些系统的总结和学习,不积跬步无以至千里,不积小流无以成江海.此文主要对时间复杂度进行简单梳理和个人总结,本人才疏学浅,有所疏漏在所难免,如有不当和错误之处,欢迎指正 时间复杂度的定义(Time Complexity) 时间复杂度,用简单地话描述为:为了大概估算程序运算时间的一种概量。那用什么来估算的呢?用简单的程序执行代码的次数,如int a = 3执行一次,一个n此的for循环表示执行n次等等。广义的T(n)表示在一个完全理想状态的计算机中程序所执行的实际指令次数,下面会提到的O(n)大O(Big Oh),Ω(omega),Θ(Theta) 都是对T(n)的一个大略估算抽象而来,这里先说明一下个人理解的精确度大小为:T(n)>Θ(Theta)...阅读全文

博文 2019-04-04 09:53:07 www.allocmem.com

GO语言中封装,继承,和多态

##封装 go中的封装和java的不太一样,在go里面是没有java中的class,不过可以把struct看成一个类,封装可以简单地看作对struct的封装,如下 type obj1 struct { valte1 string } type obj2 struct { valte2 string } ##继承 把struct看做类,struct中可以包含其他的struct,继承内部struct的方法和变量,同时可以重写,代码如下 package main import "fmt" type oo struct { inner ss1 string ss2 int ss3 bool } type inner struct { ss4 string } func (i *inner) test...阅读全文

博文 2019-04-04 09:49:29 www.allocmem.com

git branch

###从git拉取指定分支 1. 先clone下来 git clone https://git.coding.net/zhoudafu/gblog.git 2. 增加远程仓库(此步可省略,若添加远层仓库可参考) git remote add origin https://git.coding.net/zhoudafu/gblog.git 3. fetch下分支代码 git fetch origin coding-pages 4. 使用checkout切换分支 git checkout -b coding-pages origin/coding-pages 分支 gh-pages 设置为跟踪来自 origin 的远程分支 coding-pages。切换到一个新分支 'coding-pages'...阅读全文

博文 2019-04-04 09:43:11 www.allocmem.com

[转]maven pom.xml 主要标签说明

Maven 构件工程的属性文件 本文转载自:https://my.oschina.net/u/1187481/blog/204865 自己再增加了一些东西,以供学习查阅之用,不对之处,欢迎大家不吝赐教 pom.xml文件(实践用): 4.0.0 asia.banseon banseon-maven2 jar 1.0-SNAPSHOT banseon-maven http://www.baidu.com/banseon A maven project to study maven. HELLO WORLD banseon banseon@126.com Project Manager Architect demo http://hi.baidu.com/banseon No -5 Demo b...阅读全文

博文 2019-04-04 09:47:18 www.allocmem.com

[转]红黑树(一)之 原理和算法详细介绍

文作者:Sky Wang 于 2013-08-08 概述:R-B Tree,又称为“红黑树”。本文参考了《算法导论》中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明。本文的主要内容包括:红黑树的特性,红黑树的时间复杂度和它的证明,红黑树的左旋、右旋、插入、删除等操作。 请尊重版权,转载注明出处:http://www.cnblogs.com/skywang12345/p/3245399.html 本文属转载文章,博主已尽可能完好地保持原文可读性与清晰性,若阅读不够顺畅或想了解更多,请跳转至原文链接查看.感谢原作者的归纳总结. 概要 目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添...阅读全文

博文 2019-04-04 09:54:30 www.allocmem.com

关于java基础点的一些随笔

最近回头来啃一些java的基础知识,在此记录下个人的收获和理解。 1.关于位运算符的异或,简单的说就是在或||运算符的同时为1,1的时候,其结果为0,其他和或运算符的计算结果完全一致,这里写了下利用异或来达到,在不利用第三个变量的基础上,交换两个变量的值。 /** * Created by yan.chou on 16-7-18. * 不使用第三个变量实现两变量互换 */ public class Java3 { public static void main(String[] args) { int a = 0; int b = 10; a = b - a; b = b - a;//利用差值计算 a = b + a; // System.err.printf("%d,%d",a,b); y...阅读全文

博文 2019-04-04 09:43:50 www.allocmem.com

java collection Iterator的remove()方法

事情是这样的,今天在项目里用spring data jpa hibernate的SearchFilter返回一个List<Object>的时候,由于需求需要,必须再使用一定条件过滤部分元素,开始想iterator.remove()方法三下五除二就能解决,结果就悲剧了,前前后后搞了近一小时。下面上代码,同时记录一下: Specification specification = DynamicSpecifications.bySearchFilter(Lawyer.class, set); List lawyerList =lawyerService.findByExample(specification, page); 一开始使用 Iterator阅读全文

博文 2019-04-04 09:46:05 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 09:44:08 www.allocmem.com

[转]Java中使用OpenSSL生成的RSA公私钥进行数据加解密

本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。 RSA是什么:RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。目前该加密方式广泛用于网上银行、数字签名等场合。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 Op...阅读全文

博文 2019-04-04 09:49:51 www.allocmem.com

IntelliJ IDEA 常用快捷键 之 Mac 版_开发工具_CG国斌的博客

IntelliJ IDEA设置代码补全快捷键 01-14 阅读数 4067 由于IDEA原本的代码自动提示快捷键可能会跟输入法的快捷键冲突,所以更改首先File->Settings再将设置代码自动提示的快捷键设置为alt+/即可... 博文 来自: a549654065的博客 idea补全代码快捷键 09-17 阅读数 1432 两种方案:一:newString().var;回车即可;二:newString();ctrl+alt+v即可; 博文 来自: 乔治大哥的博客 IntelliJ IDEA For Mac 快捷键 03-09 阅读数 384 建议将 Mac 系统中与 IntelliJ IDEA 冲突的快捷键取消或更改,不建议改 IntelliJ IDEA 的默认快捷键。http:...阅读全文

博文 2020-04-09 13:05:38 CSDN博客

[转]静态方法加锁,和非静态方法加锁区别

文地址:http://greemranqq.iteye.com/blog/1974143 今天看了到有意思的题:在静态方法上加锁 和 非静态方法加锁 有什么区别,从而再次引出锁机制的一些理解。 先看方法: // 这是一个很简单的类,里面共享静态变量 num,然后一个静态 和 非静态方法,都加上锁 // 我们假设有两个线程同时操作这两个方法,那么数据能互斥吗? Java代码 public class Walk { public static int num = 100; public static Walk walk = new Walk(); // 静态 public synchronized static int run(){ int i = 0; while (i < 10) { try...阅读全文

博文 2019-04-04 09:46:49 www.allocmem.com

[转]Java中的事务——JDBC事务和JTA事务

本文转载自http://www.hollischuang.com/archives/1658 Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。 常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。所以本文暂不讨论容器事务。本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务。 JDBC事务 JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理。在JDBC中,常用的和事务相关的方法是: setAutoCommit、commit、rollback等。 Java_j...阅读全文

博文 2019-04-04 09:46:22 www.allocmem.com

[转]更新GitHub上自己 Fork 的代码与原作者的项目进度一致

本文转载自(原文地址不详):http://blog.csdn.net/peterwanghao/article/details/49762479 在GitHub上我们会去fork别人的一个项目,这就在自己的Github上生成了一个与原作者项目互不影响的副本,自己可以将自己Github上的这个项目再clone到本地进行修改,修改后再push,只有自己Github上的项目会发生改变,而原作者项目并不会受影响,避免了原作者项目被污染。但经过一段时间, 有可能作者原来的代码变化很大, 你想接着在他最新的代码上修改, 这时你需要合并原作者的最新代码过来, 让你的项目变成最新的。 1、先克隆项目到本地: git clone https://github.com/iakuf/mojo cd mojo 2、...阅读全文

博文 2019-04-04 09:48:44 www.allocmem.com

Java快速排序的具体实现

最开始写快速排序花了不少时间,其实关于排序算法,最重要的是首先你要理解,各种排序算法的原理是什么,当你理解了具体的实现原理再来写程序的时候你就会觉得很轻松了。不多说,直接上代码: package Algorithm.sort; /** * 快速排序的实现 * @author zhoudafu * */ public class QuickSort { public void quickSort(int[] a,int low,int high){ int i = low; int j = high; int key = a[low]; //分治递归结束判断 if(i == j){ return; } while(true){ while(i阅读全文

博文 2019-04-04 09:44:33 www.allocmem.com

自己写GoBinaryHead 二叉堆binaryheap实现优先队列(堆)

##前言: java GoBinaryHead二叉堆binaryheap实现优先队列(堆) 1. 二叉堆是完全二叉树 因为完全二叉数的规律(root始终最小) 用数组实现此数据结构优于链表 2. ,注意在插入和删除时,需要在数组实现的完全二叉树结构代码中,对原有节点数据进行上滤和下滤,插入时,和子树的根节点比较, 只有比子树根节点大才能满足定义, 否则循环交换位置。堆内元素向下移动为 下滤,删除后空余的位置,从上至下找最小儿子节点填充 3. 在printHeap()方法中对数组的遍历使用了去null操作。 4. 代码中已给出比较详尽注释。 ###正文: GoBinaryHeap.java package com.anteoy.dataStructuresAndAlgorithm.javav2...阅读全文

博文 2019-04-04 09:51:22 www.allocmem.com

经典问题-

前言 最近回溯算法,对以往算法和新学习算法进行一个系统的整理和学习,本文的最大子序列和的问题在很多算法书籍和技术文章中对此都有详述,个人简单整理仅为了再次消化和日后查阅,不喜误喷。个人理解,如有错误,欢迎指正。 注:本文中提及的时间复杂度均使用大O法。 问题描述 求-2,4,-1,5,6的最大子序列和 注:如果所有值都为负,则最大子序列和为0 方案一 思路:使用穷举的方式,使用for循环列出所有的子序列进行求和,每次进行对比并把大的数赋值给最大子序列和变量,总共使用三个for循环 注:i循环为从-2到6(头到尾),j循环为i到此序列size,k为计算此时i到此时j的子序列和 源码如下: //穷举遍历法 三个for循环时间复杂度为n*n*n 十分低效 public static int max...阅读全文

博文 2019-04-04 09:53:16 最大子序列和的个人简单整理

折半查找算法

运行时间中的对数 前一篇文章中分治递归的时间复杂度为O(nlogn);对数最常出现的规律可概括为如下一般规律: 如果一个算法用常数时间O(1)将问题的大小削减为其的一部分(通常是二分之一),那么该算法就是O(logn).另一方面,如果一个算法用常数时间O(1)将问题的大小消减一个常数数量(如将问题减少1等等),那么这种sauna就是O(n)的。 折半查找简单引论问题 求x在数组T[]中的坐标,如果不存在x,则返回-1 方案一 思路:直接穷举,进行遍历,时间复杂度O(n),线性增长 代码: public static > int binarySearch1(T[] a, T x){ for(int i = 0;i < a.leng...阅读全文

博文 2019-04-04 09:53:31 www.allocmem.com

自己写GoBinarySearchTree 二叉查找树

前言: java GoBinarySearchTree的简易实现,代码中注释比较详尽,通俗易懂,注意事项亦在注解中标明。 正文: GoBinarySearchTree.java package com.anteoy.dataStructuresAndAlgorithm.javav2.my; /** * Created by zhoudazhuang on 17-3-2. * Description: AnyType extends Comparable * 注意这里的extends 接口 不能使用implements AnyType已经是泛型 不能使用 * compareTo这里是多态 root节点在插入过程中是变化的 如在root1 中插入节点root2 ...阅读全文

博文 2019-04-04 09:51:14 www.allocmem.com

Antlr4简易快速入门

1. 简介 Antlr (ANother Tool for Language Recognition) 是一个强大的跨语言语法解析器,可以用来读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用来构建语言,工具和框架。Antlr可以从语法上来生成一个可以构建和遍历解析树的解析器。2. 谁在使用HiveSparkOraclePrestoElasticsearch3. 常见的语法分析器AntlrJavaccSqlParser (位于Alibaba的Druid库中)其中Antlr和Javacc都是现代的语法解析器,两者都很优秀,其中Antlr要更胜一筹。而SqlParser只能解析sql语句,功能比较单一。 :本人基于Antlr和SqlParser分别写了一套elasticsearch-sql...阅读全文

博文 2020-09-16 09:35:11 知乎

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 12:40:42 阮一峰的网络日志

使用Maven构建Web项目的目录结构 - xiaotou745

1.Web项目的目录结构 基于Java的Web项目,标准的打包方式是WAR。与JAR比较,包含更多的内容,比如JSP文件、Servlet、Java类、web.xml配置文件、依赖JAR包、静态web资源(HTML、CSS、JavaScript)等。 一个典型的WAR文件如下目录结构: File-system代码 —war/ + META-INF/ + WEB-INF/ | + classes/ | | + ServletA.class | | + config.properties | | + ... | + web.xml + img/ + css/ + js/ + index.html + sample.jsp 一个WAR包下至少包含两个子目录:META-INF和WEB-INF,前者包含...阅读全文

博文 2019-10-19 09:05:44 博客园

JDK动态代理为什么必须用接口_Java_秀才的专栏

jdk的动态代理及为什么需要接口 05-14 阅读数 3437 参考文章:https://blog.csdn.net/zxysshgood/article/details/78684229动态代理有关,无非是使用JDK动态代理,和cglib动态代理。一直不待明白的... 博文 来自: 可爱马莲花的博客 深入分析JDK动态代理为什么只能使用接口 11-02 阅读数 403 初学JDK代理时,我们只知道调用一段构造方法Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, Invoca... 博文 来自: u014301265的博客 Java 动态代理为啥需要接口??? 03-08 阅读数 845 我们通过查看源码new...阅读全文

博文 2020-04-21 02:36:36 CSDN博客

GO语言远程DEBUG_mayongze321的博客

在windows系统下开发Linux环境下的分布式系统组件时,往往因为组件之间的相互依赖调用需要进行服务端调试,delve是一款开源的go语言调试器,常用的go语言IDE,如goland vscode等都是依靠delve来进行调试操作的. 使用goland远程调试 使用goland来进行远程调试最好使用goland的 2019.1版本,原因是在goland 2019.1之前的版本中,因为调试路径映射的问题,必需保证本地和远程代码目录都在GOPATH下的src目录,且文件夹必需同名才可以正常进行远程的断点调试,否则在本地ide开启远程调试后就会显示 error "could not find " delve的issues里详细的说明了这个问题:https://github.com/go-del...阅读全文

博文 2021-01-26 02:47:23 CSDN博客_go 远程调试

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 06:06:18 博客园

错误:Unable to locate Spring NamespaceHandler for XML schema_裴大帅2020_新浪博客

一、错误背景: 在java程序中加入了spring的成分,然后使用mvn clean package -Dmaven.test.skip=true进行打包,打包完毕后通过java -jar xx.jar执行程序,结果就报错了。更加详细的错误见如下: [QC] WARN [main] org.springframework.context.support.AbstractApplicationContext.refresh(546) | Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.parsing.BeanDe...阅读全文

博文 2020-12-11 03:14:35 blog.sina.com.cn

linux网络编程backlog和somaxconn | 戒修

前言 学习过的知识只要用的机会不多,多半过段时间就会忘记.如果能反复学习或者记笔记则会记得更牢固一点.以后也可以直接查看复习. 以下内容基于Linux 2.6.18内核 listen方法传入的backlog参数#include int listen(int sockfd, int backlog); 在上面的代码中我们看到listen函数的第二个参数为backlog. 这个参数的意义在不同的Linux内核版本或操作系统定义是不同的. tcp状态转化图 建立Tcp连接需要3次握手, 因此在一个连接的状态变为ESTABLISHED之前,它会有一个过渡的中间状态SYN RECEIVED因此TCP/IP协议栈就有2种方法来实现一个处于listen状态SOCKET连接. ...阅读全文

博文 2019-06-12 10:48:11 沉迷技术的小沙弥

happens

学习Java并发,到后面总会接触到happens-before偏序关系。初接触玩意儿简直就是不知所云,下面是经过一段时间折腾后个人对此的一点浅薄理解,希望对初接触的人有帮助。如有不正确之处,欢迎指正。 synchronized、大部分锁,众所周知的一个功能就是使多个线程互斥/串行的(共享锁允许多个线程同时访问,如读锁)访问临界区,但他们的第二个功能 —— 保证变量的可见性 —— 常被遗忘。 为什么存在可见性问题?简单介绍下。相对于内存,CPU的速度是极高的,如果CPU需要存取数据时都直接与内存打交道,在存取过程中,CPU将一直空闲,这是一种极大的浪费,妈妈说,浪费是不好的,所以,现代的CPU里都有很多寄存器,多级cache,他们比内存的存取速度高多了。某个线程执行时,内存中的一份数据,会存在...阅读全文

博文 2020-03-20 10:44:58 before俗解 | 并发编程网 – ifeve.com

B+树的Java实现

B+树 B+ Tree定义B+树是一种多路平衡查找树,是对B树(B-Tree)的扩展.首先,一个M阶的B树的定义为: 每个节点最多有M个子节点; 每一个非叶子节点(除根节点)至少有ceil(M/2)个子节点; 如果根节点不是叶子节点,那么至少有两个子节点; 有k个子节点的非叶子节点拥有k-1个键,键按照升序排列; 所有叶子节点在同一层; 从定义可以看出来,一个M阶的B树,其叶子节点必须在同一层,每一个节点的子节点数目和键数目都是有规定的.其实不看定义,简单来说,B树是平衡的,而且非叶子节点的子节点是有限制的.最重要的一点是,B树的键是有序的,节点内部的键从左到右依次增大,而且对应的子节点的最小值和最大值在左右两个键之间,这样可以尽可能减少IO次数,提高查询效率.而B+树基本定义与B树相同,不...阅读全文

博文 2021-04-08 10:44:38 桐小木

stunnel配置实例

stunnel简介 stunnel是一个开源跨平台进行通信加密的软件。它可以对原生不支持加密通信的服务(如FTP, Telnet等)在上层提供加密功能,而无须修改这些服务的代码。 stunnel分为client和server两种不同的角色,二者之间的通信使用X509证书进行加密。在初装时,stunnel会自动生成一个自签名的证书用于加密,但它更推荐用户使用自己生成的证书。 stunnel证书生成 用OpenSSL生成自签名的证书其实非常容易,在已安装OpenSSL的Linux环境下: $ openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem 上述命令中唯一需要注意的是-days 365参数,声...阅读全文

博文 2021-09-28 12:57:51 Finisky Garden

再探go modules:使用与细节 - apocelipes

还有半个月go1.12就要发布了。这是首个将go modules纳入正式支持的稳定版本。 距离go modules随着go1.11正式面向广大开发者进行体验也已经过去了半年,这段时间go modules也发生了一些变化,借此机会我想再次深入探讨go modules的使用,同时对这个新生包管理方案做一些思考。 本文索引 版本控制和语义化版本 控制包版本 语义化版本 何谓语义化 为何使用语义化版本 语义化版本带来的影响 一点思考 replace的限制 本地包替换 顶层依赖与间接依赖 限制 发布go modules go.sum不是锁文件 使用vendor目录 注意包的版本 小结 版本控制和语义化版本 包的版本控制总是一个包管理器绕不开的古老话题,自然对于我们的go modules也是这样。 我们...阅读全文

博文 2019-05-24 07:59:15 博客园

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 09:44:31 博客园

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 04:00:14 lrita.github.io

Go语言TCP Socket编程

Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的。 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket在各大主流OS平台上都得到了很好的支持。关于tcp programming,最好的资料莫过于W. Richard Stevens 的网络编程圣经《UNIX网络 编程 卷1:套接字联网API》 了,书中...阅读全文

博文 2019-05-07 10:46:53 Tony Bai

Mybatis详解系列(五)--Mybatis Generator和全注解风格的MyBatis3DynamicSql - 子月生

简介 Mybatis Generator (MBG) 是 Mybatis 官方提供的代码生成器,通过它可以在项目中自动生成简单的 CRUD 方法,甚至“无所不能”的高级条件查询(MyBatis3DynamicSql,有了它根本不需要 Mybatis Plus),让我们避免了进行数据库交互时需要手动创建对象和配置 Mybatis 映射等基础工作。 另外,MBG 有很好地扩展性,它提供了大量的接口和插件用来给我们自定义生成的代码应该是什么样子,例如我们可以自定义注释、代码格式化、添加 toString 方法等。本文将讲解如何使用这些接口。 本文内容大致如下,由于篇幅较长,可选择阅读: 如何使用 MBG 生成代码; 详解 MBG 的配置,将配置使用自定义注释生成器、实体类中添加 toString/...阅读全文

博文 2021-03-02 08:57:32 博客园

Go如何精确计算小数-Decimal研究

##1 浮点数为什么不精确先看两个case // case1: 135.90*100 ====// float32var f1 float32 = 135.90fmt.Println(f1 * 100) // output:13589.999// float64var f2 float64 = 135.90fmt.Println(f2 * 100) // output:13590 浮点数在单精度下, 135.9*100即出现了偏差, 双精度下结果正确. // case2: 0.1 add 10 times ===// float32var f3 float32 = 0for i := 0; i < 10; i++ { f3 += 0.1}fmt.Println(f3) //output:1....阅读全文

博文 2019-08-05 07:58:27 Tidb MyDecimal问题 | hello

理解 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 11:18:54 三月沙

基于Netty的高性能RPC框架Nifty(一)

1. 前言 Thrift是Facebook贡献给apache的rpc框架,但是这款框架的java版本在公司内部并不是那么受待见,因为其性能相比C++版本差了很多,但是后续基于netty重写了以后性能得到了极大的提升,相比于C++版本已经差距不大了。为此取了个新的名字Nifty = Netty + Thrift。 如果你使用过thrift的话,基本都会使用自动生成的代码,那真的是没法看,即使定义一个简单的类都会生成巨多的代码,把read,write方法全部写到里面去了。总之早期的thrfit各方面都似乎不那么友好。后面架构进行了升级,提供了新的swift库,注意这个不是ios的swift,从而生成的java类和普通的java类基本一致,无非多了点注解,而序列化反序列化也都移到了相应的包中,从而...阅读全文

博文 2021-08-16 07:02:59 服务端启动全解析

Go之unsafe.Pointer && uintptr类型 - xxggy的个人页面

挑战A.I.,赢百万奖金......了解更多详情>>> Go之unsafe.Pointer && uintptr类型 unsafe.Pointer 这个类型比较重要,它是实现定位欲读写的内存的基础。官方文档对该类型有四个重要描述: (1)任何类型的指针都可以被转化为Pointer (2)Pointer可以被转化为任何类型的指针 (3)uintptr可以被转化为Pointer (4)Pointer可以被转化为uintptr 大多数指针类型会写成T,表示是“一个指向T类型变量的指针”。unsafe.Pointer是特别定义的一种指针类型(译注:类似C语言中的void类型的指针),它可以包含任意类型变量的地址。当然,我们不可以直接通过*p来获取unsafe.Pointer指针指向的真实变量的值,因...阅读全文

博文 2019-07-30 02:21:06 OSCHINA

详解Spring AOP 实现“切面式”valid校验

why: 为什么要用aop实现校验? answer: spring mvc 默认自带的校验机制 @Valid + BindingResult, 但这种默认实现都得在Controller方法的中去接收BindingResult,从而进行校验. eg: if (result.hasErrors()) { List allErrors = result.getAllErrors(); List errorlists = new ArrayList<>(); for (ObjectError objectError : allErrors) { errorlists.add(objectError.getDefaultMessage()); } } 获取er...阅读全文

博文 2022-01-04 02:44:37 面圈网

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 01:48:28 generics · GitHub

腾讯敏捷之道,实施敏捷开发,看我就够了

简单的来讲,敏捷的意思就是反应迅速,为什么要反应迅速?看看腾讯、阿里就知道了,市场变化越来越快,客户要求越来越高,为了满足用户的需求, 人家一个星期发一个版本,我们仨月才能憋出一个来 , 那还不被打的满地找牙? 问题是如何才能反应迅速? 我们先来看一个场景: 一、残酷的现实 软件开发有一大难题就是客户脑子中的需求难于描述出来, 我们通常的应对方法是这样: 先花上几个月整理需求, 天天和客户座谈, 画出几百页的流程图, 写出上千页的文档, 最后把客户都快搞晕了。 项目经理:这是您要的软件需求吗? 客户:(看到这么多的文档) : 嗯, 应该是。 项目经理:那就请您在需求确认书上签字吧 客户:(心里犯嘀咕, 但是一想,反正是...阅读全文

java.lang.OutOfMemoryError:GC overhead limit exceeded

### 前言 在我们写的java service里,需要加载一个比较大的算法模型pmml文件.在此模型文件由500M+变为1G+的时候,在测试环境中出现了此问题 ### 异常由来 > GC overhead limt exceed检查是Hotspot VM 1.6定义的一个策略,通过统计GC时间来预测是否要OOM了,提前抛出异常,防止OOM发生。Sun 官方对此的定义是:“并行/并发回收器在GC回收时间过长时会抛出OutOfMemroyError。过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存。用来避免内存过小造成应用不能正常工作。 代码中使用静态对象的方式用来在多线程中共享此文件模型,由于加载文件过大,并且长时间的GC回收了不到2%的内存,于是抛...阅读全文