Java基础及实战
文章平均质量分 84
Java基础及实战专栏,介绍Java的基础知识以及工作中的一些经验积累,包括避免开发Bug、良好编码规范、常用接口、提高开发效率、需求文档编写、架构设计、源码解读等。注意RocketMQ部分文档来自官方,用意在于提取了精华部分,规范我们的一些文档编写等。
优惠券已抵扣
余额抵扣
还需支付
¥59.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
卡布奇诺-海晨
《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。有研究MyBatis的经验,设计模式,基本算法,也有相关的博文输出。未来时间允许情况下,推出更多的关于框架源码的知识以及结合工作经验的沉淀。程序员这条路一开始走对了后面就轻松些,作为过来人,有经验感受在博文透露。程序员这条路最好有个引路人,每个人都可以努力,但是方向不对努力白费。某音有视频教程(某马/某千等都是上万价格)
展开
-
【Java实战】系统设计需要注意的细节
随着代码的重复次数不断增加,维护成本指数级上升。随意复制和粘贴代码,必然会导致代码的重复,在维护代码时,需要修改所有的副本,容易遗漏。必要时抽取共性方法,或者抽象公共类,甚至是组件化。原创 2022-12-07 15:08:37 · 375 阅读 · 2 评论 -
【Java实战】大厂都是怎样进行单元测试的
对于数据库相关的查询,更新,删除等操作,不能假设数据库里的数据是存在的,或者直接操作数据库把数据插入进去,请使用程序插入或者导入数据的方式来准备数据。原创 2022-12-05 11:26:01 · 516 阅读 · 4 评论 -
【Java实战】代码的注释怎样写才对
第一、能够准确反映设计思想和代码逻辑;第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。原创 2022-12-04 11:31:12 · 231 阅读 · 2 评论 -
【Java实战】泄露用户隐私被罚巨款?系统被攻击?如何避免?
CSRF (Cross-site request forgery) 跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户不知情的情况下对数据库中用户参数进行相应修改。原创 2022-12-03 20:42:49 · 872 阅读 · 2 评论 -
【Java实战】这样写代码与Bug说拜拜
某业务的数据库表 id 字段定义类型为 bigint unsigned,实际类对象属性为 Integer,随着 id 越来越大,超过 Integer 的表示范围而溢出成为负数,此时数据库 id 不支持存入负数抛出异常产生线上故障。原创 2022-12-03 11:17:04 · 588 阅读 · 0 评论 -
【Java实战】这样写SQL语句性能嘎嘎好
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如,制定交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路行驶?原创 2022-12-02 12:43:33 · 471 阅读 · 2 评论 -
【Java实战】如何正确使用数据库索引
MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。原创 2022-12-01 15:01:44 · 234 阅读 · 0 评论 -
【Java实战】工作中建表规约
现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码会人为地增加排查问题的难度;数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险;工程结构混乱导致后续项目维护艰难;没有鉴权的漏洞代码容易被黑客攻击等。原创 2022-11-30 10:22:55 · 479 阅读 · 2 评论 -
【Java实战】这样写代码老大会夸赞你哦
对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,代码质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。原创 2022-11-29 22:51:59 · 215 阅读 · 2 评论 -
【Java实战】工作中如何规范控制语句
对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,代码质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。原创 2022-11-29 08:49:00 · 397 阅读 · 2 评论 -
【Java实战】工作中并发处理规范
对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,代码质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。原创 2022-11-28 20:13:13 · 522 阅读 · 4 评论 -
【Java实战】工作中规范使用Java集合
工作中集合就是家常便饭原创 2022-11-28 08:45:24 · 662 阅读 · 2 评论 -
【Java实战】工作中如何规范定义Java常量
Java常量定义原创 2022-11-27 12:02:09 · 770 阅读 · 0 评论 -
【多线程】Thread的interrupt()
如果子线程执行完毕终止状态,主线程再去调用interrupt()有什么效果?如果子线程还在执行过程中,主线程调用interrupt()有什么结果?原创 2022-11-24 11:43:20 · 562 阅读 · 4 评论 -
提升系统性能之Future模式
系统性能遇到瓶颈,可考虑选择的方案也有不少,不过可同时采取多种解决方案。其中Future模式是一种解决方案,场景适合的话就把它用上,如将串行任务改成并行任务;请求超时结束请求等。那么它的作用机制是什么呢、底层实现、实现类?为什么不使用Thread、Runnable、Callable,那么它们的使用场景有哪些?原创 2022-11-13 14:50:25 · 443 阅读 · 3 评论 -
保证接口/数据安全
这是一道每个系统都应该涉及的面试题,回答上来的话还是有加分项。系统的设计是必须考虑到接口的安全的,否则就容易被不法分子恶意攻击。本人也在真实开发场景中遇到过,后来做了加密的处理,以减少攻击。当然还是有各层面的预防措施的,下面来罗列下,当然措施是需搭配使用才能让你的系统更加健壮。接口数据安全的保证过程,主要体现在这几个方面:一个就是数据传输过程中的安全,还有就是数据到达服务端,如何识别数据,最后一点就是数据存储的安全性。原创 2022-10-07 12:10:30 · 642 阅读 · 0 评论 -
Window系统安装JDK8与Maven
jdk8、maven3.6.3安装配置原创 2022-09-10 17:38:25 · 828 阅读 · 1 评论 -
Java包下的Unsafe类
本篇文章的主角Unsafe类,本来兴致挺高的,读着读着,Java原子类底层用到它,Java并发锁也用到它,于是打破砂锅“读”到底。一点击进去,结果好像什么也没有,却又明显的用了几个Java关键字(final、private、native等)。前面两个好理解,学过Java的都知道,后面一个native就鲜为人知,因为它是JDK源码里面才涉及的,被修饰的叫本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用,访问操作系统资源。原创 2022-09-09 15:49:18 · 262 阅读 · 0 评论 -
RocketMQ的Controller模式
为了统一日志复制流程, 区分每一任 Master 的日志复制边界, 方便日志截断, 引入了 MasterEpoch 的概念, 代表当前 Master 的任期号 (类似 Raft Term 的含义)。 对于每一任 Master, 其都有 MasterEpoch 与 StartOffset, 分别代表该 Master 的任期号与起始日志位移。 需要注意的是, MasterEpoch 是由 Controller 决定的, 且其是单调递增的。原创 2022-09-08 22:57:05 · 1174 阅读 · 0 评论 -
多线程之ThreadPoolExecutor
每次执行任务创建线程 new Thread()比较消耗性能, 创建一个线程是比较耗时、耗资源的。 调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建, 线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪, 还有线程之间的频繁交替也会消耗很多系统资源。 接使用 new Thread() 启动的线程不利于扩展, 比如定时执行、定期执行、定时定期执行、线程中断等都不便实现。 而使用线程池可以优化上面的问题,充分利用系统资源,提升系统的性能。原创 2022-09-02 14:12:20 · 297 阅读 · 0 评论 -
多线程之线程的执行顺序
上一节中有讲到调用start()方法后,线程就进入RUNNABLE状态,但是它还需要获取CPU资源才能开始运行,这也就是为什么线程的执行是无序的原因 。也就是说,在同一个方法中,连续创建多个线程后,调用线程的start()方法的顺序并不能决定线程的执行顺序。......原创 2022-08-31 09:39:40 · 693 阅读 · 0 评论 -
多线程之Thread
线程类只是实现了 Runnable 接口或 Callable 接口, 还可以继承其他类。在这种方式下, 多个线程可以共享同一个 target 对象, 所以非常适合多个相同线程来处理同一份资源的情况, 从而可以将 CPU、代码和数据分开, 形成清晰的模型, 较好地体现了面向对象的思想。......原创 2022-08-30 21:26:29 · 325 阅读 · 0 评论 -
RocketMQ的从节点代理主节点模式
上图为当前RocketMQ Master-Slave冷备部署,在该部署方式下,即使一个Master掉线,发送端仍然可以向其他Master发送消息,对于消费端而言,若开启备读,Consumer会自动重连到对应的Slave机器,不会出现消费停滞的情况。但也存在以下问题:原创 2022-09-07 15:19:41 · 565 阅读 · 0 评论 -
RocketMQ的“Request-Reply”特性
随着服务规模的扩大,单机服务无法满足性能和容量的要求,此时需要将服务拆分为更小粒度的服务或者部署多个服务实例构成集群来提供服务。在分布式场景下,RPC是最常用的联机调用的方式。原创 2022-09-06 12:45:22 · 341 阅读 · 0 评论 -
RocketMQ生产消费消息的样例
使用RocketMQ发送三种类型的消息:同步消息、异步消息和单向消息。其中前两种消息是可靠的,因为会有发送是否成功的应答。使用RocketMQ来消费接收到的消息。原创 2022-09-03 20:04:55 · 283 阅读 · 0 评论 -
RocketMQ的Quorum Write和自动降级
在RocketMQ中,主备之间的复制模式主要有同步复制和异步复制,如上图所示,Slave1的复制是同步的,在向Producer报告成功写入之前,Master需要等待Slave1成功复制该消息并确认,Slave2的复制是异步的,Master不需要等待Slave2的响应。在RocketMQ中,发送一条消息,如果一切都顺利,那最后会返回给Producer客户端一个PUT_OK的状态,如果是Slave同步超时则返回FLUSH_SLAVE_TIMEOUT状态,如果是Slave不可用或者Slave与Master之间..原创 2022-09-14 08:55:32 · 480 阅读 · 0 评论 -
RocketMQ的特性(features)
1 订阅与发布消息的发布是指某个生产者向某个topic发送消息;消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据。2 消息顺序消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了三条消息分别是订单创建、订单付款、原创 2022-09-03 18:54:28 · 255 阅读 · 0 评论 -
RocketMQ的Schedule example
例如在电子商务中,如果提交订单,可以发送延迟消息,1小时后可以查看订单状态。 如果订单仍未付款,则可以取消订单并释放库存。原创 2022-09-02 19:51:09 · 352 阅读 · 0 评论 -
RocketMQ批量消息发送
批量消息发送能够提高发送效率,提升系统吞吐量。同一批批量消息的topic、waitStoreMsgOK属性必须保持一致,批量消息不支持延迟消息。批量消息发送一次最多可以发送 4MiB 的消息,但是如果需要发送更大的消息,建议将较大的消息分成多个不超过 1MiB 的小消息。原创 2022-09-02 19:46:41 · 1522 阅读 · 0 评论 -
RocketMQ的设计(design)
消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。原创 2022-09-01 21:34:07 · 247 阅读 · 0 评论 -
RocketMQ的基本概念
RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer .原创 2022-08-31 19:45:36 · 197 阅读 · 0 评论 -
RocketMQ的BrokerContainer
在RocketMQ 4.x版本中,一个进程只有一个broker,通常会以主备或者DLedger(Raft)的形式部署,但是一个进程中只有一个broker,而slave一般只承担冷备或热备的作用,节点之间角色的不对等导致slave节点资源没有充分被利用。 因此在RocketMQ 5.x版本中,提供一种新的模式BrokerContainer,在一个BrokerContainer进程中可以加入多个Broker(Master Broker、Slave Broker、DLedger Broker),来提高......原创 2022-09-07 15:00:26 · 953 阅读 · 1 评论 -
RocketMQ的架构设计
启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。原创 2022-08-31 11:23:10 · 346 阅读 · 0 评论 -
RocketMQ的Dledger快速搭建与集群搭建
该文档主要介绍如何快速构建和部署基于 DLedger 的可以自动容灾切换的 RocketMQ 集群,以及主要介绍如何部署自动容灾切换的 RocketMQ-on-DLedger Group原创 2022-09-09 09:43:00 · 389 阅读 · 0 评论 -
RocketMQ的DefaultMQProducer接口描述
DefaultMQProducer类是应用用来投递消息的入口,开箱即用,可通过无参构造方法快速创建一个生产者。主要负责消息的发送,支持同步/异步/oneway的发送方式,这些发送方式均支持批量发送。可以通过该类提供的getter/setter方法,调整发送者的参数。DefaultMQProducer提供了多个send方法,每个send方法略有不同,在使用前务必详细了解其意图。下面给出一个生产者示例代码。.........原创 2022-08-29 12:17:57 · 330 阅读 · 0 评论 -
RocketMQ的ACL需求背景及其设计
权限控制(ACL)主要为RocketMQ提供Topic资源级别的用户访问控制。用户在使用RocketMQ权限控制时,可以在Client客户端通过 RPCHook注入AccessKey和SecretKey签名;同时,将对应的权限控制属性(包括Topic访问权限、IP白名单和AccessKey和SecretKey签名等)设置在distribution/conf/plain_acl.yml的配置文件中。Broker端对AccessKey所拥有的权限进行校验,校验不过,抛出异常; ACL客户端可以参考:org.ap原创 2022-08-28 21:34:17 · 497 阅读 · 0 评论 -
Window系统安装RocketMQ
rocketmq安装原创 2022-08-28 17:45:50 · 323 阅读 · 0 评论 -
HandlerInterceptorAdapter+WebMvcConfigurer实现自定义拦截器
HandlerInterceptorAdapter是spring的一个非常好用的组件,基于spring的AOP实现,真实开发场景中它扮演了一种重要的角色,所以一定要掌握它。原创 2022-08-26 18:56:11 · 457 阅读 · 0 评论 -
HttpServletRequest
调用第三方接口、拦截器以及过滤器等场景都要求对HttpServletRequest和ServletRequest有一定深度的认识,才可以应对相应的需求。原创 2022-08-26 16:42:21 · 322 阅读 · 0 评论 -
Java基础面经1
Java面经1原创 2022-08-23 20:47:19 · 298 阅读 · 0 评论