摘要: 发现一篇对Stream的使用总结的还不错的文章,故此mark一下: https://www.cnblogs.com/wuhenzhidu/p/10740091.html 阅读全文
posted @ 2021-03-10 10:26 跑调大叔! 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 以下内容是对三歪问我:键入网址后,期间发生了什么?一文的总结,详细内容请查看原文。 解析URL 生成 HTTP 请求信息 解析域名,获取 IP 地址 将传输工作交给操作系统中的协议栈 走协议栈里面的 TCP 协议,添加TCP头部,生成TCP报文,里面包含端口等信息(HTTP基于TCP协议传输,TCP 阅读全文
posted @ 2021-03-10 10:21 跑调大叔! 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 一、使用场景 Semaphore 翻译成字面意思为 信号量,Semaphore 可以控制同时访问的线程个数。 通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。 信号量主要用于两个目的: 用于多个共享资源的互斥使用; 用于并发线程数的控制。 二、代码实现 阅读全文
posted @ 2021-03-07 22:48 跑调大叔! 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 一、使用场景 通过它可以实现让一组线程等待至某个状态之后再全部同时执行。 CyclicBarrier 中最重要的方法就是 await 方法,它有 2 个重载版本: // 用来挂起当前线程,直至所有线程都到达指定状态再同时执行后续任务 public int await(); // 让这些线程等待至一定 阅读全文
posted @ 2021-03-07 22:47 跑调大叔! 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 一、使用场景 CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。 比如有一个任务,它要等待其他 6 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch 来实现这种功能了。 二、代码实现 public class 阅读全文
posted @ 2021-03-07 22:46 跑调大叔! 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在学习集合时,我们就已经知道了 ArrayList 是线程不安全的。 那能不能通过代码来体现呢? 因此,本文将演示 ArrayList 在多线程环境下的线程不安全的问题,并总结常用的解决办法。 二、代码实现 public class AboutList { public static vo 阅读全文
posted @ 2021-03-07 22:45 跑调大叔! 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 一、什么是函数式接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 lambda 表达式。 如定义了一个函数式接口如下: @FunctionalInterface interface Greeting 阅读全文
posted @ 2021-03-07 22:44 跑调大叔! 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 一、前言 使用 Lamda 表达式解决匿名内部类代码冗余的问题,因为函数式接口可以被隐式转换为 Lambda 表达式; Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑。 二、前提条件 该接口必须是一个函数式接口(有且仅有一 阅读全文
posted @ 2021-03-07 22:42 跑调大叔! 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 一、场景一 两个同步方法,一部手机,请问先打印邮件还是短信? class Phone{ public synchronized void sendEmail() throws Exception{ System.out.println("*******sendEmail"); } public sy 阅读全文
posted @ 2021-03-06 23:03 跑调大叔! 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 一、什么是单例模式 类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类提供一个取得其对象实例的方法(静态方法)。 二、单例模式的实现方式 1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3)懒汉式(线程不安全) 4)懒汉式(线程安全,同步方法) 阅读全文
posted @ 2021-03-04 16:02 跑调大叔! 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在Shiro【项目实战】中有总结过 Shiro 的基本的配置,本文则总结通过整合 Redis 实现缓存和会话存储。 三、整合 Redis 实现缓存 (一)为什么要使用整合 Redis 因为在授权的时候,每执行一次操作都要重新去数据库查询相关权限,而权限几乎不会修改, 所以,针对这种修改少但 阅读全文
posted @ 2021-03-04 15:57 跑调大叔! 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在前面的几篇文章中已经总结了 Shiro的一些概念等理论知识,所以本文开始实战。 二、项目背景 由于主要注重 Shiro 的一些配置,所以搭建项目环境、创建数据库表、编写domain、dao、service、controller等代码就省略了,有需要的小伙伴可在文末进行下载。 (一)技术选 阅读全文
posted @ 2021-03-04 15:56 跑调大叔! 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在实际开发中,默认的配置往往不满足业务需求,所以就需要进行一些自定义。 二、自定义 Filter (一)为什么要自定义 在 ShiroConfig 配置类中我们有配置指定角色才能访问的路径,如: filterChainDefinitionMap.put("/admin/**", "role 阅读全文
posted @ 2021-03-04 15:51 跑调大叔! 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在 Shiro【自定义Realm实战】中,已经总结了自定义 Realm 的实现,但在实际开发中,想要使用 Shiro 实现权限控制,除了要知道 Realm 外,本文中总结的其它模块也是不可缺少的。 二、Shiro 中的 Filter (一)内置 Filter 介绍 Shiro 中提供了 1 阅读全文
posted @ 2021-03-04 15:49 跑调大叔! 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 一、前言 虽然 Shiro 给我们提供了很多内置的 Realm,但在企业开发中,这往往不适用于项目中。 所以,都需要自定义 Realm 来使用。 二、步骤 创建一个类 ,继承 AuthorizingRealm ​ (继承关系:自定义Realm->AuthorizingRealm->Authentic 阅读全文
posted @ 2021-03-04 15:44 跑调大叔! 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在 Shiro【初识】中我们已经知道 Realm 主要是用来从数据库中获取用户、角色、资源等数据的。 但 Shiro 还给我们提供了很多 Realm,让我们可以操作其他的数据源,比如配置文件等等。 二、项目环境 本文中的项目使用环境为:JDK8 + Maven 3.6.3 + Spring 阅读全文
posted @ 2021-03-04 15:43 跑调大叔! 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 一、前言 在 Shiro【初识】中,已经总结了 Shiro 相关的概念和其架构图, 那么本文将介绍 Springboot2.x 整合 Apache Shiro ,实现快速体验认证和授权的基本流程。 本文中的项目使用环境为:JDK8 + Maven 3.6.3 + SpringBoot 2.4.1 + 阅读全文
posted @ 2021-03-04 15:41 跑调大叔! 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 一、前言 不管在什么系统中,权限控制都是必不可少的。 不同的阶段我们可能使用不同的方式来实现权限控制: 在 JavaWeb 阶段,我们可能直接通过定义 Filter 的方式来实现; 而当我们学习了那么多的框架之后,更多的是使用已经开发好的权限框架,比如:Shiro、 Spring Security。 阅读全文
posted @ 2021-03-04 15:39 跑调大叔! 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 一、成员区别 抽象类: 成员变量:可以有变量,也可以有常量 构造方法:有 成员方法:可以有抽象,也可以有非抽象 接口: 成员变量:只能是常量 构造方法:无 成员方法:可以有抽象,也可以有非抽象(JDK 1.8 之后) 二、关系区别 类与类:继承关系,单继承 类与接口:实现关系,单实现和多实现都可以 阅读全文
posted @ 2021-03-03 13:28 跑调大叔! 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 特点 成员变量 编译看左边,运行看左边 成员方法 编译看左边,运行看右边 构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化 静态方法 编译看左边,运行看左边 1)由于成员方法存在方法重写,所以运行时看的是子类; 2)静态和类相关,算不上重写,所以运行时还是看父类。 Java新 阅读全文
posted @ 2021-03-03 13:04 跑调大叔! 阅读(47) 评论(0) 推荐(0) 编辑