随笔分类 -  java

JAVA 转型
摘要:ZooKeeper 作为优秀的分布系统协调组件,值得一探究竟。它的启动类主要为: 1. 单机版的zk 使用 ZooKeeperServerMain 2. 集群版的zk 使用 QuorumPeerMain 与用户端各服务端之间存在着各种通信!当然主要分为三个: 1. 客户端与zk的通信; 2. 各zk 阅读全文
posted @ 2019-10-23 18:50 阿牛20 阅读(3011) 评论(0) 推荐(0) 编辑
摘要:我们有些场景,是需要使用 多线各一起执行某些操作的,比如进行并发测试,比如进行多线程数据汇总。 自然,我们可以使用 CountDownLatch, CyclicBarrier, 以及多个 Thread.join()。 虽然最终的效果都差不多,但实际却各有千秋。我们此处主要看 CyclicBarrie 阅读全文
posted @ 2019-10-17 10:37 阿牛20 阅读(927) 评论(0) 推荐(0) 编辑
摘要:所谓异步任务,就是不在当前线程中进行执行,而是另外起一个线程让其执行。那么当前线程如果想拿到其执行结果,该怎么办呢? 如果我们使用一个公共变量作为结果容器,两个线程共用这个值,那么应该是可以拿到结果的,但是这样一来,对业务就会造成侵入干扰了,因为你始终得考虑将这个共享变量传入到这个异步线程中去且要维 阅读全文
posted @ 2019-10-13 13:59 阿牛20 阅读(4492) 评论(0) 推荐(1) 编辑
摘要:在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理。因为只有在相同字符串的情况下,并发操作才是不被允许的。而如果我们不分青红皂白直接全部加锁,那么整体性能就下降得厉害了。 1. 为什么选择string做锁? 因为string的多样性,看起来s 阅读全文
posted @ 2019-09-23 18:24 阿牛20 阅读(1951) 评论(1) 推荐(1) 编辑
摘要:如今,我们想要开发一个网络应用,那是相当地方便。不过就是引入一个框架,然后设置些参数,然后写写业务代码就搞定了。 写业务代码自然很重要,但是你知道: 你的数据是怎么来的吗?通过网络传输过来的呗。 你知道网络是通过什么方式传输过来的吗?光纤呗,TCP/IP协议呗。 看起来都难不住我们的同学们,但是,以 阅读全文
posted @ 2019-09-12 21:59 阿牛20 阅读(1721) 评论(0) 推荐(1) 编辑
摘要:模型一词,原本是好理解的,名词,大概就是一个缩小版的实际产品的意思。 当然了,你可以去查查百科,模型其实不只可以描述实物,还可以描述虚拟物件。我们主要来看看后者。(百科: https://baike.baidu.com/item/模型/1741186?fr=aladdin) 当模型这在软件行业使用时 阅读全文
posted @ 2019-09-01 15:09 阿牛20 阅读(2073) 评论(0) 推荐(0) 编辑
摘要:面试过程中,各面试官一般都会教科书式的问你几个多线程的问题,但又不知从何问起。于是就来一句,你了解多线程吗?拜托,这个好伤自尊的! 相信老司机们对于java的多线程问题处理,稳如老狗了。你问我了解不?都懒得理你。 不过,既然是面对的是面试官,那你还得一一说来。 今天我们就从多个角度来领略下多线程技术 阅读全文
posted @ 2019-08-25 15:52 阿牛20 阅读(2386) 评论(0) 推荐(1) 编辑
摘要:随着业务的发展,数据量剧增,我们一些简单报表大盘类的任务,就不能简单的依赖于RDBMS了,而是依赖于数仓之类的大数据平台。 数仓有着巨量数据的存储能力,但是一般都存在一定数据延迟,所以要想完全依赖数数仓来解决实时报表问题,是困难的。 其实,所谓的实时报表,往简单了说就是: 对现在的一些数据进行加减乘 阅读全文
posted @ 2019-08-18 10:57 阿牛20 阅读(6100) 评论(0) 推荐(4) 编辑
摘要:天下武功,无坚不摧,唯快不破!所以我们重视速度没毛病! 老话说:不要过早优化。赞同! 我们在写代码过程中,有时可能就是为了追求所谓的性能,然后,就给自己挖坑了。 关于开发速度,我有以下几点思考: 1. 程序运行速度的思考:不能只为了速度而丢弃了:扩展性,高内聚性,低耦合性;还要站在更高层次来考虑问题 阅读全文
posted @ 2019-08-16 23:35 阿牛20 阅读(405) 评论(0) 推荐(0) 编辑
摘要:java 语言有个神奇的地方,那就是你时不时会去关注下内存。(当然了,任何牛逼的同学都应该关注内存) 今天我们就来这么个问题现场吧:某应用运行了一段时间后,ecs监控报警了,内存比较高了,怎么办?随着时间的推移,发现内存越来越高缓缓增长,怎么办? 凡事讲究证据,报警系统说内存紧张就紧张吗,还得自己去 阅读全文
posted @ 2019-08-11 14:02 阿牛20 阅读(10842) 评论(0) 推荐(3) 编辑
摘要:如何做一个实时的业务统计的监控?比如分钟级?也就是每分钟可以快速看到业务的变化趋势,及可以做一些简单的分组查询? 哎,你可能说很简单了,直接从数据库 count 就可以了! 你是对的。 但如果不允许你使用db进行count呢?因为线上数据库资源可是很宝贵的哦,你这一count可能会给db带来灾难了。 阅读全文
posted @ 2019-07-21 11:21 阿牛20 阅读(2906) 评论(0) 推荐(0) 编辑
摘要:做一个系统,如果不做监控,是不完善的。 如果为做一个快速系统,花力气去做监控,是不值得的。(监控系统不是你想做,想做就能做的。) 因此,我们有必要具备一个能够快速建立监控体系的能力。即使你只是一个普通开发人员!(说不定明天就要叫你去领兵大操练呢) 个人觉得,做监控要有三个核心能力: 1. 持续收集数 阅读全文
posted @ 2019-07-05 19:05 阿牛20 阅读(3712) 评论(0) 推荐(2) 编辑
摘要:一般地,像kafka之类的消息中间件,作为一个可以保持历史消息的组件,其消费模型一般是主动拉取方式。这是为了给消费者足够的自由,回滚或者前进。 然而,也正是由于将消费消息的权力交给了消费者,所以,消费者往往需要承担更多的责任。比如:需要自行保存消费偏移量,以便后续可以知道从哪里继续。而当这一点处理不 阅读全文
posted @ 2019-07-01 15:50 阿牛20 阅读(1896) 评论(1) 推荐(1) 编辑
摘要:假设场景: 1. 针对一个高并发的应用,你是否会选择打印访问日志? 2. 针对分布式的应用,你是否会选择将所有日志打印到日志中心? 解决方案: 1. 如果如果你选择为了性能,不打印日志,那无可厚非。但是你得考虑清楚,出问题的时候是否能够做到快速排查? 2. 你觉得日志分布在各台机器上很方便,那不用日 阅读全文
posted @ 2019-06-07 14:53 阿牛20 阅读(2337) 评论(0) 推荐(1) 编辑
摘要:首先,咱们都有一共识,即可以使用缓存来提升系统的访问速度! 现如今,分布式缓存这么强大,所以,大部分时候,我们可能都不会去关注本地缓存了! 而在一起高并发的场景,如果我们一味使用nosql式的缓存,如 redis, 那么也是好的吧! 但是有个问题我们得考虑下: redis 这样的缓存是快,但是它总有 阅读全文
posted @ 2019-05-20 16:17 阿牛20 阅读(4237) 评论(0) 推荐(0) 编辑
摘要:开发某个项目过程中,就需求,搭建了一套测试环境。很快完成! 后来代码中加入了许多新功能,会涉及到反复重启,然后就发现了启动特别慢。这给原本功能就不多的应用增添了许多的负担。 我决定改变这一切!找到启动缓慢的根源,加快启动速度! 思路展开: 1. 启动慢,先看日志,有没有什么异常? 2. 看下是不是g 阅读全文
posted @ 2019-05-09 09:36 阿牛20 阅读(7432) 评论(3) 推荐(2) 编辑
摘要:监控和调试功能是应用必备的属性之一,其手段也是多种多样。 一般地,我们可以通过:线上日志, zabbix, grafana, cat 等待系统做一问题留底,有问题及时报警,从而达到监控效果。 而对于应用的调试,我之前的文章也提到了几个工具,当然,我对于 arthas 是调试赞扬的。请参考: 线上应用 阅读全文
posted @ 2019-05-06 21:05 阿牛20 阅读(5464) 评论(0) 推荐(0) 编辑
摘要:在之前的文章中,我介绍了使用 Btrace 工具进行线上代码的debug (https://www.cnblogs.com/yougewe/p/10180483.html),其大致原理就是通过字节码注入的方式进行辅助排查。 可以说,btrace 已经给我们的开发调试一带来了许多的方便,我们在上面做任 阅读全文
posted @ 2019-04-28 11:56 阿牛20 阅读(11136) 评论(0) 推荐(3) 编辑
摘要:给你一组json数据结构,你把它解析出来到项目中,你会怎么做? 首先,code,msg,data 肯定是固定结构,所以可以抽象出一层 data 的变化,可以使用泛型去适应变化; 其次,data下的数据是 key -> object 的结构,如果直接object表示的话,又不友好了。如果不以objec 阅读全文
posted @ 2019-04-11 18:54 阿牛20 阅读(9405) 评论(1) 推荐(0) 编辑
摘要:zk用处如此之多,以至于每个地方都要你理解zk原理! 请按如下操作姿势打开: 1. 打开zk的git仓库地址: https://github.com/apache/zookeeper , 确认过眼神,它就是你要找有人! 2. 下载源码到本地,下载 ant 工具到本地,(如果还没下载的话: http: 阅读全文
posted @ 2019-03-24 16:16 阿牛20 阅读(5298) 评论(0) 推荐(0) 编辑