代码段
为啥强制昵称
这个作者很懒,什么都没留下…
展开
-
一种用 Proxy 解决继承依赖的方法
一种用 Proxy 解决继承依赖的方法问题思路解决遗留问题问题在项目拆分的过程中,一定会遇到依赖问题。有一些代码非常细节,不适合作为对外接口暴露给上层,而上层很可能需要继承自这些类。例如,App 级别的 WebViewClient 的封装。作为业务 common 层的代码,包含了极多的业务逻辑,并不应该放到 api 包中。但是,一定存在某些特殊页面需要创建一个有特殊逻辑的 WebViewCl...原创 2018-10-10 18:59:28 · 456 阅读 · 0 评论 -
对链表排序
要开始找工作,又挨了顿骂,这事不爽,刷一个LeetCode开心一下。对链表排序:https://oj.leetcode.com/problems/sort-list/看到链表排序,第一反应无外乎就是希尔排序、基数排序和桶排序。想了想最好写的是基数排序,源码如下:public class Main { public static void main(String[] ar原创 2014-09-02 21:24:40 · 3474 阅读 · 0 评论 -
Java的inet_aton inet_ntoa
public static String inet_ntoa(long add) { return ((add & 0xff000000) >> 24) + "." + ((add & 0xff0000) >> 16) + "." + ((add & 0xff00) >> 8) + "." + ((add & 0xff)); } public static long inet_a原创 2013-07-10 20:43:42 · 3981 阅读 · 0 评论 -
JS实现全半角转换和去空格
最近在写开题报告,发现PDF中的文字复制出来会各种凌乱:标点全半角不定、各种空格莫名其妙的多。太影响复制粘贴了。用js写了个解决问题的办法,基本就是用正则表达式替换。为了能方便的加入新标点转换,做了一下结构上的优化。 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1原创 2013-12-07 15:03:18 · 3647 阅读 · 0 评论 -
Java 仿C# delegate
C# delegate很好用,想在Java用一下,实显很简单,用runnable封装函数,用Hashmap存一下所有需要执行的runnable,然后就顺次执行好了。package gt.small;import java.util.HashMap;import java.util.Iterator;public class Delegate { private HashMap f原创 2013-05-08 10:46:18 · 1081 阅读 · 0 评论 -
pthread 快排 基础版
快排是一个很适合做并行的算法,因为一次划分相当于一次反归并,把数据划分为两个不相关的部分,可以并行处理。但是快排,包括归并排序都有一个缺点:并行度是变化的,而且最终会是1,即有一次迭代需要纯串行。经过一番思考,我拿出了一个改进版方案,由于对pthread不熟悉,还有懒,代码写的很烂。改进版见:pthread 快排 失败的优化版本文是基础的快排并行化,用算法导论的快排伪码改成。可以通过一个给原创 2013-04-15 20:24:56 · 1338 阅读 · 0 评论 -
pthread 快排 失败的优化版
为了改善快排并行度的问题,我设计了如下改进算法:用第一个元素做pivot,其余元素平均分配给可用线程,并行进行局部的快排(都与pivot做比较)。在作完比较之后,使用额外空间将所有数据归并到一起(使用memcpy)。进行下一次迭代。然后就出现了一系列的问题,其一就是for循环中声明的变量,在一次迭代结束后会被释放变量所占用内存(貌似是个栈),如果传递指向这块内存的指针,会出错。而且for循原创 2013-04-15 20:41:58 · 973 阅读 · 1 评论 -
WPF ContextMenu中向window中动态添加控件
微软很贱!!!好好的一个树干嘛不把contextmenu放进去!!!xaml的那个RelativeResource到底是什么意思???contextmenu不在logic tree中,所以没有办法通过relativeResource传递window的引用。网上说可以用relativeResource做,我没搞出来。用contextData可以,但是我绑定数据了啊。。。没办法,狗急跳墙。传送原创 2013-03-27 22:33:51 · 1288 阅读 · 0 评论 -
exif id name映射表
#include#includeusing namespace std;unsigned int hexToUInt(char id[],int size){ unsigned int result=0; int ratio=1; for(int i=size-1;i>1;--i) { int digit=0; if(id[原创 2013-04-07 22:04:57 · 937 阅读 · 0 评论 -
方阵操作方法集
方阵的生成 读写文件 转置和显示#include #include #include #include #include using namespace std;templateint inline size(T type,char *file) { ifstream in(file); in.seekg(0,ios::end); int size=in.tellg()原创 2013-04-01 15:49:55 · 815 阅读 · 0 评论 -
Java实现GBK编码文件繁简体转换
最近喜欢上高品质音乐了,但是cue很多抓下来是繁体中文,看上去略不爽。大陆的windows都是用的GBK编码,准备拿来转码一下。分三步。第一步,下载GBK中文字库。放到wps里,然后进行繁简体转换,得到繁简对应。放到txt文件中,使用ANSI编码。第二步,对字库进行预处理。包括两部分:去重,排序。去重指把繁简体相同的字符去掉。代码:import java.io.Buff原创 2013-01-18 20:53:26 · 2761 阅读 · 0 评论 -
单生产者 单消费者情景下 无锁仓库
使用链表实现 链表中时刻保有两个元素。在任何并发的操作情况下,只要保证赋值是原子操作,即可保证无锁的并发安全。可能导致消费延迟到下一次申请,但是不会出现未消费产品。package gt.lockFreeList;public class Node { private T data; private Node next = null; public Node() { } public原创 2012-11-10 14:33:20 · 588 阅读 · 0 评论 -
解释器模式的一个应用
需求做产品的时候,有一个需求:对于一个字符串要在提交之前做校验,但是校验标准需要可配置。最合理的方案就是使用正则表达式+表达式组合。基础数据结构配置的数据结构如下package com.example.ayizty.myapplication.reg;import java.util.HashMap;public class Configure { public HashMap<String原创 2015-11-04 20:47:39 · 2251 阅读 · 0 评论 -
对号动画实现
作为菜逼,第一次尝试做动画。动画的需求是模仿支付宝付款验密成功的对号动画。 主View的代码: `package gt.research.test.androidtest;import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; impor原创 2015-08-31 12:14:36 · 3823 阅读 · 0 评论 -
一个文件级循环队列的Journal实现
准备做一个比较靠谱的下载组件,这是第一步,Journal。 最开始想的比较多,希望新增和更新单个消息都尽量少的进行磁盘操作(后来想想,特别是看了Android官方的下载之后,觉得完全没必要,数据库足矣),不希望用数据库(理论上,没有index,会读全部数据)。 想来想去,做了一个循环队列的方法,尽量减少文件操作,当然肯定还是不如数据库+index来的快。是个思路,也是个教训。思路基本与最最简单的原创 2016-05-18 16:51:15 · 704 阅读 · 0 评论 -
怎样发布同一个库到多个repo中
问题在开发过程中,有时需要同时发布一份aar/jar到远程和本地的repo,这样可以保证在没有网的情况下编译成功。解决不可能在uploadArchive任务中设置多个repo,因为源码里明显写的只有单个repository对象。所以需要手写一个Upload task的子类。 里面有的坑是configuration需要手动设置成project的archives,否则打包不过。 推荐在...原创 2018-05-23 18:24:08 · 533 阅读 · 0 评论 -
[脑洞]使用annotation生成反射常量池
问题反射是每个Java开发都躲不开的工具,很多时候可以用反射把代码写的非常整洁,但会付出两个代价:性能问题反射用字面量和对应的类需要维护,容易出现bug前者是不可避免的,而后者可以通过apt来维护。以前都是用apt/javassist减少反射,后面做首个dex减肥发现,有的反射是必须的。突然发现,apt不仅能干掉反射,也能让反射更好维护。 因为所有需要被反射调用的类都不能被...原创 2018-05-07 16:13:14 · 434 阅读 · 0 评论 -
用Annotation简化Preference存储
现状有很多Preference来自于某些对象的字段,这些字段的存储其实非常繁琐,每增加一个字段,需要修改3个地方:key对象字段对象内容的存储目标是搞成单点修改,但是:受限于java的Annotation限制很多,对于泛型、继承支持不太好,很难跟Preference的能力对应上不太想做AnnotationProcessor最后定成两点修改:定义enum作为key定义annotati原创 2017-09-29 14:30:48 · 322 阅读 · 0 评论 -
一次失败的SP优化
去到了一个新公司,发现一个神奇的操作:所有数据都是存在同一个sp中的。从源码上看,sp会在new的时候启动异步线程读取整个文件,并parse成map,这会阻塞第一个读写操作;而每次commit/apply的时候,都会写入全量文件。看起来这里有一个性能问题。本着无聊+装逼的心情,做了一个基于一致性哈希的SP。public class ConsistentHashPreferences implemen原创 2017-07-25 15:39:47 · 508 阅读 · 0 评论 -
[造轮子]一个脑洞大开的DataBinding Demo
之前看了一下RoboBinding的源码,还YY了一下不用Annotation的做法。自己蛋疼的做了一个极简的demo,顿觉纸上得来终觉浅,绝知此事要躬行。总起抽象来说,DataBinding和ButterKnife、ORMLite都是通过生成代码来减少垃圾代码量,让整体代码更加整洁。Java实现这个主要在两个阶段实现: - 运行时:Annotation+调用反射的代码(印象中ButterKnif原创 2017-03-29 10:21:06 · 402 阅读 · 0 评论 -
Android超时控制方法及场景
刚刚和同事进行了一个非常有益的脑力训练——怎样控制超时。之前经常用,但并没有仔细想过,这次梳理了一下。 想到了三个流派:Future/Callable/FutureTaskFuture和Callable自带等待属性,(FutureTask中)带时间的get使用的是LockSupport做的等待(park、unpark)。这个方法的问题在于,需要用到Executor接口才能从Callable中拿到一原创 2017-03-20 12:02:46 · 2199 阅读 · 0 评论 -
这些年我踩过的坑——Android
PD如果经常要求改入口,使用Adapter + ViewHolder来实现解耦: 这两个配合模拟FragmentManager + Fragment的逻辑Adapter只负责管理View、对ViewHolder中的生命周期函数进行回调ViewHolder不仅保存View的引用,还完整包含与该View有关的所有逻辑,对外暴露相同的生命周期回调函数,例如onViewCreated、onBind...原创 2016-01-29 18:29:50 · 5135 阅读 · 0 评论 -
使用Command模式解决单节点cache中lost update
Lost Update是在并发情况下经常出现的情况。 对于Android客户端中的ORM,据我了解ORM很难做指定修改列,一般都是整行更新。而ORM一般都会做内存的缓存。这两个情况会导致,客户端的ORM中会有另一种lost update:AB两个线程同时更新同一个列,而对象不是同一个(某个时刻,B对ORM对象进行了copy),此时,A的修改(对任意列)都会被B覆盖掉。简单的办法有两个: - 要求原创 2016-09-21 18:06:45 · 490 阅读 · 0 评论 -
Android雷达图变种的一个实现
遇到需求,要做一个雷达图类似的图。大概就是一个正n边型,每个顶点有一个View,多边形外接圆圆心有一个View。原创 2016-06-21 19:51:47 · 675 阅读 · 0 评论 -
一种中心服务中同步状态的方法
问题在客户端中心化服务(单例)中,可能会多次进行同一个耗时服务,比如说和服务端同步状态。在进行同步时,如果有请求进来,理论上是不需要真正执行的,仅需要等待正在进行的请求。解决其实是一个时序的问题,如果请求发起比获得结果要早,就可以直接使用结果。 那么,中心服务中使用ThreadLocal存储一下发起请求的时机,进入一个锁住的同步过程,同步过程后更新结果和结果时间即可。 ThreadLocal的释原创 2016-06-14 17:08:56 · 526 阅读 · 0 评论 -
使用LocalBroadcast实现跨Activity的MVVM
问题工作中遇到了一个问题: 封装了一个Activity组,这组Activity执行了相类似的业务A,但是少部分文案、图片是有差别的,而且要求在这组Activity执行的过程中,后台运行的其他业务可以随时(或在业务A回调时)修改这些显示内容。 不优雅的方案有: - 回调中传递Activity的引用。这样限制了修改时机 - 在某单例中注册当前Activity,同时在Activity上暴露相应的修原创 2016-05-06 20:53:04 · 1563 阅读 · 0 评论 -
约瑟夫问题非递归
算法作业 约瑟夫非递归算法设n=+l 其中0,则结果为J(n)=2*l+1。[wikipedia]N=1时显然成立。设n=k时成立,仅证明k%4==1的情况,其他类似:设k=4a+1J(k)=2J(2a)+1=4J(a)-1J(k+1)=2J(2a+1)-1=4J(a)+1即J(k+1)-J(k)=2。所以J(k+1)=2*+1 得证。java实现原创 2012-11-09 17:14:59 · 639 阅读 · 0 评论 -
空间复杂度O(1)的merge
很简单的题目,百度实习面试题#include "stdio.h"#include "stdlib.h"int main(int argc,char **argv) { int a[]={0,3,4,5,9,1,2,6,7,8}; int size=10,mid=5; int l=0,h; for(;l<mid;++l) { h=0; if(a[l]<=a原创 2012-10-10 19:42:29 · 1201 阅读 · 0 评论 -
串行fft 源于并行计算——结构。算法。编程中伪码
第三版 295页伪码,跟一般的计算方法的顺序有些不同,这个是先计算后改变位置。简单易懂,明了。陈国良果然大家。#include #include #include typedef struct { double real; double img;} com;double PI;void cp(com f,com *t);void add(com a,com b,com*原创 2012-09-13 16:14:59 · 1515 阅读 · 0 评论 -
变位词
题目:找到词典中某词的变位词 源自编程珠玑 程序是自己的想法和思路 与书一样纯属巧合程序:不能运行 只有关键函数 和类#include#includeusing namespace std;const char UNSET=0;const char SET=1;const string NEW="000000000000000000000000000";原创 2009-12-13 20:35:00 · 520 阅读 · 0 评论 -
最长平台
题目:一个从小到大排列的数组,这个数组中的一个平台就是连续的一段值相同的元素。例如:122333445中22,333等都是平台,333为最长平台程序:#include#includeusing namespace std;int main(){ int max_len=0; int pla_num=1; int las_num; int cur_num;原创 2009-12-11 20:00:00 · 668 阅读 · 0 评论 -
猜数字游戏
程序:#include#include#includeusing namespace std;class ser_num{ private: vector dat; public: ser_num(); ~ser_num(){} int operator==(const ser_num&)const; friend ostream& oper原创 2009-12-09 22:15:00 · 422 阅读 · 0 评论 -
四行函数反转字符串
题目:四行函数反转字符串程序:#include#inclludeusing namespace std;int main(){string str;char tem;int str_len=str.size();cin>>str;for(int i=0;i{tem=str[str_len-i];//2str[str_len-i]=str[i]原创 2009-12-03 22:26:00 · 330 阅读 · 0 评论 -
微软面试简单算法之 反序链表
题目:反序链表程序:#include#include#includeusing namespace std;int main(){ cout int tem; stack sta; list lis; if(cin>>tem) while(cin>>tem) { sta.push(tem); cout } else cout int top; while(!sta.empty())原创 2009-12-01 20:02:00 · 346 阅读 · 0 评论 -
求数
给你这么个数列 112123123412345123456123456712345678123456789123456789101234567891011... 看出规律了吗 这个数列是由下列数列串合而成: 1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 12345678910...原创 2009-11-29 23:15:00 · 352 阅读 · 0 评论 -
最大连续数
题目要求: 给定一个随机数组,数组有随机的正负整数,有没有什么办法把连续的m个数的最大值求出来。程序:#include#includeusing namespace std;struct ser_num{ int sta_pos; int end_pos; int val;};int main(){ vector num_lis; ser_num tem; ser_num res; t原创 2009-11-27 17:40:00 · 514 阅读 · 0 评论 -
连续整数
题目要求:输入一个数组 判断数组中的元素是不是连续的整数程序:#include#includeusing namespace std;class continuum{ private: vector ori_num; int tot; int len; int mid; int sta; vector cal_rul; public: continuum(); ~continuum(原创 2009-11-27 17:16:00 · 395 阅读 · 0 评论 -
伊甸园
题目:GDOI2006一试第一题求顺序表示的完全二叉树的第n个节点 在先序遍历的第几位 程序:#include#includeusing namespace std; int whole(int,int);int layer(int);int last_div(int);int eden(int,int); int main(){原创 2010-01-22 19:54:00 · 576 阅读 · 0 评论 -
哈希+直插排序
先说说想法-自己的想法:1插入排序在基本有序的情况下很有效2插入在链表中O(1)3直接定址法哈希让数据基本有序很有效 特别是在线性探测和链接法的情况下所以 先用哈希让数据基本有序 再用直插应该很高效...请高人算一下大概的时间空间复杂度原创 2010-01-16 15:30:00 · 559 阅读 · 0 评论 -
最大公约数
题目 求最大公约数程序#includevoid mk_grt(int&,int&); int gcd(int&,int&);int main(){ int num1,num2; char pause; std::cout std::cin>>num1>>num2; mk_grt(num1,num2); if(!num2){原创 2010-03-10 21:02:00 · 302 阅读 · 0 评论