Java
文章平均质量分 94
Java基础知识及底层原理等
qqxhb
【内推】【社招】【校招】【实习】【字节跳动】
字节内推,职位类别涵盖研发、产品、运营、设计、市场、销售、职能/支持、教研教学、游戏策划多个方向,具体职位信息可访问内推地址查看。
内推的优势是可以让你的简历被优先筛选哦,欢迎投递!
字节跳动校招内推码: 4PNP6DF
投递链接: https://jobs.toutiao.com/s/eJ161U5
社招:https://job.toutiao.com/s/e1oKkLm
个人公众号:了不起的我和你
展开
-
常见设计模式的原理、应用场景总结——结构型
结构型设计模式常见设计模式的原理、应用场景总结——创建型结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。1.代理模式代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问, 而非加强功能,这是它跟装饰器模式最大的不同。一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的。 在这原创 2021-10-19 09:12:00 · 764 阅读 · 0 评论 -
常见设计模式的原理、应用场景总结——创建型
经典设计模式共分为 3 种类型,分别是创建型、结构型和行为型。今天,我们先看下创建型设计模式的原理、实现、设计意图和应用场景。创建型设计模式创建型设计模式包括:单例模式、工厂模式、建造者模式、原型模式。它主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。1. 单例模式单例模式用来创建全局唯一的对象。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例模式。单例有几种经典的实现方式,它们分别 是:饿汉式、懒汉式、双重检测、静态内部类、枚举。.原创 2021-10-15 09:13:54 · 1172 阅读 · 0 评论 -
ORM框架Mybatis核心知识及与springboot整合缓存失效
1. Mybatis优缺点MyBatis 的优点:MyBatis 是原生SQL,不像 Hibernate 的 HQL 需要额外的学习成本;MyBatis 的 SQL 语句与代码进行了解耦合,这与 Hibernate 是一致的;MyBatis 功能简单,学习成本比较低,使用的门槛也非常低,可以快速上手;MyBatis SQL调优比较灵活,而 Hibernate,SQL 语句是自动生成的,当有复杂语句需要进行优化时就比较难处理。MyBatis 的缺点:相比 Hibernate 这样的全自动 OR.原创 2020-06-29 09:14:04 · 187 阅读 · 0 评论 -
Netty核心知识点及通过Netty实现的RPC框架对比
1. Netty框架如上图左侧所示,首先了解 Netty 的特点。Netty 是一个高性能的异步事件驱动的 NIO 框架,它对消息的处理采用串行无锁化设计,提供了对 TCP、UDP 和文件传输的支持。Netty 内置了多种 encoder 和 decoder 实现来解决 TCP 粘包问题。Netty 处理消息时使用了池化的缓冲池 ByteBufs,提高性能。结合内存零 copy 机制,减少了对象的创建,降低了 GC 的压力。1.1 主要概念需要掌握 Netty 中的一些对象概念。将 Sock原创 2020-06-29 09:12:58 · 615 阅读 · 0 评论 -
JUC常用工具类核心分享
JUC 是 Java 提供的用于多线程处理的工具类库,来看其中的常用工具类的作用,如下图所示。如上图所示,第一行的类都是基本数据类型的原子类,包括 AtomicBoolean、AtomicLong、AtomicInteger 类。AtomicLong 通过 unsafe 类实现,基于CAS。unsafe 类是底层工具类,JUC 中很多类的底层都使用到了 unsafe 包中的功能。unsafe 类提供了类似 C 的指针操作,提供 CAS 等功能。unsafe 类中的所有方法都是 native 修饰的。原创 2020-06-28 10:17:23 · 448 阅读 · 0 评论 -
JVM内存模型及CMS、G1和ZGC垃圾回收器详解
1. JVM 内存模型JVM 内存模型主要指运行时的数据区,包括 5 个部分,如下图所示。栈也叫方法栈,是线程私有的,线程在执行每个方法时都会同时创建一个栈帧,用来存储局部变量表、操作栈、动态链接、方法出口等信息。调用方法时执行入栈,方法返回时执行出栈。本地方法栈与栈类似,也是用来保存线程执行方法时的信息,不同的是,执行 Java 方法使用栈,而执行 native 方法使用本地方法栈。程序计数器保存着当前线程所执行的字节码位置,每个线程工作时都有一个独立的计数器。程序计数器为执行 Ja原创 2020-06-28 09:46:21 · 2686 阅读 · 2 评论 -
很好的Java诊开源工具——Arthas
1.Arthas简介Arthas 是Alibaba开源的Java诊断工具。源码地址:https://github.com/alibaba/arthas官方文档:https://arthas.gitee.io/Arthas支持JDK 6+,支持Linux/Mac/Winodws,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。Arthas可以帮助你解...原创 2020-04-06 11:16:37 · 213 阅读 · 0 评论 -
Java SPI源码及示例如此简单!
Java SPI 概述SPI(Service Provider Interface)即服务提供接口,是JDK内置的一种服务提供发现机制。简单来说,它就是一种动态替换发现机制。例如:有个接口想在运行时才发现具体的实现类,那么你只需要在程序运行前添加一个实现即可,并把新加的实现描述给JDK即可。此外,在程序的运行过程中,也可以随时对该描述进行修改,完成具体实现的替换。Java提供了很多服务提供者接...原创 2020-04-03 11:45:39 · 324 阅读 · 0 评论 -
Spring Cloud——负载均衡Ribbon和远程调用Feign原理和示例
前篇:Spring Cloud——Eureka注册中心原理及示例官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.2.1.RELEASE/reference/html/#spring-cloud-ribbon在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,本节研究微服务远程调...原创 2020-02-25 10:39:48 · 1129 阅读 · 0 评论 -
Spring Boot定义Starter超简单
相信在了解SpringBoot时后已经知道了starter是SpringBoot的核心组成部分,SpringBoot为我们提供了尽可能完善的封装,提供了一系列的自动化配置的starter插件,我们在使用只需要在pom.xml配置文件内添加依赖就可以了,很好的降低了使用框架时的复杂度。那我们如何实现一个自己的starter呢?1. 知识点回顾@ConfigurationProperties,该...原创 2020-02-19 12:07:59 · 218 阅读 · 0 评论 -
常见日志框架介绍及Spring日志框架优先级源码解析
在Java项目开发中,日志是必不可少的功能,日志对于快速定位问题,检查日常项目运行状态等有非常重要的作用,但是目前Java日志存在多种框架,如:Slf4j、JUL、JCL、Log4j、Log4j2、Logback等。1. 常用日志框架框架简介Slf4j日志门面组件JCLCommons Logging,简称jcl,Apache基金会项目,日志门面组件Log4j...原创 2020-02-18 19:52:28 · 406 阅读 · 0 评论 -
大数据及Hadoop基础
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,可以让开发者在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。原创 2019-12-23 18:15:01 · 142 阅读 · 0 评论 -
Spring整合Mybatis源码流程及一级缓存失效原因分析
本文主要结合源码分析流程,整合步骤请查看之前博文https://blog.csdn.net/qq_43792385/article/details/90017967为了使用Spring整合mybatis,需要引入mybatis为接入spring开发的包,为了方便这里直接引入springboot整合包<dependency> <groupId>org.mybatis...原创 2019-11-28 15:49:55 · 202 阅读 · 0 评论 -
Spring Boot 各种配置方式使用和区别详解
1. 使用@ConfigurationProperties该注解可以有三个配置可以设置:@Target({ ElementType.TYPE, ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ConfigurationProperties { /** * 设置...原创 2019-11-25 15:08:47 · 265 阅读 · 0 评论 -
RocketMQ简介与安装及入门
1. RocketMQ简介与安装1.1. RocketMQ简介Apache RocketMQ是一个采用Java语言开发的分布式的消息系统,由阿里巴巴团队开发,与2016年底贡献给Apache,成为了Apache的一个顶级项目。在阿里内部,RocketMQ 很好地服务了 集 团大大小小上千个应用,在每年的双十一当天,更有不可思议的万亿级消息通过 RocketMQ 流转(在 2017 年的双十一当...原创 2019-10-11 17:21:32 · 426 阅读 · 0 评论 -
并发编程之 CAS 的底层原理深入源码解读
1. 什么是CASCAS (compareAndSwap),中文叫比较交换,一种无锁原子算法。过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己...原创 2019-10-10 19:42:57 · 127 阅读 · 0 评论 -
数据库事务隔离级别及Spring事物传播行为详解
1、事务1.1 事务的含义事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,事务是逻辑上的一组操作,要么都执行,要么都不执行。1.2 事务的四大特性数据库事务四大特性简称为ACID:原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。事务在执行过程中发生错误...原创 2019-10-10 15:48:44 · 181 阅读 · 0 评论 -
volatile 关键字相关知识点、原理及场景详解
1、volatile含义volatile是一个类型修饰符(type specifier)。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接从主存读值。volatile的本身含义即为易变的、不稳定的,也就是说被它修饰的变量可能会被意想不到地改变。2、相关知识点2.1 CPU 缓存CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器...原创 2019-09-23 13:05:14 · 369 阅读 · 0 评论 -
GraphQL简介及入门
1、什么是GraphQL?GraphQL 是由 Facebook 创造的用于描述复杂数据模型的一种查询语言。这里查询语言所指的并不是常规意义上的类似 sql 语句的查询语言,而是一种用于前后端数据查询方式的规范。官网(中文):https://graphql.cn/;规范地址:http://spec.graphql.cn/。2、RESTful存在的问题RESTful是我们已经很熟悉的用于ap...原创 2019-09-02 15:10:06 · 2103 阅读 · 4 评论 -
POI报表及百万数据导入导出方案
1、POI报表的概述1.1 需求说明在企业级应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式:为了方便操作,基于Excel的报表批量上传数据;通过java代码生成Excel报表。1.2 Excel的两种形式目前世面上的Excel分为两个大的版本Excel2003和Excel2007及以上两个版本,两者之间的区别如下:Excel2003是一个特有的二进...原创 2019-08-13 15:40:09 · 849 阅读 · 0 评论 -
Shiro会话管理及与SpringBoot整合
1、Shiro中的会话管理在shiro里所有的用户的会话信息都会由Shiro来进行控制,shiro提供的会话可以用于JavaSE/JavaEE环境,不依赖于任何底层容器,可以独立使用,是完整的会话模块。通过Shiro的会话管理器(SessionManager)进行统一的会话管理。1.1 什么是shiro的会话管理SessionManager(会话管理器):管理所有Subject的sessio...原创 2019-08-13 11:38:09 · 394 阅读 · 0 评论 -
认证授权示例——JWT及Shiro
1、常见的认证机制1.1 HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的usernamepassword,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量...原创 2019-08-12 19:46:54 · 2938 阅读 · 2 评论 -
工作流引擎-Activiti进阶篇
基础知识及入门示例见:工作流引擎-Activiti基础篇1、 流程实例1.1 什么是流程实例参与者(可以是用户也可以是程序)按照流程定义内容发起一个流程,这就是一个流程实例。是动态的。1.2 启动流程实例流程定义部署在 activiti后,就可以在系统中通过 activiti去管理该流程的执行,执行流程表示流程的一次执行。比如部署系统请假流程后,如果某用户要申请请假这时就需要执行这个...原创 2019-08-07 11:44:51 · 735 阅读 · 0 评论 -
JVM运行参数及内存模型和分析工具学习总结
1. jvm的运行参数在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。绝大部分的参数保持默认即可。1.1 三种参数类型jvm的参数类型分为三类,分别是:标准参数-help-version-X参数 (非标准参数)-Xint-Xcomp-XX参数(使用率较高)-XX:newSize-XX:+UseSerialGC1.2 标准参数jvm的...原创 2019-06-28 16:25:45 · 244 阅读 · 0 评论 -
JAVA8 新特性简介及示例
目录Lambda 表达式函数式接口方法引用与构造器引用Stream API接口中的默认方法与静态方法新时间日期 API其他新特性特点:速度更快(HashMap加哈希表,ConcurrentHashMap使用CAS,内存结构无永久区、新增元数据区使用物理内存)代码更少(增加了新的语法 Lambda 表达式)强大的 Stream API便于并行(优化ForkJoin)...原创 2019-06-08 21:59:22 · 202 阅读 · 0 评论 -
JDK源码中,都有哪些设计模式
文章转自微信公众号:肥朝(ID:feichao_java)一、结构性模式:1、适配器模式:常用于将一个新接口适配旧接口肥朝小声逼逼:在我们业务代码中经常有新旧接口适配需求,可以采用该模式。2、桥接模式:将抽象和抽象的具体实现进行解耦,这样可以使得抽象和抽象的具体实现可以独立进行变化。肥朝小声逼逼:这个模式,其实我们每天都在用到,但是你可能却浑然不知。只要你用到面向接口编程,其实都...转载 2019-04-28 09:59:56 · 2657 阅读 · 0 评论 -
全方位剖析Java内存溢出
文章来源在实际开发中,我们总会遇到过内存溢出异常OutOfMemoryError(OOM),也很难找出问题所在,漫无目的去查看程序代码也无补于事,本文就是提供一些技巧或经验,当遇到内存溢出时应该如何查找问题所在。本文大纲:1、OOM分析技巧2、运行时数据区内存溢出3、直接内存溢出4、总结一、OOM分析技巧当遇到内存溢出OutOfMemoryError异常的时候。第一步:先判断内存...转载 2019-03-23 20:06:06 · 149 阅读 · 0 评论 -
如何判断对象是否已死?
文章来源前言程序开发过程中,我们频繁的与对象打交道,不断的创建对象,我们知道如何使用与协调对象来实现我们的意图,但是我们常常不关心对象的死活。对象也有自己的生命周期,有诞生的时候,也就有消亡的时候。创建对象时,我们会有引用指向这个对象,为了可以访问到这个对象。那没有引用指向对象的时候,就代表对象死亡了吗?其实不然,判断对象是否死亡是Java虚拟机的工作,使用的是可达性分析算法进行判断的,当...转载 2019-03-23 19:59:15 · 230 阅读 · 0 评论 -
学习——多线程编程(二)
2.线程安全2.1 产生线程安全问题的原因在进行多线程编程时,要注意线程安全问题,我们先通过一个卖火车票案例了解一下什么是线程安全问题。具体代码如下所示:/** * 模拟售票十张车票 * * @author Administrator * */public class TicketWindow implements Runnable { private int ticket...原创 2019-03-10 12:30:24 · 88 阅读 · 0 评论 -
学习——多线程编程(一)
1.基本知识回顾线程是比进程更小的能独立运行的基本单位,它是进程的一部分,一个进程可以拥有多个线程,但至少要有一个线程,即主执行线程(Java 的 main 方法)。我们既可以编写单线程应用,也可以编写多线程应用。线程的生命周期:新建状态:使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。就...原创 2019-03-10 11:10:34 · 145 阅读 · 0 评论 -
Tomcat及日常工作代码中JVM优化介绍
1 Tomcat优化1.1 禁用AJP连接默认状态下会启用AJP服务,并且占用8009端口。AJP(Apache JServer Protocol) AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。我们一般是使用Ngin...原创 2019-09-16 13:52:59 · 108 阅读 · 0 评论 -
Java垃圾回收算法及垃圾回收器原理解读及特性对比详解
1 什么是垃圾回收?程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。1.1 C/C++语言的垃圾回收在C/C++语言中,没有自动垃圾回收机制,是通过new关键字申请内存资源,通过delete关键字释放内存资源。如果,程序员在某些位置没有写delete进行释放,那么申请的对象将一直占用内存资源,最终可能会导...原创 2019-09-16 13:57:15 · 272 阅读 · 0 评论 -
深入理解Java线程池框架
1. 背景及优势1.1 背景在日常的业务(如:抢票,购物等)开发中,为了提高并发,经常会选择多线程的方式。当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。多线程的引入虽然使得资源利...原创 2019-09-19 11:58:16 · 374 阅读 · 0 评论 -
synchronized关键字锁实现原理几锁优化剖析
为了唤醒大家的记忆,介绍synchronized原理之前,先给一个大家都很熟悉的使用场景:单例模式(double check)。public class Singleton { private static volatile Singleton singleton = null; private Singleton() { } /** * 获取实例 * * @retu...原创 2019-09-10 18:49:29 · 128 阅读 · 1 评论