自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 字节后端社招凉经

4.有1E的数据,在开播时通知进行通知粉丝,要求10万QPS,HIVE中获取,设计方案。4.说一下linux命令 grep用法,端口号查询。2.代码:输入N,输出0-N中连续和为N的有多少。10.线程池说一下,队列有界无界,什么时候无界。1.聊项目,项目方案,项目技术。5.如何从hive中接口拿数据。6.redis数据结构有哪些。2.代码:K个一组翻转链表。3.GC如何排查及解决GC。5.mybatis 注入。7.redis穿透及解决。3.GC排查及解决方案。8.redis缓存雪崩。9.redis高可用。

2023-09-01 17:26:18 378

原创 Android TV 实现GridView获得焦点时放大

前言:最近有个需求要做一个管理类的页面,需要使用GridView,使用遥控器移动到相应的Item时,当前的Item就会放大,而可以替换背景View 放大代码自定义一个类写一下方法使用scalesX和scalesY即可public static void scaleView(View view,boolean hasFocus){ float scale=hasFocus?1.2f:1.0f; view.animate().scaleX(scale).scaleY(sca

2020-10-27 18:23:10 418

原创 Android WebView中加载的网页有很多的网络请求和更新导致卡顿

项目需要做一个WebView去加载H5的页面,但是页面需要长期运行,而且页面有大量的网络请求数据和图的更新,系统会提示程序可能在主线程做了太多的工作,运行了半个小时左右程序就会挂掉,请问大佬们有什么解决方案吗?...

2020-10-20 11:36:38 728 2

原创 9.29快手客户端面试

1.自我介绍2.ArrayList和LinkedList插入一个数的最好和最坏的情况3.开链法写HashMap的get方法4.局部性原理5.中断6.算法:之字行遍历树

2020-09-29 17:32:50 236

原创 Android性能优化:Thread优化

由于需要不断的调取接口,所以每次都得开一个线程来执行一些异步任务,而且每隔几秒就需要取一次数据一、重复不断的使用new Thread()的缺点 new Thread(new Runnable() { @Override public void run() { //代码 } }).start();1. 每次new Thread新建对象性能差。

2020-09-16 16:05:04 685

原创 使用Bitmap发生的native内存溢出OOM

问题:在项目中使用了一个ListView,需要每5秒重新更新一个ListView,在item中使用了一个图片作为背景,但是在运行的时候会发现Bitmap一直在增长(Android profiler不错,可以看出具体内存情况,以及内存时间图),随后我取消使用该图片作为背景,发现内存不再增长,后来了解到在Android28时,Bitmap内存时存放在native中,而每次使用完没有释放掉Bitmap资源,所以才会导致native内存一直增长。BitmapDrawable drawable=(BitmapD

2020-09-16 11:24:39 478

原创 Android Studio:公司内网搭建Android studio开发环境记录

公司内网搭建Android studio开发环境记录步骤一、首先需要在外网设备上安装SDK,Android Studio版本,下载相应的Gradle版本,放到(C:\Users.gradle\wrapper\dists\gradle-4.4-all.zip)这是我的路径,其次需要理解(C:\Users\qipeng.zheng.HIRAIN.gradle\caches)路径下是会缓存一些项目所需的jar包所以这里面的资料也是需要打包到内网的,其次在SDK路径(D:\android sdk\andro

2020-08-27 11:10:57 2191 1

原创 Android studio :Please configure Android SDK

今天安装studio时出现了这个问题,导致Design显示不了并且提示Please configure Android SDK错误,但是设置对应的API也不行看了很多文章,现在总结两种方法一、file->settings->appearance&behavior->system settings->android sdk->点击edit,若sdk文件缺失会自动下载。有可能是sdk文件损坏造成的。点edit后一直next直到完成系统会自动更新缺失的文件

2020-08-18 15:54:54 2189 1

原创 LeetCode 334. 递增的三元子序列

LeetCode 334. 递增的三元子序列给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。题解:首先保证:nums[i]>nums[i-1]>nums[i-2]所以需要记录最小位和次小位当小于最小位则替换最小位当小于次小位则替换

2020-07-30 11:11:07 82

原创 LeetCode 213. 打家劫舍 II

LeetCode 213. 打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。题解:由于是环状,所以第一个房子 和最后一个房子只能选一个偷因此我们只能从这两种情况中选取一个最大值即可。当前最大值

2020-07-29 15:33:16 96

原创 LeetCode 174. 地下城游戏

LeetCode 174. 地下城游戏一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为0),要么包含增加骑士健康点数的魔法球(

2020-07-29 14:40:58 136

原创 LeetCode 647. 回文子串

LeetCode 647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。题解:动态规划判断[i,j]是否为回文串,是则true,否则false首先看回文串的定义,要满足i=ji+1=j-1将状态逐渐缩小dp[i][j]=dp[i+1][j-1]意思就是当前的dp[i,j]是否是回文串需要看dp[i+1,j-1]是否是回文串,如果dp[i+1][j-1]都不是回文串,那么

2020-07-29 10:45:17 98

原创 LeetCode 面试题 08.02. 迷路的机器人

LeetCode 面试题 08.02. 迷路的机器人设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用 1 和 0 来表示。返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。如果没有可行的路径,返回空数组。输入: [ [0,0,0], [0,1,0], [0,0,0] ] 输出:[[0,0],[0,

2020-07-28 14:42:54 227

原创 LeetCode 104. 二叉树的最大深度

LeetCode 104. 二叉树的最大深度给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。由于面试中面试官基本上不会让你写递归版本的深度求解,所以使用层次 遍历求解树的最大深度题解:层次遍历使用队列,每次将每一层的树节点放进队列中,每次在放每一层的节点时需要将以前的节点全部取出来,保证队列里存放的是当前层的所有节点,每次操作一层的节点,所以需要记住我们操作了几次即可 。public class max

2020-07-28 10:57:12 75

原创 LeetCode 岛屿数量

岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 *岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。 * 此外,你可以假设该网格的四条边均被水包围。题解:典型的dfs深度搜索 遍历每个点,如果为1就使用dfs深度搜索,向四个方向深度查找出同一个岛屿,并将查找过的岛屿1变成0,避免重复查找,沉岛思想public class numIslands { public static int numIslands(c

2020-07-27 16:41:35 106

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字

剑指 Offer 53 - II. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。 *在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。题解:双指针二分法:分别指向头和尾,如果mid值和下标一致则0~mid没有丢失数字不断缩小查询空间时间复杂度:O(logN)空间复杂度:O(1)public class missingNumber { public static void main(

2020-07-27 16:32:23 75

原创 二叉树中的最长交错路径

二叉树中的最长交错路径给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:选择二叉树中 任意 节点和一个方向(左或者右)。 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方向:左变右或者右变左。 重复第二步和第三步,直到你在树中无法继续移动。 交错路径的长度定义为:访问过的节点数目 -1(单个节点的路径长度为 0)。请你返回给定树中最长 交错路径 的长度。题解:动态规划:每遍历到一个节点就需要当前点的最长交错路径定义dp[2]dp

2020-07-27 14:49:44 344

原创 单词拆分

单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。输入: s = “leetcode”, wordDict = [“leet”, “code”] 输出: true 解释: 返回 true因为 “leetcode” 可以被拆分成 “leet code”。题解动态规划:每次截取i之前的数和hashset的相比,j为0开始截取到i(i=1,i<=s.length())如果截取的存在则为true(i)

2020-07-27 14:23:02 264

原创 等差数列划分

等差数列划分如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1], …, A[Q - 1], A[Q] 是等差的。并且 P +

2020-07-27 11:40:28 298

原创 leetcode 第 31 场双周赛和为奇数的子数组数目

和为奇数的子数组数目给你一个整数数组 arr 。请你返回和为 奇数 的子数组数目。由于答案可能会很大,请你将结果对 10^9 + 7 取余后返回。题解:首先明白一点:奇数+偶数=奇数偶数+奇数==奇数那么问题就可以转化成动态规划问题,我们遍历数组的每一个数,如果当前的是奇数,那么我们就要找到多之前有多少个偶数的前缀和,当前如果是偶数,那么就需要找到之前有多少个奇数的前缀和,原因是之前有多少种奇数数组组合,当出现了一个新的能组成奇数的,那么它可以和之前的每一个组合组成一个奇数的子数组

2020-07-27 10:04:11 174

原创 矩阵中的最长递增路径

矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。你不能在对角线方向上移动或移动到边界外(即不允许环绕)题解:      首先看到这道题,突然想到岛屿那题,每次向着四个方向不断递归只是条件是只递归比当前数大的数,所以使用深度搜索,并且返回搜索中深度最大的一个,然后就就开始巴拉巴拉一顿操作,测试,没问题,上线,超时,一口老血吐出来(意料中)所以就做了优化,每

2020-07-26 22:53:45 395

原创 leetcode 第199场周赛第二题 灯泡开关 IV

leetcode 第199场周赛第二题 灯泡开关 IV房间中有 n 个灯泡,编号从 0 到 n-1 ,自左向右排成一行。最开始的时候,所有的灯泡都是 关 着的。请你设法使得灯泡的开关状态和 target 描述的状态一致,其中 target[i] 等于 1 第 i 个灯泡是开着的,等于 0 意味着第 i 个灯是关着的。有一个开关可以用于翻转灯泡的状态,翻转操作定义如下:选择当前配置下的任意一个灯泡(下标为 i )翻转下标从 i 到 n-1 的每个灯泡翻转时,如果灯泡的状态为 0 就变为 1,为 1

2020-07-26 19:17:23 417

原创 面试必知红黑树

面试必知红黑树一、红黑树的定义红黑树(R-B树)是一个特殊的二叉查询树(左节点<根节点<右节点),这种树的查询效率在O(logN)的时间复杂度,红黑树具有以下几点特性:● 每个节点要么是黑色要么是红色● 根节点是黑色● 每个叶子结点是黑色,并且每个null,在红黑树中的叶子节点是平时的叶子节点下的空节点,也可以说是每个叶子节点带了两个黑哨兵,如果节点只有一个左孩子,那么它的右孩子为null是一个黑哨兵,如果节点只有一个右孩子,那么它的左孩子为null是一个黑哨兵。● 红色节

2020-07-26 00:11:47 224

原创 可获得的最大点数

可获得的最大点数几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。题解:滑动窗口:由题可知,首先想到每次拿开头或者结尾,选择到最大的点数,就有点头疼了 因为不知道拿开头或者结尾,每次拿的地方不固定,那我们就找一个固定的, 固定的就是剩下的长度一定是len-k

2020-07-25 13:50:59 196

原创 礼物的最大价值

礼物的最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?题解:动态规划:题目中说只能向右和向下移动,所以分为三种情况一、处于上边界二、处于左边界三、处于起点处四、无边界情况分解为子问题,当前礼物的最大值为上一步礼物的最大值加上当前的礼物价值所以需要找到上一步的最大值max(grid[i][

2020-07-24 17:58:54 109

原创 比特位计数

比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。题解:这种题如果不加限制的话可以选择移位&1的方式计算1的个数但是要求是在O(N)的时间复杂度下完成就需要脑筋急转弯啦0000 ---------> 00001 ---------> 1 ——————0000&0001=0000+10010 ---------> 1 ——————0001&0010

2020-07-24 17:36:28 279

原创 零钱兑换

零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。题解:采用自下而上的方式,这样在每次计算F(i)之前我们已经知道F(0)~F(i-1)即可满足将问题分解成子问题,当前问题等于之前问题+当前问题规模例如:coins = [1, 2, 5], amount = 11F(1)=min(F(1−1),F(1−2),F(1−5))+1=1F(2)=min(F(2-1),F(2-2)

2020-07-24 16:50:25 79

原创 最大正方形

最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。题解:动态规划:使用dp[i][j]代表以i,j为右下角只包含1的正方形首先需要考虑几点一、当前的dp[i][j]的值和和(i-1,j)(i,j-1),(i-1,j-1)有关,如果当前(i,j)为1那么需要考虑这三个位置的最小值加上当前的1,在取最小值时确保是正方形 状态转移方程:dp(i,j)=min(dp(i−1,j),dp(i−1,j−1),dp(i,j−1))+1二、我们每次取当

2020-07-24 14:19:50 118

原创 摆动序列

摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不

2020-07-24 11:26:54 828

原创 连续的子数组和

连续的子数组和给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。题解:求取区间和sum(j)-sum(i)(sum为前缀和数组)既求取区间和(sum[j]-sum[i])%k==0即是求解sum[j]%k=sum[i]%kpublic class checkSubarraySum { public static boolean checkSubarraySum

2020-07-23 19:55:28 109

原创 二叉树中的列表

二叉树中的列表给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。题解:老规矩,依次挨个节点遍历,返回值:1.当root为空时返回false2.当值不相等时返回false3.当head为null时返回true递归条件:当前节点不匹配,那好,我们遍历左右子

2020-07-23 16:48:26 467

原创 K 个一组翻转链表

K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。题解:采取分段式的翻转链表核心点在于翻转,翻转完当前的K个节点后将翻转前尾节点作为下一次翻转的开头,不满足K则直接返回,翻转分为四步,具体流程如图所示。public class reverseKGroup { public static ListNode reverseKGroup(ListNo

2020-07-23 16:28:46 126

原创 链表删去和为零的连续节点

链表删去和为零的连续节点给你一个链表的头节点 head,请你编写代码,反复删去链表中由 总和 值为 0 的连续节点组成的序列,直到不存在这样的序列为止。删除完毕后,请你返回最终结果链表的头节点。题解:要求删除一个连续节点和为0的组成的序列,一、设置一个带头结点的链表指向当前链表二、利用三指针的方式操作p指针指向当前节点,q指针表示从当前节点开始向后遍历三、遍历条件(sum0||q.next!=null)如果sum0则让h的next指向当前q的next(中间和为0的序列删除)如果遍历结束sum!

2020-07-23 14:16:37 394

原创 有序链表转换二叉搜索树

有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。题解:二叉搜索树的特点:左节点<根节点<右节点一 、由于是链表,如果强行每次访问链表,由于链表的时间复杂度是O(N),所以首先将链表转换成数组 O(1),避免减少查询时间二、找到中间值,一直递归left和right三、把递归的中间值设置成当前节点的根节点四、设置完当前节点后递归左右节点 左边:(left,m

2020-07-23 11:35:56 124

原创 矩阵最小路径和

矩阵最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。题解:这是一个动态规划类问题,定义状态dp,dp[i][j]表示的是走到矩阵m-1,n-1处的最小路径要求只能向下和向右走,那么说明当前单元格只能从上单元格(i-1,j)和左单元格(i,j-1)移动到当前单元格,其他的只需要考虑是否边界即可。状态转移方程分为四种情况:一、边界i!=0,j!=0 即可从上单元格和左单元格移动到当前单元格 dp[i][j]=min(dp[i-1]

2020-07-23 11:10:47 320

原创 返回倒数第 k 个节点

返回倒数第 k 个节点找出单向链表中倒数第 k 个节点。返回该节点的值。题解:快慢指针,快指针先走k步,当两个指针间隔达到k后开后顺序移动直到快指针为nullpublic class kthToLast { public static int kthToLast(ListNode head,int k){ ListNode slow=head; ListNode fast=head; for (int i=0;i<k;i++){

2020-07-22 11:25:18 117

原创 链表相交

链表相交给定两个(单向)链表,判定它们是否相交并返回交点。题解:双指针法,如果两个指针相交,那么它们一定会有节点相等,直接查找headA=headB如果A中查不到返回B如果B中查不到返回A * public class getIntersectionNode { public static ListNode getIntersectionNode(ListNode headA,ListNode headB){ if (headA==null||headB==null){

2020-07-22 11:18:55 74

原创 分割链表

面试题 02.04. 分割链表* 编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。* 如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,* 其不需要被置于左右两部分之间。* 查找每个节点,当当前节点小于目标节点时,将当前节点使用头插法插入到链表头部* 时间复杂度:O(N)* 空间复杂度:O(1)public class partition { public static ListN.

2020-07-22 10:57:04 96

原创 链表环路检测

给定一个有环链表,实现一个算法返回环路的开头节点。有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。链表有环理解:如果链表中有环,那么快慢指针就一定可以相遇,此时快指针移动的距离是慢指针的两倍题解:1.检测有没有环,使用快慢指针slow和fast(一次走两步); 2.找位置,当找到环之后,slow从head出发,fast从相遇点出发,一次都走一步,再次相遇为环的入口点public class detectCycle { pu.

2020-07-22 10:22:28 848

GridView Item获得焦点放大

GridView Item获得焦点放大,在创建适配器的时候,将每一个View保存下来,使用setOnFocusChangeListener监听焦点情况,获得焦点时,在适配器中定义一个View来保存第一个Item,当获得焦点时则将第一个Item放大,注意,不要让GridView一开始就获得焦点,不然你会发现一直报空指针,每次将当前的View保存到lastView,在移动到下一个时将上一个View放小,在将当前View放大即可

2020-10-27

空空如也

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

TA关注的人

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