博客 / 列表

程序員Seven - 劍指offer-46、孩⼦們的遊戲(圓圈中最後剩下的數)

題目描述 有個遊戲是這樣的:⾸先,讓 n 個⼩朋友們圍成⼀個⼤圈,⼩朋友們的編號是0~n-1。然後,隨機指定⼀個數 m ,讓編號為0的⼩朋友開始報數。每次喊到 m-1 的那個⼩朋友要出列唱⾸歌,然後可以在禮品箱中任意的挑選禮物,並且不再回到圈中,從他的下⼀個⼩朋友開始,繼續 0... m-1報數....這樣下去....直到剩下最後⼀個⼩朋友,可以不⽤表演,並且拿到⽜客禮品,請你試着想下,哪個⼩朋友

JAVA

程序員Seven - 劍指offer-45、撲克牌順⼦

題⽬描述 撲克牌可以組成順⼦,⼤\⼩ 王可以看成任何數字,並且 A 看作 1 , J 為 11 , Q 為 12 , K 為 13 。 5張牌 【A,0,3,0,5】 就可以變成“ 1,2,3,4,5 ”(⼤⼩王分別看作 2 和 4 ),這樣就組成了順⼦。(可以認為⼤⼩王是 0 。) 輸⼊五張牌,如果牌能組成順⼦就輸出true,否則就輸出 false 。 示例1 輸⼊:[0,3,2,6,4]

JAVA

程序員Seven - 劍指offer-44、翻轉單詞序列

題⽬描述 給定⼀個句⼦,將句⼦中的單詞進⾏翻轉,注意,單詞內部的字符順序不改變,改變的是單詞與單詞之間的順序,⽐如“ I am a coder. ”,翻轉之後變成“ coder. a am I ”。 示例 注意:引號內部才是輸⼊的內容 輸⼊:"You are a cool boy." 輸出:"boy. cool a are You" 思路及解答 Java內置函數分割反轉 Java

後端

程序員Seven - 數據結構-哈希表

介紹 像線性數據結構在查找的時候,⼀般都是使⽤= 或者!= ,在折半查找或者其他範圍查詢的時候,可能會使⽤ 和 ,理想的時候,我們肯定希望不經過任何的⽐較,直接能定位到某個位置(存儲位置),這種在數組中,可以通過索引取得元素。那麼,如果我們將需要存儲的數據和數組的索引對應起來,並且是⼀對⼀的關係,那不就可以很快定位到元素的位置了麼? 只要通過函數f(k) 就能找到k 對應的位置,這個函數f(k)

JAVA

程序員Seven - 線性數據結構

線性表示最常⽤⽽且最為簡單的⼀種數據結構,⼀個線性表示 n 個數據元素的有限序列,有以下特點: 存在唯⼀的第⼀個的數據元素 存在唯⼀被稱為最後⼀個的數據元素 除了第⼀個以外,集合中每⼀個元素均有⼀個前驅 除了最後⼀個元素之外,集合中的每⼀個數據元素都有⼀個後繼元素 線性表包括下⾯⼏種: 數組:查詢 / 更新快,查找/刪除慢 鏈表 隊列 棧 數組 數組簡介 數組(Array)

JAVA

程序員Seven - 劍指offer-43、左旋轉字符串

題⽬描述 彙編語⾔中有⼀種移位指令叫做循環左移( ROL ),現在有個簡單的任務,就是⽤字符串模擬這個指令的運算結果。對於⼀個給定的字符序列 S ,請你把其循環左移 K 位後的序列輸出。例如,字符序列S=”abcXYZdef” ,要求輸出循環左移3位後的結果,即“ XYZdefabc ”。是不是很簡單?OK,搞定它! 思路及解答 這道題⽬的意思就是將前⾯ n 位,移動到後⾯,那麼我們可以直接從第

JAVA

程序員Seven - 劍指offer-42、和為S的兩個數字

題⽬描述 輸⼊⼀個遞增排序的數組和⼀個數字 S ,在數組中查找兩個數,使得他們的和正好是 S ,如果有多對數字的和等於 S ,輸出兩個數的乘積最⼩的。 返回值描述:對應每個測試案例,輸出兩個數,⼩的先輸出。 輸⼊:[1,2,4,7,11,15],15 返回值:[4,11] 思路及解答 暴⼒遍歷 直接遍歷每兩個數,查看其和是否符合等於 sum ,再計算其乘積,是否⼩於之前的乘積,如果⼩於,則更

JAVA

程序員Seven - 劍指offer-41、和為S的連續正數序列

題⽬描述 ⼩明很喜歡數學,有⼀天他在做數學作業時,要求計算出 9~16 的和,他⻢上就寫出了正確答案是 100 。但是他並不滿⾜於此,他在想究竟有多少種連續的正數序列的和為 100 (⾄少包括兩個數)。沒多久,他就得到另⼀組連續正數和為 100 的序列: 18,19,20,21,22 。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck! 返回值描述:輸出所有和為

JAVA

程序員Seven - SpringCloud 常見面試題(三)

服務網關 在微服務架構中,網關的作用是什麼 在微服務架構中,網關(Gateway)具有以下作用: 統一入口:網關為所有的微服務提供一個唯一的入口點,從而簡化了客户端與服務的交互,同時保障了後台服務的安全性。 鑑權校驗:網關能夠識別每個進來的請求,並根據其權限進行校驗,阻止不符合要求的請求通過。 動態路由:根據需要,網關可以動態地將請求路由到不同的後端集羣中,實現服務的靈活調度。 降低耦合

JAVA

程序員Seven - SpringCloud 常見面試題(二)

配置中心 什麼是配置中心?有哪些常見的配置中心? 配置中心是一個用於配置集中化管理目支持動態更新、分發配置文件的工具(服務)。 它實現了配置的統一管理和動態同新,當配置信息發生變化時,配置中心可以自動通知服務實例進行配置更新,這樣就可以實例無需重啓即可應用最新的配置,從一定程度上減少了系統訪問的空窗期,非常靈活方便 常見的配置中心: Spring Cloud Config:Spring 提供的

spring , JAVA

程序員Seven - SpringCloud 常見面試題(一)

概念 什麼是微服務?你是怎麼理解微服務的? 微服務架構是一種架構模式或者説是一種架構風格,它提倡將單一應用程序劃分為一組小的服務,每個服務運行在其獨立的自己的進程中,服務之間相互協調、互相配合,為用户提供最終價值。服務之間採用輕量級的通信機制互相溝通(通常是基於HTTP的RESTful API),每個服務都圍繞着具體的業務進行構建,並且能夠被獨立的構建在生產環境、類生產環境等。另外,應避免統一的、

spring , JAVA

程序員Seven - 劍指offer-36、兩個鏈表的第⼀個公共節點

題⽬描述 輸⼊兩個鏈表,找出它們的第⼀個公共結點。(注意因為傳⼊數據是鏈表,所以錯誤測試數據的提示是⽤其他⽅式顯示的,保證傳⼊數據是正確的) 思路及解答 HashSet包含法 第⼀種做法,直接依賴於 HashSet ,遍歷第⼀個鏈表的時候,將所有的節點,添加到 hashset 中, 遍歷第⼆個鏈表的時候直接判斷是否包含即可,屬於空間換時間的做法。 public ListNode FindFirst

JAVA , 後端

程序員Seven - MyBatis 常見面試題

Mybatis基礎 Mybatis是什麼? MyBatis框架是一個開源的數據持久層框架。 它的內部封裝了通過JDBC訪問數據庫的操作,支持普通的SQL查詢、存儲過程和高級映射,幾乎消除了所有的JDBC代碼和參數的手工設置以及結果集的檢索。 MyBatis作為持久層框架,其主要思想是將程序中的大量SQL語句剝離出來,配置在配置文件當中,實現SQL的靈活配置。 這樣做的好處是將SQL與程序

JAVA , Mybatis

程序員Seven - Netty高級使用與源碼詳解

粘包與半包 粘包現象 粘包的問題出現是因為不知道一個用户消息的邊界在哪,如果知道了邊界在哪,接收方就可以通過邊界來劃分出有效的用户消息。 服務端代碼 public class HelloWorldServer { static final Logger log = LoggerFactory.getLogger(HelloWorldServer.class); void start

netty , JAVA , 後端

程序員Seven - 反轉鏈表(花式反轉)

題目描述 給你單鏈表的頭節點 head ,請你反轉鏈表,並返回反轉後的鏈表。 示例 1: 輸入:head = [1,2,3,4,5] 輸出:[5,4,3,2,1] 示例 2: 輸入:head = [1,2] 輸出:[2,1] 示例 3: 輸入:head = [] 輸出:[] 提示: 鏈表中節點的數目範圍是 [0, 5000] -5000 = Node.val = 5000 進階:鏈表可

leetcode , JAVA , 後端

程序員Seven - 從尾到頭打印鏈表

題目描述 輸入一個鏈表的頭節點,按鏈表從尾到頭的順序返回每個節點的值(用數組返回)。 如輸入{1,2,3}的鏈表如下圖: 返回一個數組為[3,2,1] 0 = 鏈表長度 = 10000 示例1 輸入: {1,2,3} 返回值: [3,2,1] 示例2 輸入: {67,0,24,58} 返回值: [58,24,0,67] 思路及解答 ⾸先我們需要想⽤哪些解法可以解,⼤概有如下: 使⽤棧 使⽤

leetcode , JAVA , 後端

程序員Seven - 算法題:數組中的第k個最大元素

力扣鏈接 題意 給定整數數組nums和整數k,請返回數組中第k 個最大的元素。 請注意,你需要找的是數組排序後的第k個最大的元素,而不是第k個不同的元素。 你必須設計並實現時間複雜度為O(n)的算法解決此問題。 示例 1: 輸入: [3,2,1,5,6,4], k = 2 輸出: 5 示例2: 輸入: [3,2,3,1,2,4,5,5,6], k = 4 輸出: 4 提示: 1 =

leetcode , JAVA , 後端

程序員Seven - 劍指offer-1、⼆維數組中的查找

題目描述 在⼀個⼆維數組中(每個⼀維數組的⻓度相同),每⼀⾏都按照從左到右遞增的順序排序,每⼀列都按照從上到下遞增的順序排序。請完成⼀個函數,輸⼊這樣的⼀個⼆維數組和⼀個整數,判斷數組中是否含有該整數。 例⼦,輸⼊⼀個數組: num[3][4] = [ 1 , 4 , 6 , 28 , 2 , 7 , 32 , 30 , 10 , 11 , 67 , 79 ] 需要查找⼀個數字 32 ,則返回 t

leetcode , JAVA , 後端

程序員Seven - 劍指offer-3、從尾到頭打印鏈表

題目描述 輸入一個鏈表的頭節點,按鏈表從尾到頭的順序返回每個節點的值(用數組返回)。 如輸入{1,2,3}的鏈表如下圖: 返回一個數組為[3,2,1] 0 = 鏈表長度 = 10000 示例1 輸入: {1,2,3} 返回值: [3,2,1] 示例2 輸入: {67,0,24,58} 返回值: [58,24,0,67] 思路及解答 ⾸先我們需要想⽤哪些解法可以解,⼤概有如下: 使⽤棧 使⽤

leetcode , JAVA , 後端

程序員Seven - 劍指offer-9-變態跳台階

題⽬描述 ⼀只⻘蛙⼀次可以跳上1 級台階,也可以跳上2級……它也可以跳上n級。求該⻘蛙跳上⼀個n級的台階總共有多少種跳法。 思路及解答 數學歸納法 ⾸先⻘蛙⼀次可以跳 1 , 2 , 3 到 n 級。假設函數是f(n) ,則: ⻘蛙跳到第⼀級是f(1)=1 ,只有⼀種跳法。 ⻘蛙跳到第⼆級,可以是直接跳到第⼆級,也可以是從第⼀級直接跳。所以f(2)=f(1)+1 ⻘蛙跳到第三級,可以從第0

leetcode , JAVA , 後端

程序員Seven - RabbitMQ基礎入門

RabbitMQ介紹 RabbitMQ是基於Erlang語言開發的開源消息通信中間件,官網地址: Messaging that just works — RabbitMQ 接下來,我們就學習它的基本概念和基礎用法。 安裝 在安裝命令中有兩個映射的端口: 15672:RabbitMQ提供的管理控制枱的端口 5672:RabbitMQ的消息發送處理接口 安裝完成後,訪問 http:

rabbitmq , JAVA , 後端

程序員Seven - Maven入門,讀完這篇就夠了

Maven 項⽬⽣命週期 Maven從項⽬的三個不同的⻆度,定義了三套⽣命週期,三套⽣命週期是相互獨⽴的,它們之間不會相互影響。 清理⽣命週期(Clean Lifecycle):該⽣命週期負責清理項⽬中的多餘信息,保持項⽬資源和代碼的整潔性。⼀般拿來清空directory(即⼀般的target)⽬錄下的⽂件。 默認構建⽣命週期(Default Lifeclyle):該⽣命週期表示這項⽬的構

maven , 後端

程序員Seven - 【設計模式】命令模式助力快速添加新命令而不影響現有代碼

概述 日常生活中,我們出去吃飯都會遇到下面的場景。 定義: 將一個請求封裝為一個對象,使發出請求的責任和執行請求的責任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行存儲、傳遞、調用、增加與管理。 結構 命令模式包含以下主要角色: 抽象命令類(Command)角色: 定義命令的接口,聲明執行的方法。 具體命令(Concrete Command)角色:具體的命令,實現命令接口

設計模式 , JAVA , 後端

程序員Seven - 【設計模式】責任鏈模式教你如何優雅地分發任務

概述 在現實生活中,常常會出現這樣的事例:一個請求有多個對象可以處理,但每個對象的處理條件或權限不同。例如,公司員工請假,可批假的領導有部門負責人、副總經理、總經理等,但每個領導能批准的天數不同,員工必須根據自己要請假的天數去找不同的領導簽名,也就是説員工必須記住每個領導的姓名、電話和地址等信息,這增加了難度。這樣的例子還有很多,如找領導出差報銷、生活中的“擊鼓傳花”遊戲等。 定義: 又名職責鏈模

設計模式 , JAVA , 後端