自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 收藏
  • 关注

原创 RecyclerView流程学习

介绍了RecyclerView基本原理

2023-03-14 16:21:34 355

原创 【开源库学习】从OkHttp到Retrofit(其二 Retrofit)

Retrofit源码学习

2023-03-07 11:36:47 429

原创 【开源库学习】从OkHttp到Retrofit(其一 OkHttp)

okHttp的使用比较简单,这篇文章主要分析了OkHttp的主要执行流程,并且对其流程中的几个重点进行了分析和研究

2023-03-03 15:33:27 398

原创 Seeker的奇妙求职历险(网易有道三面)

前言8月27日上午11点钟,我进行了网易有道三面。这一轮是总监面,我本来以为会有一些场景题,然后手撕算法,但是都没有。面试官在发现我对分布式微服务中间件所知甚少之后,就对我丧失了兴趣,给我出了一道比较难的题目,想看看我的算法是否特别出众。但是遗憾的是,我的算法菜的一笔,让我在面试的时候手撕一道从未见过的、目测难度为hard的算法题实在心有余而力不足,最后挥手道别之后就把我挂了。最令人感到伤心的是,连封感谢信都没收到,仅仅就是在官网上显示了面试未通过。聊项目我说完自己在实验室做的两个项目之后,面

2020-08-29 14:24:31 777 1

原创 Seeker的奇妙求职历险(网易有道二面)

前言8月24日早上10点,我进行了网易有道的二面。之前看牛客上很多人都是一面完直接二面,而我等了大概有4天,所以我想可能是大神优先二面,然后挂了之后再让下面一批陪跑吧。这次面试前面十几分钟就聊了聊项目,然后问我怎么优化的,做了哪些工作,之后就说做题目吧,然后给我出了三道算法题。第一题还算比较简单,第二题的话没能在面试的时候想明白,第三题应该算是一道场景题。走格子给出m*n的方格,计算从左上角走到右下角有几种路径。经典的走格子问题,写完之后问我能不能优化一下,我说那我考虑采用滚动数组的方式,从后

2020-08-24 11:45:41 509

原创 Seeker的奇妙求职历险(滴滴笔试和米哈游笔试)

A+B假设a,b,c为0到9之间的数,且a!=0,给出一个整数,求有多少对abc+acc的和等于这个整数。输入1068输出 第一行为组合数,后面每一行为一个组合1524 544分析:暴力枚举,一开始的时候没看到每一行为一个组合,以为在一行里面把所有组合全输出,结果也能过60+,不知道这个测试用例怎么设计的。改成每行一个就过了。public static void main(String[] args) { Scanner scanner = new Scanner(System

2020-08-22 15:08:57 419

原创 Seeker的奇妙求职历险(华为笔试)

矩阵报数题目:给出一个旋转矩阵,M行N列,左上角为(0,0),右下角为(M-1,N-1),从左上角开始计数,顺时针从外圈开始,外圈遍历完之后再遍历内圈,直到遍历完所有的点。返回所有个位数为7且十位数为奇数的坐标,10 <= M,N <= 1000,当输入不合法的时候返回空数组。输入 M,N10 10输出[[7,9],[1,1],[8,2],[7,5],[4,4]]分析:题目不难理解,剑指offer上面题目的变种,判断一下是否合法,合法就加入结果集。但是我一直卡在70%,一开

2020-08-20 16:11:22 255

原创 LeetCode探索(深度优先遍历和广度优先遍历)

扫雷游戏题目:https://leetcode-cn.com/problems/minesweeper/题目大意:就是扫雷游戏,实在是太长了,还是自己看吧。分析:题目比较长,读懂题目意思之后思路不难。这道题目个人感觉用BFS会简单一些,结果自己写的超时了。看了一下官方解法,感觉这种走格子的题目还是有很多小技巧的。如何遍历周围的格子之前我每次使用BFS或者DFS的时候,都是写4个if,但是像这道题要写8个if,如果每次能走两圈那不是要写15if?太多了,而且很容易出错,这里可以使用两个数组把需

2020-08-20 11:05:39 411

原创 Seeker的奇妙求职历险(腾讯医疗一面和网易有道一面)

前言没想到PCG一面挂了之后被CSIG的医疗部门捞了,又面了一次,面完之后状态是显示等待复试,但是一直没消息,估计和阿里一样把我晾着吧。网易有道面试感觉还算和面试官交谈甚欢,但是面完之后到现在都没有收到二面的通知,不会凉了吧。雷火也是,明天就满一个礼拜了,也一直还是处理中。哎,秋招真累。心累归心累,面试整理还是要整理一下,下面还是总结一下这两次面试中遇到的一些问题。场景/算法题给出一个100M的文件,文件里面存放了多个英文单词,给出一台内存只有100M的机器,实现一个单词联想的功能,例如输入"

2020-08-19 15:51:02 1065 1

原创 LeetCode探索(子串和回文子串)

最长公共子串在说回文子串之前,先来说说最长公共子序列。公共子序列的题目的状态转移方程为:dp[i][j] = dp[i-1][j-1] +1 (s1[i] == s2[j])dp[i][j] = 0 (s1[i] != s2[j])LeetCode718就是一道最长公共子串的题目。题目地址:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/class Solution { public int fi

2020-08-19 12:02:46 129

原创 Seeker的奇妙求职冒险(一次惨痛的教训)

前言写下这篇博客的原因是我在宁波银行的终面中惨遭被挂。为什么会被挂?我觉得主要原因是我忽视了行政面试、hr面试的重要性,完全没有准备过,导致在最后一面的时候踩了雷,说了不该说的话。引用我朋友非常经典的一句话“如果hr面不刷人那为什么要hr面?”。经过这次失败之后,我向擅长公务员面试的朋友和他的女朋友进行了虚心请教,请教之后决定把学到的一些经验记录下来,顺便好好想一想自己在面试的时候应该如何组织语言。自我介绍自我介绍主要要解决三个问题:我是谁?为什么我能胜任这个工作?为什么我选择这个岗位?

2020-08-16 15:02:38 695

原创 Seeker的奇妙求职历险(bilibili笔试)

24点题目:给出4个数字,判断这4个数字能否通过加减乘除使得最后的值为24.输入[7,2,1,10]输出true分析:一开始的时候想复杂了,还以为需要判断优先级和交换律,卡在42%一直过不去,最后改成dfs枚举每个数字的状态就莫名其妙过了。static boolean res;static HashSet<Integer> set;public static boolean get24(int[] nums){ res = false; set = new

2020-08-14 10:25:46 169

原创 Seeker的奇妙求职历险(雷火测开三面和腾讯视频后台一面)

智力题高楼扔鸡蛋100层楼和2个鸡蛋,求最少几次能够一定知道鸡蛋在哪一层扔下来会碎。https://leetcode-cn.com/problems/super-egg-drop/当楼层为100,鸡蛋为2的时候,最少需要14次。天平称重给你12个球和一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球,并知道是轻了还是重了。答:先分成3堆4个,然后不会了。4个人过桥四个人晚上要过一个桥回家,由于桥上的灯坏了,只能用四个人仅有的一个手电筒照明,手电筒只能坚持照明17分钟

2020-08-13 12:35:44 499

原创 Seeker的奇妙求职历险(阿里客户端一面)

前言8月10日晚上8点,我进行了阿里巴巴海外技术部的客户端面试。本来约了7点,结果面试官在开会,就延迟到了8点。自我介绍就进行自我介绍,讲了一下研究生阶段做的几个项目。1.澳大利亚网吧项目,负责桌面端和服务器端的开发。2.惠尔门店系统,负责部分服务器的功能开发和数据库的优化。数据库优化Q:你刚才说到了数据库的优化对吧,你是怎么优化的呢?A:三种优化手段。首先建立索引,数据库中有一张订单表,他们查询的时候主要是使用订单类型、操作员ID、生成时间来进行查询的,所以我就对这三个字段建立了联合索

2020-08-10 22:13:36 284 1

原创 Seeker的奇妙求职冒险(杰杰的字节笔试)

替换后的最长重复字符力扣原题424:https://leetcode-cn.com/problems/longest-repeating-character-replacement/题目大意:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。输入:s = “ABAB”, k = 2输出: 4解释: 用两个’A’替换为两个’B’,反之亦然。输入: s = “AABABBA”, k = 1

2020-08-10 11:35:43 266

原创 LeetCode探索(并查集)

并查集并查集的核心模板是一个数据结构,包含一个数组root[],表示每个节点的父亲节点,以及两个方法find()和union用于查找和合并。public class DSU{ int[] root; public DSU(int n){ root = new int[n]; for(int i=0;i<n;i++) root[i] = i; } public int find(int x){ if(root[x

2020-08-09 14:17:23 348 1

原创 Seeker的奇妙求职历险(网易互联网笔试)

素数的个数给出一个包含n个正整数的数组a,把a[i]拆分为若干个和为a[i]的素数,求拆分后最多能有多少个素数。第一行数据为n,表示数组长度,第二行为n个元素。输入31 1 1输出0 1不可拆分输入1 3 5 76 1为0个,3为1个,5为(2,3),7为(2,2,3)分析:这道题比较简单,当a[i]>1的时候,素数的个数为a[i]/2。但是要注意原题目的数据范围比较大,最后的总个数可能超出Int上限需要用Long来存,具体代码如下:public static void

2020-08-08 19:39:15 2893 10

原创 Andriod基础

Andriod基础前言Activity生命周期生存期Activity被回收了怎么办启动模式布局Fragment生命周期回调函数BroadcastReceiverContentProviderServiceHandlerKotlinJetPackMVVMAndroid 虚拟机后记前言没想到要久违地学习安卓的知识了。先来复习一下最基础的知识:安卓的四大组件分别是:Activity:类似于WPF中的windows,用来显示界面的视图。Service:服务,类似WPF中的后台进程。Broadcast

2020-07-30 10:02:41 129

原创 Seeker的奇妙求职历险(阿里巴巴笔试)

恐龙下蛋给出一个降序数组,每一轮数组中的元素a[i]都会增加i,返回几轮之后数组中会出现相同的元素。输入描述:第一行为一个数字,表示数组的长度,第二行为数组中的元素。输出描述:几轮之后会出现相同的元素,如果不用变化则输出0。-输入:38 4 2输出:2分析,这道题看着比较复杂,想到了还是比较简单的。我一开始直接暴力模拟,只通过了50%,估计后面的超时了。对于数组中的元素a[i]和a[i+1]来说,每次后面一个元素比前面那个元素多增加1,所以经过a[i]-a[i+1]轮之后,两个元

2020-07-29 14:22:49 306

原创 Seeker的奇妙求职历险(字节跳动三面)

字节跳动三面前言面试开始代码混淆的原理Binding的原理DLL的原理JVM类加载双亲委派机制两个Java进程运行在同一个JVM上吗?共享内存的原理算法题数组的最大子数组和数组的K个元素最大子数组和要求保持相对顺序闲聊后记前言7月22日晚上8点钟,我进行了字节跳动客户端的第三次面试。说实话,在面试开始之前我还是有点忐忑不安的,走到最后一面了就感觉格外紧张,根据隔壁同学面试的经历反复刷了二叉树的迭代遍历和各种排序的递归和迭代方法(隔壁是实验室的同学三面问了二叉树的迭代中序遍历),不过最后并没有用上。面试

2020-07-23 14:58:27 506 2

原创 LeetCode每日一题(不同的二叉搜索树)

不同的二叉搜索树题目地址:https://leetcode-cn.com/problems/unique-binary-search-trees/题目大意:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?分析:一般看到求有多少种而不要求列出所有排列的题目,我们都会自然的想到使用动态规划。不过这道题的动态规划还是有一点难度的,想到了之后会觉得非常简单,但是没有想到的话就感觉无从下手。对于一颗二叉搜索树 而言,最重要的就是根节点,根据根节点的不同,我们可以把这颗二叉搜索树分为左子

2020-07-21 09:56:31 158

原创 从零开始的源码分析(集合拾遗篇)

集合拾遗篇前言MapSetVector前言之前对一些常用的集合进行了源码阅读,但是没想到现在已经有大厂开始问LinkedHashMap的底层源码了。这也实在是太卷了吧,所以这篇文章主要对之前遗留的一些Set集合、Linked集合以及Vector集合的源码进行粗略的阅读。MapSetVector...

2020-07-20 22:06:59 177

原创 Seeker的奇妙求职历险(字节跳动二面)

字节跳动二面前言项目闲聊Java多态泛型NIO线程和线程池操作系统内核态和用户态虚拟内存逻辑地址和物理地址的转化数据库索引事务联合索引计算机网络Http的头部Get和Post的区别求二叉树的深度(迭代)隔壁小姐姐的面试问题反射JDBC的设计模式消费者生成者算法后记前言7月17日傍晚4点钟,我进行了字节跳动客户端二面,这一次相比较前面一次感觉稍微短一些,持续了41分钟。感觉面试官不是做Java的,所以在面试的时候感觉有点对不上电波,在20多分钟的时候,他可能觉得我Java说的不太好聊不下去了,就问我:你

2020-07-17 21:26:05 778

原创 从零开始的源码分析(线程拾遗篇)

线程拾遗篇前言有返回值的线程CallableFutureTask继承和接口成员变量构造函数使用Condition同步工具CountDownLatchCyclicBarrier成员变量构造方法awaitSemaphore内部类构造方法前言这一篇主要是对之前多线程源码中遗漏的部分进行一个补充,主要包括:Callable和FutureTaskconditionCountDownLatch(闭锁)CyclicBarrier(栅栏)Semaphore(信号量)有返回值的线程Callable之前

2020-07-14 22:03:09 164

原创 从零开始的源码分析(队列篇)

队列篇前言PriorityQueue接口与继承成员变量插入和删除堆化和随机删除ArrayBlockingQueue继承和接口成员变量构造方法插入和删除LinkedBlockingQueue成员变量构造方法插入和删除后记前言没想到这个系列居然这么快就又开始了。感觉面试官可能更加喜欢看过源码的同学,所以我们还是投其所好,在源码的地方多下点功夫吧。今天这一篇是队列篇,算是之前留下来的一个坑,因为之前感觉Map和List问的多一些,所以就先总结了他们两个。但是这次面试被问到了是否看过优先队列的源码,很惭愧的

2020-07-13 22:24:14 260

原创 计算机网络(路由器与路由算法)

路由器与路由算法前言定义自治系统路由协议内部网关协议RIP如何解决路由环路的问题?OSPF外部网关协议BGP后记前言昨天经过字节一面感觉自己对路由器了解甚少,所以决定还是认真学习一下路由器与路由算法吧。定义首先我们先对路由下一个定义,什么是路由?根据百度百科的解释,路由是指分组从源到目的地的时候,决定端到端路径的网络范围的进程。说白了就是选择一条合适路径来传输需要发送的数据包。自治系统自治系统(Autonomous System,AS)指的是在单一技术管理下的一组路由器,这些路由器使用同一种

2020-07-13 16:11:14 886

原创 Seeker的奇妙求职历险(字节跳动一面)

字节跳动一面前言c#和Java的区别引入Redis是否有必要HashMap的源码Hash为什么要右移16位异或?HashMap如何判断对象相等?为什么要进行树化优先队列的源码输入URL之后会发生什么路由表中有环怎么办Http是每次请求都要发送一个包吗?Https的加密过程算法题后记前言7月12日晚上18:00,我进行字节跳动的一面。上来就是先自我介绍,然后我介绍了一下研究生阶段做的项目,以及论文的方向。然后面试官就先对项目进行了一些提问。c#和Java的区别首先问我项目,因为我写了C#的桌面端和

2020-07-12 20:19:01 1344 3

原创 从零开始的源码分析(锁篇)

锁篇前言AQS源码分析成员变量内部类获取锁加入队列自旋获取锁判断是否需要挂起释放锁ReentrantLock前言这一篇主要探究一下关于ReentranLock的源码和AQS的部分源码,写完这一篇这个系列就暂时告一段落,明天是Redis的原理分析和实战,尽快在字节面试之前把所有的内容再学习一遍。AQS源码分析ReentranLock是基于AQS实现的,所以在学习ReentranLock之前,先来研究一下AQS的源码吧。AQS的全称是AbstractQueuedSynchronizer,从代码上面的注

2020-07-06 20:17:32 150

原创 从零开始的源码分析(线程池篇)

线程池篇前言源码继承和接口成员变量线程池核心参数线程池状态任务的执行者:worker构造方法线程工厂拒绝策略提交任务excutesubmitaddworker开始执行和结束执行runWorkergetTaskprocessWorkerExit线程池常见问题线程池有几种实现方式自己实现一个线程池总结前言本篇主要总结和分析一下线程池的源码。说是线程池,实际上是ThreadPoolExecutor,这主要还是因为《阿里巴巴Java开发手册》中强制要求线程池不允许Executors去创建,而是通过ThreadP

2020-07-04 19:56:14 162

原创 LeetCode每日一题(题32)

题目题目:https://leetcode-cn.com/problems/longest-valid-parentheses/题目大意:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。分析:这道题目比较有意思,虽然标注的是困难的题目,但是代码并不长,虽然我第一时间也没做出来 。一般地可以采用动态规划,或者单调栈两种方式来做,主要还是因为看到最长子串的题目总是会想到动态规划,看到括号的题目就容易想到栈,所以就按照这两种方式来做吧。动态规划前天我们写了有关于动态规

2020-07-04 10:47:40 107

原创 从零开始的源码分析(Thread篇)

Thread篇前言Thread源码接口成员变量线程状态和优先级构造函数start()和run()exit()yield()、wait()、sleep()和join()interrupt()ThreadLocal构造方法ThreadLocalMap类set方法get方法remove()后记前言今天约了招银的面试在10号早上,所以感觉需要加快一点进度了,接下来花两天时间搞定线程和线程池的内容,然后花一两天时间搞定锁这一块的源码,最后再把Mysql和Redis、JVM的相关内容复习一些,进行一个查漏补缺。T

2020-07-03 22:30:50 664

原创 跟他学sql(第八天)

第二十五问题目:查询每门课程被选修的学生数分析:说实话,我实在是不太明白什么叫被选修的学生数,我们就当成是每一门课有多少学生选修了吧。课程号 c_id选修的学生数量 count(distinct(s_id))SELECT score.c_id '课程号',c_name '课程名',COUNT(DISTINCT s_id) '人数' FROM score JOIN course ON score.c_id = course.c_id GROUP BY score.c_id第二十六问

2020-07-02 21:25:05 97

原创 LeetCode探索(动态规划)

动态规划动态规划的实质其实就是穷举,通过DP表的形式折叠一些重复的计算。dp其实没有什么好的模板,重点在于写出状态转移方程。但是即使写出了状态转移方程还是有很多细节需要注意。总的来说DP的模板可以归结成如下://初始化dp[0][0] = base;//进行状态转移for(状态1 in 状态1所有的取值) for(状态2 in 状态2所有的取值) dp[状态1][状态2] = 状态转移方程不过这也太笼统了吧,还是来看几道经典的DP吧。最长回文子串题目:https://leetcod

2020-07-02 16:59:21 130

原创 LeetCode每日一题(题378,题718)

有序矩阵中第K小的元素题目大意:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。分析:这道题我一开始以为是搜索题,然后想了一会并没有想出来,最后采用了转换为1维数组排序的方式。其实这道题的方法还是挺巧妙的,每次二分出一个数,判断小于等于这个数的元素是否为k个,如果是就向右移动,如果不是则向左移动。接下来问题就转换为了如何查找这个矩阵中存在多少个小于等于这个数的元素,这个问题就和我们之前在剑指of

2020-07-02 13:36:39 118

原创 从零开始的源码分析(Map篇)

Map篇从Map开始说起三个视图Entry抽象类AbstractMap成员变量内部类HashMap成员变量构造方法节点插入与扩容哈希扩容获取从Map开始说起按照惯例,我们还是看一下HashMap的类名,可以看到HashMap实现了Map接口和继承了AbstractMap抽象类。public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializa

2020-06-30 21:13:29 279

原创 从零开始的源码分析(LinkedList篇)

前言上一篇讲了ArrayList的源码,今天就来学习一下同样常用的LinkedList的源码。继承和实现我们首先还是从LinkedList的类名开始,LinkedList继承于AbstractSequentialList,并且实现了List接口和Deque接口,后面的Cloneable和java.io.Serializable表明这是一个可以被克隆和序列化的类。那么List接口我们很熟悉了,那么AbstractSequentialList抽象类和Deque接口又是什么呢?public class

2020-06-30 14:43:58 127

原创 Seeker的奇妙求职历险(招银科技一面)

招银科技一面前言Redis缓存雪崩集合锁ReentranLock可重入锁公平锁读写锁数据库Mybatislike语句注意事项事务子事务如何获取注解事务传播行为单例模式volatile关键字项目还有什么想问的?前言大概在29日中午11点30左右,招银科技对我进行了电话面试,主要问了有关于Redis、Mybatis、Mysql、Spring、单例模式、集合等一系列问题。感觉答得不是很好,很多地方一深入就回答不上来,很多看过的内容细节都忘记了。下面把一些印象比较深刻的问题总结一下。Redis一上来自我介

2020-06-29 16:18:41 8726 2

原创 LeetCode每日一题(题215,快速排序)

模板快速排序作为一个经典的排序算法有着高效稳定的优势,快速排序的思路也非常简单。首先我们选取一个数作为基数,然后把所有比这个数小的数字放在左边,大的放在右边,然后再以这个数字为分割线,对左右两边的数组继续排序。 由此我们可以写出快速排序的经典模式(升序):public void quickSort(int[] nums,int start,int end){if(start >= end)return;int mid = partition(nums,start,end);quickSor

2020-06-29 10:58:50 3298

原创 跟他学sql(第七天)

前言最近感觉事情有一些多,所以sql停了几天,但是没有关西,今天我们继续来做sql第二十二问题目:使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计各分数段人数,课程ID和课程名称。分析:这道题和我们之前做过的题目相似。课程号和课程ID本来就是列名,但是分数段人数分散在行中,所以我们要进行行转列的操作,使用函数case when。课程ID c_id课程名 c_name各分数段人数 sum()SELECT score.c_id,course.

2020-06-28 21:34:23 111

原创 LeetCode探索(滑动窗口)

模板滑动窗口一般用在字符串匹配、寻找子序列和等题目中。其实滑动窗口就是双指针的特殊场景。我们来回忆一下滑动窗口的题目一般是如何应用的。我们需要先移动右指针,然后看是否需要进行收缩窗口。如果需要的话则不断移动左指针然后进行收缩,直至不满足收缩条件。int left=0,right=0;while(right < s.size()){ windows.add(s[right]) right++; while(window needs shrink){ window.remove(s[

2020-06-28 14:21:17 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除