自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_44240370的博客

Java后端及云计算和大数据

  • 博客(27)
  • 收藏
  • 关注

原创 SpringBoot整合Netty项目实战

专栏的前几篇文章已经讲述了Netty的相关知识,并且已经使用Netty实现了一些简单的功能如聊天室、WebSocket。之后还了解了Google Protobuf,并且已经集成了Netty实现了一些简单的功能。。。今天主要来讲一下SpringBoot集成Netty且使用Protobuf来实现服务端和客户端的交互。。。下面我们来看一下具体的流程:首先需要编写.proto文件:syntax =...

2019-09-29 16:34:28 2662

原创 ChannelInboundHandlerAdapter和SimpleChannelInboundHandler区别

ChannelInboundHandlerAdapter和SimpleChannelInboundHandler是我们在使用Netty处理Handler时候很常用的两个继承类,虽然说二者实现的功能大致相同但是在一些细节上还是有很多不同的,本文主要来讲一下两者的不同。。。ChannelInboundHandlerAdapterChannelInboundHandlerAdapter是Channe...

2019-09-29 11:15:40 4359 2

原创 Netty整合protobuf解决多message的多协议实现的项目演示

上一篇文章已经实现了通过Netty整合protobuf进行简单的客户端给服务端发消息,功能上来说protobuf确实不太能看出有其他业务能力,但是性能上来说确实是提升了很多毕竟主要作用是序列化后和反序列化。但是一个问题是如果.proto里面有多个message,那么方法内该如何识别传输/接收哪个message属性呢???接下来说一下解决这个问题的步骤:可以将多个message放在外部,然后一个主...

2019-09-27 19:45:05 1072

原创 Protobuf集成Netty进行简单信息传递的讲解

对protobuf不是很了解的可以看这篇文章:https://blog.csdn.net/weixin_44240370/article/details/101313220使用protobuf进行序列化和反序列化操作,并且也知道了这个操作相对于JSON、XML数据格式的优势,但是不足的是它不适合给大量数据进行这样的操作,接下来就使用protobuf和Netty进行整合完成实际的protobuf应...

2019-09-27 17:39:24 177

原创 红黑树(上):为什么工程中都用红黑树这种二叉树???

前面的文章中依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,支持快速插入、删除,查找操作,各个操作时间复杂度和树的高度成正比,理想情况下时间复杂度为O(logn)。不过二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于logn的情况,从而导致各个操作效率下降。极端情况下二叉树退化为链表,时间复杂度退化到O(n)。想要解决这个复杂度退化的问题,需要设计一种平衡二叉查找树。...

2019-09-27 02:06:05 1031

原创 Google Protobuf详解

首先要知道几个清楚的概念:RPC:Remote Procedure Call,远程过程调用,很多RPC框架都是跨语言的。使用步骤:定义一个接口说明文件:描述了对象(结构体)、对象成员、接口方法等一系列信息通过RPC框架所提供的编译器将接口说明文件编译成具体的语言文件在客户端与服务器端分别引入RPC编译器所生成的文件,即可像调用本地方法一样调用远程方法RPC的效率主要在于编解码的...

2019-09-26 15:38:48 2447

原创 Netty实现WebSocket

专栏的上一篇主要描述了基于TCP方面封装好的Socket API实现CS之间相互联系、发送消息。但是如果要是基于HTTP1.0,在HTTP1.0中,都是Client端向Server端去发送请求。但是Server回复给Client之后连接就会失效,也就无法做到基于HTTP1.0去实现聊天的这种需要长连接的功能,需要重新创建连接。基于HTTP1.1,和HTTP1.0不同的地方就在于:断开连接的条件...

2019-09-23 23:42:42 230

原创 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树

二叉查找树最大的特点就是:支持动态数据集合的快速插入、删除、查找操作。。。散列表也是支持这些操作的,并且散列表这些操作比二叉查找树更高效,时间复杂度是O(1)。既然有了这么高效的散列表,使用二叉树的地方是不是都可以替换成散列表呢?有没有哪些地方是散列表做不了,必须要用二叉树来做的呢???二叉查找树(Binary Search Tree)也叫做二叉搜索树,二叉查找树是为了实现快速查找而生的。二...

2019-09-22 16:32:21 293

原创 二叉树基础(上):什么样的二叉树适合用数组来存储???

带着问题学习是最有效的学习方式之一。今天的问题是:二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储?树首先来看什么是“树"?再完备的定义,都没有图直观。所以通过下图来看看这些树有什么特征?”树“这种数据结构很像现实中的树,里面每个元素叫做“节点”;用来连线相邻节点之间的关系叫做”父子关系“。下面这幅图,A节点就是B节点的父节点,B节点是A节点的子节点,B、C、D三个节点的父节点是...

2019-09-21 14:11:59 750

原创 JVM是如何执行方法调用的?(下)

设计模式大量使用了虚方法来实现多态,但是虚方法的性能效率并不是很高,因此本篇文章将评估每一种设计模式因为虚方法调用而造成的性能开销。。。首先要声明的是第一个不应该因为虚方法的性能效率而去放弃良好的设计。第二通常来说,JVM中虚方法调用的性能开销并不大,有些时候甚至可以完全消除。第一个错误是原则上的,第二个错误今天来说一下JVM虚方法调用的具体实现。。。虚方法调用上一篇文章提到Java里非私有...

2019-09-20 16:28:15 150

原创 Netty实现聊天室

文章目录二、Netty实现聊天室二、Netty实现聊天室目标是实现一个一对多的聊天平台,需要的无非是一个服务器和一个客户端。服务器的思路:首先创建异步事件循环组,绑定端口创建初始化类,进行channel过滤操作过滤时候写一个处理器,使Client实现一对多启动程序和过滤操作和之前都是一样的,可以参考上一篇文章https://blog.csdn.net/weixin_442403...

2019-09-20 01:33:49 467

原创 JVM是如何执行方法调用的?(上)

可变长参数方法的重载可能会造成一些坑(官方文档建议避免重载可变长参数方法),下面是一个可变长参数的例子:void invoke(Object obj, Object... args) { ... }void invoke(String s, Object obj, Object... args) { ... }invoke(null, 1); // 调用第二个 invoke 方法i...

2019-09-19 22:26:48 227

原创 JVM是如何实现反射的???

反射是Java语言中一个相当重要的特性,允许正在运行的Java程序观测,甚至是修改程序的动态行为。。。举例来说可以通过Class对象枚举该类中的所有方法,还可以通过Method.setAccessible绕过Java语言的访问权限,在私有方法所在类之外的地方调用该方法。另外一个日常应用是Java调试器,能够在调试过程中枚举某一对象所有字段的值。Web开发中经常能接触到各种可配置的通用框架,...

2019-09-18 17:48:35 536

原创 Netty入门demo——服务端和客户端通信

文章目录一、概述1、简介2、特点3、Gradle4、demo一、概述1、简介Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。客户端向服务端发送一个http请求,验证之后建立长连接,控制层接收请求业务层进行业务处理,产生数据之后返回这是使用websocket建立长连接的一个流程,而netty的作用就是将http请求发送出来的这些数据根据协议的规范...

2019-09-18 09:23:26 573

原创 垃圾回收(下)

先来看看Java对象生命周期的直方图:可以看出大部分的Java对象只存活一小段时间而存活下来的小部分Java对象则会存活很长一段时间。之所以提到这个假设,是因为它造就了Java虚拟机的分代回收思想。简单来说就是将堆空间划分为两代,分别叫做新生代和老年代。新生代用来存储新建的对象。当对象存活时间够长时则将其移动到老年代。Java虚拟机可以给不同代使用使用不同的回收算法:对于新生代猜测大部分...

2019-09-17 21:43:01 95

原创 垃圾回收(上)

Java虚拟机的自动内存管理,将原本需要手动回收的内存交给垃圾器来自动回收。既然是自动机制,肯定没有那么高效,且也会带来不少与垃圾回收相关的问题。今年主要来回顾一下垃圾回收的基础知识,下一篇文章将会深入探索Java虚拟机中的垃圾回收器。。。引用计数法与可达性分析垃圾回收,简单来说就是将分配出去但不再使用的内存回收回来,以便能再次分配。在Java虚拟机的语境下垃圾指的是死亡对象所占据的堆空间。此...

2019-09-16 16:37:47 105

原创 JVM是如何处理异常的?

众所周知,异常处理的两大组成要素是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。。。抛出异常分为显示和隐式两种,显示异常的主体是应用程序,指的是程序中使用throw关键字,手动将异常实例抛出。。隐式异常主题则是Java虚拟机,指的是Java虚拟机在执行过程中,碰到无法继续执行的异常状态,自动抛出异常。举例来说,Java虚拟机在执行读取数组操作时,发现输入的索引值是负数,抛出数组...

2019-09-12 14:26:59 594

原创 Java向上转型和向下转型

相信学Java的人在学习的时候都了解过向上转型和向下转型,但是很多人有的时候都分不清哪个是向上转型哪个是向下转型,因此本文给大家简单介绍一下,希望能对大家有帮助。。。向上转型:父类引用指向子类对象。。向下转型:子类引用指向父类对象。。举例说明:Father是父类,Son是子类。。Father f1 = new Son(); // 这个叫做upcasting(向上转型), 现在f1引用指...

2019-09-11 20:14:38 204

原创 谈谈Spring Bean的生命周期和作用域?

在企业应用开发软件中,Java是毫无争议的主流语言,开放的Java EE规范和强大的开源框架功不可没,其中Spring是企业软件开发的事实标准之一。本文主要来看一下Spring的典型面试题,谈谈其中部分设计细节。。。典型回答Spring Bean生命周期比较复杂,可以分为创建和销毁两个过程。首先创建Bean会经过一系列步骤主要包括:实例化Bean对象设置Bean属性通过Aware接口...

2019-09-08 15:10:15 525

原创 跳表:为什么Redis一定要用跳表来实现有序集合???

大家应该都对二分查找有所了解,但是如果数据存储在链表中就真的没法用二分查找了吗??实际上只需要稍加改造称之为跳表就可以支持了。。Redis中的有序集合就是使用跳表来实现的。那么Redis为什么选择用跳表来实现有序集合呢???如何理解跳表对于一个单链表来说即使存储的数据是有序的,想要查找到一个数据时间复杂度也是O(n)。那么如何来提高查找效率呢?每两个结点提取一个结点到上一级把抽出来的那一级叫做...

2019-09-07 14:21:47 651

原创 链表(下):如何轻松写出正确的链表代码?

上一篇文章我们已经了解过了链表的相关基础知识,现在总结几个写链表代码的技巧,如能熟练掌握这些那么就可以轻松的写出链表的代码。。。。技巧一、理解指针或引用的含义事实上链表的结构并不是很难,但是一旦将它和“引用”混在一起的话就会很难了,想要写对链表代码首先就要理解好指针。。下面会用Java语言举例子。。一段代码实例化的时候实例就可以理解为指针,指向创建的对象地址。。技巧二、警惕指针丢失和内存泄...

2019-09-06 20:31:55 232

原创 链表(上):如何实现LRU缓存淘汰算法?

今天我们来聊聊“链表”这个数据结构,链表一个经典的应用场景就是LRU缓存淘汰算法。。。缓存是一种提高数据读取性能的技术如常见的CPU缓存、数据库缓存、浏览器缓存。但是缓存的大小是有限的,当缓存满了之后需要对其中的数据进行处理,这个时候需要缓存淘汰策略来决定。。常见的策略有三种:先进先出FIFO、最少使用策略LFU、最近最少使用策略LRU。。五花八门的链表结构相比数组链表是一种稍微复杂一点的数...

2019-09-05 18:44:18 242

原创 B+树:MySQL数据库索引是如何实现的???

作为一个软件开发工程师,大家对数据库肯定是再熟悉不过了。主流的数据存储系统,在业务开发中有着很重要的地位。在工作中常常为了加速数据库中数据的查找速度,常用的思路就是对表中数据创建索引。那么想没想过数据库索引是如何实现的呢?底层使用的是什么数据结构和算法呢???算法解析1、解决问题的前提是定义清楚问题如何定义清楚问题呢?除了对问题进行详细的调研之外还可以通过对一些模糊的需求进行假设,来限定要解...

2019-09-04 20:56:27 682

原创 【LeetCode】63.不同路径II

题目概述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径???网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。思路这个依然是个动态规划的...

2019-09-02 19:21:52 190

原创 【LeetCode】62.不同路径

题目概述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如上图是一个7 * 3的网格,有多少可能的路径???说明:m和n的值均不超过100。。。思路很显然这是一道动态规划的问题。机器人只能向下或向右移动一步,所以对...

2019-09-02 17:22:57 130

原创 【LeetCode】262.行程和用户

262.行程和用户Trips 表中存所有出租车的行程信息。每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。Users 表存所有用户。每个用户有唯一键 Users_Id。...

2019-09-01 21:53:59 148

原创 【LeetCode】197.上升的温度

197.上升的温度给定一个Weather 表,编写一个SQL查询,查找与之前(昨天的)日期相比温度更高的所有日期的id。例如根据上述给定的Weather 表格,返回如下id:用到的表和数据SQL:-- ------------------------------ Table structure for `weather`-- ----------------------------...

2019-09-01 20:56:07 279

空空如也

空空如也

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

TA关注的人

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