2019年 java開發面試技術問題整理

1. 有兩個Integer對象a.b,假設a=200,b=200;,a=b的返回值是什麼,如果a,b=100呢,返回值是什麼?爲什麼呢?

a=100,b=100,-128—127之間是在IntegerCache.cache這個緩衝區範圍之內,不在這個緩衝範圍之內則會new一個新的對象.a=200,b=200,實際上是創建了兩個新的對象.並且指向的地址不同.

2. List.Map,Set三個接口存取元素時候各有什麼特點?

List與Set都是單列元素的集合,它們有一個功共同的父接口Collection。
Set裏面不允許有重複的元素,
存元素:add方法有一個boolean的返回值,當集合中沒有某個元素,此時add方法可成功加入該元素時,則返回true;當集合含有與某個元素equals相等的元素時,此時add方法無法加入該元素,返回結果爲false。
取元素:沒法說取第幾個,只能以Iterator接口取得所有的元素,再逐一遍歷各個元素。

List表示有先後順序的集合,
存元素:多次調用add(Object)方法時,每次加入的對象按先來後到的順序排序,也可以插隊,即調用add(int index,Object)方法,就可以指定當前對象在集合中的存放位置。
取元素:方法1:Iterator接口取得所有,逐一遍歷各個元素
方法2:調用get(index i)來明確說明取第幾個。

Map是雙列的集合,存放用put方法:put(obj key,obj value),每次存儲時,要存儲一對key/value,不能存儲重複的key,這個重複的規則也是按equals比較相等。
取元素:用get(Object key)方法根據key獲得相應的value。
也可以獲得所有的key的集合,還可以獲得所有的value的集合,
還可以獲得key和value組合成的Map.Entry對象的集合。
List以特定次序來持有元素,可有重複元素。Set 無法擁有重複元素,內部排序。Map 保存key-value值,value可多值.

3. 寫一個遞歸程序來計算一個整數n的階乘.的方法

						/**
						 * 遞歸算法計算n的階乘
						 * 遞歸:自己調自己
						 * @param n
						 * @return
						 */
						public static Integer jieCheng(Integer n) {
						    if (n < 0) {
						        return 0;
						    }
						    if (n == 1) {
						        return 1;
						    }
						    return n * jieCheng(n-1);
						}

4. 迭代器的快速失敗和安全失敗

一:快速失敗(fail—fast)
      在用迭代器遍歷一個集合對象時,如果遍歷過程中對集合對象的內容進行了修改(增加、刪除、修改),則會拋出Concurrent Modification Exception。
      原理:迭代器在遍歷時直接訪問集合中的內容,並且在遍歷過程中使用一個 modCount 變量。集合在被遍歷期間如果內容發生變化,就會改變modCount的值。每當迭代器使用hashNext()/next()遍歷下一個元素之前,都會檢測modCount變量是否爲expectedmodCount值,是的話就返回遍歷;否則拋出異常,終止遍歷。
  注意:這裏異常的拋出條件是檢測到 modCount!=expectedmodCount 這個條件。如果集合發生變化時修改modCount值剛好又設置爲了expectedmodCount值,則異常不會拋出。因此,不能依賴於這個異常是否拋出而進行併發操作的編程,這個異常只建議用於檢測併發修改的bug。
  場景:java.util包下的集合類都是快速失敗的,不能在多線程下發生併發修改(迭代過程中被修改)。
二:安全失敗(fail—safe)
  採用安全失敗機制的集合容器,在遍歷時不是直接在集合內容上訪問的,而是先複製原有集合內容,在拷貝的集合上進行遍歷。
  原理:由於迭代時是對原集合的拷貝進行遍歷,所以在遍歷過程中對原集合所作的修改並不能被迭代器檢測到,所以不會觸發Concurrent Modification Exception。
  缺點:基於拷貝內容的優點是避免了Concurrent Modification Exception,但同樣地,迭代器並不能訪問到修改後的內容,即:迭代器遍歷的是開始遍歷那一刻拿到的集合拷貝,在遍歷期間原集合發生的修改迭代器是不知道的。
      場景:java.util.concurrent包下的容器都是安全失敗,可以在多線程下併發使用,併發修改。
5.事物的ACID指的是什麼?

• 原子性(Atomic):事務中各項操作,要麼全做要麼全不做,任何一項操作的失敗都會導致整個事務的失敗;
• 一致性(Consistent):事務結束後系統狀態是一致的;
• 隔離性(Isolated):併發執行的事務彼此無法看到對方的中間狀態;
• 持久性(Durable):事務完成後所做的改動都會被持久化,即使發生災難性的失敗。通過日誌和同步備份可以在故障發生後重建數據。

6.mysql中的datetime,timestamp有什麼區別?

MySQL 中常用的兩種時間儲存類型分別是datetime和 timestamp。如何在它們之間選擇是建表時必要的考慮。下面就談談他們的區別和怎麼選擇。
1 區別
1.1 佔用空間
類型佔據字節表示形式
datetime8 字節yyyy-mm-dd hh:mm:ss
timestamp4 字節yyyy-mm-dd hh:mm:ss
1.2 表示範圍
類型表示範圍
datetime’1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’
timestamp’1970-01-01 00:00:01.000000’ to ‘2038-01-19 03:14:07.999999’
timestamp翻譯爲漢語即"時間戳",它是當前時間到 Unix元年(1970 年 1 月 1 日 0 時 0 分 0 秒)的秒數。對於某些時間的計算,如果是以 datetime 的形式會比較困難,假如我是 1994-1-20 06:06:06 出生,現在的時間是 2016-10-1 20:04:50 ,那麼要計算我活了多少秒鐘用 datetime 還需要函數進行轉換,但是 timestamp 直接相減就行。
1.3 時區
timestamp 只佔 4 個字節,而且是以utc的格式儲存, 它會自動檢索當前時區並進行轉換。
datetime以 8 個字節儲存,不會進行時區的檢索.
也就是說,對於timestamp來說,如果儲存時的時區和檢索時的時區不一樣,那麼拿出來的數據也不一樣。對於datetime來說,存什麼拿到的就是什麼。
還有一個區別就是如果存進去的是NULL,timestamp會自動儲存當前時間,而 datetime會儲存 NULL。
查看數據,可以看到存進去的是NULL,timestamp會自動儲存當前時間,而 datetime會儲存NULL
把時區修改爲東 9 區,再查看數據,會會發現 timestamp 比 datetime 多一小時
如果插入的是無效的呢?假如插入的是時間戳
結果是0000-00-00 00:00:00,根據官方的解釋是插入的是無效的話會轉爲 0000-00-00 00:00:00,而時間戳並不是MySQL有效的時間格式。
那麼什麼形式的可以插入呢,下面列舉三種
//下面都是 MySQL 允許的形式,MySQL 會自動處理2016-10-0120:48:592016#10#01 20/48/5920161001204859
3 選擇
如果在時間上要超過Linux時間的,或者服務器時區不一樣的就建議選擇 datetime。
如果是想要使用自動插入時間或者自動更新時間功能的,可以使用timestamp。
如果只是想表示年、日期、時間的還可以使用 year、 date、 time,它們分別佔據 1、3、3 字節,而datetime就是它們的集合。
7.數據庫索引爲什麼會提高查詢性能?索引過多會導致什麼問題?
7.1.DB在執行一條Sql語句的時候,默認的方式是根據搜索條件進行全表掃描,遇到匹配條件的就加入搜索結果集合。如果我們對某一字段增加索引,查詢時就會先去索引列表中一次定位到特定值的行數,大大減少遍歷匹配的行數,所以能明顯增加查詢的速度。 (二分查找法),創建的索引會按照順序排列
7.2:表數據量越大,會導致運行效率月底,而且對應的增刪改效率會變慢:
索引個數越多,對於insert操作來說,維護的成本就越大,插入一條數據的速度也就越慢。
當刪除一條數據時,會把這條數據涉及到的多個索引中的數據刪除
只有當update的這個字段,涉及到索引時,才需要維護索引,相對來說開銷要小一些

8. 你使用過哪些spring註解

@Controller
標識一個該類是Spring MVC controller處理器,用來創建處理http請求的對象.
@RestController
Spring4之後加入的註解,原來在@Controller中返回json需要@ResponseBody來配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默認返回json格式
@Service
用於標註業務層組件,說白了就是加入你有一個用註解的方式把這個類注入到spring配置中
@Autowired
用來裝配bean,都可以寫在字段上,或者方法上。
默認情況下必須要求依賴對象必須存在,如果要允許null值,可以設置它的required屬性爲false,例如:@Autowired(required=false)

@RequestMapping
類定義處: 提供初步的請求映射信息,相對於 WEB 應用的根目錄。
方法處: 提供進一步的細分映射信息,相對於類定義處的 URL
@RequestParam
用於將請求參數區數據映射到功能處理方法的參數上

@ModelAttribute
使用地方有三種:
(1)、標記在方法上。
標記在方法上,會在每一個@RequestMapping標註的方法前執行,如果有返回值,則自動將該返回值加入到ModelMap中。
(1) 在有返回的方法上:
當ModelAttribute設置了value,方法返回的值會以這個value爲key,以參數接受到的值作爲value,存入到Model中,如下面的方法執行之後,最終相當於 model.addAttribute("user_name", name);假如 @ModelAttribute沒有自定義value,則相當於
model.addAttribute("name", name);
(2) 在沒返回的方法上:
需要手動model.add方法
(3)、標記在方法的參數上。
標記在方法的參數上,會將客戶端傳遞過來的參數按名稱注入到指定對象中,並且會將這個對象自動加入ModelMap中,便於View層使用.我們在上面的類中加入一個方法如下
@Cacheable
用來標記緩存查詢。可用用於方法或者類中,當標記在一個方法上時表示該方法是支持緩存的,當標記在一個類上時則表示該類所有的方法都是支持緩存的。
@CacheEvict
用來標記要清空緩存的方法,當這個方法被調用後,即會清空緩存。@CacheEvict(value=”UserCache”)
@Resource
的作用相當於@Autowired
只不過@Autowired按byType自動注入,
而@Resource默認按 byName自動注入罷了。
@Resource有兩個屬性是比較重要的,分是name和type,Spring將@Resource註解的name屬性解析爲bean的名字,而type屬性則解析爲bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略
@Resource裝配順序:
1、如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常
2、如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
3、如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常
4、如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退爲一個原始類型進行匹配,如果匹配則自動裝配;
指定名稱裝配的話我們採用的是@Qualifier註解

9. 在使用mybatis開發中是否遇到過如下錯誤提示:Invalid bound statement(not found),你是如何解決的?

導致該問題出現的原因如下(僅供參考):
1、檢查 mapper.xml 中 namespace 等於是否與mapper接口地址一致
    mapper.xml:
2、檢查mapper.java 接口中的方法名和 mapper.xml 中的statement 的 id 是否保持一致。
3、mapper接口中的方法返回值是List<User>,而select元素沒有正確配置ResultMap,或者只配置ResultType
4、檢查application.properties配置文件是否添加以下配置信息(我就是因爲這個原因導致報錯的,添加之後問題解決):

    mybatis.mapperLocations=classpath:mapper/*Mapper.xml   
    mybatis.typeAliasesPackage=com.gugr.springboot.entity
  1. 在你平時開發中,經常遇到的報錯是什麼,你是如何解決的?說說你的解決思路.

  2. 代碼編寫:數組分頁,sql分頁,攔截器分頁,RowBounds分頁

  3. 在以下兩個打印語句分別輸出什麼?爲什麼?

    package testDemo.error;
    /**

      1. 在以下兩個打印語句分別輸出什麼?爲什麼?
    • @author William

    */
    public class IntegerTestDemo {
    public static void main(String[] args) {
    Integer a = 100;
    Integer b = 100;
    System.out.println(a == b);
    System.out.println("=分割線=");
    Integer c = 100;
    Integer d = 200;
    System.out.println(c == d);
    System.out.println("=分割線=");

    }
    

    }
    true
    =分割線=
    false
    =分割線=

選擇題
  1. Object類不包含哪些方法(D)
    A. notify B.wait C.hashCode D.sleep

  2. 下面哪些數據結構不是索引的數據結構(D);
    A. 哈希 B.B+樹 C.B-樹 D,紅黑樹

  3. 下面哪些數據結構不是redis的數據結構©
    A. 字符串 B.列表 C.樹 D.集合
    二. 算法題
    6.輸入一個鏈表的(head 節點),高效輸出該鏈表倒數第K個節點.
    package com.java.offer
    public class Solution07 {
    public static ListNode findKthToTail(ListNode head, int k){
    if(head==null || k<=0){
    return null;
    }
    ListNode h1=head;
    ListNode h2=head;
    for(int i=1; i<k; i++){
    if(h1.next!=null){
    h1=h1.next;
    }else{
    return null;
    }
    }
    while(h1.next!=null){
    h1=h1.next;
    h2=h2.next;
    }
    return h2;
    }
    }
    三.設計題

  4. 你有一個網站並且擁有很多的訪客,每當有用戶訪問時,你想知道這個IP是不是第一次訪問你的網站.請設計完成相應的功能.
    request.getRemoteAddr()是獲得客戶端的ip地址,將獲取的Ip地址存入redis,不設置過期時間,然後將每次請求的IP都進行對比,存在則不刪除,不存在則存入redis當中

  5. Spring中的BeanFactory和ApplicationContext的區別是什麼?
    都是bean的工廠,但是beanFactory只是一個接口,applicationContext是具體的實現。
    beanFactory只是applicationContext要遵循的一種規範。beanFactory是spring中所有容器必須實現的接口。

BeanFactory基本的工廠
解析,管理,實例化所有容器內的bean的接口,spring中所有解析配置文件的類都直接或者間接實現該接口
ApplicationContext接口implements BeanFactory
創建對象的特點:
BeanFactory 在解析配置文件時並不會初始化對象,只有在使用對象時(getBean())纔會對該對象進行初始化
ApplicationContext 在解析配置文件時對配置文件中的所有對象都初始化了,getBean()方法只是獲取對象的過程.
4. Spring中實現一個定時任務如何做,如果這個任務在分佈式系統中,如果處理多個實例的同步.
兩種方式:0.1:自身的task定時功能:只需要定義並開啓註解:
在Spring配置文件中進行配置基本信息
xmlns:task=http://www.springframework.org/schema/task
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd

<context:component-scan base-package=“com.test”/>

task:annotation-driven/
代碼如下:在方法上添加@Schelued註解,並在後面寫cron表達式

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**

  • Created by leo on 2018/1/22.
    */
    @Component
    public class TimerTask {

    @Scheduled(cron = “* * * * * ?”)//每分鐘都執行
    public void test(){
    System.out.println(“執行”);
    }

分佈式項目的實現方式:一種是Spring與Quartz集成配置,另外一種是elastic-job框架

java中接口和抽象類的區別
接口和抽象類的區別?
接口(interface)和抽象類(abstract class)是支持抽象類定義的兩種機制。
接口是公開的,不能有私有的方法或變量,接口中的所有方法都沒有方法體,通過關鍵字interface實現。
抽象類是可以有私有方法或私有變量的,通過把類或者類中的方法聲明爲abstract來表示一個類是抽象類,被聲明爲抽象的方法不能包含方法體。子類實現方法必須含有相同的或者更低的訪問級別(public->protected->private)。抽象類的子類爲父類中所有抽象方法的具體實現,否則也是抽象類。
接口可以被看作是抽象類的變體,接口中所有的方法都是抽象的,可以通過接口來間接的實現多重繼承。接口中的成員變量都是static final類型,由於抽象類可以包含部分方法的實現,所以,在一些場合下抽象類比接口更有優勢。
相同點:
(1)都不能被實例化
(2)接口的實現類或抽象類的子類都只有實現了接口或抽象類中的方法後才能實例化。
不同點:
(1)接口只有定義,不能有方法的實現,java 1.8中可以定義default方法體,而抽象類可以有定義與實現,方法可在抽象類中實現。
(2)實現接口的關鍵字爲implements,繼承抽象類的關鍵字爲extends。一個類可以實現多個接口,但一個類只能繼承一個抽象類。所以,使用接口可以間接地實現多重繼承。
(3)接口強調特定功能的實現,而抽象類強調所屬關係。
(4)接口成員變量默認爲public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。
(5)接口被用於常用的功能,便於日後維護和添加刪除,而抽象類更傾向於充當公共類的角色,不適用於日後重新對立面的代碼修改。功能需要累積時用抽象類,不需要累積時用接口。

  1. HTTP POST和GET的區別

  2. get只能傳遞1kb以下數據,POST可以傳遞大數據。

  3. get請求如果有請求參數,那麼,瀏覽器上會顯示請求參數
    post請求不會,所以post請求會更安全。

  4. 如果是get請求,有請求參數,請求參數是在http請求行的資源路徑上。

  5. 請說說你對dubbo或者springcloud的理解,以及區別
    兩者的目的都是爲了降低業務的耦合性,微服務主要是將複雜業務拆分成爲單個服務,專注於某一個服務.dubbo主要是實現服務前後分離

傳輸:
Dubbo由於是二進制的傳輸,佔用帶寬會更少;
Spring Cloud是http協議傳輸,帶寬會比較多,同時使用http協議一般會使用JSON報文,消耗會更大。但是在國內95%的公司內,網絡消耗不是什麼太大問題,
如果真的成了問題,通過壓縮、二進制、高速緩存、分段降級等方法,很容易解。

開發難度:
Dubbo的開發難度較大,原因是dubbo的jar包依賴問題很多大型工程無法解決;
Spring Cloud的接口協議約定比較自由且鬆散,需要有強有力的行政措施來限制接口無序升級

後續改進:
Dubbo通過dubbofilter,很多東西沒有,需要自己繼承,如監控,如日誌,如限流,如追蹤
Spring Cloud自己帶了很多監控、限流措施,但是功能可能和歐美習慣相同,國內需要進行適當改造,但更簡單,就是ServletFilter而已,但是總歸比dubbo多一些東西是好的;

註冊中心:
Dubbo的註冊中心可以選擇zk,redis等多種;
Spring Cloud:的註冊中心只能用eureka或者自研;

配置中心:
dubbo:如果我們使用配置中心、分佈式跟蹤這些內容都需要自己去集成,無形中增加了使用難度。
Spring Cloud:提供了微服務的一整套解決方案:服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等

6.,在ssm框架的業務開發中,開發人員經常實現CRUD功能,並沒有涉及到多個線程同步處理,爲什麼在啓動應用以後,可以支持多人同時訪問並且不出現同步問題???
spring 管理的bean默認是單例的,可通過 scope 屬性設置scope=”singleton” 默認是單例,可修改爲scope=”prototype” 此時將不再是單例模式 spring bean默認是餓漢式 初始化時就會創建bean的實例,另外spring的單例時相對於spring容器, 設計模式中的單例模式時相對於JVM, JVM可以有多個容器。 所以spring使用中是線程安全的.
數據表讀寫分離.

  1. mysql 訪問數據的方式有哪些,對這些方式的性能做一個排序.回表查詢是什麼意思?回表對性能有什麼影響?
    7.1.:
    7.2. 回表查詢:所謂的回表查詢,先定位主鍵值,再定位行記錄,它的性能較掃一遍索引樹更低。
    這就是所謂的回表查詢,先定位主鍵值,再定位行記錄,它的性能較掃一遍索引樹更低。

8.mybatis:如何編寫一個自定義的插件.
https://blog.csdn.net/qq_38409944/article/details/82494624
9.mybatis的動態sql是做什麼的,有哪些動態sql.
Mybatis 動態 SQL ,可以讓我們在 XML 映射文件內,以 XML 標籤的形 式編寫動態 SQL ,完成邏輯判斷和動態拼接 SQL 的功能。
Mybatis 提供了 9 種動態 SQL 標籤:、、、、、、、、。
其執行原理爲,使用 OGNL 的表達式,從 SQL 參數對象中計算表達式的值,根據表達式的值動態拼接 SQL ,以此來完成動態 SQL 的功能。
原文鏈接:https://blog.csdn.net/qq_38489761/article/details/93650848

選擇題:
1.下列屬於合法的java標識符的是( A)
A.cat B.5books C._static D.-3.14159
2. 在mysql中,下面哪個符號可以放到SQL前面來表示註釋(A,B)
A.# B.-- C.& D,!
MySQL中的註釋符號有三種
• #…
• – …
• //

3.下面說法正確的是©
A. java中的線程是非搶佔式的(實際是搶佔式的)
B. java中的線程不可以共享數據(可以共享數據)
C. 每個java程序至少有一個線程,就是主線程
D. Java中的線程不可以共享代碼
4哪個HTTP Method可以用來傳遞大量數據(A)
A.POST B.PUT C.DELETE D.HEAD E.GET
5.關於Map和List,下面說法正確的是( B )
A. Map繼承List
B. List中可以保存Map或者List.
C. Map和List中只能保存從數據庫中抽取的數據.
D. Map的Value可以是List或Map

程序分析題:
1.執行下面代碼結果(輸出0 )
package testDemo.error;

public class Hope2 {
public static void main(String[] args) {
String _cat = “new”;

	for (int i = 0;;) {
		System.out.println(i);
		break;
	}
	

	
	
}

}
2.下面代碼輸出的結果是(12)
package testDemo.error;

public class Hope3 {
public static void main(String[] args) {
int i=0,s = 0;
do {
if (i%2 == 0) {
i++;
continue;
}
i ++;
s = s+i;
}while(i<7) ;
System.out.println(s);

 }

}

編程題:
1.編寫計算距當前時間10天以後的日期和時間,並用XXX年XX月XX日的格式輸出;(代碼如下)

3.編寫程序,將字符串”2019-10-01 10:00:00”變爲Date型數據.

  1. 以下兩段代碼是否報錯,爲什麼.

問題答案連接: https://www.jianshu.com/p/fabdd57955d6

  1. MySql數據庫有如下一張表並建立了相關的索引.
    CREATE TABLE ‘t’(
    ‘id’ INT(11) NOT NULL,
    ‘a’ INT(11) DEFAULT NULL,
    ‘b’ INT(11) DEFAULT NULL,
    PRIMARK KEY(‘id’)
    )ENGINE=INNODB;
    ALTER TABLE ADD INDEX a_index(a);
    ALTER TABLE ADD INDEX b_index(b);
    假設這張表有10W條數據,字段a的值是1-10W之間不重複的整數.如下SQL語句的索引會生效嗎?爲什麼?

待補充問題:

AutoWired和Qualifier的區別是什麼?
Object有哪些方法?
爲什麼重寫equals一定要重寫hashcode?
java異常有哪些?項目中怎麼做全局異常處理機制?
對socket的理解?IO模型跟NIO理解?
你對異步編程的理解?
有使用過併發流?併發流遍歷數據會出現什麼情況?
HashMap Put方法怎麼實現?擴容策略?其中的算法如何減少碰撞?如果碰撞之後會怎麼處理?
spring ioc aop理解,bean的生命週期,bean的scope範圍,BeanFactory跟ApplicationContex區別?
spring用了哪些設計模式,講下對每個設計模式的實現方式?
spring事務傳播行爲?
mybatis緩存怎麼實現?如果不需要,怎麼關閉?mapper.java跟sql.xml綁定原理
說說dubbo怎麼發佈,怎麼調用?是否有降級方案,熔斷措施?
dubbo傳輸是什麼類型數據?是阻塞的還是非阻塞的?底層傳輸用什麼框架實現?
dubbo負載均衡策略是什麼?你們項目用哪種策略?
lunece怎麼實現分詞?
消息中間件在高併發情況下,怎麼保證消息不丟失?
存儲引擎的 InnoDB 與 MyISAM區別?
sql如何優化?
二叉樹,平衡二叉樹,B-Treee,B+Tree區別,Hash索引效率怎樣?缺點是什麼?爲什麼mysql選擇B+Tree
redis跟mysql如何保持數據一致性?
redis發佈訂閱有問題?
redis keys* 查找大量數據會發生什麼?
redis中的keys在很多時候能幫助我們完成模糊查詢的功能
數據量一大,會嚴重影響性能
修改方式:
將匹配規則數組序列化後存到一個key中,這樣讀取的時候就直接用get即可。
aaa..yyyy. 作爲key,然後將此模糊匹配的數據存入此健值中。通過get 的方式取出裏面的值。

你們系統還有什麼需要優化的?

jvm調優,
mysql索引,
消息隊列,
springboot,springcloud,的區別及關係
設計模式,
項目邏輯,
redis,
linux命令
svn和git的區別,
消息中間件
全文檢索

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章