自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 go语言之流程控制

一、loop (for 循环)在go语言中loop只有for关键字的方式func forLoop() { for i := 1; i < 3 ; i ++ { fmt.Println(i) } }for组成部分是省略小括号的,但是方法体的大括号是不能省略的 for语法格式,由三部分组成,每部分用分号";"隔开 第一部分是变量初始化部分,其变量的作用范围仅仅在for循环内,循环外不可用,而且只能采用短变量定义的语法 " := " ;第二部分为条件语句;第三部分为后置处

2020-12-11 23:17:05 578

原创 go语言基本语法介绍

Packagego程序是由一些列包组成的 程序的运行启动点在main包中的main方法 包通过imort关键字进行导入 为了方便起见,包定义的名称和导出路径的最后一个路径元素名称一致,换句话说包路径的最后一个文件目录下,包含一些列该包名的go文件例如import"math/rand",可以看到rand目录下的go文件的package包名都是randimport...

2020-12-03 21:11:04 724 1

原创 从零到一学习go语言之编译打包可执行二进制文件

通过前面的学习,我们已经了解了模块开发的相关知识、在另一模块中调用、多返回值处理、kv返回值处理、异常处理、添加单测等相关知识。本节是从全局了解go语言的最后一篇,关于如何打包可执行二进制文件。一、配置环境变量go env -w GOBIN=/Users/leiteng/study/go二、go install 命令打包安装可执行的二进制文件cd到hello目录,执行go install 命令三、可执行二进制文件的安装目录因为我们配置了GOBIN,因此执行go install

2020-11-25 14:27:47 1692

原创 从零到一学习go语言之单元测试篇

通常单元测试,能够帮我在代码发不到线上环境前,提前发现问题。本文着重讲解go语言的单元测试模块testing的使用、go test命令行、以及案例一、代码示例:本案例是对上一讲的greetings/greetings.go模块中的Hello方法的测试package greetingsimport ( "regexp" "testing")func TestHello(t *testing.T) { //定义参数结构体 type args struct { name st

2020-11-25 14:06:56 227

原创 从零到一开始学习go语言(六)_kv返回值

本节实现的内容:实现一次调用,为多个传递的用户,分别打招呼的功能。程序描述:实现一个新的函数hellos,传递的参数为多个用户的数组列表,返回值为每个用户对应的打招呼信息。入参:多用户组成的数组,使用go语言的splice出参:返回值为map,使用make[key-type]v-type 语句:例如:make[string]string一、编写服务方代码package greetingsimport ( "errors" "fmt" "math/rand" "time")

2020-11-23 19:52:26 262

原创 从零到一学习go语言_使用slice随机返回预设信息(五)

模块开发:创建模块 模块间调用 异常处理 动态数组返回值处理 kv返回值 添加单元测试 编译并安装应用程序本节要实现的功能点:调用greetings/greeting.go的打招呼方法,每次调用返回随机预设的打招呼方式。比如预设“你好xxx”、“hello xxx”、“welcome xxx”,每次调用返回其中一种打招呼方式。本节,会使用go 语言内置的slice、random随机返回不同的打招呼方式。slice切片比较类似java的数组,除此之外他会随着添加、删除元素动态调整切片的大小。

2020-11-18 10:09:13 417

原创 从零到一学习go语言_异常处理(四)

异常处理是开发编程中,必不可少的一部分;处理异常是编写可靠代码的一个重要特征;本章节中,我们会在greetings模块中,返回错误,并在另一个调用者模块中对期进行处理。一、在上几章,开发的模块中,做如下改动:greetings.go中添加以下代码package greetingsimport ( "errors" "fmt")// Hello returns a greeting for the named person.func Hello(name string)

2020-11-17 09:52:12 137

原创 增长思维的作战地图

不设边界:增长是不应该设定边界的,不分产品周期、职位不同。 在产品任何周期、任何职位的人都是在做增长的事情,侧重点不同,仅此而已。 不设边界需要达成共识的,多团队协作才能形成合力,才能达成最终为用户,简单却有效的持续高质量增长作战地图:体系化增长,小闭环、大循环作战策略核心要点:四个层级的策略。一级定位、二级机会、三级落地、四级结果一级定位:差异化洞察用户需求,找到业务定位,通过营销推广、内容强调深植用户,形成用户强心智(用户需要某一场景时,第一时间能够想到你)二级机会:方向、定位

2020-11-13 17:23:00 288

原创 对称的二叉树java、go语言实现

对称二叉树:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/描述:判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。举例: 1 / \ 2 2 / \ / \3 4 4 3思路:观察下图可发现,对称树的二叉树满足以下条件:对称节点的左子节点 == 对称节点的右子节点 && 对称节点的右子节点 == 对称节点的左子节点。因此自上而下递归判断即可。

2020-11-13 15:00:08 100

原创 从零到一学习go语言_模块间调用(三)

模块开发:创建模块 在模块中,调用其他模块的函数方法 异常处理 动态数组返回值处理 kv返回值 添加单元测试 编译并安装应用程序在上一讲中,我们创建了一个模块greetings,该模块中有一个打招呼的方法函数Hello,接下来我们会在其他模块中调用greetings模块中的Hello方法。我们接下来需要编写一个调用了上一模块Hello方法的可执行程序。1.创建一个新的模块,创建步骤按上一节所诉。创建的新模块的目录和上一讲中的模块greetings同级别即可2.创建Hello.go文件,

2020-11-13 10:25:21 466

原创 从零到一学习go语言_模块开发(二)

本文从go语言的模块开发,带大家从一个上帝视角,感受一下整个go工程项目的开发过程;了解go的一些基础设施,让大家有一个对go的体感。通过本节内容,我们可以掌握以下内容模块开发:创建模块,并在其他模块中调用 异常处理 动态数组返回值处理 kv返回值 添加单元测试 编译并安装应用程序一、创建模块...

2020-11-12 21:21:42 301

原创 java、go分别实现二叉树的镜像

力扣原题:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/入参:4/ \2 7/ \ / \1 3 6 9出参:4/ \7 2/ \ / \9 6 31解题思路:根据二叉树镜像的定义可知:我们要做的核心工作是交换每个节点的左右子节点。因此我们可以有两种思路解题一、递归:dfs深度优先遍历,自...

2020-11-12 19:13:38 97

原创 性能优化篇_锁的正确选型

为什么要有锁:锁是在多线程并发环境中,保证处理数据不会出错的一种快捷解决办法。锁选择不当带来的影响:在高并发环境下,如果锁的选取不当,直接带来的影响是,系统的吞吐量上不去,高并发成为空谈。一、锁的分类在底层实现上来讲,锁一共分为两类:互斥锁和自旋锁。其他上层锁都是根据底层的这两类锁来实现的。互斥锁:加锁成本比较高,是在内核态完成的,要经过两次上下文切换,第一次是加锁失败后线程进入休眠释放cpu资源,第二次是等锁释放后,通知失败线程获取锁恢复执行。一次上下文切换的时间大概在几纳秒或者几十...

2020-11-12 18:57:33 193

原创 从零到一学习golang语言_初识go语言(一)

从本篇文章起,从零到一学习go语言。一、go和golang?到底是go语言还是golang语言,其实官网已经表态过为go语言。官网的域名使用https://golang.org/,是因为go.org已经被注册过了,需要花几千万购买,但是没这个必要。第二个原因使用golang是因为,在搜索引擎中查找相关go的资料时使用golang能能更大限度匹配,如果仅仅是输入go很可能得不到你想要的。二、go语言简介go语言是一个开源的项目,为了让程序开发者更高产,提高程序员的开发生产力。 go语言富有表

2020-11-11 20:50:28 1136

原创 java、go语言实现判断树的子结构

力扣26题目:判断树的子结构,官方链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/题目描述:给定A、B两棵树,判断B树是否为A树的子结构举例:输入:给定树A: 3 / \ 4 5 / \ 1 2给定树B: 4 / 1结果:返true,因图中可以看出B为A的子结构解题思路:1.如果B为A的子结构,那么A中的任意节点都有可能成为B的根节点 2.我们.

2020-11-11 16:40:18 120

原创 性能调优之磁盘文件读写与网络传输

引子:我们在读取磁盘文件,并经过网络传输时,我们能不假思索的用到如下代码。private void sendFile(String filePath) { try { //1.从磁盘读取文件 File file = new File(filePath); DataInputStream dis = new DataInputStream(new FileInputStream(filePath));

2020-11-10 22:22:29 1050 2

原创 idea上执行main方法,单元测试run、debug点击后均没反应问题排查

问题描述:今天idea中进行项目单元测试,发现点了run、debug按钮后没有任何反应,控制台console也调不出来。出现这种抽风问题,着实影响开发效率,希望给遇到的朋友能得到一些帮助。问题原因:前段时间复制了一些脚本代码,在idea里跑过url请求之类的单测,之后idea里插件中使用了groovy的插件,再次执行java应用单元测试时,被当做脚本执行了。解决办法:把plugins里的Groovy插件勾掉,重启idea即可。...

2020-11-10 12:54:11 1818 2

原创 增长思维之如何理解增长

核心:以用户为中心,通过对人性的洞察,对用户的理解,差异化洞察用户需求,找到增长的爆破点,通过技术手动,快速低成本实验,验证正确性。未来的人才应该是以专业性为基本,另外还要辅助一定的用户需求洞察的能力。一、如何理解增长对于增长的理解,不同的人站在不同的视角都有不同的理解,正式因为视角的不同,很多人会片面的认为增长就是市值的增长,用户的增长。实际上站在全局的视角来看,增长应该是产品的长期价值,包括用户价值和商业价值,用户群体要有价值,商业价值也要走的通,才能带来产品的长期价值。二、两种不同的增长极

2020-11-10 09:26:49 339

原创 性能调优-内存分配策略

提升内存池的分配效率,和cpu缓存一样都是比较底层的性能优化方法。在现在分布式集群应用的情况下,如果能从底层出发,很小粒度的性能提升,在分布式环境多集群的规模放大下,都将带来成倍的性能优化提升下面带大家一步步了解内存池相关的知识。一、应用请求分配内存的流程 应用代码申请内存时,先在应用内存池内申请,如果有足够可用空间直接返回,否则从C库内存池中申请内存资源,当C库内存池没有足够的内存空间时,才会从OS申请内存资源。 当应用向C库内存池申请1kb的内存空间时,C...

2020-11-10 09:25:08 321

原创 磁盘利用率持续过高,清除日志文件后空间不释放问题排查

一、问题描述: 1.线上应用写大量日志,收到磁盘利用率过高的告警 2.删除大日志文件,仍然持续告警二、根本原因:在linux服务器上,rm -r大的日志文件后,如果使用该文件的进程没有关闭,是不会真实的释放磁盘空间的三、排查过程1.df -h命令查看当前服务器磁盘使用率情况,发现被使用了50G的空间,使用率搞到89%2.查看日志文件目录下占用的总磁盘大小,发现只占用了20M的磁盘空间,并没有50G的空间大小3.50G的空间到底去哪里了?lsof |gr...

2020-11-05 23:21:12 1289 1

原创 CPU缓存架构原理剖析与相关优化

一、cpu架构二、cpu从内存加载数据的流程程序运行时从内存加载数据,先从离核心最近的一级缓存读取,如果有数据就直接返回,逐层读取,如果三级缓存中都没有数据,就会从内存中加载一段连续的内存数据,一次加载数据的大小根据cacheline配置的大小,一般为64字节,并将加载的数据依次放入缓存中。linux系统可以通过以下命令查看三、cpu的三级缓存、内存读取效率 以2.2Ghz频率的CPU为例,每个时钟周期大概是0.5纳秒 L1缓存分为两部分:数据缓存和指...

2020-11-04 22:06:51 328 1

原创 设计原则大全

设计原则,是前人经验总结出来的,有效解决问题的指导思想和方法论。在软件设计领域,前人总结出了很多设计上的原则,我们遵循这些原则可以非常容易的设计出,易维护、可扩展、灵活性的系统。但是,这些设计原则是一种方法论、指导思想,我们不能教条,也需要根据实际需求懂得取舍。一、SOLID原则solid五个原则中,开闭原则和李氏替换原则是设计的目标,单一职责原则、接口隔离原则、依赖注入原则是设计的方法。solid的五个原则,并不是相互独立的,违反其中一个原则,往往也会违反了其他原则Single R

2020-11-02 21:31:50 275 1

原创 mysql索引详解,了解mysql索引看这一篇就够了

本文会带大家深入的掌握索引类别和优化方法。一、什么是索引索引是一种数据结构,在数据库中该数据结构,能够辅助存储引擎高效获取数据;二、索引在MySql架构中的位置三、索引的分类按数据结构分类 B+tree、Hash、Full-text索引 按物理存储分类 聚簇索引、二级索引(也叫辅助索引) 按字段特性分类 主键索引、唯一索引、普通索引、前缀索引 按字段个数分类 单列索引、联合索引(也叫复合索引) 四、常用存储引擎中支持的索引结构在MySql中.

2020-10-30 00:04:30 165 1

原创 mac配置定时任务执行简要步骤

mac上我们自定义的一些脚本,如果想要定时调度,需要使用到mac OS 自带的launchctr,下面写下小白教程。一、准备要自动运行的脚本本例是一个go语言实现的脚本:csdnUtil.go二、在同目录下定定义mac 下的bash脚本如:本例子中的scriptRun.sh#!/bin/sh# 记录脚本开始执行时间echo '开始执行时间' `date` >> /Users/leiteng/Desktop/runLog# 执行自定义的脚本,我这里是一个go脚本实现

2020-10-27 21:58:32 1449 1

原创 线上log日志输出没有具体堆栈信息问题排查

一、问题描述因错误使用了logback的error日志实现中,format、可变参的重载方法,相当然的以为throwable异常作为可变参数也会打印出具体堆栈。 线上使用logback日志框架 调用了logback的format、可变参数的重载方法 public void error(Marker marker, String format, Object... argArray) { filterAndLog_0_Or3Plus(FQCN, marker...

2020-10-27 09:28:22 4296 1

原创 Hexo自建博客之接入评论系统

今晚下班,不用回家带娃娃,赶紧抽时间码下hexo的评论接入,话说期间遇到的坑也不少,典型的几个问题下边会重点提一下,话不多说,直接码。。一、评论系统选型多说——>2017年已经关闭了服务 畅言——>应该是响应国家言论自由的方针,需要备案,没错需要备案,你没看错 友言——>无奈也已经关闭了 gitment–> 是由基于github issues的系统评论,需要有github账号,考虑到看技术博客的同行,应该都有github吧. Hypercomments—->.

2020-10-26 23:23:49 1132

原创 使用Hexo建立自己的博客框架

背景刷朋友圈期间,偶然看到一位码农同行,在鼓捣hexo,自己心血来潮google了一把,这是个什么东东?后续一发不可收…..有兴趣的同学可移驾到hexo官网,如果你是个英语盲也没关系,送上hexo中文文档,官网上对hexo的介绍已经很详细了,我就不在过多描述。仅仅列出自己使用到的一些特性、极其功能。hexo特性博客框架、快速、简单 使用markdown编写博文 hexo根据markdown博文,几秒钟内可生成静态文件网站 丰富的主题,切换主题方便,目前我使用的是MIHO的主题 丰富的

2020-10-26 23:21:33 769

原创 ElasticSearch分布式特性介绍

es分布式介绍es是分布式的,能够轻松扩容到上百到上千台服务节点,并能够支持pb级数据 es对用户屏蔽了分布式的复杂性,以下相关分布式特性在幕后自动发生 共识算法,es中使用了PacificA算法 节点发现 节点选主 分区故障 副本日志复制 文档数据分片 节点间文档索引、查询相关负载均衡算法策略 shard副本,高可用 节点请求路由转发 节点扩缩容,无缝集成与重新分片 故障转移 虽然es屏蔽了分布式系统的复杂性,但是我们如果能了解下es的分布式特性,对于我们学习其他

2020-10-26 23:13:02 940 1

原创 人人都需有的数据思维

在樊登读书上,读到《数据思维》一书,做下记录。 互联网已经出现、物联网正在搭建,每个人甚至每个物体都在产生数据,但是很少有人能够玩转数据并利用他。凭借数据,内行率先开启了先知视角,而有些个人和企业还在数据的金矿里迷失,找不到北。从广告的精准投放,到预测并影响美国总统大选,数据为何如此神奇。数据思维的核心价值:培养将业务问题转化为数据可分析问题的数据思维,数据才能为商业创造价值业务数据化、数据业务化。业务要能产出数据,数据反哺业务。一、朴素的数据价值观1.什么是数据...

2020-10-26 23:09:51 1293

原创 ElasticSearch常用语法大全

本文,本文重在扫盲,从简单的添加索引、创建mapping、增、删、改、查、分页、聚合、嵌套查询等常用的语法切入,把大家带入到Elastic search的使用,让我们对es有个大概的体感。目录一、添加索引二、设置mapping属性映射类型可参考:示例三、插入数据四、查询数据以上mapping的设置,涵盖了四种常用的数据类型。对每种数据类型查询做下分析1.简单数据类型:如上述示例中的goodsId,goodsName2.对于type为long,数组形式存储的但...

2020-10-26 21:54:51 2006

原创 不正确使用ThreadLocal带来的内存泄漏问题原理分析

今天带大家一起由浅入深,详细讨论下threadlocal的相关知识一、基本知识1.threadlocal和synchronized的比较共同点:都是解决多线程并发访问数据的问题 区别 threadLocal解决多线程并发中,共享变量在多线程间数据隔离的问题,重在线程间数据隔离。 synchronized解决,多线程间数据共享的问题,使用的是锁机制。 2.threadLocal的通俗实现解释 threadlocl通俗点解释,就是一个与线程绑定的一个变量;thread...

2020-10-26 20:43:03 754

原创 一次线上机器load负载过高报警问题排查及其后续处理

问题来源:从3.14号开始陆续收到线上一台机器的负载过高报警 问题排查 : 于是对gc、堆内存、load负载、cpu使用情况等进行了统计分析。 gc时间图标 堆内存使用情况:load负载 cpu使用率 通关以上对gc的统计,堆内存的使用情况,负载和cpu使用率的统计,我们不难发现其实在发生报警的时间范围内,不论是gc、堆内存、load负载还是cpu使用情况都是有一个 上升区然后到

2016-03-26 14:11:19 3836 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除