- 博客(91)
- 资源 (15)
- 收藏
- 关注
原创 java知识整理
1-java基础jdk 1.7 hashMap多线程下循环引用问题java类加载机制hashMap原理1-1操作系统基础1-2网络基础2-JVMJVM内存结构3-并发4-spring如何解决循环依赖5-中间件框架5-1 redisredis渐进式hash5-2 消息中间件5-3 rpc框架5-4 zookeeper5-5 限降熔6-分布式7-数据库数据库一致性10-系统架构设计solid设计原则秒杀系统设计11-开放性问题12-设
2021-05-28 15:51:34 412
原创 记一次dubbo provider获取不到dubbo.tag问题排查
项目里通过dubbo.tag=gray传递灰度标,但是上游consumer已经在attachment里面设置dubbo.gray了,下游却拿不到。
2024-03-29 15:52:34 328
原创 如何安装不同版本的go
可以通过在goland中preference->go->goroot中下载,选择要下载的目录,就不会覆盖了。如果直接从官网下载不同版本的go并安装,会默认安装到/usr/local/go上,覆盖之前安装的版本。
2024-03-05 17:30:03 530
原创 golangci-lint如何关闭typecheck
typecheck是go源码的校验,无法通过.golangci.yml配置关闭。可以直接在golangci-lint源码层面关闭typecheck。
2024-02-20 10:00:35 664
原创 测试框架goconvey使用
结果图[外链图片转存中…(img-fuv17gA2-1686296533775)][外链图片转存中…(img-vDJdU9QE-1686296533776)]
2023-06-09 15:42:26 107
原创 mock工具GoMock使用
goMock支持对特定输入打桩和对任意输入打桩(gomock.any()),可根据具体情况使用;是官方提供的 mock 框架,同时还提供了 mockgen 工具用来辅助生成测试代码。实际项目中,可以用gomock来mock dao层和rpc层代码,隔离外部依赖。有一个DB接口,使用mockgen产生一个mock对象。在测试的使用mock对象。下面是自动生成的代码。
2023-06-09 15:41:28 465
原创 mock工具-GoStub使用
gostub是一款轻量级打桩框架,虽然已经可以优雅的解决很多场景的函数打桩问题,但对于一些复杂的情况,却只能干瞪眼。github地址:github.com/prashantv/gostub。同时,GoStub框架需要改造函数,不符合我们的日常习惯。
2023-06-09 15:40:57 94
原创 Go单元测试及框架使用
框架名使用说明优点缺点testing如上go官方原生测试框架,简单好用断言不够友好,需要大量if else可以配合testify的assert使用testify1. 和 go test 无缝集成,直接使用该命令运行2. 支持断言,写法更简便3. 支持 mock & suite功能mock的功能不够强大,需要配合其他mock框架使用GoConvey1. 能够使用 go test 来运行测试2. 支持断言,写法更简便3. 支持通过浏览器查看测试结果4. 支持嵌套,可以分组。
2023-06-09 15:39:47 1977
原创 mock工具GoMonkey使用
由于方法(成员函数)无法通过 GoStub 框架打桩,当产品代码的 OO 设计比较多时,打桩点可能离被测函数比较远,导致UT用例写起来比较难受。通过 Monkey,我们可以解决函数或方法的打桩问题,但 Monkey 不是线程安全的,不要将 Monkey 用于并发的测试中。applyFunc和applyMethod 是在运行时把a函数的机器码替换成跳转到b函数地址,使用了内联优化会在编译时将函数直接展开,无法替换。outputs是希望返回的结果序列(测试时会按顺序返回),数量需要和对应的测试用例对应。
2023-06-09 15:39:03 1472 1
原创 多核系统内存假共享问题
假共享是 SMP 系统上的一种常见性能问题。在SMP系统中,每个处理器均有一个高速缓存。当不同处理器上的线程修改驻留在同一高速缓存行(Cache Block,或Cache Line)中的变量时就会发生假共享。这种现象之所以被称为假共享,是因为每个线程并非真正共享相同变量的访问权。访问同一变量或真正共享要求编程式同步结构,以确保有序的数据访问。线程 0 和线程 1 会用到不同变量,它们在内存中彼此相邻,并驻留在同一高速缓存块(Cache Block,或Cache Line)。
2023-05-15 16:37:33 644
原创 Golang基本数据类型
/ rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. //int32的别名,几乎在所有方面等同于int32 //它用来区分字符值和整数值 type rune = int32。
2023-04-18 10:08:38 190
原创 Golang异常控制
如果 panic 和 recover 发生在同一个协程,那么 recover 是可以捕获的,如果 panic 和 recover 发生在不同的协程,那么 recover 是不可以捕获的也就是哪个协程有panic,哪个协程里必须要有recover,否则会把整个程序弄崩溃。
2023-04-14 15:30:39 397
原创 Golang数据类型比较
x = Data {为什么结果为false?debug看一下原因是json.Unmarshal默认会将所有的数字类型转为float64针对这种情况,可以封装一个DeepEqual方法}) bool {
2023-04-12 20:20:40 596
原创 Go开发环境搭建
由于目前网上Go的开发环境搭建文章很多,有些比较老旧,都是基于 GOPATH的,给新入门的同学造成困扰。以下为2023 版 Go 开发环境搭建,可参照此教程搭建Go开发环境。提醒一句,入门教程涉及到代码放入 src 目录下的,基本是基于 GOPATH 的教程,请忽略。
2023-03-28 15:20:32 690
原创 算法学习总结
滑动窗口算法3 最长子串https://leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/thinkings/linked-listjava方法使用降序排序Integer[] arr={9,8,7,6,5,4,3,2,1}; Arrays.sort(arr,Collections.reverseOrder());参考资料很棒,一定要看的github leetcode算法分类学习githu..
2021-08-09 14:20:53 81
原创 并发关键字
summaryAQS:reentrantLock、Semaphore、CountDownLatch、CyclicBarrierArrayBlockingQueue、linkedBlockingQueue、PriorityBlockingQueue、ConcurrentLinkedQueueUnsafeUnsafe类对于并发编程来说是个很重要的类,如果稍微看过J.U.C里的源码,会发现到处充斥着这个类的方法调用。这个类的最大的特点在于,它提供了硬件级别的CAS原子操作volatile作用保证
2021-06-16 11:57:56 134
转载 tcp如何保证可靠性
TCP协议传输的特点主要就是面向字节流、传输可靠、面向连接(字靠连)数据分割-编号(确认应答与序列号)序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一校验和计
2021-06-16 11:54:39 85
原创 springBoot自动装配原理
summarydetail传统的Spring项目会有很多的配置文件,比如我们要使用Redis,一般除了对应的依赖的jar包我们还需要在application.xml里面配置JedisConnectionFactory、JedisPoolConfig、RedisTemplate。但是如果使用SpringBoot的话,系统会根据pom.xml里面的jar包,自动生成这些类并且注入到IOC容器当中。传统Spring项目中需要配置<bean id="jedisConnectionFactory"
2021-06-02 15:19:27 168 1
转载 消息中间件
summary消息中间件作用:-消息幂等性 -三高一(高可用、高性能、高并发、一致性)rabbitMQ:主从模式下,使用镜像复制,让每个节点都有全量数据kafka:副本,ack如何保证消息有序如何保证消息不丢不乱不重不堆积,丢乱重堆队列分类 -不同消息中间件优缺点 消息中间件作用-解耦削峰异步通信冗余(存储)扩展性可恢复性顺序保证缓冲消息幂等性 -对于确保消息在生产者和消费者之间进行传输而言一般有三种传输保障(delivery
2021-05-28 15:55:58 91
原创 JVM内存结构
局操常返附局操常返附堆就是一个主要用于存放对象的内存区域,线程共享的一块区域,堆允许程序在运行时动态地申请某个大小的内存空间堆中有一个不得不提的事 — 垃圾回收(GC),详细见垃圾回收篇虚拟机栈也就是我们常说的线程方法栈。大致符合所了解的先入后出的栈结构特性,其出入栈的数据结构称为栈帧,也就是调用某个方法A时,则会入栈一个栈帧,这个栈帧结构包括了方法A中的局部变量区、操作数据栈,动态链接、方法的返回地址等。在JVM栈这个数据区可能会发生抛出两种错误。1. StackOverflowEr.
2021-03-29 17:17:44 75
转载 Redis---渐进式哈希
Redis支持的数据结构有很多,其中dict的使用非常频繁,其实Redis的每一个数据库结构都是一个dict。dict使用哈希表实现,这也是Redis性能十分强悍的原因之一,增删改查的时间复杂度为O(1).上图是我根据Redis源码中定义的数据结构及网上资料参考画的参考图。随着Redis的操作越来越多,dict中保存的数据量也会动态变化,当数据量增加或者减少到一定的程度,为了让负载因子维持在一个合理的范围内,Redis就会对dict的大小进行相应的扩容或者收缩。而这一过程正是通过渐进式哈希(rehas
2021-03-21 10:11:50 525
原创 SOLID六大设计原则
六大设计原则SOLID单一职责原则:Single Responsibility Principle开闭原则:Open Closed Principle里氏替换原则:Liskov Substitution Principle迪米特法则:Law of Demeter接口隔离原则:Interface Segregation Principle依赖倒置原则:Dependence Inversion Principle单一职责原则:Single Responsibility Principle一个类只
2021-03-15 21:04:12 122
转载 阿里JVM SANDBOX原理
一、前言在开始之前,我们先来模拟一下以下的场景:小李:“小明,你的接口没有返回数据,麻烦帮忙看一下?”小明:“我这边的数据也是从别人的服务器中拿到的,但是我不确定是因为逻辑处理有问题导致没有结果,还是因为我依赖的服务有问题而没有返回结果,我需要确认一下。”小明:“哎呀,线上没有日志,我需要加个日志上个线。”30 分钟之后……小明:“不好意思,日志加错地方了……稍等……”接来下隆重登场的就是本文的主角 JVM SandBox 了。基于 JVM SandBox,我们可以很容易地做到在不重新部署应用
2021-03-11 23:06:02 1262
转载 jdk 1.7 hashMap多线程下循环引用问题
问题的症状从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。而且,这个问题在测试环境里可能很难重现。我们简单的看一下我们自己的代码,我们就知道HashMap被多个线程操作。而Java的文档说HashMap是非线程安全的,应该
2021-03-10 21:31:55 416
原创 AVFoundation学习笔记
1.好文链接1.唐巧AVFoundation和 GPUImage初探http://www.th7.cn/Program/IOS/201508/536693.shtml
2021-03-08 16:45:16 68
原创 数据库一致性
数据库一致性特性ACIDACID是事务的四个特性,指的是atomicity,原子性;consistency,一致性;isolation,隔离性;durability,持久性A:atomicity,原子性C:consistency, 一致性I: isolation,隔离性D:durability,持久性内部不一致性情况: 丢失修改\脏读\幻读\不可重复读导致数据不一致原因修改丢失、脏读、幻读、不可重复读提交读、串行化隔离这些概念是什么修改丢失修改丢失是事务A和B先后更改数据数据x(
2021-03-08 16:42:32 2860 3
原创 B+树、B树、红黑树等各种树的关系
二叉树二叉树又名二叉排序树,亦称二叉搜索树、二叉查找树。是每个结点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”。定义若左子树不空,则左子树上所有节点的值均小于它的根节点的值;若右子树不空,则右子树上所有节点的值均大于它的根节点的值;左、右子树也分别为二叉排序树;没有键值相等的节点。平衡二叉树平衡二叉树是基于二叉查找树优化而来的。定义非叶子结点最多只能有两个子结点,且左边子结点点小于当前结点值,右边子结点大于当前结点树,并且为保证查询性能增增删结点时要保证左右两边结点层级相
2021-03-07 10:38:19 193
原创 java类加载机制
java类加载机制参考资料:java类加载机制[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bX7ZG3sG-1614827353041)(https://pics0.baidu.com/feed/37d12f2eb9389b50828b0dfd61271ed9e6116ec5.jpeg?token=d636526e80bfc081f77f2572a772fe0f&s=B1B25D32819E4DCA56C9C0CE020090B2)]各个区域作用参考
2021-03-04 11:09:21 98 1
原创 java类加载机制
java类加载机制参考资料:java类加载机制[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emugNfh6-1614761394684)(https://pics0.baidu.com/feed/37d12f2eb9389b50828b0dfd61271ed9e6116ec5.jpeg?token=d636526e80bfc081f77f2572a772fe0f&s=B1B25D32819E4DCA56C9C0CE020090B2)]各个区域作用
2021-03-03 16:50:11 69 1
原创 hashMap原理
各种集合类继承关系hashMap put原理首先写个测试方法, 初始化size为2,put几个值,再get查询,debug看方法里执行了什么HashMap<Integer, String> hashMap = new HashMap<>(2);hashMap.put(1, "aaaPh1");hashMap.put(2, "aaaPh2");hashMap.put(3, "aaaPh3");hashMap.put(4, "aaaPh4");hashMa.
2021-02-26 14:13:54 82
原创 spring怎么解决循环依赖
1. 过程演示关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,一定要明白一点就是,一个完整的对象包含两部分:当前对象实例化和对象属性的实例化。在Spring中,对象的实例化是通过反射实现的,而对象的属性则是在对象实例化之后通过一定的方式设置的。理解这一个点之后,对于循环依赖的理解就已经帮助一大步了,我们这里以两个类A和B为例进行讲解,如下是A和B的声明:@Componentpublic class A { private B b; public void setB
2021-02-24 16:01:16 79
原创 秒杀系统设计
秒杀系统特点时间短,访问量大读多写少难点防止超卖保障系统不崩防止缓存雪崩,缓存击穿,缓存穿透拦截恶意请求防止链接暴露保障数据库稳定不挂优化方法url动态加密请求的url加上动态加密串,到了服务端解密,判断是否是合法请求,不合法的直接pass,增加作弊成本前端资源静态化将前端资源放到cdn上,只有动态接口才到服务端前端拦截用户点了按钮后,按钮灰掉,等过几秒才能再点。通过这个方法,已能拦截80%的流量后端拦截同一个uid,限制访问频率,x秒.
2021-02-23 19:53:15 118 2
原创 使用netty搭建一个简单的http服务
到github上下载netty源码:https://github.com/netty/netty查看example首先创建一个HttpHelloWorldServer作为启动类/** * An HTTP server that sends back the content of the received HTTP request * in a pretty plaintext form. */public final class HttpHelloWorldServer {..
2021-02-22 10:06:41 163
原创 使用appledoc将iOS代码注释转为html
安装那么简单介绍一下如何安装appledoc,安装非常简单,只需要2步:git clone git://github.com/tomaz/appledoc.gitcd appledocsudo sh install-appledoc.sh使用appledoc --no-create-docset --project-name "QAVSDKDemo" --project-company
2016-03-14 11:02:43 385
原创 react-native使用flux
终于把flux搭建好了,以为应该很简单,没想到中间还是遇到好多问题,先记录一下以备后面查看,同时也希望能帮助同样遇到这个问题的同学,后面再加上react-native使用flux的详细教程 1.Q:写可点击控件TouchableOpacity时在渲染时候就调用了onPress方法 A:需要写一个匿名函数 2 用TouchableOpacity包Text时需要在Text上再包一层View,否则c
2015-10-31 20:46:54 1246
TableBarViewContrller+NavigationViewController ios经典导航模式
2014-08-06
Android httpUrlConnection Post方式访问网络简单demo
2013-11-11
TestNotification
2013-09-30
android获取home键 在2.X到4.X上亲测能用
2013-09-29
打车软件demo
2013-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人