- 博客(36)
- 收藏
- 关注
原创 背包问题之回溯和动态规划
2018/10/9美团笔试编程第一题(Android)题意大概是:输入n表示有n份菜,输入X表示优惠券满X减10,接下来n个数表示每份菜的价格,每份菜最多点一份。求使用优惠券的最少金额。这是一道很有意思的题目,其实0-1背包问题的变体,关于0-1背包问题,我也只懂回溯法和动态规划。在此再复习一下。背包问题:背包最大可装物品重量总共为w,每件物品为w[i],价值为v[i],求容量内可装最大价值...
2018-10-10 00:10:45
1049
1
原创 Java中常见的锁的一些总结
Java中常见的锁类型常见的锁分类大致有:排它锁、共享锁、乐观锁、悲观锁、分段锁、自旋锁、公平锁、非公平锁、可重入锁等。排他锁和共享锁synchronized就是一个排他锁,ReentrantLock也是一个排它锁,而ReentrantReadWriteLock则是一个读共享锁,写排他锁乐观锁和悲观锁乐观锁和悲观锁是一种锁的思想,乐观锁对并发数据修改持乐观态度,通过CAS...
2018-08-07 14:58:10
4008
原创 Android 之Context
Android之Context理解context,一直以来,即是我熟悉又陌生的东西。我知道一个app的context数量=activity+service+application,也知道各种context的作用范围,却依然似懂非懂。今天,根据源码和自己的理解,简单梳理下,以作备忘。何为Context?context意为上下文、环境。我个人认为所处的上下文即所处的环境,也就是某对象所...
2018-07-21 13:25:33
256
转载 【转】Android状态栏、导航栏、DecorView高度
文章非原创 原文地址:这里写链接内容1:DecorView的高度 DecorView的高度代表的是: 整个装饰窗口的高度, 这个高度包括:状态烂的高度和导航栏的高度.(状态栏和导航栏通常叫做装饰窗口, 而ActionBar不属于装饰窗口)这个高度, 可以代表着整个玻璃屏幕的高度.获取方式:mActivity.getWindow().getDecorView()2.Window...
2018-07-19 14:25:56
2169
原创 轻量级线程——Kotlin之协程
轻量级线程——Kotlin之协程协程是一种“轻量级线程“,从Kotlin 1.1开始引入。由于一些耗时操作(如网络IO、文件 IO、CPU或GPU密集型任务)会使线程阻塞直到操作完成,协程提供了一种避免线程阻塞、开销更小且更加可控的异步操作。为什么需要协程阻塞还是挂起协程可以被挂起而不阻塞线程,线程的阻塞代价是昂贵的。尤其是创建线程数量是有限的,当线程被阻塞,那些重要的任务...
2018-07-18 14:41:07
9502
原创 Https与Http区别浅析
Https与Http区别Httphttp协议比较简单,也是不安全的。http的连接过程一般是建立与服务端80端口的TCP连接,三次握手结束之后便可以传输数据,http1.0是短连接,每次都要关闭连接,http 1.0是长连接,超时服务端关闭连接。由于http是明文传输,如果加密也只能在应用层上面加密。https则是安全的,过程也比http要复杂一些。但简单来说,https只是htt...
2018-06-29 21:31:59
522
原创 基于特定格式字符串的差异标记算法
基于特定格式字符串的差异标记算法实验室项目中遇到这样一个需求,将OCR识别后的两段文字进行互相校验并标记出差异。两段文字分别来自不同源的OCR识别,自然会存在差异,而且本身也有误差。实际上这个标记是十分麻烦的,不同于普通的字符串算法,它是一种更加模糊,而且多变但又有着特殊形式的字符串。之前考虑过匹配算法如KMP、自动机之类都不适合;考虑相似度检测的算法如编辑距离和余弦相似度也不适合,实际上不需...
2018-06-16 21:12:05
840
2
原创 Http状态码
Http状态码分为五类消息成功重定向请求错误服务器错误消息状态码为100~199,表示服务器已经接受了请求但并不完全接受,需要返回给用户一个临时响应,用户需要进一步请求。比较少用或者说谨慎使用。eg. 100 continue成功状态码200~299,表示服务器已经成功接受了请求并已经做出处理或将要处理。eg. 200 OK 202 ...
2018-06-09 14:52:41
189
原创 由电脑屏幕刷新频率所联想到的一些Android知识点
由屏幕刷新频率所联想到的一些Android知识点仅结合自己以前了解的片面知识做出的不负责任的猜想我们知道,当前笔记本电脑屏幕刷新频率大都是60Hz,据说屏幕帧数只要过了30Hz,就能感到流畅,实际上,GPU(显卡)即使性能很强,玩游戏帧数达到上百帧(每秒计算上百副图像的数据,也就是渲染),屏幕刷新频率低也没有用,所以才有电竞屏,通常都在120Hz以上。那么,这个跟手机有什么关系呢。我记...
2018-06-04 12:34:54
476
原创 Fragment的一些注意事项
Fragment的一些注意事项我们注意到,使用Fragment的时候,传参数是利用argument,而不是直接通过构造方法传参,那是为什么呢?实际上,因为fragment的生命周期依赖于Activity,加入Activity销毁重建(屏幕旋转),Fragement也要创建的,这个时候,按照官方文档的说法,只有无参构造函数才会被调用。那么问题就很清晰了,自然是不能利用构造函数传参的。官方...
2018-05-30 20:16:07
340
原创 Android暑期实习面经部分记录(二)
Bigo客户端2019届实习面经周一在华工参加了bigo笔试,感觉答得不好,然后很意外这周收到面试通知。昨天下午大概准备了下,早上又参加了趋势科技的笔试。下午就去面试bigo了,三面大概持续了>=2.5小时,也是挺累了,天气又热,但愿后面有好结果吧。一面先聊聊笔试上的编程题(看见自己答卷上的分数惨不忍睹,确实是发挥的不好)
2018-05-19 20:27:47
764
原创 由一道算法题引发的思考,使用bitmap进行数据处理
由一道算法题引发的思考,使用bitmap进行数据处理题目判断数组输入的五个数(取值1~13)是否是连续的,可以输入0,最多有4个,其中0可以代表任意数字,比如13450 可以 是12345思路:其实里面的规律是,数组5个数里面除了0外max-min<5,除了0以外其他数不能重复,所以主要判断除了0以外重复问题使用HashSet使用数组进行hash这也是最为巧妙的一种...
2018-05-07 22:14:47
151
原创 OkHttp基本原理浅析
OkHttp基本原理浅析我们先来看下OkHttp的两个使用方法 同步: //同步执行方法,不应该在UI线程使用 response = client.newCall(request).execute(); //异步方法 response = client.newCall(request).enqueue(new Callback() { ...
2018-05-07 13:35:20
3277
原创 常见算法题(五)——剑指offer
剑指offer部分笔试题输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。如果不要求顺序,那么可以使用从两边开始的双指针,向中间夹,然后交换两数;本题要求原来的顺序,那么思路就是找到第一个奇数,拿出来,把前面所有数后移一位,当然注意边界,利用一个indexl=-1来...
2018-04-22 17:11:15
206
原创 AIDL,广播,Provider注意的一些小细节
关于使用AIDL需要注意的几个点服务端的进程可能异常停止,此时客户端拿到的binder是失效的,所以要为拿到的binder设置监听,即linkToDeath(实现接口的匿名内部类);然后在接口实例的方法里面调用unlinkToDeath(),之后可以进行服务重绑定当为服务端注册客户端监听时,客户端使用的Listener接口应该是定义为AIDL接口,普通接口不能跨进程,服务端集合使用Remo...
2018-04-22 16:27:16
493
原创 基础算法记录(四)
基础算法记录四字符串单词和标点符号顺序提取,禁止用split例如 输入:{“Oh, a good day!”} 输出:{“Oh”, “,”, “good”, “day”, “!”} 这是今天网易有道二面面试手撕代码的题,题是不难,注意的是细节,当时在纸上写出bug来了,用的时间也不是满意,总之应该是凉了,自己手撕代码的能力确实该提高。题目思路就是遍历字符,记录按条件截取字符串,注意...
2018-04-16 22:14:00
129
原创 基础算法(三)——二分查找和其他部分常见算法题
基础算法三(二分查找和其他部分常见算法题)二分查找的递归和迭代 import java.util.Scanner; /** * 二分查找的递归和迭代,尤其要注意数组越界问题,当数组长度为[1,2]=2时,start=end * 如果此时 目标查找数 n<array[mid=0]时,那么此时出现start=0,end=-1,继续递归的化 ...
2018-04-03 12:44:28
210
原创 Activity启动大致流程
Activity启动大致流程public static void main(String[] args) { ...... Looper.prepareMainLooper();//实例化,同时里面引用有个ApplicationThread,是个binder,也同时实例化 ActivityThread thread = new...
2018-03-31 15:12:01
174
原创 基础算法(一)——八大排序算法实现Kotlin
/** *前面七大排序为Kotlin,基数排序为java,在最后面 */fun main(array: Array&amp;amp;amp;lt;String&amp;amp;amp;gt;){ val a = intArrayOf(2,5,3,7,9,8,1,6,4) println(&amp;amp;quot;插入排序:&amp;amp;quot;) insertSort(a).forEach {
2018-03-27 20:59:34
462
2
原创 基础算法记录(二)——部分常见算法问题
买卖股票的最佳时机 II假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。思路:可以采用贪心法,只要明天的价格高于今天,那么就今天买入,明天卖出,否则今天就不买入。然后继续看后天和明天的情况,以此类推class Solution {...
2018-03-26 22:20:54
150
原创 Android暑期实习面经部分笔试记录(一)
Android暑期实习面经记录阿里一面,15min估计阿里一开始也是没打算要我的, = =面试管聊了不久,也没问什么问题,都是闲聊。项目单向链表(插入,删除快)双向链表(这个就厉害了,比如LinkedList,比如LinkedHashMap,使用双链表刚好可以实现队列的功能,并且是双队列Dequeue)各自的应用归并排序腾讯一面,57min项目V...
2018-03-16 19:57:17
699
原创 JVM/Android View知识点
JVM部分基础回忆jdk8取消了永久代,jdk7常量池移到堆中新生代中Eden和Survivor内存比为8:1:1,每次只有一个survivor可以用,实际可用为90% 。新时代:老年代为1:2。大对象直接进入老年代,小对象优先进入Eden,GC发生时没有被回收,则进入survivor,熬过一定次数进入老年代,当然也并非绝对。survivor内存不足时会进入老年代,老年代不足会进行GC...
2018-02-20 19:44:47
247
原创 自定义View的构造函数
一些琐碎的随手笔记canvas.drawBitmap()直接画图片,可以用matrixcanvas.drawPath()直接按路径画canvas.drawXXX()直接画图形,可以用Shader加渲染效果,如渐变,和附加图片渲染BitmapShadercanvas.clipPath()按路径裁剪画布new一个canvas时注意传入一个bimap实例,但是这个bitmap应该是未绘制的...
2018-02-10 16:46:50
552
原创 十二月份复习部分重要知识点总结
十二月份复习部分重要知识点总结kotlin 中data class只做数据类,不要有封装其他逻辑操作。“null”也可以以有 toString()。Java 内部类的final字段,从反编译结果可知本质上是为了杜绝数据的不一致性。因为传递的实际上是拷贝而不是值或对象本身,如同方法传参无法在方法里面改变原来的值或者对象的引用。如果不为final,在内部类中看似可以成功改变外部的值或引用,但实...
2018-01-01 15:06:37
245
原创 Android 4.4 6.0 7.0拍照、访问图库一些记录
Android 4.4 6.0 7.0拍照、访问图库一些记录按照个人实践和理解,总结出以下一些情况。 以下内容纯粹是本人自己目前总结出来的,可能存在重大误导错误,请持怀疑态度4.4以后使用Intent 的 GET_CONTENT,setType访问图库返回的uri为带doucument的content://…provider类型Uri,为只读Uri无法存入更改后图片,可以转化为绝对路径,再转化为f
2017-11-20 19:41:48
220
原创 关于类加载机制的一些笔记
类加载流程基本过程:加载——验证——准备——解析——初始化——使用——卸载 加载: 1.获取定义这个类的二进制流,不一定从class文件获取,所以可以自定义类加载器。 2.将二进制流转为JVM方法区的数据结构,载入方法区 3.在方法区中生成Class对象,作为访问这个类信息的外部接口 验证: 1.文件格式验证,校验合法性,比如魔数值”cafebabe” 2.元数据验证,比如类和字...
2017-11-13 20:01:47
171
原创 android实现gradle动态依赖打包
一、gradle基本知识gradle是基于Groovy语言的,一个Android Project项目基本会生成三种gradle文件:module gradle、project gradle 和 setting gradle - module gradle一个模块有一个,如 上图所示app.gradle和firstflavor.gradle。该gradle是配置本模块信息的 - project
2017-10-16 23:10:26
4897
原创 关于方法内部的类使用final
原因在方法中的内部类访问方法内的局部变量时,jdk8之前必须使用final。反编译后看出,内部类实际上也会生成一个有构造方法的类,引用的变量作为参数传递了进来,包括外部类实例(这也是为什么内部类默认会持有外部对象的引用,容易造成内存泄漏),然后赋值给了自己的变量,也就是说如果在内部类里面改变外部变量的值,实际上改变的只是内部类自己的变量值,并非外部变量的值,就像方法传变量过来一样,无法在方法里...
2017-10-11 16:56:02
1078
原创 Android4.4之后以及7.0访问相册和裁剪相关问题
Android4.4之后我们知道,android4.4以后,如果以下代码直接访问系统图库Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("image/*");得到的Uri不再是content://media/类型的Uri,而是conten://…provider/类型的Uri。Android4.4之前返回的格
2017-07-31 19:57:05
1128
原创 关于前台服务去除通知
只要用一个服务启动另一个服务,在被启动的服务里面开启开启前台服务,为其设置一个通知,然后在该服务开始真正运行之前调用stopself()即可,覆盖onDesreoy()调用stopForegroud()。原因是两个服务共用一个通知,杀掉一个剩下一个便是没有通知的前台服务。
2017-07-25 23:24:20
1195
原创 Android 动画复习
Android常用动画有frame(帧动画)动画,tween(补间动画)动画,属性动画。 1.frame动画 作为帧动画,frame动画根据快速切换图片而达到动画效果。通常用xml定义动画会更好。在res/drawable目录下新建xml文件。<?xml version = "1.0" encoding = "utf - 8"?><animation-list xmlns:android="h
2017-04-25 22:59:11
192
原创 Python3.5初学笔记
之前学过C,C#,Java等课程,惊叹于python的简约。【笑】 刚开始学,做点笔记吧。 由于python3.0之后终于默认采用了Unicode编码,所以为了避免乱码问题,先在编译器把编码设为UTF-8,在每个.py开头加上# -*- coding:utf-8 -*-python为动态语言,大小写敏感,不需要指定变量数据类型,整形数据无限制大小,“”‘’表示的都是字符串。a = 123 # a
2017-04-09 14:26:04
241
原创 关于简单的自定义view以及相关知识
关于简单的自定义view以及相关知识自定义View的简单步骤 1.新建一个Class继承自View(自定义View一般有直接继承View,某个具体的控件如ImageView,ViewGroup三种)。 2.在values中styles自定义属性。 3.在自定义View类中实现至少两个构造方法并完成属性以及画笔的初始化。 4.重写onMeasure(int,int)(看需求需不需要重写,Vie
2017-03-29 23:04:44
262
原创 使用okHttp发起请求并用fastJson解析
使用okHttp发起请求并用fastJson解析。 第一步要先在AndroidStudio添加支持库。 okHttp:http://square.github.io/okhttp/ fastJson:https://github.com/alibaba/fastjson/wiki/Android%E7%89%88%E6%9C%ACpublic class okHttpUtils{ /**
2017-03-19 16:57:33
1562
原创 Java 原码、反码、补码,自定义的异常类,手动抛出异常。
1.byte 型占一个字节,正数按原码储存,负数按补码储存。第一位为符号符,“0”表示正数,“1”表示负数。 0000 0000表示 0 ,1000 0000 表示 -0,由于byte表示的范围为256,+0,-0对应补码都为0000000,所以补码10000000没有所为原码和反码,规定为-128。当byte转16进制时,注意 &0xff,因为高位补符号为,而16进制没有负数。比如110...
2016-09-08 21:11:45
450
原创 Android,Java中的Integer类,字符串处理及格式化
Integer类Integer是Number类的一个子类,有两个构造方法。1.Integer(int number)2.Integer(String str)Integer类常用构造方法方法 byteValue() 返回值byte 以byte类型返回该Integer对象。方法 ompareTo(Integer anotherOnteger) 返回值int
2016-08-29 13:36:44
2399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人