编程学习
文章平均质量分 76
Alexlee1986
这个作者很懒,什么都没留下…
展开
-
Kotlin语言优势总结
Kotlin是JVM和Android的实用编程语言,结合了OO和功能特性,专注于互操作性,安全性,清晰度和工具支持。 作为通用语言,Kotlin可以在Java工作的地方工作:服务器端应用程序,移动应用程序(Android),桌面应用程序。它适用于所有主要的工具和服务。 Kotlin的关键重点之一是混合Java + Kotlin项目的互操作性和无缝支持,使采用更容易,从而减少了样板代码和更多的类型安全性。此外,Kotlin有一个广泛的标准库,使日常任务轻松流畅,同时保持字节码足迹低。当然,也可以在原创 2021-02-21 21:45:07 · 1476 阅读 · 1 评论 -
git 常用指令总结
一 创建分支1.本地分支创建本地dev分支,然后切换到本地dev分支:git checkout -b devgit checkout命令加上-b参数表示创建并切换,相当于以下两条命令:git branch devgit checkout dev用git branch命令查看当前分支:git branch切换分支,如切换回master分支:git checkout mastergit merge命令用于合并指定分支到当前分支,把dev分支的工作内容合并到mast原创 2020-10-18 11:44:57 · 268 阅读 · 0 评论 -
每日一道算法面试题(24):leecode278 第一个错误的版本
1.算法题目你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:给定 n = 5,原创 2020-09-26 10:18:20 · 437 阅读 · 0 评论 -
每日一道算法面试题(23):leecode34 在排序数组中查找元素的第一个和最后一个位置
1.算法题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]2.算法思路算法思路:暴力法-线性扫描:从头到尾遍原创 2020-08-23 16:09:17 · 227 阅读 · 0 评论 -
每日一道算法面试题(22):leecode27 移除元素
1.算法题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,原创 2020-08-02 10:56:10 · 344 阅读 · 0 评论 -
每日一道算法面试题(21):leecode26 删除排序数组中的重复项
1.算法题目给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5,原创 2020-07-05 12:06:28 · 3223 阅读 · 0 评论 -
每日一道算法面试题(20):leecode23 合并K个排序链表
1.算法题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->62.算法思路算法思路:暴力法:每次遍历 n 个链表查找最小的值放入链表指定位置,算法复杂度是 O(kN),其中 N 是总共节点的数量;分治法:两两比较临近的链表,第一轮比较过后合并成 k/2 个有序链表,第二原创 2020-05-10 21:44:42 · 353 阅读 · 0 评论 -
每日一道算法面试题(19):leecode35 搜索插入位置
1.算法题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 42.算法思路算法思路:二分查找:利用二分查找的思路查...原创 2020-04-13 19:09:07 · 364 阅读 · 0 评论 -
每日一道算法面试题(18):leecode15 三数之和
1.算法题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]2.算法...原创 2020-04-10 09:56:36 · 308 阅读 · 0 评论 -
每日一道算法面试题(17):leecode 14 最长公共前缀
1.算法题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。2.算法思路首先总结一下公共前缀的规律,所...原创 2020-04-06 17:37:48 · 239 阅读 · 0 评论 -
每日一道算法面试题(16):leecode 560 和为K的子数组
1.算法题目给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。2.算法思路暴力法:...原创 2020-03-29 16:08:28 · 318 阅读 · 0 评论 -
每日一道算法面试题(15):leecode21 合并两个有序链表
1.算法题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->42.算法思路算法思路:递归:两个链表头部较小的一个与剩下元素的 merge 操作结果合并,首先考虑边界情况:如果 l1 或者 l2 一开始就是...原创 2020-03-23 19:05:54 · 195 阅读 · 0 评论 -
每日一道算法面试题(14):leecode19 删除链表的倒数第N个节点
1.算法题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?通过次数131,025提交次数32.算法思路双链表法:可以通过...原创 2020-03-19 10:34:55 · 213 阅读 · 0 评论 -
每日一道算法面试题(13):leecode10 正则表达式匹配
1.算法题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "aa...原创 2020-03-16 20:44:15 · 372 阅读 · 0 评论 -
每日一道算法面试题(12):leecode9 回文数
1.算法题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。...原创 2020-03-13 19:27:05 · 235 阅读 · 0 评论 -
每日一道算法面试题(11):leecode220:存在重复元素 III
1.算法题目给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示...原创 2020-03-11 14:35:45 · 776 阅读 · 0 评论 -
每日一道算法面试题(10):leecode219:存在重复元素 II
1.算法题目给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2...原创 2020-03-09 09:58:14 · 283 阅读 · 0 评论 -
每日一道算法面试题(9):leecode217:存在重复元素
1.算法题目给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true2.算法思路算法思路:暴力法:...原创 2020-03-06 20:01:19 · 449 阅读 · 0 评论 -
每日一道算法面试题(8):leecode 7 整数反转
1.算法题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31, 2^31− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。2.算法思路...原创 2020-03-05 10:51:38 · 312 阅读 · 0 评论 -
每日一道算法面试题(7):leecode6 Z 字形变换
题目:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:...原创 2020-03-05 09:40:48 · 392 阅读 · 0 评论 -
每日一道算法面试题(6):leetcode214 最短回文串
题目:给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。示例1:输入: "aacecaaa"输出: "aaacecaaa"示例2:输入: "abcd"输出: "dcbabcd"算法思路:借鉴 每日一道算法面试题(5):leetcode5 最长回文子串 查找最长回文串的思路,先找到字符串中的最大回文串,在此基础上在最大回文...原创 2020-03-03 17:22:42 · 605 阅读 · 0 评论 -
每日一道算法面试题(4):leetcode4 寻找两个有序数组的中位数
题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2...原创 2020-02-26 12:54:05 · 232 阅读 · 0 评论 -
每日一道算法面试题(3):leetcode3 无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke"...原创 2020-02-24 10:24:24 · 223 阅读 · 0 评论 -
每日一道算法面试题(1):leetcode1两数之和
算法在编程领域的重要性不言而喻,而且也是好多大厂面试经常要考核的重点。两数之和题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + n...原创 2020-02-20 16:04:02 · 212 阅读 · 1 评论 -
Android应用/进程保活策略总结
Android 应用/进程保活策略总结1.将Service设置为前台服务思路:启用前台服务,主要是startForeground() 。保活程度:一般情况下不被杀,部分定制ROM会在应用切到后台即杀 ,会被 用户手动杀进程(force stop)杀死。使用场景:大部分音乐播放器通知栏的实现,可以保证后台听歌时应用正常运行。2.在service的onstart方法里返回 STATR_STI...原创 2019-12-30 17:54:04 · 730 阅读 · 0 评论 -
网络编程之 TCP 建立连接的三次握手机制和关闭连接的四次挥手机制
一、TCP建立连接的三次握手机制1.TCP 3次握手建立连接建立TCP连接:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)服务器收到syn包,必须确认客户的SYN(ack=j+1...原创 2019-12-12 20:04:41 · 1492 阅读 · 0 评论 -
Android 性能优化之RecycleView的性能优化原则
Android 性能优化之RecycleView的性能优化一、概述RecyclerView有着极高的灵活性,能实现ListView、GridView的所有功能,也能轻松实现ListView、GridView不易实现的功能,如多 Type 布局列表。在日常开发中,RecyclerView使用非常广泛,如果使用不当将会出现闪烁、卡顿、占用内存过高等问题,影响应用性能,也会影响用户体验,所以有必要...原创 2019-10-29 16:03:20 · 1538 阅读 · 1 评论 -
Android深入研究之View的可见性检测
一、背景 在Android开发中,我们常常会对View的可见性visiblity进行操作或者检查。常见的场景有:在消息流中,根据ImageView是否在屏幕中出现了再决定是否加载;在视频流页面,当视频滑入屏幕被用户可见时播放,滑出屏幕就自动停止播放等等;网络请求数据,根据返回的数据结果控制相应View可见或不可见;需要根据view是否可见或第一次可见,做特殊的处理,如埋点上报等操作。...原创 2019-06-14 10:11:48 · 10076 阅读 · 2 评论 -
Java基础学习之线程同步方法总结
引入线程同步的原因:当有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常,用户也得不到想要的结果。比如,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果呢?取钱不成功,账户余额是100;取钱成功了,账户余额是0。那到底是哪...原创 2018-07-29 09:16:14 · 222 阅读 · 0 评论 -
Java 单例模式实现方式及其优缺点——单例模式还可以这样实现
单例模式三种初始化方法及其优缺点一、常见单例模式实现方式 单例模式:顾名思义即确保一个类只有一个实例,而且自行实例化(私有构造方法)并向整个系统提供这个实例。 常见的单例模式有三种模式:懒汉式单例、饿汉式单例、静态内部类单例(也叫登记式单例、holder单例)。1.饿汉式单例 实现方式:public class Singleton { private static fin...原创 2019-09-19 21:07:30 · 314 阅读 · 0 评论 -
Android 多线程编程之 HandlerThread 详解
HandlerThread有那些特点:HandlerThread本质上是一个线程类,它继承了Thread; HandlerThread有自己的内部Looper对象,可以进行looper循环; 通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage方法中执行异步任务; 创建HandlerThread后必须先调用HandlerT...原创 2018-08-09 09:51:11 · 370 阅读 · 0 评论 -
Android高级开发工程师技术面试经验总结
笔者前段时间参加了绿厂的Android高级开发工程师技术面试,总结一下,希望对即将参加技术面试的程序员能有所帮助。 首先面试官问的是项目相关的问题,如项目的实现、项目中遇到的问题以及遇到的问题是如何解决的,同时针对项目中的某些技术点进行不断的追问。 在问完项目相关的问题之后,面试官开始问Android基础知识相关的问题,具体问到了以下这些问题:...原创 2018-07-21 12:08:48 · 930 阅读 · 0 评论 -
Java基础知识之String、StringBuilder和StringBuffer三者的区别
String、StringBuilder和StringBuffer这三个类在操作字符串时主要有运行速度和线程安全这两方面的区别:1.运行速度 运行速度,即执行字符串操作时代码执行的时间快慢,在这方面运行速度快慢为:StringBuilder > StringBuffer > String。 String最慢的原因:String为字符串常量,而StringBuilder和S...原创 2018-07-21 11:26:01 · 214 阅读 · 0 评论 -
Java基础知识之synchronized同步方法、代码块、静态方法、静态代码块的区别
Java中的同步块用synchronized标记,是同步在某个对象上,所有同步在一个对象上的同步块在同一时刻只能被一个线程进入并执行操作,其他等待进入该同步块的线程将被阻塞,直到执行该同步块中的线程退出。 有四种不同的同步块:实例方法同步; 静态方法同步; 实例方法中的同步块; 静态方法中的同步块。1.实例方法同步 Java实例方法同步是同步在拥有该方法的对象上。这样...原创 2018-07-26 14:34:48 · 3166 阅读 · 0 评论 -
Java基础学习之接口和抽象类的概念、区别及适用的场景
1.接口 接口是抽象方法的集合,一个接口只有方法的形状而没有方法的具体实现,接口是Java面向对象提供的一种机制。 Java语言是一种单继承的,在类的继承中通过实现多个接口间接实现了多继承功能。接口的声明:[public] interface InterfaceName{ void method1(int arg1); void method2(); ......原创 2018-07-29 09:25:15 · 271 阅读 · 0 评论 -
HTTP与HTTPS的基本概念及其区别
HTTP协议被广泛应用于Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全超文本传输协议HTTPS。为了数据传输的安全,HTT...原创 2018-07-14 11:56:27 · 914 阅读 · 0 评论 -
Android网络编程之socket和http编程的区别
HTTP为短连接 Http协议是建立在TCP协议之上的一种应用。它与TCP连接不同之处在于,客户端每次请求都需要服务器返回响应,在请求结束后,会主动释放连接,从建立连接到关闭连接的过程称为“一次连接”。由于HTTP每次请求都会释放连接,因为HTTP连接是一种“短连接”,所以要保持客户端在线状态,就必须不停地向服务器发起连接请求。所以在开发过程中,即使不需要获得任何数据,客户端也要...原创 2018-07-19 15:43:13 · 1486 阅读 · 0 评论 -
Android基础学习之进程间和线程间通信方式总结
首先介绍一下进程和线程的基本概念及两者之间的区别: 进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其...原创 2018-07-18 14:38:14 · 4411 阅读 · 0 评论 -
HashMap和HashTable区别及Hash冲突解决方法
一、HashMap和HashTable主要有以下5个方面的区别:1.继承的父类不同 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。2.对null对象的支持不同 HashMap是支持null键和null值的,而HashTable在遇到null时,会抛出NullPointerException异常。这并不是...原创 2018-07-17 14:28:06 · 3117 阅读 · 0 评论 -
Android 性能优化之基于AndroidStudio和MAT分析内存泄露问题
MAT(Memory Analyzer Tool) 是基于heap dumps来进行内存分析的工具,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用AndroidStudio和MAT分析内存泄露问题具体步骤如下(以androidStudio3为例,androidStudio2可以用自带的内存分析...原创 2018-06-23 16:30:06 · 828 阅读 · 0 评论