自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 很哇塞的Java系列实战项目

最近收到一位求职者的简历,先来看看个人技能,如下:看完啥感觉?针对这份简历,我感觉技术栈与项目用到的技术严重不匹配,罗列了很多技术栈,但是项目中用到技术又屈指可数,这样的简历只能证明曾学过,不能证明具备实际应用的经验,就如下图“站不稳”。当前人才泛滥的时代,有项目经验的人才是稀缺的,而不是号称会xx技术的人。但是我发现,不少从事几年Java开发的工程师,好的项目经验这块普遍乏力和稀缺。大部分每天都是不断重复枯燥的CRUD,知识水平一直局限在使用阶段,写不停的业务逻辑,也至于无法停下脚步深入思

2021-07-29 20:24:11 256

原创 一篇文章带你熟练netty管道传播

一、基础铺垫1. JAVA中的基本位运算符运算符 描述 & 与 | 或 ~ 非 ^ 异或 << 左移 >> 右移 2. 位运算解释与实例&(与)十进制 二进制 3 0 0 1 1 5 0 1 0 1 & 后结果:1 0 0 0 1 即:对应位都为 1 时,才为 1,否则全为 0。|(或)十进制 二进制 3 0 0

2021-07-29 14:02:37 321 1

原创 厉害了,Netty 轻松实现文件上传!

今天我们来完成一个使用netty进行文件传输的任务。在实际项目中,文件传输通常采用FTP或者HTTP附件的方式。事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换。而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能。很多同学都听说过netty的”零拷贝”功能,但是具体体现在哪里又不知道,下面我们就简要介绍下:Netty的“零拷贝”主要体现在

2021-07-28 15:22:47 414

原创 详解Netty组件: Channel

1.1 AbstractChannel构造通道是Netty的核心概念之一,代表网络连接,由它负责同对端进行网络通信,既可以写入数据到对端,也可以从对端读取数据。Netty通道的抽象类AbstractChannel的构造函数如下:private final DefaultChannelPipeline pipeline;private final Channel parent;protected AbstractChannel(Channel parent) { this.pare

2021-07-28 15:17:53 298

原创 详解Netty组件: Bootstrap类

1 介绍Bootstrap类是Netty提供的一个便利的工厂类,可以通过它来完成Netty的客户端或服务端的Netty组件的组装,以及Netty程序的初始化和启动执行。Netty的官方解释是,完全可以不用这个Bootstrap类,可以一点点去手动创建通道、完成各种设置和启动注册到EventLoop反应器,然后开始事件的轮询和处理,但是这个过程会非常麻烦。通常情况下,使用这个便利的Bootstrap工具类的效率会更高。在Netty中有两个引导类,分别用于服务器和客户端ServerBootstrap

2021-07-28 15:15:35 540

原创 Springboot + netty + rabbitmq + myBatis系列(二) Netty 及心跳机制的 引入

前言WebSocket是 Html5 开始提供的一种浏览器与服务器间 基于TCP的一种新的网络协议 进行全双工通信的网络技术,支持数据在客户端与服务端双向传输,只要握手成功,两端会打开一个长连接进行持续交互。优点及作用Http协议的弊端:Http协议为半双工协议。(半双工:同一时刻,数据只能在客户端和服务端一个方向上传输)Http协议冗长且繁琐 易收到攻击,如长轮询 非持久化协议WebSocket的特性:单一的 TCP 连接,采用全双工模式通信对代理、防火墙和路由器透

2021-07-28 14:54:06 549

原创 Netty 快速入门

本篇文章主要介绍如何快速学习、认识Netty,你也可以把它理解为 学习介绍 、快速入门。强烈建议你收藏此篇文章,方便后续查阅。Nettynetty 是一个基于 NIO 模型,实现的 高性能、弹性、可拓展性 的 异步事件驱动 网络应用程序框架。你可以使用她快速 开发 稳定、灵活 的 客户端、服务端 应用。官方介绍请看 here 。体系结构在入手之前,我们先来看看技术的整体架构(不喜欢此节,你可以直接跳过去 [get start])netty 体系结构 核心组件这里会列出netty核心组

2021-07-28 14:27:37 145

原创 jvm垃圾回收算法

引入我们知道,堆内存的空间是固定的,可以将内存空间理解为一个定长的数组,每次新建对象的时候,都会根据对象的大小,在数组中,按顺序选取一段长度来存储,这样的话,虽然最终是按顺序排列下来了,但是我们知道,每个对象的大小不一样,可能第一个对象占的是0,但是第二个对象会占用1-5, 我们想要删除那些无用的对象,需要有两个步骤,一是需要知道哪些对象是无用的,然后就是删除对象。但是在删除对象的过程中,如果0位置的对象删除了,后续对象没有0能放下的,只能一直往后排,这样的话会出现很多空的位置,这就是内存碎片,会占用大

2021-07-28 13:51:20 89

原创 深入理解JVM - 实战JVM工具

​ 这篇文章主要讲述如何根据最原始的命令jstat对于JVM进行分析和调优,当然并不是所有的案例都可以通过调优实现的,所以这里也会有个别通过修复代码BUG进行调优的案例。​ 之所以拆成上和下是考虑到文章篇幅的问题,个人也不喜欢动不动就万字的文章,但是要分析和说明案例的场景确实要不少的文字描述,所以**这些文章会看的很累!**请在精力较好的时候阅读。常用工具介绍:​ 工具简单提一下,其实写出来没啥意义,没有几个人会去专门背命令的,更多的是在实际的案例上如何使用才是重点。jstat命令:命令

2021-07-28 13:42:17 114

原创 spring-boot-starter自动配置的理解​

spring boot相比spring之所以简化很多就是因为spring boot搭建一个项目的时候可以引入多个starter,这样就可以直接使用不需要过多的各种配置。spring官方提供了不少starter,而我们自己也可以自定义starter,为了能够区分,从命名上进行了规范。官方的starter名称为:spring-boot-starter-xxx,而自定义的为xxx-spring-boot-starter。spring boot能够帮助我们简化开发主要就是基于它提供的起步依赖和自动配置。起步

2021-07-27 15:13:25 199

原创 springboot自动装配源码解析

springboot作为一个优秀的脚手架的框架,封装集成了很多组件功能,比如以前要初始化一个springmvc+spring的框架,需要配置很多xml文件才能完成,springboot就将类似很多配置集成了,开发人员只需要简单的注解或者配置文件就可以完成框架搭建,对初级开发使用人员很友好。springboot的思想是约定>配置,只要按照springboot的配置,开发人员便很容易上手。但是,开发人员需要配置的东西越少,则表明封装的程度越高,黑盒程度越高,所有我们有必要对springboot的源码就

2021-07-27 15:10:13 127

原创 Spring Boot分层测试

这是我参与新手入门的第3篇文章前两篇文章我们分别介绍了配置、编写和运行一个Spring Boot测试程序,如何使用mockito对不容易构造或者获取的对象进行mock。接下来为大家介绍Spring Boot中Controller层的单元测试和Service层的单元测试如何编写。Spring Boot controller层测试Spring Boot为collector层的测试提供了极为方便的工具,可以使用MockMvc类对controller的接口进行测试,无需启动一个真实的server就可以模

2021-07-23 14:54:26 238

原创 真香了?Spring boot 入门篇

什么是spring bootSpring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适)。使用spring boot有什么好处其实就是简单、快速、方便!平时如果我们需要

2021-07-23 14:44:44 84

原创 超详细从0开始搭建 Spring Boot 项目

1.0.0 创建项目我使用的ide 是 idea创建项目 选择 Spring initializr ,如果点Next一直在转圈,可能是 start.spring.io/ 在国外,访问比较慢。可以科学上网或者,使用自定义的 start.spring.io/ 主要改以下组织名称、项目名称和项目描述就好了 我创建项目的时候, Spring Boot 最新稳定版是 2.1.9 。要用就用最新的!!! 依赖先都不勾选,后期一项一项加项目文件夹名称以及存放位置 添加maven镜像添加

2021-07-22 20:26:39 1651 1

转载 并发编程之多线程基础

线程与进程区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。如果有大量的线程

2021-07-22 20:02:45 60

原创 线程的基本概念

按照规划,从本篇开始我们开启『并发』系列内容的总结,从本篇的线程开始,到线程池,到几种并发集合源码的分析,我们一点点来,希望你也有耐心,因为并发这块知识是你职业生涯始终绕不过的坎,任何一个项目都或多或少的要涉及一些并发的处理。这一系列文章只能算是对并发这块基本理论知识的一个总结与介绍,想要成为并发高手,必然是需要通过大规模并发访问的线上场景应用,或许以后我有了相关经验了,再给你们做一点分享吧。基本的进程线程概念进程和线程算是操作系统内两个很基本、很重要的概念了,进程是操作系统中进行保护和资源分配

2021-07-22 19:25:25 631

原创 Java内存模型(JMM)详解

在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型。它们的答案是一致的:能够让我们更好的理解底层原理,写出更高效的代码。就Java内存模型而言,它是深入了解Java并发编程的先决条件。对于后续多线程中的线程安全、同步异步处理等更是大有裨益。硬件内存架构在学习Java内存模型之前,先了解一下计算机硬件内存模型。我们多知道处理器与计算机存储设备运算速度有几个数量级的差别。总不能让处理器总是

2021-07-22 16:35:11 429

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除