- 博客(120)
- 资源 (18)
- 收藏
- 关注
原创 Socket.outputStream 是如何感知到链接断开而抛出 IOException 的
这个 send 是 bionic 库的函数,这个库中提供了网络套接字的功能,下载下来这个库,可以在库中找到这个字符串。目前不知道这个字符串是怎么传到 java 层的,可以确定的是调用底层网络库的 send 会返回错误码,可依据此来判断发生了什么错误。impl 的实现就得看 ServerSocket 是拿到的什么样的 Socket 了,看 Socket.accept() 方法。第二个判断是当 fd = -1 的时候会抛一个错,且有代码注释说明当套接字被关闭时,fd 会被设置为 -1。
2024-02-08 11:21:06
476
原创 Android SDK 上传 Maven 喂奶级教程
最近领导给安排了个任务,让我把我们现有的一个 SDK 上传到 Maven 上去,方便客户直接用 gradle 依赖,不再需要拷贝 jar 和 so 了,此前我也看过一些相关的文章我想问题也不大,觉得工作量也就一两天的事情,主要的难点在于如何隐藏源码上传 maven(因为是商业 SDK),万万没想到问题这么多,网上有用的文章也很少,加上 gradle 的版本捣捣乱让我整整一周焦头烂额,一言难尽,略过,直接进入正题!
2024-02-08 11:18:27
2204
1
原创 程序员的哲思录
在此记录一些自己觉得有道理的语句或随想 有时候体制的创新或者制度的变革比建立技术护城河重要的多。 一想到为人父母不需要经过考试就觉得很可怕,很多父母并不知道如何为人父母,只是自私自利,冠冕堂皇罢了。 每天7点半准时坐在电视前,幸福感以方程式增长。 如果一个人的认知远远超过他的能力就会变得浮躁。 你懂的越多,懂你的人越少。 美貌十分肤浅,如...
2019-08-14 09:08:02
1043
原创 Android OpenGl学习(一)
最近由于项目需要,所以开始学习OpenGL,网络上的东西零零散散,所以就想写一系列博客来记录学习OpenGL。一、简介首先我们要对其有一个简单的认识什么是OpenGL?官方描述:OpenGL是一个跨平台的图形API,用于指定3D图形处理硬件中的标准软件接口。OpenGL的优势?OpenGl是用来做图像处理的,那我们为什么不使用Canvas呢?费劲学这个干嘛?答案很简单,...
2019-07-29 17:42:49
1491
4
原创 Git基础操作
一、流程与概念首先在使用git之前我们需要了解它的几个概念和基础使用流程,在git操作中有四个重要的地方,你所有的操作都是在和他们打交道。workspace : 工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。 index : 暂存区 , 一个本地的缓冲区。暂存区域是一个文件,保存了下次将提交的文件列表信息,一般...
2019-07-28 19:18:39
553
原创 Git踩坑指南
最近入职了七牛云,因为安全性的原因,加入github上的开发小组必须开启二次验证,今天想上传一个新的demo代码,搞了半天老是说我账号密码不对,RSA也不行,经过多次重试并且之前也使用git,所以我确定我的操作没有错,问题就在账号的二次验证上,经过一番曲折,终于搞定了,所以决定写下一篇博客作为记录,也为了他人遇到此问题快速查找解决方式,避免浪费时间。此博客会不断更新,作为一个git错误解决方式的集...
2019-07-28 16:17:50
683
原创 【精选】JAVA算法题(二十五)
好长时间没有写博客了,之前因为期末考试耽误了一段时间,回家又玩了几天,然后又赶来上海入职,所以就把博客这事给忘了,哈哈,懒惰啊。一、最长回文字符串题目:/** * 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 * 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。 * <p> * 注意: * 假设字符串的...
2019-07-21 17:26:48
480
1
原创 Bitmap总结
相信大家在平时的android开发中肯定用过Bitmap,而且用的还不少,那么你对它有足够的了解吗?你的使用高效吗?对于超大图片是如何处理的呢?下面就让我们一起来从基础学习一下Bitmap。一、Bitmap是什么?位图(Bitmap),又称栅格图或点阵图,是使用像素阵列来表示的图像。位图(Bitmap)也可指: 一种数据结构,代表了有限域中的稠集,每一个元素至少出现一次,没有其他...
2019-06-10 14:49:03
898
原创 Binder机制总结
在android中进行跨进程通信通常有以下几种方式:使用Intent 使用文件共享 使用Messenger 使用AIDL 使用ContentProvider其中Intent中可以携带Bundle,而Bundle实现了Parcelable接口,所以可以在不同的进程间进行传输。文件共享就是读写文件,比如常用的SharedPreferences就是以XML来存储的文件。而Messenger...
2019-06-03 10:04:39
3266
原创 【精选】JAVA算法题(二十四)
一、子字符串出现的位置题目:/*** 给出 字符串 text 和 字符串列表 words, 返回所有的索引对 [i, j] 使得在索引对范围内的子字符串* text[i]...text[j](包括 i 和 j)属于字符串列表 words。** 示例 1:* 输入: text = "thestoryofleetcodeandme", words = ["story","f...
2019-06-02 17:44:31
671
原创 【精选】JAVA算法题(二十三)
一、完全平方数题目:/** *给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。 * 说明:不要使用任何内置的库函数,如 sqrt。 * * 示例 1: * 输入:16 * 输出:True * * 示例 2: * 输入:14 * 输出:False */不使用库函数来判断一个数是不是一个完全平方数-...
2019-06-02 16:47:08
656
原创 【精选】JAVA算法题(二十二)
一、两数之和题目:/** * 不使用运算符 + 和 - ,计算两整数 a 、b 之和。 * * 示例 1: * 输入: a = 1, b = 2 * 输出: 3 * * 示例 2: * 输入: a = -2, b = 3 * 输出: 1 */这道题的本意其实就是在考你的位运算,如何利用位运算来进行数的加减可以分为两...
2019-05-30 20:45:03
465
原创 View的onMeasure()、onLayout()、onDraw()总结
自定义View是android开发中常有的一项工作,要想自定义View,你就必须熟练掌握View的测量、布局及绘制,了解其原理并会使用。View视图绘制需要搞清楚两个问题,一个是从哪里开始绘制,一个是怎么绘制?先说从哪里开始绘制的问题:我们平常在使用Activity的时候,都会调用setContentView来设置布局文件,没错,视图绘制就是从这个方法开始的;再来说说怎么绘制的:在...
2019-05-30 10:14:00
5720
原创 【精选】JAVA算法题(二十一)
一、丑数题目:/** * 编写一个程序判断给定的数是否为丑数。 * 丑数就是只包含质因数 2, 3, 5 的正整数。 * * 示例 1: * 输入: 6 * 输出: true * 解释: 6 = 2 × 3 * * 示例 2: * 输入: 8 * 输出: true * 解释: 8 = 2 × 2 × 2 * * 示例 3: * 输入: 14 * 输出: ...
2019-05-23 11:31:03
361
原创 【精选】JAVA算法题(二十)
一、异位词题目:/** * 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。 * * 示例 1: * 输入: s = "anagram", t = "nagaram" * 输出: true * * 示例 2: * 输入: s = "rat", t = "car" * 输出: false * * 说明: * 你可以假设字符串只包...
2019-05-22 21:11:51
399
原创 【精选】JAVA算法题(十九)
一、重复的数题目:/** * 给定一个整数数组和一个整数 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]...
2019-05-22 20:40:49
1139
原创 【精选】JAVA算法题(十八)
一、移除链表中指定的节点题目:/** * 删除链表中等于给定值 val 的所有节点。 * * 示例: * 输入: 1->2->6->3->4->5->6, val = 6 * 输出: 1->2->3->4->5 */题的描述很简单,做起来并不容易,有一些小坑,要注意的就是头尾的节点的处理和连续相等的情况处理,...
2019-05-22 15:14:20
633
原创 【精选】JAVA算法题(十七)
一、镜面反射题目:/** * 有一个特殊的正方形房间,每面墙上都有一面镜子。除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2。 * 正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接收器 0 的距离为 q 。 * 返回光线最先遇到的接收器的编号(保证光线最终会遇到一个接收器)。 */ 示例:输入: p = 2, q...
2019-05-09 20:54:57
427
原创 贝尔曼-福德算法
我在上一篇博客中讲解了狄克斯特拉算法,该算法可以用于寻找权值都为正的有向无环图的最短路径,我也提到了如果碰到权值为负的情况可以使用贝尔曼-福德算法,那么今天就让我们学习一下贝尔曼-福德算法是如何处理负权值和环路的。其实理解了狄克斯特拉算法之后理解贝尔曼-福德算法就很容易了,如果说狄克斯特拉算法是用一种“广度”的方式,每次寻找源点所能到达的距离最短的一个点,更新其邻居节点的距离。那么贝尔曼-福德...
2019-05-03 20:26:07
6666
1
原创 狄克斯特拉算法
一、介绍在前一篇博客中我们学习了广度优先搜索算法,它解决的是段数最少的路径,如果你要找到最快的路径,该怎么办呢?为此,可以使用本篇博客所讲述的算法——狄克斯特拉算法如果你使用广度优先搜索,将得到下面这条段数最少的路径。这条路径耗时7分钟。下面来看看能否找到耗时更短的路径!狄克斯特拉算法包含4个步骤。(1) 找出“最便宜”的节点,即可在最短时间内到达的节点。(2) 更新该节点...
2019-04-26 13:42:08
2778
原创 广度优先搜索算法
一、简介广度优先搜索算法(Breadth-First Search,BFS)是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法。广度优先搜索让你能够找出两样东西之间的最短距离,不过最短距离的含义有很多!使用广度优先搜索可以:编写国际跳棋AI,计算最少走多少步就可获胜; ...
2019-04-25 13:26:58
130107
28
原创 【精选】JAVA算法题(十六)
1.脏矩形合并题目: 在2D渲染系统中,局部渲染是常见提升渲染性能的方法。如果界面中有元素发生了改变,我们可以将这个元素所占矩形区域标记为脏矩形,那么在接下来的渲染中,我们仅对每个脏矩形所占矩形区域执行一次局部渲染即可,无需渲染全屏。 但系统提供的局部渲染API有如下限制: 1. 单次局部渲染区域必需是矩形,不能是多边形,圆形或者其他不规则形状。 2. 单次局部渲染时间开销除了和...
2019-04-20 22:13:46
584
3
原创 Activity、Window、DecorView、ViewRootImpl之间的关系
我们通常写Activity的时候在onCreate里面都会写上setContentView()这一步,该方法会将你指定的布局文件加载并显示到屏幕中,在其中会经历一系列操作,其中也就涉及到了Activity,Window,DecorView,ViewRootImpl,今天就让我们借助这个方法来看看这些对象之间的关系。如果你在5.0之前就开始学习android了,那你会发现一个Activity的改...
2019-04-20 12:17:42
1075
原创 LruCache和DiskCache总结
日常我们写程序的时候经常会使用到网络的图片,如果我们每次都去网上加载,那么性能难免会差一些,并且网络情况并不是总是 那么好,那么这时候我们就需要使用缓存了,我们学习android都知道图片的三级缓存,分别是内存缓存,硬盘缓存,网络缓存。它的大体流程是这样的,给定一个网址,加载一张图片如果内存缓存中存在,那就取出来,放上去,如果没有就找硬盘缓存 如果硬盘缓存中存在,那就取出来,放上去,并添...
2019-04-10 11:38:53
983
原创 IntentService总结
我们平常写程序时经常会涉及到下载或者播放音乐等耗时操作,你可能会使用Service+Thread的方式解决,但是这样比较麻烦,如果你要串行执行多个耗时操作还要使用线程池,其实Google早就帮我们封装好了一个框架——IntentService一、简单使用Client端public class ClientActivity extends AppCompatActivity { ...
2019-04-09 18:23:52
270
原创 HandlerThread总结
在Android系统中,执行耗时操作必须使用子线程来执行,执行完线程以后线程便会自动销毁。但是如果如果我们有很多分步的耗时操作,如果我们不断的创建新的线程执行,不断销毁线程便会消耗很多的性能,那么该怎么办呢?android给我们提供了两个方法,一个就是使用本篇文章讲的HandlerThread,另一个便是使用线程池管理线程。一、简单使用1.创建实例对象//参数表示线程名称Handl...
2019-04-09 16:49:14
956
原创 AsyncTask总结
AsyncTask是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。一、简介1.AsyncTask的泛型参数public abstract class AsyncTask<Params, Progress, Result>其中,三个...
2019-04-09 10:54:54
347
原创 滑动冲突解决方式总结
一、冲突类型滑动冲突分为三种类型,第一类是外部和内部滑动方向不一致,第二类是外部和内部滑动方向一致,第三类是前两种嵌套的模式。处理这三种类型的规则分为两类,对于第一种类型,我们可以根据滑动方向来处理,符合处理方向的分配给对应的控件;对于2、3种类型,必须根据业务上的区别来处理,某种状态的处理事件分发给对应的控件来处理。对于滑动方向的判别通常使用以下方式,使用终点坐标和起点坐标,计...
2019-04-08 18:49:14
3325
3
原创 事件分发总结
一、基础知识1.分发对象事件:Touch事件相关细节(发生触摸的位置、时间、历史记录、手势动作等)被封装成MotionEvent对象2.事件主要发生的Touch事件大致分为以下四种: MotionEvent.ACTION_DOWN:按下事件(所有事件的开始) MotionEvent.ACTION_MOVE:滑动事件 MotionEvent.ACTION_C...
2019-04-08 17:16:05
2404
原创 消息机制总结
因为android的UI线程不是线程安全的,所以更新视图只能在主线程更新,那么如果我的子线程想要更新UI该怎么办呢?这就是 Handler出现的原因了,虽然我们通常将Handler用在子线程需要更新UI的场景下,也可以用来传递消息。一、角色分析1、Handler:处理器,负责的内容是消息的发送和具体处理流程,一般使用时由开发者重写handleMessage函数,根据自定义的不同messag...
2019-04-08 11:40:19
2090
原创 Fragment总结(二)
四、Fragment与Activity通信1.在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作2.Handler、EventBuspublic class MainActivity extends FragmentActivity{ //声明一个Handler public Handler mHandler ...
2019-04-07 20:50:27
593
原创 Fragment总结(一)
我们日常开发中经常会使用到fragment,通常会放置在主页面上,方便切换展示信息。它拥有自己的生命周期,可以接受处理用户的事件,并且你可以在一个Activity中动态的添加,替换,移除不同的Fragment。一、生命周期第一张图展示了fragment的生命周期,第二章图展示了 Activity 与 Fragment 生命周期的对比Fragment比Activity多了几个生命周期...
2019-04-07 19:48:00
663
原创 BroadcastReceiver总结
BroadcastReceiver属于Android四大组件之一可用于监听应用发出的广播消息,并做出相应应用场景 :不同组件之间通信(包括应用内 / 不同应用之间) 与Android系统在特定情况下的通信 如当电话呼入时、网络可用时 多线程通信一、实现原理使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。 广播接收者 通过Binder机制在...
2019-04-07 16:28:00
437
原创 Service总结
一、Service种类按运行地点分类:本地服务:运行在主进程中 远程服务:运行在独立的进程中按运行类型分类:前台服务:会有通知栏显示 后台服务:默认的服务,没有通知栏显示按启动方式分类:startService启动:停止使用stopService bindService启动:停止使用unbindService 使用startService和bindService启动:同...
2019-04-06 17:24:28
708
原创 JAVA入门算法题(十五)
一、满二叉搜索树/** * 给定一个二叉树的层序遍历判断是不是一颗满二叉搜索树 */大致分为这么几步:1.处理输入2.根据满二叉树的节点数量进行排除3.构建树4.递归判断 public static Node root; public static void isManTree(){ Scanner sc = new Scann...
2019-04-06 13:13:22
343
原创 教你用JAVA写个小游戏
上周上课的时候老师让用Java写个小程序,我本想写一个经典的飞机大战游戏来着,可以后来突发奇想就写成了这个一、整体思路继承窗体类,复写窗体刷新 添加按键监听 游戏结束界面 王思聪类和热狗类 移动轨迹计算 判断碰撞 音乐播放 不断刷新窗体 处理细节二、编码1.图片首先你要找到图片,可以百度一张,然后用ps切开,再找一张背景图片就搞定了你还需要一个加载图片的...
2019-04-03 10:54:07
103499
35
原创 Activity总结
一、Activity的生命周期activity应该是我们初学android就接触的,而它的生命周期更是重中之重,掌握activity的生命周期也是学好android的基础这张图片可谓是非常经典,应该学习android的人都见过,下面讲一一讲解各个方法:(1) onCreate():在activity创建时会被调用,通常会在其中加载布局,初始化控件。(2) onRestart()...
2019-04-01 21:53:04
490
原创 JAVA入门算法题(十四)
一、最小的淘气值题目:/** * 老师要给学生安排座位,经统计教室有N个双人桌,M名学生,每个学生有一个淘气值, * 要合理安排座位,使得班内同桌之和的淘气值最大值尽可能的小,输出最小值。 */这是一道360Android春招笔试题要考虑这样的几种情况:1.座位数>=学生数,那么就每个人做一个桌子,最大的淘气值就是最淘气的那个学生2.座位数刚好坐满,那么...
2019-03-31 16:24:19
602
原创 JAVA入门算法题(十三)
一、出现一次的数题目:/** * 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 * 说明: * 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? * 示例 1: * 输入: [2,2,1] * 输出: 1 * 示例 2: * 输入: [4,1,2,1,2] * 输出: 4 */看完题便...
2019-03-31 15:38:20
297
QQ聊天机器人
2017-09-25
仿QQ气泡拖动删除
2017-09-25
各类监听合集
2017-09-25
导出Excel文件
2017-09-25
数据存储练习
2017-09-25
简易相机练习
2017-09-25
贝塞尔曲线
2017-09-25
安卓属性动画
2017-09-25
2048游戏源码
2017-09-25
天气查询APP,Json解析,3种方式
2017-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人