原创 23中設計模式(1):單例模式

目錄1.設計要點2.實現方式3.優點4.使用注意事項5.單例模式在spring框架中應用6.單例對象究竟會不被GC垃圾回收機制回收呢? 定義:確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。 1.設計要點 構造方

原创 mysql查詢第二高薪水

mysql查詢第二高薪水 問題描述 編寫一條SQL,查詢應該返回 200 作爲第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。 表名爲employee員工表 解決思路 有數據返回數據,無數據返回null。 根據這

原创 23種設計模式(5):模板方法模式

目錄1.概念2.適用性3.程式範例3.1.抽象類來封裝算法的框架和核心算法3.2.播種小麥3.3.播種玉米3.4.農民伯伯3.5.客戶端調用者3.6.結果打印4.模板方法模式在JDK1.8中的使用5.模板方法模式在Spring中的

原创 RabbitMQ單機到集羣完整搭建(一)

文章目錄**RabbitMQ 安裝和使用****一、安裝依賴環境****二、安裝RabbitMQ****三、啓動和關閉**四、開啓Web管理插件**五、防火牆添加端口****多機多節點集羣部署****一、 環境準備****二、修改

原创 spring-security(四):實現自動登錄與註銷登錄

前言 我們採用的是持久化令牌方案,其中最核心的是series和token兩個值。 1.創建一張存儲自動登錄信息的表 CREATE TABLE `persistent_logins` ( `username` varchar(6

原创 spring-security(五):會話管理:爲何使用了自定義數據庫模型後,session管理策略不生效了?

1.解決方案 重寫實體類的hashcode()方法和equals方法,參考如下: public class SysUsers implements UserDetails { private String userNam

原创 spring-security(三):自定義驗證實現圖片驗證碼功能

前言 驗證碼相關的依賴和代碼,在上一篇已經寫到了,這裏不在贅述。 1.實現一個封裝額外信息的detail類 package com.demo.springsecuritydemo.detail; import org.sprin

原创 spring-security(一):自定義數據庫模型的認證與授權

前言 自定義數據庫結構實際上僅僅需要實現一個自定義的UserDetailsService; 1.數據庫準備 CREATE TABLE `sys_users` ( `id` bigint(20) NOT NULL AUTO_I

原创 spring-security(二):過濾器實現圖片驗證碼

1.添加驗證碼相關依賴 <!--用於獲取驗證碼 不可用於生產環境--> <dependency> <groupId>com.github.penggle</groupId>

原创 spring bean的生命週期代碼演示

文章目錄1.測試用的bean2.自定義的MyBeanFactoryPostProcessor3.自定義的MyBeanPostProcessor4.自定義的MyInstantiationAwareBeanPostProcessor(

原创 spring-boot的單元測試中,@Before不被執行的原因

我們先來看下筆者的單元測試的依賴版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s

原创 java中jdk8的Stream流的組合進階用法

​ 我們知道jdk8的一大特色就是推出了Stream流編程,一段冗長的代碼,抑或是相對較複雜的業務邏輯,Stream流讓一行代碼來完成變成了可能! ​ 下面通過一個例子來學習下Stream中的filter、collect等的組

原创 23種設計模式(9):觀察者模式

目錄1.概念2.類圖3.觀察者模式重要元素4.程式範例5.觀察者模式的優點6.觀察者模式的缺點 1.概念 觀察者模式:定義對象間一種多對一的依賴關係,使得當每一個對象改變狀態,則所有依賴於它的對象都會得到通知並自動更新。 2.類圖

原创 23種設計模式(4):建造者模式

目錄1.概念2.爲什麼要用這個建造者模式呢3.程式範例4.建造者模式在框架中的使用4.1JDK1.8源碼中的建造者模式4.2 spring中的建造者模式 1.概念 定義:建造者模式是把一個物體的構造過程與其本身進行分離,使得相同的

原创 java基礎之註解

java基礎之註解 自定義註解: @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name(); int ag