自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

世间迷途小书童

学习、搬砖、生活、开心,都是一辈子的事情

  • 博客(108)
  • 资源 (13)
  • 问答 (1)
  • 收藏
  • 关注

原创 “一表四图”读懂Android插件化

一、Android插件化发展历程序号插件方案名发布时间厂商特点开源地址1dynamicApkLoader2012年7月大众点评(屠毅敏)利用Fragment代理实现页面跳转,首次使用了通过反射AssetManager来调用addAsset()方法实现处理插件中的资源https://github.com/mmin18/AndroidDynamicLoader2dynamic-load-apk百度(任玉刚)利用壳Activity来代理实现插件中的Plugin

2020-08-08 15:28:04 210

原创 子线程真的不能弹Toast吗?

一、背景:做Android开发的工程师都知道一条金科玉律(在主线程操作UI的更新与变化)。我们经常在做工程业务的时候,会使用封装的ToastUtils来统一做toast。如下所示:public class ToastUtils{ private static Toast sToast; private static Handler sMainHandler; private ToastUtils(){ throw new UnsupportedOperation

2020-05-14 21:00:23 590 1

原创 SharedPreferences的commit()和apply()区别与剖析

背景:对于Android开发者而言,经常需要在开发中使用SharedPreferences做一些数据的持久化。一般场景是一些标记或者配置数据。而在针对一些场景到底该使用commit()和apply()中的哪一个来持久化数据的时候,只知道commit是以同步的方式在写数据,可能会造成主线成的卡顿,apply()是异步的写数据,不会造成卡顿。那么实际情况是这样吗?接下来,我们分析一下源码。【以下SharedPreferences简称SP】跟踪源代码:一般我们使用SharedPreferences

2020-05-13 15:44:42 514

原创 Dynamic-load-apk插件原理解析

一、背景:插件化的第一代目,任玉刚大神的dynamic-load-apk。目前插件化的方案主要有以Dynamic-load-apk为代表的的静态代理方案,以及以张勇的DroidPlugin为代表的动态代理hook系统AMS和PM的方案第一种方案,使用静态代理插件的方案,来代理插件apk中Activity的生命周期管理。第二种方案,使用动态代理hook系统AMS的方式,来拦截AM...

2020-04-26 16:47:29 745

原创 Android编程巧用注解

keep在编写混淆规则的时候,直接带keep注解的可以在混淆规则脚本中,可以直接如此来keep//比如keep主该cass@keepclass Bean{ ...}#保留注解,如果不添加此行会导致我们的@Keep注解失效-keepattributes *Annotation*-keep @android.support.annotation.Keep class **...

2020-04-22 11:19:57 220

原创 Java多线程读写文件

一、背景知识多线程可以提高任务的执行效率,尤其是CPU计算密集型任务读写文件是IO密集型任务过多的线程执行同一个任务,并不一定能提高效率,因为线程切换,需要耗时。再比如IO密集型任务,IO是瓶颈,并不是线程越多,IO会越快。开多线程去执行任务,需要综合考虑实际情况。二、问题最近项目中遇到,安装APK(其中有拷贝apk文件到具体路劲的逻辑),考虑到优化,缩短这里的apk文件拷贝时间。...

2020-04-17 20:56:56 3102

原创 Android单元测试

Android单元测试单元测试单元测试理解Java的单元测试Android客户端的单元测试单元测试说到测试,主要分为,冒烟测试,集成测试,单元测试。单元测试是保证基础模块、单元工作正常的一种保证手段。在互联网短平快的敏捷开发的开发模式中,常常因为业务繁多,而忽视了单元测试,造成积重难返的局面。编程好比造房子,砖块好比每一个单元,只有保证每一块砖的坚实耐用,才能保证整个房子的坚固可靠。而在业务繁...

2019-12-29 18:23:47 264 1

原创 福利爬虫二

#! /usr/bin/env python#coding=utf-8import sysfrom bs4 import BeautifulSoupimport urllibimport urllib2import osimport rereload(sys)sys.setdefaultencoding('utf-8')#打印信息def display(str): ...

2019-09-19 21:48:13 442 1

原创 Glide源码分析

Glide操作EngineJob中两个线程池:都是FifoPriorityThreadPoolExecutor 负责缓存decode的DiskCacheService负责网络请求的 SourceServicewith() 返回一个 RequestManager (实现了LifeCyleListener,且创建了一个FifoPriorityThreadPoolExecutor) 创...

2019-09-19 11:44:02 91

原创 《Java并发编程艺术》读书笔记

1. 多线程并不一定比串行任务省时原因是多线程存在上下文切换问题,需要时间2. 避免死锁的方法死锁产生的四大要素资源占有且不释放资源不可抢占资源的互斥存在循环引用3. 避免死锁(银行家算法)避免一个线程同时占有多个锁避免一个锁内占用多个资源尝试使用定时超时锁,lock.tryLocal(timeOut)数据库锁,获取锁和释放锁必须在同一个数据库连接中4. 同...

2019-09-19 11:26:27 73

原创 Https原理过程简单分析

客户端发送自己支持的算法族和SSL/TLS协议客户端收到证书和签名后,用本地根证书和证书链规则校验证书,用公钥解开签名,再将内容签名一次,比对两个签名验证通过后,客户端产生一个随机密钥,pre_master_key,用pre_master_key加密一串握手信息+签名后一起与pre_master_key用公钥加密发送给服务端服务端收到信息,用私钥解密拿到pre_master_...

2019-09-19 10:48:32 98

原创 NDK开发sourceSet配置

首先明确两点:Android Studio默认识别的jni目录在app下(此时生成的so在libs目录,所以需要在build.gradle中指明jniLibs.srcDir=['libs']),默认识别的so文件在src/main/jniLibs(这种情况,需要在main下面建立jni目录,但是AS识别不到,所以需要在build.gradle中指定jni目录) externalNativeB...

2019-09-18 22:02:47 1669

原创 git自学总结《Git Pro2》

初次设置git config --global user.name "userName" git config --global user.email "[email protected]"---git config --global core.editor vim查看配置名git config --listgit config user.name //查看用户名配置...

2019-09-18 21:46:50 185

原创 Kotlin笔记(基础语法)

包package不需要和类的位置对对齐,但是按照编码规范,应该对齐定义函数,fun funName(a:Int, b:Int):Int{ return a+b} 或者fun sum(a:Int, b:Int) = a+b定义局部变量和声明val只读,相当于final修饰 var可读写val a:Int = 1 //正确val b = 2 正确val c:Int...

2019-09-18 21:44:39 108

原创 Gradle笔记(android)

看依赖树gradlew :app:dependencies依赖传递:默认依赖传递是true,transitive= true。比如A依赖了B,B依赖了C,C依赖了D。则A会依赖BCD配置全局的依赖不传递configurations.all { transitive = false}配置单个依赖的依赖不传递androidTestCompile('com.android...

2019-09-18 21:40:03 136

原创 关于CountDownLatch的原理与使用

构造器中的计数值(count)实际上就是闭锁需要等待的线程数量。这个值只能被设置一次,而且CountDownLatch没有提供任何机制去重新设置这个计数值。与CountDownLatch的第一次交互是主线程等待其他线程。主线程必须在启动其他线程后立即调用CountDownLatch.await()方法。这样主线程的操作就会在这个方法上阻塞,直到其他线程完成各自的任务。其他N 个线程必须引用闭锁对象,因为他们需要通知CountDownLatch对象,他们已经完成了各自的任务。这种通知机制是通过 Co

2019-09-18 21:33:49 155

原创 python装饰器解析

今天来讨论一下装饰器。装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。1. 装饰器入门1.1. 需求是怎么来的?装饰器的定义很是抽象,我们来看一个小例子。...

2016-04-12 23:58:47 61

原创 网易游戏面试的一些问题思考

1.python中的with关键字,当初我是记得作用的,结果搞成了命名空间。唉,跟from X import了。其实这个with的关键字是用于自动关闭一个file或者url资源句柄。不需要用完之后再用close()2.python装饰器问题,以前就是走马观花地看了一下,现在要仔细讲清楚,真实讲不来。所以以前欠下的,以后总要还的。3.python中的range()和xrange...

2016-04-12 15:52:18 75

原创 读《python编程入门》一些收获

显示模块中所有的函数 先导入模块,在使用 dir(模块名)显示python的所有内建函数 dir(builtins)查看某函数的文档 help(函数名)打印函数的文档 print math.cos.docpython的函数参数传递属于引用传递,相当于是指针python赋值时,不复制。比如 a = 1 b = a 并不是将a的值复制给b,而是将b同...

2015-12-08 08:29:57 95

原创 mysql基本命令

登录命令 mysql -h 域名或ip -uroot -p显示数据库,show databaes;选择数据库, use 数据库名;查看数据库里的所有表 show tables;查看表的数据字典 desc 表名创建数据库 create database 数据库名;创建表create table 表名(id int not nul...

2015-12-02 12:31:19 53

原创 利用python语言下载网易云音乐单曲和歌单

程序源代码如下:#! /usr/bin/env python# -*- coding: utf-8 -*-import md5import base64import urllib2import urllibimport jsonimport randomimport osimport sysimport string#string.replace(u'...

2015-11-27 11:36:38 113

原创 Django学习笔记(一)

安装pip install django==1.6.5卸载pip uninstall django第一个例程新建工程django-admin.pydjango-admin.py startproject test1运行工程必须先进入test1文件夹manage.py runserver了解工程文件夹test1文件夹之下有. u...

2015-11-21 23:43:16 49

原创 计算机网络中的超时重传和快速重传

计算机网络中的超时重传和快速重传,一篇很好的解释文章计算机网络中的超时重传和快速重传Categories: 未分类

2015-11-19 04:58:53 322

原创 mysql 忽略主键冲突、避免重复插入的几种方式

http://my.oschina.net/leejun2005/blog/150510其中博客的简介挺有意思“借用一位朋友的一句话: 记博客的原因不是为了别人, 只是对 Memory 中的数据做个 Persistence,仅此而已~”方案一:使用 ignore 关键字如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:ins...

2015-11-18 18:06:21 73

原创 利用淘宝IP借口,抓取中国的主要IP地址信息并存入数据库(mysql)

源码如下:#! /usr/bin/env python#coding=utf-8import sysimport urllib,urllib2,MySQLdb,simplejson,time,httplibreload(sys)sys.setdefaultencoding("utf-8")#整型转ipdef int_to_ip(s): ip_1 = s >&g...

2015-11-18 06:17:51 115

原创 python获取主机名和IP

import sockethostname = socket.gethostname()ip = socket.gethostbyname(hostname)print "主机名:",hostname,"ip:",ipCategories: Python

2015-11-16 17:18:09 62

原创 《学习正则表达式》笔记

《学习正则表达式》笔记《学习正则表达式》笔记简单的匹配模式匹配数字 d或[0-9]匹配非数字 D或[^0-9]选择匹配 匹配0或1 [01]匹配单词 w 或者 [A-Za-z0-9]匹配非单词 W 或者[^A-Za-z0-9]匹配8进制 o匹配16进制 x匹配unicode值 u匹配换行 n匹配空字符 s 或者 [ tnr]匹配非空字符 S匹配...

2015-11-08 09:42:56 72

原创 爬虫100大球星

#! /usr/bin/env python#coding=utf-8import urllibimport urllib2import reimport osimport sysreload(sys)sys.setdefaultencoding('utf-8')class BDTB: def __init__(self): self....

2015-11-06 01:40:44 69

原创 QQ空间自动点赞机

var pageHeight;var locate = 0;(function() { pageHeight = document.body.scrollHeight;})();var timer;timer = setInterval("scrollDown()", 40);function scrollDown() { locate = loca...

2015-11-05 14:20:28 166

原创 糗事百科爬虫(类封装版)

#!/usr/bin/python# -*- coding:utf-8 -*-import sysimport urllibimport urllib2import reimport cPickle as Pimport osreload(sys)sys.setdefaultencoding('utf-8')class QSBK: def __in...

2015-11-05 04:24:27 88

原创 python中read(),readline(),readlines()的区别

python中read(),readline(),readlines()的区别read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。readline() 和 .readlines() 非常相似。readli...

2015-11-04 21:22:04 76

原创 糗百爬虫修改版

#!/usr/bin/python# -*- coding:utf-8 -*-import sysimport urllibimport urllib2import reimport cPickle as Pimport osreload(sys)sys.setdefaultencoding('utf-8')myFile = file("qiubai.txt...

2015-11-04 12:14:50 70

原创 爬虫学习

抓取糗事百科#!/usr/bin/python# -*- coding:utf-8 -*-import sysimport urllibimport urllib2import reimport cPickle as Preload(sys)sys.setdefaultencoding('utf-8')myFile = file("qiubai.txt","...

2015-11-04 07:42:10 55

原创 爬虫学习(3)

URLError的处理url出现的原因首先解释下URLError可能产生的原因:. 网络无连接,即本机无法上网. 连接不到特定的服务器. 服务器不存在所以这个时候,异常处理语句就很实用了tr…except…finallyimport urllibimport urllib2request = urllib2.Rquest("http://www.baidu...

2015-11-02 20:46:59 173

原创 爬虫学习(4)cookie的使用

cookies的使用Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。在此之前呢,我们必须先介绍一个opener的概念。1.Opener...

2015-11-02 14:42:48 86

原创 爬虫学习(2)

urllib库的高级应用设置header 伪装有些网站没有header里面设置的身份是不会响应请求的,所以为了能响应请求,加入身份认证import urllib import urllib2 url = 'http://www.server.com/login'user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;...

2015-11-01 23:43:00 45

原创 QQ空间点赞Jquery代码

jQuery("a.qz_like_btn_v3[data-clicklog='like']").each(function(index,item){ console.log(item); jQuery(item).trigger('click');});jQuery(window).scroll(function(){ jQuery("a.qz_li...

2015-11-01 12:46:46 75

原创 微软,你赢了

微软,你赢了本想给远程服务器装一个同步盘,同步备份的数据库,可是装完之后。远程服务器,死机了。桌面卡死。。。explorer完全跪了。微软的explorer资源管理器和ctrl+alt+delete是最垃圾的设计了吧。。。按照网上的方法,连接时启动任务管理器C:Windowssystem32taskmgr.exe然而,还是没用,照样卡死。。。真实无解了看来...

2015-11-01 06:07:18 143

原创 php中发送邮件

php中发送邮件刚开始是为了给wordpress博客备份,装了个WP_DB_backup备份插件,原本是可以设置自动备份数据库,然后每天按时发送到邮箱的。结果,邮件发送不成功。所以只能折腾了。坑爹的windows server 2008根本没有SMTP服务,这还怎么折腾啊。微软真的一个“大爷”,凭这自己强大的商业地位,各种瞎弄。IIS非主流,sliverlight也是非...

2015-11-01 05:17:17 156

原创 爬虫学习(1)

爬虫,顾名思义,就是在互联网上爬行的程序,能抓取内容,利用正则表达式匹配后,则能找到想要的内容。urllib和urllib2库 抓取百度首页的源码import urllib2response = urllib2.urlopen("http://www.baidu.com")print response.read() #response是一个对象,具有read()方法推荐是先构造...

2015-11-01 01:54:41 49

Android编程权威指南(第二版)

Android编程,编程指南,经典教材

2017-08-14

AVR单片机的led闪烁程序

avr单片机入门不可少的led闪烁程序.不是一般的经典啊,亲,下吧

2011-10-24

算法代码(经典)

一个很经典的Java算法,入门必备。不是吹的哦,尽快下载把,孩子们

2011-10-17

C游戏编程从入门到精通

C游戏编程从入门到精通

2011-10-12

单片机 单片机 单片机

单片机 单片机 单片机 单片机 单片机 单片机 单片机 单片机 单片机 单片机 单片机 单片机

2011-04-08

c语言程序设计《C》

著名专家学者得著作,很好很好很好很好很好很好好好好

2011-03-23

C语言教程(vc内幕)

走过路过,别错过了,国内外著名专家学者的作品,保你满意

2011-03-23

Avr单片机开发入门

很好的单片机教程,详细解释,并有课后习题,详细的开发实例

2011-03-22

Windows程序设计第五版

Windows程序设计第五版.pdf很好,很优秀的一本教程,看了绝对有意义

2010-12-05

汇编多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加

多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加

2010-11-07

ediplus软件,很好的

很好的软多个关键字请用空格分隔,最多填写5个。点击右侧Tag快速添加

2010-10-24

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

TA关注的人

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