
Java
文章平均质量分 96
为Java大世界,添砖加瓦
crxk
某国民级橙色购物APP后端开发~
展开
-
调用一个RPC服务的三重境界
基于大厂开发实践经验,演进式地讲述面向过程与面向对象思维方式的不同原创 2023-11-15 19:57:03 · 269 阅读 · 0 评论 -
阿里云服务器 Could not connect to SMTP host: smtp.163.com, port: 25 (Java发送邮件)
Java发送邮件网上关于Java发送邮件的方法很多,这里介绍一种比较简单的方式,仅需一行代码即可。MailUtil.send("hutool@foxmail.com", "测试", "邮件来自Hutool测试", false);这里是用到了hutool工具包所封装的邮件工具,点此查看相关文档。解决bug在本地开发阶段很容易就可以把邮件发送出去,当把程序部署到阿里云的服务器之后,便会报以下异常:Could not connect to SMTP host: smtp.163.com, port:原创 2020-12-01 19:01:31 · 2800 阅读 · 1 评论 -
探究JVM——从字节码到对象(类加载、ClassLoader、双亲委派机制、方法区类信息、Class对象)
引言众所周知,Java代码被编译器处理成字节码文件,然后存放在计算机的硬盘之上,但程序运行时CPU是与内存打交道的,这就需要把字节码文件加载到内存中去并生成一个个的实例对象,此篇文章将剖析此过程,弄清楚安眠于硬盘中字节码是如何变成生龙活虎的对象滴。ClassLoader 类加载器顾名思意,类加载器的作用就是把Class文件加载到内存,之后生成一个Class对象。class文件可以来自于本地硬盘、jar包、网络流甚至是基于动态代理技术运行时计算生成的,只要符合JVM规范所规定的格式都能被加载。类加原创 2020-11-30 18:32:40 · 466 阅读 · 0 评论 -
【微服务进阶】带你搞懂Service Mesh(服务网格)
阅读此文需要掌握微服务架构的相关知识何为Service Mesh?Service Mesh是用于处理服务与服务之间通信的专用基础设施层,与应用程序一起部署,但是对应用程序透明。微服务架构之痛大规模微服务群,服务治理问题虽然微服务对应用开发进行了简化,将复杂系统“分而治之”地切分为若干个微服务来分解和降低复杂度,使得这些微服务易于小型开发团队进行开发和维护。但是,复杂度并没有凭空消失。微服务拆分之后,单个微服务的复杂度确实大幅降低,但是由于应用系统被从一个单体拆分为更多的微服务,就带来了更复杂的.原创 2020-11-23 21:46:47 · 1119 阅读 · 0 评论 -
Hello ~ Mr.多线程,听说你很快?
灵魂拷问:多线程一定快吗?有些编程基础的朋友们都知道,我们使用多线程的目的就是为了加快程序的处理速度,但是我想重新问一下用了多线程程序就一定快吗?为了讨论这个问题需要首先分析一下多线程能够提速的核心因素是什么?多线程能够充分利用计算机的硬件资源,现在的CPU都是多核心,使用多线程能够充分发挥CPU的性能从而提高程序的运行速度,这样的解释还不够深入。在笔者看来多线程速度快的核心因素就一句话:把串行执行顺序变为并行执行串行与并行以爬虫为例,下图为单线程爬虫的执行顺序,看箭头的指向,它们首尾衔接依次执原创 2020-11-21 10:14:15 · 1087 阅读 · 0 评论 -
【深入浅出】SpringBoot 自动装配原理 以及 自定义Starter
SpringBoot 自动装配原理剖析及应用(自定义Starter)引言: SpringBoot 为啥这么方便?在早期的Spring + Spring MVC项目开发过程中,需要大量的xml配置,这一点让广大程序员们苦不堪言,web.xml、applicationContext.xml ……这些配置文件拖慢了开发效率,对于新手程序员也十分不友好,直接劝退。Spring团队也意识到了此问题,推出了SpringBoot来解决此问题,其遵循“约定大于配置”的理念,配合各种Starter几乎可以“零配置”编码原创 2020-11-16 17:50:56 · 4185 阅读 · 0 评论 -
【超方便】树莓派安装ZooKeeper,并搭建ZooKeeper可视化管理UI界面
⚡️来源自实际项目中的工程实践⭐️ 没有晦涩难懂的底层原理,也没有高深莫测的程序算法????简单直白,平铺直叙,一目了然,一学就会。效果图基于docker安装ZooKeeper在docker hub上面并没有ZooKeeper并没有提供ARM32位的镜像,好在有位大神构建了专门应用与树莓派的ZooKeepper镜像,这样就给树莓派开发者提供了极大的便利。step 1:拉取镜像docker pull charlesyan/rpi-zookeeperstep 2 :运行docker ru原创 2020-11-04 18:45:54 · 4432 阅读 · 0 评论 -
一文概览Java 8 Stream流(用好 Stream 只需要两句话)
什么是StreamJava 8 API添加了一个新的抽象称为流Stream,用于对集合数据进行处理,可以理解为流水线。首先定义好中间的加工步骤(对于数据的各种操作比如筛选,排序,聚合),最后由最终操作得到前面处理的结果。Stream让我可以用一种声明的方式处理数据。让程序员只关注于“做什么”,而不是“怎么做”,极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。举个例子假设我们要对一个列表进行遍历输出,首先想到的方式就是写一个for循环。List<String> li原创 2020-08-12 16:12:27 · 3861 阅读 · 0 评论 -
ThreadLocal 实战用法
ThreadLocal 实战用法ThreadLocal 是什么首先来看一下官方解释:Creates a thread local variable. The initial value of the variable is determined by invoking the get method on the Supplier.创建一个线程本地变量,变量的初始值是有调用get()方法的提供方所决定的。它的作用是在一个线程内部,不同的方法直接共享变量。对于多线程,每个线程都有一份自己的变量原创 2020-07-08 18:43:33 · 4221 阅读 · 0 评论 -
【解读】《Scalable IO in Java》阅读思考与笔记
《Scalable IO in Java》阅读笔记网络处理流程一个线程对应一个网络连接高性能的奥义:分而治之 事件驱动Reactor模式单线程单reactor多worker线程模式多reactor多worker线程模式《Scalable IO in Java》 出自于java大神Doug Lea,这是一篇关于高性能IO服务的经典文章,文章中梳理了网络服务架构的演化,提出了Reactor反应器模式,这种设计模式是netty等高性能网络框架的基础。网络处理流程服务器对于一次网络请求的处理大概流程如下原创 2020-07-03 13:16:11 · 4173 阅读 · 0 评论 -
解决 java.lang.VerifyError: Stack map does not match the one at exception
解决 java.lang.VerifyError: Stack map does not match the one at exception背景在写AOP程序时,测试出现了错误,jdk版本11。问题根源JVM加载class文件时会做字节码校验(bytecode verification)。如果你的class文件是由java源文件通过javac编译出来的,那么基本上不用担心bytecod...原创 2019-11-22 10:31:15 · 14497 阅读 · 0 评论 -
Java中动态代理的使用
Java中动态代理的使用什么是代理?代理就是代替目标对象去完成某些事情。有一个很火的明星,开通了一个抖音账号,这个账号非常活跃,回复粉丝、到处点赞之类的,但可能并不是真的由本人在维护的。而是在背后有一个其他人 or 团队来运营,我们就可以称他们为代理人,因为他们发表的内容就代表了明星本人的意思。为什么需要代理?实现AOP 面向切面编程将业务核心代码与辅助业务代码解耦。代码实现1.定...原创 2019-11-20 20:13:49 · 3971 阅读 · 0 评论 -
读书笔记--泛型编程--《写给大忙人的JavaSE 9 核心技术》—第6章
读书笔记–《写给大忙人的JavaSE 9 核心技术》—第6章泛型编程Java是强类型的语言,对于函数中的参数需要声明其类型,当需要实现适用于多中类型的方法和类时,此时需要用到泛型。泛型类public class Test1<K,V> { public test1(K key,V value) { System.out.println(key); ...原创 2019-11-13 20:25:13 · 3777 阅读 · 0 评论 -
读书笔记--《写给大忙人的JavaSE 9 核心技术》—接口和lambda表达式
读书笔记–《写给大忙人的JavaSE 9 核心技术》—第3章接口和lambda表达式接口它可以让你在不提供实现的情况下,指定应该做什么。(主要在设计阶段用得到)示例代码public interface Test1 { // 接口中的方法默认为public public void saySomething(String something); // 在接口中可以定义...原创 2019-11-11 21:22:23 · 4907 阅读 · 0 评论 -
读书笔记《写给大忙人的JavaSE 9 核心技术》第一章 基本的编程结构
读书笔记《写给大忙人的JavaSE 9 核心技术》第一章 基本的编程结构关于Java用途的定义Java 不是用来快速完成几个命令的脚本语言,它明确定位为可以从组织有序的类和包以及模块中获益的大型程序的编程语言JShellJava 9中引入的运行Java语句的交互式命令窗口,和Python Node差不多。基本类型8种基本类型有符号整型类型存储需求byte1个...原创 2019-10-31 20:46:36 · 4316 阅读 · 0 评论 -
Springboot 整合Mybatis 逆向工程(详解版)
Springboot 整合Mybatis 逆向工程(详解版)什么逆向工程分析数据库中数据表,自动生成JavaBean(与数据库表对应的实体类)、dao 接口(数据访问层接口,定义了访问数据的方法)、SQLMap (sql 语句映射文件,与dao层接口类一一对应)step1:写XML配置文件该配置文件定义了如何生成这些代码,详细说明可看代码注释。<?xml version="1.0"...原创 2019-10-23 21:07:09 · 6015 阅读 · 0 评论