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

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 22: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 16:21:36 简书

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 11:53:37 www.allocmem.com

git submodule以及被忽略的.gitignore

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

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

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 17:44:44 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 17: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 17:43:11 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 21:05:38 CSDN博客

关于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 17:43:50 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

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 17:46:05 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 17:53:07 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 17:47:18 www.allocmem.com

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

文地址: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 17:46:49 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 17:54:30 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 17:44:33 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 17:49:51 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 17: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 17:48:44 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 17:51:22 www.allocmem.com

折半查找算法

运行时间中的对数 前一篇文章中分治递归的时间复杂度为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 17:53:31 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 17:53:16 最大子序列和的个人简单整理

迈向高级的Java面试突围课【网盘下载无密】

download:迈向高级的Java面试突围课本课采用大厂多轮面试形式贯穿主线,内容涵盖Java中高级面试的必考点、高频点、加薪点。同时融合讲师多年阿里字节考官经验,通过真实模拟不同面试场景,将面试每个环节和应对心得逐一讲解,助你突破自身瓶颈,超常发挥,顺利通过大厂面试。技术要求Java Web1年以上实际开发经验环境参数环境参数:JDK1.8、SpringBoot2.x 开发工具:Intelij IDEA20世纪90年代,硬件范畴出现了单片式核算机系统,这种价格低廉的系统一出现就当即引起了主动控制范畴人员的留神,由于运用它能够大起伏行进消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年景立了一个称为Green的项目小组,帕特里克、詹姆...阅读全文

博文 2021-01-16 21:03:24 jmterorh

自己写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 17:51:14 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 阮一峰的网络日志

Java实操避坑指南 业务代码-整合框架-存储-缓存常见错误详解

​Java实操避坑指南 业务代码-整合框架-存储-缓存常见错误详解 【点击下载】面试通过,却担心通不过试用期?明明认真做了,还是Bug满天飞?刚入行的Java开发者,总会遇到这样那样的坑。资深技术专家,调动多年经验,为你排除易出错、易被忽视、易被曲解的“坑”,根据业务需求流程,带你系统处理业务代码-整合框架-存储-缓存的常见错误,清扫知识误区。通过课程,让你对重点、难点和知识点理解更加的清晰和熟练,助力你升级打怪再上一个台阶!适合人群有Java实际开发经验,对排查Bug有困扰的Java开发者技术储备要求有实际开发经验。包括:Java Web实际开发经验 Spring、SpringMVC、SpringBoot、MySQL、Redis 实际使用基础百度网盘链接下...阅读全文

博文 2020-09-30 17:58:38 jmterorh

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

Java支付全家桶:企业级各类支付手段一站式解决方案

点击下载:Java支付全家桶:企业级各类支付手段一站式解决方案完整无密不久前新闻头条:《支付宝在2019年新增4亿行代码引热议》以及风投关注的宝典-《金融博览》指出:支付将迎来新的风口,两则消息均证明了:强如阿里,甚至风投都如此重视和关注支付领域,因此,学支付方能立于不败之地!Java企业级支付一站式解决方案(赠送超值配套电子书:http://dwz.date/aMfA)...1-1 Java企业级支付一站式解决方案试看第2章 学前准备学习并掌握微信、支付宝、银联三种支付方式的区别和差异,并且为开发支付程序搭建前后端分离的工程,创建数据库,安装好开发工具。2-1 主流支付渠道说明【企业级支付形式心中有数】试看2-2 带你配置开发环境2-3 搭建前端后端分离项目2-4 本章内容总结第3章 UN...阅读全文

博文 2020-07-30 01:27:03 jmterorh

如何高效的管理技术开发团队

在任何一个项目开发或设计中,项目管理都会被认为是最重要的过程之一,因此,选择一款适宜的项目管理工具尤为重要。 而高效的、良好的项目管理必须具备「快速、强大」且包含以下功能: 1. 需求管理:项目的需求变更,跟踪,控制 2. 资源管理: 项目的可利用的资源(人力,物力,财力) 3. 计划管理: 包括成员管理和权限分配,日程排定,工作时间管理,里程碑设置 4. 进度管理: 日历,工作流,多视图报表等 5. 测试管理: 项目软件缺陷Bug状态跟踪 6. 文档管理: 发布文档文件 存储文件,集成SVN代码管理 7. 信息管理: 活动统计报表,项目报表的导入和导出功能,信息筛选,预警和邮件提示 8. 共享管理:团队新闻,Wiki和论坛等功能 [CORNERSTONE](https://www.corn...阅读全文

博文 2019-09-29 16:40:09 CORNERSTONE

golang包管理解决之道——go modules初探 - apocelipes

golang的包管理是一直是为人诟病之处,从golang1.5引入的vendor机制,到准官方工具dep,目前为止还没一个简便的解决方案。 不过现在go modules随着golang1.11的发布而和我们见面了,这是官方提倡的新的包管理,乃至项目管理机制,可以不再需要GOPATH的存在。 go module的初始化 现在modules机制仍在早期阶段,所以golang提供了一个环境变量“GO111MODULE”,默认值为auto,如果当前目录里有go.mod文件,就使用go modules,否则使用旧的GOPATH和vendor机制,因为在modules机制下go get只会下载go modules,这一行为会在以后版本中成为默认值,这里我们保持auto即可,如果你想直接使用modules...阅读全文

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

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 10:21:06 OSCHINA

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 18:46:53 Tony Bai

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 17:35:11 知乎

再探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 15:59:15 博客园

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 15:58:27 Tidb MyDecimal问题 | hello

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 18:48:11 沉迷技术的小沙弥

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 10:47:23 CSDN博客_go 远程调试

happens

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

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

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 10:36:36 CSDN博客

理解 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 三月沙

手动编译并运行Java项目的过程 - 小得盈满

现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和java的关系了,下面来详细说一下 一般情况下,在本地都是使用eclipse开发工具进行开发,很多东西基本上就不用我们考虑了,如果我们要将项目放到Linux下运行的话,那么就需要进行转移的操作,当然有Maven、Ant这样的自动化部署工具,简直是太方便了,为了做到更进一步认识的话,我们纯手动的去打包一个java的项目 首先,项目名称为JarTest,在eclipse结构如下图所示: 包名和类名都看的非常清楚了,App是主类,包含有main方法;TestBean是一个JavaBean实体;TestS...阅读全文

博文 2019-10-19 17:37:43 博客园

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

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

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 博客园

Load和CPU利用率是如何算出来的

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/tech/system/how_to_calc_load_cpu.html 相信很多人都对Linux中top命令里“load average”这一栏困惑过,到底什么是Load,Load代表了什么含义,Load高会有什么后果?“%CPU”这一栏为什么会超过100%,它是如何计算的? 带着这些问题,我们通过一些测试,来探索下其中的不解之处。 首先,我们通过实验来大概确定其计算方式: 测试服务器:4核Xeon处理器 测试软件:MySQL 5.1.40 服务器上除了MySQL没有运行其他任何非系统自带软件。因为MySQL只能单线程运行单条SQL,...阅读全文

博文 2019-08-17 09:49:28 P.Linux Laboratory

git代码统计 - 不挑食的程序员

命令行 查看git上的个人代码量: git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' - 结果示例:(记得修改 username) added lines: 120745, removed lines: 71738, total lines: 49007 统计每个人增删行数 git log --format='%aN' | sort -u | while rea...阅读全文

博文 2019-05-20 16:43:50 SegmentFault 思否

JVM GC 日志详解

本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode) 复制代码一、GC 日志参数 设置JVM GC格式日志的主要参数包括如下8个: -XX:+PrintGC 输出简要GC日志 -XX:+PrintGCDetails 输出详细GC日志 -Xloggc:gc.log 输出GC日志到文件 -XX:+PrintGCTimeStamps 输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式) -XX:+PrintGCDateStamps 输出G...阅读全文

博文 2019-06-20 18:18:28 掘金

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 18:44:38 桐小木