Java核心技术_卷

Java核心技术_卷

暂无个人简介
知识星球
Java后端
2023
南阳理工学院
Java后端

该用户为会员

会员专享项目教程/ 答疑等服务

1.leetcode hot * 1 53. 最大子数组和 简单,两数之和思路变形,利用前缀和-去当前维护的最小前缀和,说明当前子序列和最大的。 public int maxSubArray(int[] nums) { int n = nums.length; int ans = Integer.MIN_VALUE; int preSum = 0,minPreSum=0; for(int i=0;i<n;i++){ preSum += nums[i];//当前前缀和 ans = Math.max(ans,preSum - minPreSum);// 减去前缀和的最小值 minPreSum = Math.min(minPreSum,preSum);// 维护前缀和的最小值 } return ans; } 2.学习rpc,出了个bug,测试自定义消息编解码出现问题,生产者的消息处理器在启动netty服务器也加载了,但是接受到消息却没反应,需要排查一下。netty不熟悉,不知道是不是连接都失败了,明天再测测。 3.软考今日不翻牌子了。 4.简历又又鸽一天。不知道怎么好意思记录的,可能心理素质有提高。 5.面试题。。。 6.网站备案!!! 7.俯卧撑*10,深蹲*30等。 8.多邻国继续。 9.和朋友 apex启动,解限机启动。 10.有个想法,个人网站加个日记本功能,应该很简单,前端一个富文本编辑器,后端一个text,存一下。明天调研一下看看有什么好用的富文本编辑器,顺便设计一下表。 总结,今日上午搞rpc,排错很久,但是还是没找到问题,明天再看看,实在不行问问。下午,一堆琐事+处理之前的bug,花了一些时间。晚上和朋友打游戏到9点。9点后才开始刷算法题。

离职进入交接期,不管事了,终于放松了,到点下班心情舒畅。 1.leetcode hot * 1 76. 最小覆盖子串 ,通过基础算法精讲03课程之后,按照自己思路也是做出俩了,双指针玩的越来越6了。具体思路:从0枚举右端点,当出现右端点的字符出现次数大于目标字符串时,说明满足覆盖串,统计左右端点距离,截个当前子串,缩小左边界直到不满足,继续枚举右端点,再次满足条件,比较原来的左右端点距离和当前的距离,小就覆盖原来的。直到结束。(这个只是通过,在时间复杂度和空间复杂度还有优化空间) public String minWindow(String s, String t) { int sLen = s.length(); int tLen = t.length(); int[] sCnt = new int[128]; int[] tCnt = new int[128]; int ansLeft = -1; int ansRight = sLen; int left = 0; String ans = ""; // 统计t字符个数 for(int i=0;i<tLen;i++){ tCnt[t.charAt(i)]++; } for(int right=0;right<sLen;right++){ sCnt[s.charAt(right)]++; // 枚举右端点,加入窗口 while(check(sCnt,tCnt)){// 是否涵盖 if(right - left < ansRight - ansLeft){ // 找到更小的串 ans = s.substring(left,right+1); ansRight = right; ansLeft = left; } sCnt[s.charAt(left)]--; // left++;// 左窗口右移 } } return ans; } public boolean check(int[] sCnt,int[] tCnt){ for(int i=0; i<128;i++){ if(tCnt[i] > sCnt[i]){ return false; } } return true; } 2.软考pv练习题练习,学过的知识点相关题通过率也是达到了80%。继续新知识点。 3.项目这块,继续rpc,学过鱼皮哥的rpc框架后再学这个冰河的感觉轻松很多,整个rpc框架的整体架构大差不差,今天过了数据传输协议和消息编解码,序列化器这块,最复杂的还是编解码的这些io操作,各种inputstream,outstream,这玩意怎么记得住(🙃,虽然鱼皮哥说过这是死代码,但是感觉自己写不出来有点无力。。。)。 4.健生恢复性训练,好久没练慢慢来。 5.英语口语练习。 6.修改简历,又忘记到脑后了。明天一定不能忘!!! 7.面试题复习开始。 8.云图库为框架,开改。

流行感冒,有点难受,今晚不熬了。 云图库虽然只开发到团队管理,但是今天打包部署了,部署还是遇到了点问题,后端打包maven没配<package>jar</package>会导致打不出正常jar包(可能是没看完教程哈哈),vue单页面再配置nginx要配置重定向不然只能访问首页,其他页面都是404。域名80端口还要备案,后面再说不急。 leetcode host 100 * 239. 滑动窗口最大值,沙雕了,这题刷的前后没有关联,上一个前缀和,这个是双向队列,感觉怎么越写越菜。不过思路还是很好理解,面向解析刷题😅。时间充裕的话还是要按照灵山大佬的刷题方式刷。 软考今日刷题继续程序设计语言相关题目。

😘昨天玩出去和朋友shopping了,今日继续。 😅leetcode hot 100 * 2 和为 K 的子数组。为了这道,先刷了前缀和303. 区域和检索 - 数组不可变。主要就是了解前缀和概念。直接做这题暴力双层循环也做出来能通过。主要是看看前缀和优化思路:通过利用前缀和数组,获取统计每个前缀和出现次数。根据前缀和概念,i到j-1的前缀和满足 s[j] = s[i] + k。k = s[j] - s[i]。通过统计从i到j-1的子序列和为k出现次数。相比双层for优化通过map用O(1)的时间复杂度获取到对应子序列的数量。 public int subarraySum(int[] nums, int k) { int[] s = new int[nums.length+1]; // 计算前缀和 s[0] = 0, for(int i=0;i<nums.length;i++){ s[i+1] = s[i] + nums[i]; } int res = 0; // key:前缀和,value:出现次数 Map<Integer,Integer> map = new HashMap<>(); // s[j] = s[i] + k for(int j=0;j<s.length; j++){ // s[j] - k : s[0~j] - s[0~i] = k,说明差值中就是对应子序列 res += map.getOrDefault(s[j] - k , 0); // 重新计算当前,前缀和出现数量 map.put(s[j], map.getOrDefault(n, 0) + 1); } return res; } 😒239. 滑动窗口最大值。看着题目就来思路了,一顿操作。超时mmp。困难题果然没这么简单。 public int[] maxSlidingWindow(int[] nums, int k) { int[] res = new int[nums.length-k+1]; for(int l=0,r=0; r<nums.length;r++){ if(r-l+1 < k){ // 初始化窗口 continue; } int curMax = nums[l]; for(int i=0;i<k;i++){ curMax = Math.max(curMax,nums[l+i]); } res[l] = curMax; l++; } return res; } 🤔想了想通过前缀和优化,思考中。。。 🥱域名认证等待中。 🥱软考专项刷题doing。 👿最近开始颓废了,竟然没有巩固面试题。不能这样了。没想到软考竟让我如此憔悴,自今日起一起上。 🥹再有就是重新准备简历,试试行情,练练手感。

上班了学习时间少了好多,只能偷空刷刷软考题,昨天突击的知识点今天刷了一下题,也就记住60%左右。道阻且长啊。不过发现一个软考试题库,免费,大善人。网址在这:https://ruankaodaren.com/。 rpc框架整到了核心注解扫描,中间启动测试类出现日志打印问题,报错: WARN No appenders could be found for logger。实际就是缺少了log4j的配置文件。

leetcode hot 100 * 1 ,49中等字母异位词分组,思路简单,每个字符排序后相同即为异位分组词。 public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> res = new ArrayList<>(); if (strs.length < 1) return res; Map<String, List<String>> map = new HashMap<>(); for (int i = 0; i < strs.length; i++) { String sortedStr = sort(strs[i]); if (map.containsKey(sortedStr)) { map.get(sortedStr).add(strs[i]); } else { List<String> t = new ArrayList<>(); t.add(strs[i]); map.put(sortedStr, t); res.add(t); } } return res; } public String sort(String str) { char[] chars = str.toCharArray(); Arrays.sort(chars); StringBuilder sb = new StringBuilder(); for (char c : chars) { sb.append(c); } return sb.toString(); } leetcode hot 100 * 1 ,438找到字符串找那个所有字母异位词。返回子串的起始索引,这个想着循环遍历,排序每个字符串匹配,时间复杂度n*n,最终暴力超时。优化方式,通过滑动窗口+数组统计,字符串a-z一共26位,定义定长26数组,保存每个字符出现频率。遍历字符串,将窗口固定为要匹配的字符串长度,匹配成功左窗口索引加入结果中。 List<Integer> res = new ArrayList<>(); // a-z int[] pCount = new int[26]; int[] sCount = new int[26]; for(int i=0;i<p.length();i++){ // 统计p字母 pCount[p.charAt(i)-'a']++; } for(int right=0;right<s.length();right++){ sCount[s.charAt(right)-'a']++; // 统计当前字符 int left = right - p.length() + 1; // 固定窗口 if(left < 0) continue; // 跳过窗口不满足长度 if(Arrays.equals(pCount,sCount)){ res.add(left); } sCount[s.charAt(left) - 'a']--; //移除字符--> 窗口左端右移 } return res; } 牛客acm模式刷题 * 5 ,简单题不做记录,全是api操作。 软考机操知识点复习完毕。继续come on。 继续rpc。 八股文啊八股文,什么时候你能完全到我脑子里。

1. 云图库做完了团队管理,准备先上线,后面再优化,羡慕星球里面写前端的大佬,做的真漂亮。 2. 今日做了leetcode hot 100 * 1 ,无重复字符的最长子串。也算是刷了好几遍了,难道是中间间隔时间太长了?一眼看上去完全没思路,我是不是傻子啊,靠北了。后面想想好像想复杂了,两个指针慢慢滑动,左指针控制左边界,右指针不断遍历,通过map记录每次滑动的值和坐标,如果出现重复,让滑动的左指针右移到重复元素的下一个。 public int lengthOfLongestSubstring(String s) { if (s.length() <= 1) return s.length(); int l = 0, r = 1; Map<Character,Integer> map = new HashMap<>(); int maxLen = 0; map.put(s.charAt(l),l); while (r < s.length()) { // 判断r是否存在set char current = s.charAt(r); if (map.containsKey(current)) { // 存在 l = Math.max(l,map.get(current)+1); } map.put(current,r); // 更新当前保存字符 maxLen = Math.max(maxLen, r - l + 1); r++; } return maxLen; } 2. 牛客也刷了一道,合并索引,没啥难度,map累加即可。acm模式和leetcode的实现关键思路的刷题手感还是不一样,自己处理输入感觉不错。 3. 软考准备,复习了机操的cpu知识点、进制转换(尤其是互转,n进制转为10进制用按位加权法,10进制转为n进制用余数法,16进制和八进制和2进制,高转低按照高进制的位数计算就好了)。 4. 问:最小的数据单位是啥,最小的存储单位是啥?原码、反码、补码、移码又重新记一遍,也不知道能记忆多久。浮点数表示 N = 2E * F 一般公式 5. 今日学习到了冰河大佬的高性能rpc框架的第四章,框架搭起来了,虽然就整了俩注解,也算是好的开始吧。整个注册中心的架构是有所了解了,核心四大模块,注册中心,服务提供者,服务消费者,监控中心。 关于其中为什么在设计服务提供者注解为什么不在注解中添加服务地址和端口的思考? 每个服务,实际上作为服务提供者,本身的服务地址就是,所以不用再每个注解中单独配置,至于端口,只需要在服务中统一配置即可。

鱼皮的用户中心项目搞不下来的看过来

下载 APP