Java
文章平均质量分 80
lukamao
这个作者很懒,什么都没留下…
展开
-
无法获取到Nacos配置中心的配置问题
引言最近在学习 Spring Cloud Alibaba,用到了 Nacos 配置中心。Nacos 是 Spring Cloud Alibaba 中的一个组件,通常用作服务注册中心以及配置中心。问题复现项目中有一个如图所示的消息模块:在 application.yml 中做了如下配置:spring: application: name: message cloud: nacos: config: server-addr: localhost:8原创 2021-03-13 17:07:54 · 6387 阅读 · 8 评论 -
Integer类中的numberOfLeadingZeros和numberOfTrailingZeros方法
一、引例今天在阅读 Integer 类的源码的时候,发现了两个比较有意思的方法, 频繁的使用位运算进行左移和右移操作,分别是 numberOfLeadingZeros 方法和 numberOfTrailingZeros 方法。二、numberOfLeadingZeros这个方法从 JDK 1.5 以后开始出现,主要功能是返回无符号整型 i 的最高非零位前面的 0 的个数。例如:无符号整数 24 的二进制表示为 0000 0000 0000 0000 0000 0000 0001 1000,第五位原创 2020-08-03 16:51:22 · 1423 阅读 · 0 评论 -
SecurityManager——Java 语言的保护伞
一、引例今天在阅读 Thread 类的源码的时候,看到了如下一段代码:SecurityManager security = System.getSecurityManager();这个和 Security 有关的对象阻碍了我阅读的脚步,并且成功地吸引了我的注意。下面就来探讨一下这个类到底有什么样的魔力。二、定义当运行未知的 Java 程序的时候,该程序可能有恶意代码(删除系统文件、重启系统等),为了防止运行恶意代码对系统产生影响,需要对运行的代码的权限进行控制,这时候就要启用 Java 安全管理原创 2020-06-20 20:38:35 · 923 阅读 · 0 评论 -
LinkedHashMap 源码解析
一、简介LinkedHashMap 继承了 HashMap 类,是 HashMap 的子类,LinkedHashMap 的大多数方法的实现直接使用了父类 HashMap 的方法。LinkedHashMap 可以说是 HashMap 和 LinkedList 的结合体,既使用了 HashMap 的数据结构,又借用了 LinkedList 双向链表的结构。LinkedHashMap 实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双向链表。此链表定义了迭代顺序,该迭代顺序可以是原创 2020-05-23 23:09:01 · 257 阅读 · 1 评论 -
HashMap 源码解析
一、简介哈希表也叫散列表,是一种非常重要的数据结构,底层实现是一个 key - value 键值对。应用场景及其丰富,许多缓存技术(比如 Redis)的核心其实就是在内存中维护一张大的哈希表。Java 中的 HashMap 就是这样一种结构,不仅经常用于开发当中,而且 HashMap 的实现原理也常常出现在各类的面试题中。在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为 O(1),接下来我们就来看看哈希表是如何实现达到惊艳的常数阶 O(1)原创 2020-05-22 20:00:40 · 418 阅读 · 2 评论 -
Vector 源码解析
一、简介Vector 也是基于数组实现的,是一个动态数组,其容量能自动增长。Vector 是 JDK 1.0 引入的,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector 实现了 Serializable 接口,因此它支持序列化,实现了 Cloneable 接口,能被克隆,实现了 RandomAccess 接口,支持快速随机访问。原创 2020-05-20 18:44:52 · 286 阅读 · 0 评论 -
LinkedList 源码解析
一、简介上文我们探讨了线性表的顺序存储结构的实现 ArrayList,今天我们来讲链式存储结构的实现 LinkedList。LinkedList 是一个用链表实现的集合,元素有序且可以重复。今天我们来分析一下 LinkedList 的源码。二、继承结构和 ArrayList 集合一样,LinkedList 集合也实现了 Cloneable 接口和 Serializable 接口,分别用来支持克隆以及支持序列化。List 接口也不用多说,定义了一套 List 集合类型的方法规范。相对于 Array原创 2020-05-18 18:23:38 · 528 阅读 · 2 评论 -
ArrayList 源码解析
一、简介ArrayList 是可以动态增长和缩减的索引序列,它是基于数组实现的 List 类,它实现了 List 接口,List 接口继承自 Collection 接口,Collection 是所有集合类的父类,所以 ArrayList 间接实现了 Collection 接口。我们之前学过一门叫做数据结构的课程,线性表是我们学过的第一个数据结构,它有两种存储方式,一种是线性的,另一种是链式的。分析一个集合类的时候,数据结构往往是它的灵魂所在,理解底层的数据结构其实就理解了该类的实现思路,ArrayList原创 2020-05-16 21:49:24 · 347 阅读 · 0 评论 -
Spring Boot 整合 Rabbit MQ
Spring Boot 为我们提供了 Rabbit MQ 的自动化配置,极大的方便了我们对 Rabbit MQ 的整合,使我们可以方便的操作 Rabbit MQ,下面我们来看一下 Spring Boot 整合 Rabbit MQ。引入 AMQP 场景启动器Rabbit MQ 是基于高级消息队列协议(AMQP)的,所以我们先在 pom.xml 中引入 AMQP 的场景启动器。<depen...原创 2020-04-12 09:30:16 · 277 阅读 · 2 评论 -
Rabbit MQ 进阶
消息应答与消息持久化消息应答boolean autoAck = false;channel.basicConsume(QUEUE_NAME, autoAck, consumer);boolean autoAck = true;(自动确认模式)一旦 Rabbit MQ 将消息分发给消费者,就会从内存中删除,这种情况下,如果杀死正在执行的消费者,就会丢失正在处理的消息boolean au...原创 2020-04-12 09:26:45 · 202 阅读 · 0 评论 -
Rabbit MQ 入门
消息队列解决了什么问题异步处理我们以用户注册为例,当用户注册成功后,我们首先将用户注册信息写入数据库,我们再给他发送一封邮件,再给他发送一条短信,当都执行成功后,我们再给用户响应,需要 150 ms为了优化程序,我们想到了第二种方式,将用户注册信息写入数据库后,我们采用多线程的方式给用户发送邮件和短信,合起来响应 100 ms这时候我们的消息队列就派上用场了,我们将用户注册信息写入数据...原创 2020-04-11 21:26:14 · 232 阅读 · 0 评论 -
Java 14 新特性
概述2020年 3 月 17 日, JDK/Java 14 正式 GA(General Available)。这是自从 Java 采用六个月一次的发布周期之后的第五次发布。Java 14 是两个长期支持版本 11 和 17 中间的一个,Java 14 无疑具有着承上启下的作用,从 Java 14 中我们或许能看出 Java 未来的发展趋势。此版本包含的 JEP( Java/JDK Enhan...原创 2020-04-08 21:54:46 · 399 阅读 · 2 评论 -
Spring Security 常用配置详解
Spring Security 是 Spring 家族为我们提供的一款安全管理的框架,它是一个功能强大并且可以灵活定制的身份验证和访问控制框架。Spring Security 侧重于为 Java 应用程序提供身份验证和授权。与所有 Spring 项目一样,Spring Security 的真正强大之处在于它非常容易扩展来满足我们的不同需求。在 SSM 时代,Spring Security 因为繁...原创 2020-02-29 13:35:41 · 7760 阅读 · 0 评论 -
Spring MVC 中将数据传给页面的四种方法
我们之前用 Servlet + JSP 开发 web 应用的时候,通常使用 Servlet 的四大作用域 request,session,page,application 给页面传值。Spring MVC 当然也支持这些 Servlet 的原生 API,但是,它也为我们提供了更加强大的 API 支持,下面我们我们来探讨一下 Spring MVC 是如何将数据传给页面的。一、Map第一种是 Ma...原创 2020-02-22 17:34:26 · 1541 阅读 · 0 评论 -
Dubbo 环境搭建
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。准备工作1.安装 zookeeper进入 zookeeper 的官网http://...原创 2020-02-15 20:51:09 · 365 阅读 · 0 评论 -
Spring Boot 配置自定义缓存管理器实现对象序列化为 JSON
今天在学习 Spring Boot 整合缓存的时候,遇到了这样的问题,从数据库中查出的数据放到 Redis 中,在 Windows 上用 RedisDesktopManager 打开出现了乱码的问题。查了资料知道原因是 Spring Boot 集成 Redis 时,自动配置了 RedisCacheManager,但是 RedisCacheManager 默认使用的是 JdkSerializationRedis...原创 2020-02-13 18:43:52 · 347 阅读 · 0 评论 -
Spring Boot 2.x 缓存管理器自动配置原理
Spring Boot 的自动化配置极大地简化了我们的开发,这也是 Spring Boot 能够一统 Java EE 江湖的重要原因之一。Spring Boot 在启动的时候,会把常用的组件全部导入到 Spring 的 ioc 容器中,当然,缓存管理器(CacheManager)也不例外。什么是缓存管理器缓存管理器(CacheManager) 定义了创建、配置、获取、管理和控制多个唯一命名的 ...原创 2020-02-13 16:51:44 · 431 阅读 · 0 评论 -
你还在 Java 代码中写 set/get 方法?别告诉我你还没用过 Lombok!
前言what?你的 Java 代码中还充斥着大量的 set/get 方法?我们在刚开始学习 Java 语言的时候讲过,面向对象的三大特征就是封装,继承,和多态。在 Java 中,要保证封装性,需要将成员变量私有化,对外提供 set/get 方法来访问,虽然现在的 IDE,像 eclipse,IDEA都提供了快捷键,来生成 set/get 方法,但是在做项目的时候,一个 JavaBean 往往会有...原创 2019-12-22 18:05:39 · 3979 阅读 · 14 评论 -
Spring 常用注解
Spring 中的常用注解@Component把普通 pojo 实例化到 Spring 容器中,相当于配置文件中的<bean id="" class="">泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component 来标注这个类这个简单的注解表明该类会作为组件类,并告知 ...原创 2019-12-08 17:31:21 · 524 阅读 · 0 评论 -
设计模式之原型模式
一、引例原型模式是GoF23种设计模式的一种,属于创建型模式,用来解决复杂对象的创建问题。《西游记》中,孙悟空拔毛变小猴的故事几乎人人皆知,孙悟空可以用猴毛根据自己的形象,复制出很多个根自己长得一模一样的“身外身”来。我们在使用电脑的时候,对文件最常用的操作有两种,一种是复制,另一种是粘贴,这就是原型模式的应用。在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一...原创 2019-11-28 08:58:48 · 389 阅读 · 0 评论 -
设计模式之单例模式
一、引例单例模式是GoF23种设计模式的一种,也是最简单一种,用来解决对象创建的问题。我们在使用windows操作系统的时候,按下ctrl+alt+del键,可以打开任务管理器,但是大家可以试试多次按下这三个键,能不能打开多个任务管理器,答案当然是否定的,电脑上很多软件,比如一些常见的音乐软件,视频软件都不能同时打开多个,你重复打开的话,显示的是已经在运行的那个程序,为什么要这样做呢?任务管理器就...原创 2019-11-18 16:05:36 · 510 阅读 · 0 评论 -
Java多线程
1.程序、进程与线程程序(Program):程序是一段静态的代码,它是应用程序执行的蓝本进程(Process):进程是指一种正在运行的程序,有自己的地址空间进程的特点动态性并发性独立性并发和并行的区别多个CPU同时执行多个任务一个CPU(采用时间片)同时执行多个任务线程(Thread):进程内部的一个执行单元,它是程序中一个单一的程序控制流程线程又被称为轻量级进程(light...原创 2019-06-26 22:35:24 · 205 阅读 · 0 评论 -
Java的输入与输出(IO)
流是一组数据运输的通道,按照流向可以分为输入流和输出流;按照功能可以分为结点流和处理流;按照处理数据的类型可以分为字节流和字符流。下面是Java的API为我们提供的操作IO的抽象类和接口。下面将主要围绕这四大抽象类及其实现类讲解:输入流:可以从其中读入一个字节序列的对象称做输入流。数据源到程序。输出流:可以向其中写入一个字符序列的对象称做输出流。程序到目的地。节点流:可以直接从数据源或目...原创 2019-06-25 22:51:08 · 190 阅读 · 0 评论 -
阶段性跨越——由面向过程到面向对象编程
1.引例在业内流传着这样一个段子:程序员A:明天情人节你有空吗,可以一起去看电影吗?程序员B:你请客吗?你请客的话我可以带着我的对象和你一起去。程序员A:???程序员B:我可以帮你也new一个对象,这样我们就有四个人了。博主目前为大一学生,上学期学了面向过程程序设计,也就是C语言,目前正在学习Java。众所周知,像C++,Java,C#等高级语言都是引入了面向对象编程的思想,这和C语...原创 2019-04-07 11:33:51 · 636 阅读 · 0 评论 -
LeetCode周赛——拼写单词
博主这半年来一直在主要学习Java的有关知识,疏忽了对算法的训练,偶得一著名刷题网站LeetCode,出于对算法的热爱,便决定开始刷题一段时间,加上前几天给我推送了周赛的消息,便报了名。为了巩固Java的知识,便选择了用Java语言来coding。虽然开始前的紧张中带着几分的憧憬,但是打开第一题便目瞪口呆,有题云:给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) cha...原创 2019-08-18 21:03:24 · 485 阅读 · 0 评论 -
MyBatis实现分页查询
分页查询在我们生活中非常常见,当我们做一个内容很多,数据量很大的项目的时候,在一个页面显示不过来,我们便会采取分页的思想,在每个页面上显示固定数量的内容,分多个页面显示。那它是怎么实现的呢?今天我们来讲讲如何用MyBatis来实现分页查询。假设我们要查找的是学生信息,然后将信息分页显示到jsp页面上,首先我们要做的是写实体类,创建一个名为pojo的包,在包下写一个People类,定义属性和对应的...原创 2019-09-19 17:22:45 · 2158 阅读 · 0 评论 -
面向对象编程的三大特征
1.引例在之前的博客中,我们介绍了什么是面向对象编程,面向对象和面向过程编程的区别,今天我们来探讨一下面向对象编程有什么特点。众所周知,面向对象有三大特征,分别是封装,继承和多态。下面我们来看一下...原创 2019-05-12 14:45:16 · 2688 阅读 · 0 评论