- 博客(440)
- 资源 (2)
- 收藏
- 关注
原创 Go 切片常用操作与使用技巧
在 Go 语言中的切片(slice)是一种灵活的动态数组,它可以自动扩展和收缩,是 Go 语言中非常重要的数据结构之一。切片是基于数组实现的,它的底层是数组,可以理解为对底层数组的抽象。它会生成一个,并通过切片长度关联到底层数组部分或者全部元素。
2024-05-23 19:06:15 560
原创 Dubbo3.x 异步转同步源码
底层netty通信是异步的,那我们平时调用采取的同步是如何将底层的异步转为同步的呢?dubbo远程rpc协议和网络框架有多种,我们以默认的dubbo协议、网络框架netty作为切入点.
2024-05-14 17:29:42 676
原创 BigDecimal工具类编写
1.在创建BigDecimal对象时,需要注意构造函数的使用。如果使用字符串或者字符数组、或者int整型等参数来创建BigDecimal对象,可以保证精度不会丢失;而如果使用浮点数或双精度数等参数创建BigDecimal对象,则可能会出现精度丢失的问题。因为部分浮点数计算本身就无法表示,所以在传入bigdecimal对象里的时候就已经丢失精度了。所以,在涉及到精度计算的过程中,我们尽量使用 String 类型来进行转换。
2024-03-05 20:01:53 359
原创 Java stream求和以及mapToDouble sum精度丢失解决办法
在 Java 8 中,合并流的元素并产生单个值。其中double求和会丢失精度,可以使用。
2023-09-05 16:00:45 2285 1
原创 Mac下IntelliJ IDEA快捷键
⌘ Command⇧ Shift⌥ Option⌃ Control⌫ Delete⌦ 向前删除键(Fn+Delete)↑ 上箭头↓ 下箭头← 左箭头→ 右箭头End Fn + →⇥ 右制表符(Tab键)⇤ 左制表符(Shift+Tab)快捷键。
2023-06-20 16:01:43 776
原创 MySQL update set 语句中,与 and的区别
这是因为MySQL 在语法上,并不认为 and 这个用法是错误的,那么说明 MySQL 用另外的方式“解读”了这个语句。最容易想到的,就是 MySQL 是不是在 set 的时候,把 and 解释成了逻辑运算符,而不是英文意义上的“和”?(70 and non_standard_duration = 5)中的70不为0所以为true,non_standard_duration=5和表中的值是相等的,所以也为true,所以整个表达式的值为true,因此最终standard_duration的值为1(true)
2023-05-05 11:18:05 387 1
原创 GitLab revert 导致新提交 merge 代码丢失(diff丢失)
你将本地的原分支feature_xxx代码修改后提交到远程分支,发起Merge到Master的申请会发现,feature_xxx分支和master分支的差异commit只有feature_xxx分支revert后的提交记录(之前的代码变动都没有了)是因为对于master而言,已经合并过feature_xxx,master包含feature_xxx的commitid,这些提交不会参与diff,所以不会显示出两个分支的不同。然后将代码提交到你原分支的远程分支feature_xxx。...
2022-07-18 14:37:45 2989
转载 Go select死锁分析
首先进入要上传代码的目录,例如,我要将test文件夹下的代码上传到gitlab,则,cd test1通常需要创建README.md文件,echo "# test" >> README.md1执行git命令,此命令会在当前目录下创建一个.git文件夹,git init将项目的所有文件添加到仓库中,git add .这个命令会把当前路径下的所有文件,添加到待上传......
2022-07-15 16:56:35 193
原创 Go struct和map转化为JSON串
struct和map转化为json串主要就是由于map无序,转化后的json串key是无序的如果参数是接收一个参数,那么通过结构体和map转化都是可以的代码示例:package mainimport ( "encoding/json" "fmt")type Person struct { Name string `json:"name"` Age int `json:"age"` Like []string `json:"like"` //不加`json:"like"
2022-05-17 16:54:43 872
原创 Go 常见使用问题记录
1.字符串分割,如果对""空字符串分割会怎么样func main() { str := "" sList := strings.Split(str, ",") fmt.Println(sList) if sList == nil { fmt.Println("分割空字符串后列表为空") } else { fmt.Println(fmt.Sprintf("分割空字符串后列表不为空,列表长度为:%d", len(sList))) for index, value := range s
2022-04-19 15:07:53 1114
原创 Go 字符串时间等相互转化以及时间加减等操作
1.获取当前时间的第二天零点时间,以及获取当前的23:59:59 的时间戳和date类型:package mainimport ( "fmt" "time")func main(){ timeStr := time.Now().Format("2006-01-02") fmt.Println(timeStr) //使用Parse 默认获取为UTC时区 需要获取本地时区 所以使用ParseInLocation t2, _ := time.ParseInLocation("2006-
2022-04-19 10:33:44 2932
原创 Go版本升级
需求:将Go版本升级到1.15版本中的最新版,例如我升级的时候1.15中最新的是版本是1.15.15升级步骤:先执行Go卸载brew uninstall go执行升级命令brew install [email protected]配置环境变量:# 编辑 ~/.zshrc文件,加入下面两行export GOPATH=$HOME/goexport PATH=$GOPATH/bin:$PATH# 保存后执行使配置立刻生效source ~/.zshrc然后执行:brew li.
2022-04-02 11:40:49 1328
原创 Mac使用brew安装Python3.*并设为默认版本
mac系统虽然默认打开的是python2,但是也默认自带了python3,只要在终端用命令python3就会打开python3下面讲的是用brew安装最新的python3brew install python3可以看到python3的实际安装目录是/usr/local/Cellar/[email protected]/3.9.12打开配置文件并写入python的外部环境变量open ~/.bash_profile然后写入:export PATH=${PATH}:/usr
2022-03-29 22:12:59 10951
原创 redis 为什么对数字/字符串append操作后,编码格式object encoding从int/embstr变成raw了
不单单int编码类型(type是string),进行字符串操作后,会自动转码为raw;对普通的短字符串(长度小于等于44个字节)进行append操作后,编码格式也会发生改变(即使操作后长度还是小于等于44个字节也会由原来的embstr变成raw)!embstr存储形式将 RedisObject 对象头和 SDS 对象连续存在一起,使用 malloc 方法一次分配。redis 3.2之后empstr只能容纳44字节:embstr的最小占用空间为19(16+3),而64-19-1(结尾的..
2022-02-14 14:55:32 987
原创 Mac环境下使用CLion调试redis 6.X源码
1.下载并安装CLion下载地址:Download CLion: A Smart Cross-Platform IDE for C and C++2.打开CLion并导入redis源码源码地址:https://github.com/redis/redis选择自己要下载的版本,我这里下载的6.2.1导入CLion步骤:将上图中复制的地址导入CLion,或者下载ZIP包然后解压后导入,这步骤很简单2.进行编译构建这一过程有可能出现下面的错误:...
2022-02-11 11:33:02 1629 1
原创 MySql 连接查询中 on 和 where 的区别
大家可以先看MySQL:left join 避坑指南看过之后再接着看下面在多表查询时,ON和where都表示筛选条件,on先执行,where后执行。 on 后跟连接条件,然后再加的筛选条件只针对关联表(从表) 执行顺序:从表按照条件筛选,然后再进行连接;即先筛选再连接 where 则针对连接后产生的临时表进行筛选 执行顺序:先连接再筛选 区别:外连接时,on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。而where条件是在临时表生.
2022-01-21 16:52:44 4255 1
转载 go 格式化输出
官方英文:https://golang.org/pkg/fmt/【简介】 fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf。格式“占位符”衍生自 C,但比 C 更简单。【打印】占位符:[一般] %v 相应值的默认格式。在打印结构体时,“加号”标记(%+v)会添加字段名 %#v 相应值的 Go 语法表示 %T 相应值的类型的 Go 语法表示 %% 字面上的百分号,并非值的占位符[布尔] %t 单词 true 或 fal.
2022-01-05 21:07:42 500
原创 MySQL redo和binlog
redo log用来保证事务的持久性redo概念可以参考:MySQL · 引擎特性 · InnoDB redo log漫游mysql是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面:因为Innodb是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了! 一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不...
2021-12-31 11:09:11 1165 1
转载 Mac下安装Redis
使用Homebrew安装Redis(1)安装命令:brew install redis(2)查看软件安装及配置文件位置Homebrew安装的软件会默认在/usr/local/Cellar/路径下;redis的配置文件redis.conf存放在/usr/local/etc路径下(3) 启动redis服务方法一:brew除了可以帮助我们安装软件以外,还可以帮助我们启动软件brew services start redis方法二:redis-server /usr
2021-09-01 20:49:32 214
原创 Go 排序
示例代码:import ( "fmt" "sort")type Person struct{ name string age int8}type PersonSortList []Personfunc (p PersonSortList) Len() int { return len(p)}func (p PersonSortList) Swap(i, j int) { p[i],p[j] = p[j],p[i]}func (p PersonSortList
2021-08-30 21:04:05 135
原创 go 打印 %v %+v %#v 的区别
v 值的默认格式%+v添加字段名(如结构体就先输出结构体的字段类型,再输出该字段的值)%#v 相应值的Go语法表示代码示例:package mainimport ( "fmt")type EqStruct struct{ Name string Age int32}func main(){ e1 := EqStruct{} e1.Name = "2" fmt.Printf("e1=%v \n", e1) //如果值是一个结构体,%+v...
2021-07-23 16:44:42 936
原创 Intellij idea中修改git账号名
Intellij idea中修改git账号显示名(也即git提交代码的作者名字)可以通过git config user.name查看当前的用户名。修改git代码提交人显示的信息,可以使用如下命令在idea的Terminal中执行:git config --global user.name "xxx"...
2021-06-28 20:24:18 1156
原创 从数据库中分批取数据进行处理
思路1:用分页查询的方式取先查询出要处理的总数据量 count,然后假设每批要处理100条,代码 //获取可push的记录进行发送消息 private void getData(){ //查出总数据量 long count = xxxMapper.countByExample(example); int pageSize = 100; long pageNum = count / pageSize; l
2021-05-20 20:15:23 1741
原创 git将本地分支与远程分支建立联系
关联命令:git branch --set-upstream-to=origin/<branch> <localbranch>
2021-04-14 15:26:19 798
原创 Go time.Time比较时间大小
可以将待比较的时间格式化成相同格式的字符串,然后使用time的Before, After, Equal 方法即可.例子:func main(){ time1 := "2021-03-19 09:23:29" time2 := "2021-03-20 08:50:29" //先把时间字符串格式化成相同的时间类型 t1, err1 := time.Parse("2006-01-02 15:04:05", time1) t2, err2 := time.Parse("2006-01-02 1
2021-03-19 14:20:25 26084
原创 python将列表转化为字典结构,相同Key的放入value列表中
将列表按照其中元素对象的某一属性为key转化为字典结构,相同Key的对象放入value列表中代码示例:# coding=utf-8import jsonclass Person: def __init__(self, name, age, id): self.name = name self.age = age self.id = id def __str__(self): return '姓名:%s 年龄.
2021-02-07 10:48:50 2061 1
原创 Go time获取本周一\下周一\下周日
主要用到了AddDate对时间进行加减天数,time.Weekday()得到今天是周几,周日对应的是0,周一到周六对应1,2,3,4,5,6我们接下来的计算代码是一周从周一开始周日结束,既周一到周日为同一周。package mainimport ( "fmt" "time")func main(){ now := time.Now() lastMonday ,err:= GetLastWeekMonday(now,"20060102") lastSunday ,err:=
2021-01-10 20:21:20 4556
原创 有想加入字节跳动的吗
北京 上海 杭州 南京 深圳 成都都有岗位 ,开发 测试 算法 大数据 产品 运营 销售 等岗位都有,要求本科及以上学历,想来试试的把简历发我邮箱[email protected]
2020-12-02 11:10:30 313
原创 在Debian 8上使用Apt-Get安装Java
安装Java的最简单方法是使用Debian打包的版本。具体来说,这将安装OpenJDK 8先更新包索引命令:sudo apt-get update搜索jdk8安装包命令:apt-cache search java8结果:default-jdk - Standard Java or Java compatible Development Kitdefault-jdk-headless - Standard Java or Java compatible Development Kit
2020-11-16 17:39:22 1069
原创 给定一个正整数,找到由相同数字组成的下一个更大的数字
比如63543,这个数包含6,3,5,4,3,将这些数字重新组合以后,产生下一个较大的数字,那么就是64335。思路与代码:import java.util.ArrayList;import java.util.Comparator;import java.util.List;public class NextBigger { public static int getNextBigger(int num) { //将数字的每个位数转化为数组 i
2020-11-01 17:20:07 1307 1
原创 Dubbo invoke命令使用
首先使用telnet命令进入控制台命令:telnet ip 端口例如你的如果dubbo.protocol.port=29952那么就是 telnet localhost 2995然后使用invoke命令注入: 如果注入的是json 那就直接传入json串就ok了,如果是基础数据类型,也可以分别对应参数直接传 invoke XxxService.xxxMethod({“prop”: “value”}, 1, “1”) 如果注入的参数是对象(com.yunji.bigdata.po...
2020-10-15 11:50:53 8763
原创 Java 单例模式破坏与修复
破坏单例实现单例后,按照预期结果应该所有对象都是同一个对象。但是以下有几种情况可以破坏单例的性质。首先让单例类实现Serializable, Cloneable接口。通过序列化 、反射、克隆这三种方式破坏单例模式import java.io.*;import java.lang.reflect.Constructor;public class WreckSingleton implements Serializable, Cloneable{ private static
2020-10-12 11:39:40 506
原创 centos安装nodejs
1.从官网下载https://nodejs.org/en/download/2 将包上传到linux的/usr/local路径,解压安装包xz -dnode-v12.18.3-linux-x64.tartar -xvf node-v12.18.3-linux-x64.tar3 重命名mvnode-v12.18.3-linux-x64/ nodejs4.让npm和node命令全局生效vim /etc/profileexport PATH=$PATH:/usr/loca...
2020-09-14 15:33:54 452
原创 redis缓存穿透、击穿、雪崩解决方案
缓存穿透缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。例如:从缓存redis没有命中,需要从mysql数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决思路:如果查询数据库也为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了,而不会继续访问数据库。设置
2020-09-03 14:45:09 366
原创 Dubbo服务引用(消费端)启动netty源码分析
本文主要讲启动netty源码分析,前面会讲一下服务引用到netty启动部分的源码流程。服务引用的入口方法为 ReferenceBean 的 getObject 方法public Object getObject() throws Exception { return get(); }然后到com.alibaba.dubbo.config.ReferenceConfig#get方法public synchronized T get() { if (destr
2020-08-17 17:22:27 718
图解HTTP(彩色高清带目录).zip
2019-06-24
elasticsearch权威指南高清中文pdf
2019-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人