上海正規(guī)做網(wǎng)站公司有哪些網(wǎng)站免費(fèi)建站app
學(xué)習(xí)目標(biāo):
每天2-3到簡(jiǎn)單sql(刷完即止),每天復(fù)習(xí)代碼隨想錄上的題目2-3道算法(時(shí)間充足可以繼續(xù)),背誦的八股的問題也在這里記錄了
今日碎碎念:
1)今天任務(wù):java基礎(chǔ)八股(不貼出來(lái)了),集合源碼,MySQL,Redis八股部分
3)目前簡(jiǎn)歷修改完畢
力扣刷題
SQL
力扣1193:1193. 每月交易 I
解答思路:
? ? ? ? 1)看注釋即可
# 找出每年的每月,按每日期和國(guó)家分組
# 這里得用到日期函數(shù)DATE_FORMAT(trans_date, '%Y-%m'),可以把日期轉(zhuǎn)換為指定格式
# 其余的就是按照題目提示來(lái)統(tǒng)計(jì)即可,使用之前學(xué)到的IF來(lái)判斷
select DATE_FORMAT(trans_date, '%Y-%m') as month,country,count(*) as trans_count,sum(if(state = 'approved',1,0)) as approved_count,sum(amount) as trans_total_amount,sum(IF(state = 'approved', amount, 0)) AS approved_total_amountfrom Transactionsgroup by month,country
力扣1174:1174. 即時(shí)食物配送 II
解答思路:
? ? ? ? 1)這道題我的首要思路就是,找到首次訂單,那么就是找到訂單日期最早的,因此可以使用MIN
? ? ? ? 2)查出擁有首次訂單的用戶的id和訂單日期后,將這個(gè)表作為子查詢結(jié)果
? ? ? ? 3)我們最后也只需要用到子查詢的這兩個(gè)列,因此where in(表)肯定是少不了的
? ? ? ? 4)接下來(lái)就是判斷是即時(shí)訂單,還是計(jì)劃訂單即可
# 首先得找到首次訂單,即找到訂單日期最早的
select round(sum(order_date = customer_pref_delivery_date) * 100 / count(*) ,2) as immediate_percentage from Deliverywhere (customer_id,order_date) in (select customer_id,MIN(order_date)from Deliverygroup by customer_id)
力扣550:550. 游戲玩法分析 IV
解答思路:
? ? ? ? 1)這道題的難點(diǎn)在于進(jìn)行比例的計(jì)算,以及想到日期函數(shù)-->datediff函數(shù)的使用
? ? ? ? 2)去看評(píng)論區(qū)大神的即可
? ? ? ? 3)這里我就簡(jiǎn)單說(shuō)兩句:
? ? ? ? ? ? ? ? 3.1)這種解法只需要找到首次登錄日期,因?yàn)槭状蔚卿浺欢ㄊ俏ㄒ坏?#xff0c;所以找到了首次登錄的用戶id以及日期,其實(shí)就相當(dāng)于找到了玩家的總數(shù)了,省去了又查一次表然后distinct這種操作。
? ? ? ? ? ? ? ? 3.2)接下來(lái)就是過(guò)濾數(shù)據(jù),將查出來(lái)的首次登錄表和Activity進(jìn)行左連接,找到日期差為1的用戶的數(shù)據(jù),因?yàn)槭亲蟊磉B接查詢,所以結(jié)果條數(shù)至少為左表?xiàng)l數(shù);其實(shí)根本無(wú)需關(guān)心用戶到底連續(xù)登錄了幾天,我只需要找到連續(xù)登錄兩天的數(shù)據(jù)即可。
? ? ? ? ? ? ? ? 3.3)因此,將首次登錄表與Activity表連接查詢是再好不過(guò)的過(guò)濾方法,過(guò)濾條件如下即可on p.player_id = a.player_id and datediff(a.event_date,p.login) = 1
? ? ? ? ? ? ? ? 3.4)最后一步就比較簡(jiǎn)單,如果找出來(lái)的天數(shù)是不連續(xù)的,那么結(jié)果就會(huì)顯示為null,因此判斷一下,是null就不計(jì)算即可
# 計(jì)算從首次登錄日期開始至少連續(xù)兩天登錄的玩家的數(shù)量,然后除以玩家總數(shù)。
# 思考如何找出玩家總數(shù)
select round(sum(if(a.event_date is not null, 1, 0)) / count(*),2) as fractionfrom (select player_id,min(event_date) as loginfrom Activitygroup by player_id)as pleft join Activity as aon p.player_id = a.player_id and datediff(a.event_date,p.login) = 1
算法
力扣15:15. 三數(shù)之和
解答思路:
? ? ? ? 1)看注釋即可
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> result = new ArrayList<>();//排序Arrays.sort(nums);//開始找三元組for(int i = 0;i < nums.length;i++){//排序后是遞增的數(shù),如果三元組的第一個(gè)選數(shù)已經(jīng)大于0了,說(shuō)明沒符合要求的if(nums[i] > 0){return result;}if (i > 0 && nums[i] == nums[i - 1]) { // 去重a// 比如一個(gè)數(shù)組,-1,-1,0,1// 此時(shí)就需要這一步來(lái)去重continue;}//去找其余兩個(gè)int left = i + 1;int right = nums.length-1;while(left < right){//求出當(dāng)前三元組和int sum = nums[i] + nums[left] + nums[right];//如果和大于0,說(shuō)明right指針需要往左移動(dòng),加一個(gè)小的數(shù)才可能讓總和為0if(sum > 0){right--;}//left同理else if(sum < 0){left++;}//如果是為0,則記錄else{result.add(Arrays.asList(nums[i], nums[left], nums[right]));// 記錄完之后發(fā)現(xiàn)各自可能會(huì)跟附近產(chǎn)生重復(fù)的三元組,進(jìn)行去重// 去重邏輯應(yīng)該放在找到一個(gè)三元組之后,對(duì)b 和 c去重while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;//指針移動(dòng),準(zhǔn)備進(jìn)入下一輪right--; left++;}}}return result;}
}
力扣383:383. 贖金信
解答思路:
? ? ? ?1)本題比較簡(jiǎn)單,哈希表來(lái)做即可
class Solution {public boolean canConstruct(String ransomNote, String magazine) {// shortcutif (ransomNote.length() > magazine.length()) {return false;}int[] cnt = new int[26];for(int i = 0;i < magazine.length();i++){cnt[magazine.charAt(i) - 'a'] ++;}for(int i = 0;i<ransomNote.length();i++){int j = ransomNote.charAt(i) - 'a';cnt[j]--;if(cnt[j] < 0){return false;}}return true;}
}
八股
計(jì)算機(jī)網(wǎng)絡(luò)
Java基礎(chǔ)
? ? ? ? 1.String,StringBuffer和StringBuilder的區(qū)別
? ? ? ? 2.String為什么不可變
? ? ? ? 3.String類能被繼承嗎?為什么?
? ? ? ? 4.Integer和int的區(qū)別?為什么要設(shè)計(jì)封裝類?
? ? ? ? 5.談?wù)剬?duì)hashCode和equals方法的理解,什么時(shí)候需要重新實(shí)現(xiàn)這倆方法,重寫equals為什么要重寫hashCode
MySQL
? ? ? ? 1.不可重復(fù)讀和幻讀有什么區(qū)別?
? ? ? ? 2.MVCC的實(shí)現(xiàn)原理?
? ? ? ? 3.什么是聚集索引和非聚集索引
Redis
? ? ? ? 1.什么是緩存擊穿?緩存穿透?緩存雪崩?
? ? ? ? 2.如何確保緩存與數(shù)據(jù)庫(kù)雙寫時(shí)的數(shù)據(jù)一致性