JAVA
文章平均质量分 90
编码博客控
这个作者很懒,什么都没留下…
展开
-
阿里面试官问我:如何加载100M的图片却不撑爆内存?你会咋答?
还记得当年面试一个面试官问我怎么加载巨图才能不撑爆内存,我没回答上来,他说分片显示,我寻思特么分片能减少内存使用??现在可以打他脸了!内容扩展1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?2.内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存?3.Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM?938页面试宝典PDF。更多面试内容,面试专题,flutter视频 全套,音视频从0到高手开发。私信我【666】免费获取.原创 2020-05-18 21:43:46 · 357 阅读 · 0 评论 -
Android开发之脚本替换PackageName
1 前言平时如果想要替换包名一般是在AS中右键Rename进行操作。但是如果遇到一份代码希望导出几种不同的包名(不是ApplicationId),并且代码还会持续更新,这时候就需要使用脚本在打包时自动导出成不同包名的apk。有的人会说直接可以在build.gradle里面的productFlavors里面设置,然后用placeHolder填充包名就行啦。 注意,这时候就要区分ApplicationId和PackageName了。ApplicationId,是在手机中标识唯一应用的id。(看起来就原创 2020-05-18 21:39:40 · 620 阅读 · 0 评论 -
且听穿林打叶声———Ashmem机制讲解
在Android平台上,提供了一种共享内存的机制——Ashmem。该机制内部其实复用了Linux的共享内存机制。Ashmem机制使用linux的mmap系统调用,可以将同一段物理内存映射到不同进程各自的虚拟地址空间,从而实现高效的进程间共享。大家都知道,在linux上“一切皆文件”,一块共享内存当然也不例外。因此,在用户态,我们能看到的重要概念就是共享内存的“文件描述符”,文件描述符可以对应一...原创 2020-05-07 18:01:48 · 389 阅读 · 0 评论 -
微服务已成Java开发的面试门槛,连SpringCloud都不会怎么涨薪呢
为什么java程序员一定要掌握微服务?近几年,微服务架构迅速在整个技术社区窜红,被认为是 IT 软件架构的未来方向。一线互联网公司由于具有大量的业务体量和业务场景,比如阿里、百度、网易,很早就开始入坑微服务架构。 但说起微服务,不少人还是有这样的困惑:“作为一个开发,微服务架构是不是和我关系不大?那不都是架构师的事吗?” 关于这个问题,我来谈谈自己的看法。微服务是当下最火热的...原创 2020-04-16 22:14:11 · 269 阅读 · 0 评论 -
分布式队列神器 Celery,你了解多少?
我们在web开发中会经常遇到异步任务,对于一些消耗资源和时间的操作,如果不从应用中单独抽出来的话,体验是非常不好的,例如:一个手机验证码登录的过程,当用户输入手机号点击发送后,如果如果直接扔给后端应用去执行的话,就会引起网络IO的阻塞,那整个应用就非常不友好了,那如何优雅的解决这个问题呢?我们可以使用异步任务,当接收到请求后,我们可以在业务逻辑的处理时触发一个异步任务,前端立即返回读秒让用...原创 2020-04-16 16:11:18 · 475 阅读 · 1 评论 -
Redis 的多线程版本比 Redis 本身要快 5 倍
如果我告诉您有一个 Redis 的分支版本,它的性能比原生的 Redis 快 5 倍,而且延迟却降低近 5 倍,你会不会想了解一下这个项目?而如果您不再需要哨兵节点并且您的副本可以接受读取和写入,这将有可能使分片数量减少 10 倍,这样对你的吸引力是不是更大了呢?我说的这个分支版本,它其实是 Redis 的一个分叉版本,名叫 KeyDB 。KeyDB是 Redis 开源的多线程分叉版本。本文...原创 2020-04-15 17:50:21 · 311 阅读 · 0 评论 -
从linux源码看socket(tcp)的timeout
前言网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌。在经历了数次物理机宕机之后,笔者详细的考察了在网络编程(tcp)中的各种超时设置,于是就有了本篇博文。本文大部分讨论的是socket设置为block的情况,即setNonblock(false),仅在最后提及了nonblock socket(本文基于linux 2.6.32-431内核)。connectTimeo...原创 2020-04-15 17:27:52 · 2163 阅读 · 0 评论 -
面试官问你B树和B+树,就把这篇文章丢给他
1 B树在介绍B+树之前, 先简单的介绍一下B树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区别。1.1 B树概念B树也称B-树,它是一颗多路平衡查找树。二叉树我想大家都不陌生,其实,B树和后面讲到的B+树也是从最简单的二叉树变换而来的,并没有什么神秘的地方,下面我们来看看B树的定义。 每个节点最多有m-1个关键字(可以存有的键值对)。 ...原创 2020-04-14 22:38:02 · 178 阅读 · 0 评论 -
阿里P8架构师教你如何准备一场java面试
开篇距离我上一篇文章分享过去已经有2天了,我也没想到会有这么多人看,能够间接能帮助到这么多人!所以趁着周末,准备多开2个坑,各位小伙伴的可以关注+收藏支持一下!上一篇里有个领取完资料的小伙伴给我QQ留言了,这让我非常的开心,也给了我更多的动力去更新一些我自己的心得体会与建议!阿里的面试流程在今天的下午4:30分左右会有一篇关于面试流程,面试技巧的文章分享,各位有...原创 2020-04-14 17:06:57 · 184 阅读 · 0 评论 -
头条开发2年,阿里架构10年,我终于写出了一套Java核心知识点!
Java核心知识点。覆盖了面试,JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。总计80页,送给我的粉丝!获取方式:私信回复【Java】(粉丝福利)获取方式:私信回复【Java】(粉丝福利)私信才能拿到...原创 2020-04-14 17:03:59 · 449 阅读 · 0 评论 -
使用 Docker Compose 部署 MySQL+Tomcat
容器编排模板文件创建 docker-compose.yml 模板文件$ sudo mkdir docker-compose.yml文件内容如下version: '3.1'services: tomcat: restart: always image: tomcat container_name: tomcat ports: - ...原创 2020-04-13 22:44:26 · 289 阅读 · 0 评论 -
程序员被聘用的13个开发技能
为了找出今年最抢手的开发技能,Paul Heltzel着手整理了招聘人员、CTO、CEO和其他高层执行人员认为必须具备的技术,战略和软技能。1.温习JavaScript这些日子,开发人员掌握JavaScript总不会错。JavaScript能力是目前为止被高层执行人员和招聘人员誉为最频繁的追捧技能。JavaScript已被证明是当今市场中高度可移植和宝贵的技能。2.了解大数据大...原创 2020-04-13 22:21:16 · 252 阅读 · 0 评论 -
深入理解JVM - 方法调用
方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程。一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(也就是之前说的直接引用)。解析所有方法调用的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直...原创 2020-04-13 22:16:48 · 122 阅读 · 0 评论 -
Spring全家桶系列文档:Spring系列实战书籍及源码架构解析文档
Spring框架自诞生以来一直备受开发者青睐,今天在这里分享的是一套Spring系列文档集合。其中包括了Spring Boot、Spring Cloud、Spring MVC三个实战书籍及Spring两个解析文档,都是经过BAT架构师精选过的干货内容。需要的朋友帮忙转发+关注然后私信“Spring”获得完整系列文档的领取方式实战书籍Spring BootSpring Cl...原创 2020-04-11 22:22:36 · 1050 阅读 · 1 评论 -
那些年,面试官问你的消息队列
MQ理论介绍一、为什么需要消息队列(MQ)主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。大量的请求到达访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection错误,引发雪崩效应。我们使用消息队列,通过异步处理请求,从而缓解系统的压力。核心:异步处理、流量削峰、应用解耦二、应用场景异步处理,流量削峰,应用解耦,消息通讯...原创 2020-04-11 22:20:40 · 132 阅读 · 0 评论 -
大数据、分布式都用到了的Netty,这几大核心知识你一定要看看!
1. Netty 基础Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。它是一个网络应用框架。2. Netty 高性能之道2.1. RPC 调用的...原创 2020-04-11 22:18:50 · 246 阅读 · 0 评论 -
如此火爆的ZooKeeper,到底如何选主?
前言前面一篇文章我们已经给大家讲解了ZooKeeper的核心的原理,这一篇我们重点分析ZooKeeper的Leader选举算法。Leader的选举是ZooKeeper的最重要技术之一,也是保证分布式系统数据一致的关键。Leader选举流程概述我们本篇文章的目的就是详细的剖析Leader选举的过程,但是Leader选举的过程较为复杂,我们直接上来就讲其详细的过程,大家容易蒙圈,所以我们这...原创 2020-04-10 21:31:36 · 150 阅读 · 0 评论 -
跟Kafka学技术系列之时间轮
写在前面kafka是一个分布式消息中间件,其高可用高吞吐的特点是大数据领域首选的消息中间件,Kafka是分布式消息队列的顺序读写文件分段组织串联起来思想的鼻祖,包括RocketMq这些消息队列都是借鉴了Kafka早期的架构和设计思路改造而来,所以在架构设计层面,Kafka有非常多值得借鉴的地方。本文是作者介绍Kafka优秀架构设计文章中的一篇,文中的代码和流程图均是base on 0.10.2...原创 2020-04-10 21:29:10 · 189 阅读 · 0 评论 -
这么流行的ZooKeeper,原来是这样设计的!
为什么会有ZooKeeper我们知道要写一个分布式应用是非常困难的,主要原因就是局部故障。一个消息通过网络在两个节点之间传递时,网络如果发生故障,发送方并不知道接收方是否接收到了这个消息。有可能是收到消息以后发生了网络故障,也有可能是没有收到消息,又或者可能接收方的进程死了。发送方唯一的确认方法就是再次连接发送消息,并向他进行询问。这就是局部故障:根本不知道操作是否失败。因此,大部分分布式应用...原创 2020-04-10 21:26:16 · 118 阅读 · 0 评论 -
Java开发必读书籍清单JVM+Redis+Nginx+并发编程+Spring全家桶等
1.《深入理解Java虚拟机:JVM高级特性与最佳实践》本书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。第二部分讲解了JVM的自动内存管理,包括虚拟机内...原创 2020-04-09 22:46:54 · 375 阅读 · 0 评论 -
Redis竟然这样被使用?大家来看看是谁的锅
首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象。刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理。但是后来问题出现频率越来越频繁,越来越多的同事开始抱怨,于是感觉代码可能有问题,开始排查。首先发现开发的本地ide没有发现问题,应用卡死时候数据库,redis都正常,并且无特殊错误日志。开始怀疑是sandbox环境机器问...原创 2020-04-09 22:43:56 · 135 阅读 · 0 评论 -
小白被忽悠根目录下执行了rm -rf,不想跑路该怎么办?
前言每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有bug,呵呵。那么如果真的删除了不该删除的文件,比如数据库、日志或执行文件,咋办呢?欲知后事如何,请仔细看完本篇博客。模拟场景1. 删除误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件:>...原创 2020-04-09 22:41:49 · 794 阅读 · 0 评论 -
如果你在面试中,被问到MySQL的服务器架构,你要怎样才能过关?
本章概要地描述了MySQL的服务器架构、各种储存引擎之间的主要区别,以及这些区别的重要性。另外也会回顾一下MySQL的历史背景和基准测试,并试图通过简化细节和演示案例来讨论MySQL的原理。这些讨论无论是对数据库一无所知的新手,还是熟知其他数据库的专家,都不无裨益分享一篇16篇MySQL架构讲解篇MySQL架构和历史分享一篇文档给大家MySQL架构MySQL基准测试分享...原创 2020-04-08 22:28:34 · 305 阅读 · 0 评论 -
新人入职不到一天,刚写完代码,就被领导开除了????
1有一个程序员,入职了一家公司,上午刚刚写下一段代码,没想到下午就有人事来通知他被开除了。这个程序员表示很委屈。感觉这个方法,除了性能差一点,没啥别的问题呀。。。2除了获取时间以外,一位程序员因为自己写了个排序算法,也被开除了。3统计用户总数,这代码还真是666呢。4前段时间网传的价值一个亿的AI核心代码,你能看出其中的端倪...转载 2020-04-08 22:26:59 · 5267 阅读 · 1 评论 -
redis常用数据结构以及使用场景举例
一、常用数据机构二、String字符串类型 常用命令:set(设置键值对)、mset(批量设置键值对)、setnx(当键不存在时设置键值对)、get(根据键获取值)、mget(批量根据键获取值)、del(根据键删除键值对)、expire(设置键超期时间)、incr(将键对应的数值加1)、incrby(将键对应的数值加自定义大小...原创 2020-04-08 22:16:19 · 473 阅读 · 0 评论 -
数据源管理 | 基于JDBC模式,适配和管理动态数据源
一、关系型数据源1、动态数据源动态管理数据源的基本功能:数据源加载,容器维护,持久化管理。2、关系型数据库不同厂商的关系型数据库,提供的链接方式,驱动包,驱动类名都是不一样的,Java数据库连接API,JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法,且适配大部分关系型数据库。3、适配要素核心要素:驱动包、...原创 2020-04-08 21:43:56 · 694 阅读 · 0 评论 -
分布式定时任务调度框架实践
本文首发于 vivo互联网技术 微信公众号链接:https://mp.weixin.qq.com/s/l4vuYpNRjKxQRkRTDhyg2Q作者:陈王荣分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。一、业务背景1.1 ...原创 2020-04-07 22:24:55 · 196 阅读 · 0 评论 -
Java架构师带你解密Dubbo核心:Remoting+Cluster+Registry
Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring框架无缝集成。其核心部分包含:主要就是如下3个核心功能:Remoting:网络通信框架,提供对多种NIO框架抽象封装,包...原创 2020-04-07 22:03:42 · 171 阅读 · 0 评论 -
架构师带你深入浅出Dubbo实战,这份文档让你玩转Dubbo框架
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不...原创 2020-04-07 22:02:10 · 192 阅读 · 0 评论 -
Java高可用集群架构与微服务架构简单分析
序可能大部分读者都在想,为什么在这以 dubbo、spring cloud 为代表的微服务时代,我要还要整理这种已经“过时”高可用集群架构?本人工作上大部分团队都是7-15人编制的开发团队,对应的公司项目也大都是中小型项目,最大的项目 PV/UV 也就只有 10w/2w 。在这样的场景下,中小型公司一般都是创业起步没多久,大部分都需要本着“开源节流”、“以最小的成本把产出最大化”。微服务架...原创 2020-04-03 22:57:33 · 181 阅读 · 0 评论 -
RocketMQ 升级到主从切换(DLedger、多副本)实战
本文主要介绍如何将 RocketMQ 集群从原先的主从同步升级到主从切换。首先先介绍与 DLedger 多副本即 RocketMQ 主从切换相关的核心配置属性,然后尝试搭建一个主从同步集群,再从原先的 RocketMQ 集群平滑升级到 DLedger 集群的示例,并简单测试一下主从切换功能。1、RocketMQ DLedger 多副本即主从切换核心配置参数详解其主要的配置参数如下所示:...转载 2020-04-03 22:55:28 · 815 阅读 · 0 评论 -
如何利用缓存机制实现JAVA类反射性能提升30倍
在实际工作中的一些特定应用场景下,JAVA类反射是经常用到、必不可少的技术,在项目研发过程中,我们也遇到了不得不运用JAVA类反射技术的业务需求,并且不可避免地面临这个技术固有的性能瓶颈问题。通过近两年的研究、尝试和验证,我们总结出一套利用缓存机制、大幅度提高JAVA类反射代码运行效率的方法,和没有优化的代码相比,性能提高了20~30倍。本文将与大家分享在探索和解决这个问题的过程中的一些有价值...转载 2020-04-03 22:52:45 · 251 阅读 · 0 评论 -
分布式负载均衡算法之亲和性轮询原理
无论是在早期的负载均衡器中,还是当前微服务基于客户端的负载均衡中,都有一个最基础的轮询算法,即将请求平均分布给多台机器,今天聊聊在此基础上, kube proxy是如何实现亲和性轮询的核心数据结构. 了解亲和性策略实现,失败重试等机制1. 基础筑基1.1 Service与EndpointsService和Endpoint是kubernetes中的概念,其中Service代表一个服务,...原创 2020-04-03 16:08:21 · 536 阅读 · 0 评论 -
深入理解JVM - ZGC垃圾收集器
如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器和深入理解JVM - Shenandoah垃圾收集器。ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在JDK 11新加入,...原创 2020-04-03 15:22:35 · 164 阅读 · 0 评论 -
springboot整合mybatis并设置多数据源
现在springboot的火热程度已经超过了spring了,因为springboot简单快速方便,springboot的初衷就是为了简化spring的配置,是的开发中集成新功能时更快,简化或者减少相关的配置。springboot的基础是“约定大于配置”。整合了所有的框架,可以把springboot当作一个框架集合。我们来看看spring官网对springboot的特点的描述: 1. 创...原创 2020-04-02 22:58:22 · 405 阅读 · 0 评论 -
深入Redis客户端(redis客户端属性、redis缓冲区、关闭redis客户端)
Redis 数据库采用 I/O 多路复用技术实现文件事件处理器,服务器采用单线程单进程的方式来处理多个客户端发送过来的命令请求,它同时与多个客户端建立网络通信。服务器会为与它相连接的客户端创建相应的 redis.h/redisClient 结构,在这个结构中保存了当前客户端的相关属性及执行相关功能时的数据结构。I/O 多路复用:linux有五类io模型 1.阻塞 2.非阻塞 3.io多路复用 ...原创 2020-04-02 22:07:29 · 166 阅读 · 0 评论 -
数据源管理 | 主从库动态路由,AOP模式读写分离
一、多数据源应用1、基础描述在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据,这种读写分离模式可以缓解数据库压力,提高系统的并发能力和稳定性,执行效率。2、核心API在处理这种常见问题,要学会查询服务基础框架的API,说直白点就是查询Spring框架的API(工作几年,还没用过Spring之外的框架搭建环境),这种常用...原创 2020-04-01 21:59:51 · 230 阅读 · 0 评论 -
Java线程系列:线程状态的转换
一、线程状态线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下:1、新状态:线程对象已经创建,还没有在其上调用start()方法。2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来...原创 2020-04-01 21:53:35 · 132 阅读 · 0 评论 -
当 Kafka 分区不可用且 leader 副本被损坏时,如何尽量减少数据的丢失?
经过上次 Kafka 日志集群某节点重启失败导致某个主题分区不可用的事故之后,这篇文章专门对分区不可用进行故障重现,并给出我的一些骚操作来尽量减少数据的丢失。故障重现下面我用一个例子重现现分区不可用且 leader 副本被损坏的例子:使用 unclean.leader.election.enable = false 参数启动 broker0; 使用 unclean.leader.el...原创 2020-03-31 22:37:07 · 516 阅读 · 0 评论 -
架构师内功心法,23种设计模式中最为复杂的访问者模式详解
访问者模式(Visitor Pattern)是一种将数据结构和数据操作分离的设计模式。是指封装一些作用于某种数据结构中的各种元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。访问者模式被称为最复杂的设计模式,并且使用频率不高,设计模式的作者也评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。访问者模式的基本思想是,针对系统中拥有固定类型...原创 2020-03-31 21:57:29 · 328 阅读 · 0 评论