最近提交了一个应用,本来只是一次的版本升级,仅仅做了一些优化,对实质性的内容的没有多少修改,但是仍然被打回。也许上次通过比较幸运,也许那天审核人员的心情比较好。没有办法只有认灾。又做了几处简单修改,继续发布。
然后出现了这样的错误
ERROR ITMS-9000: "Redundant Binary Upload. There already exists a binary upload with build version
继续阅读 »
当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的。为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等。我们需要对代码进行混淆,android的sdk中为我们提供了ProGrard这个工具,可以对代码进行混淆(一般是用无意义的名字来重命名),以及去除没有使用到的代码,对程序进行优化和压缩,这样可以增加你想的难度。最近我做的项目,是我去配置的混淆配置,因此研究了一下,这里分享一下。
如何启用ProGuard
ant项目和eclipse项目启用方法
在项目的project.properties文件中添加一下代码
proguard.config=prog
继续阅读 »
TBOX的线程池通过在每个worker中批量一次拉取多个task,对锁的竞争进行了优化。
由于每个task的函数实现不会太多,所以可以根据每个task的函数地址做hash,统计出每个task执行所花费的平均时间。然后根据这个平均值来动态计算每个worker一次拉取的task的数量,TBOX里面默认每个worker一次拉取10s的task量,这样可以尽可能的避免worker间锁的频繁抢占。
所有从等待队列被拉取出来的task,都会被放到pending队列中去,如果等待队列中的task都被取完了,某个worker处于了空闲状态,就会尝试去pending中,重新拉取其他worker还没有执行到的task, 这样可以解决某些task耗时
继续阅读 »
volatile概述
volatile关键字是一个类型修饰符,被设计用来修饰被不同线程访问和修改的变量,在JVM1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。
在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。
要解决这个问题,需要把变量声明为volatile(不稳定的),以后用到该变量都会到主存中进行存取,一般多任务环境下各任务间共享
继续阅读 »
布朗法则 :Later Equals Never
多少次我们为了进度写下一堆又一堆的烂代码,当每一次运行通过后是不是想着“先这样吧,后面再优化”,但是 later equals never 。或许这就是优秀和平庸的区别,细节决定成败。
继续阅读 »
文/Robin
本站推广
币安是全球领先的数字货币交易平台,提供比特币、以太坊、BNB 以及 USDT 交易。
币安注册: https://accounts.binancezh.pro/cn/register/?ref=11190872
邀请码: 11190872
2013年9月22日Oracle官方发布MySQL5.7.2,功能增加了很多,也有很多优化,该版本提供了更快的连接速度,更高的事务吞吐量,提升了复制速度,带来了内存仪表和其他增强功能,从而实现更高的性能和增强的可管理性。
但另外一条新闻是“MySQL再度失势:继维基百科之后,Google也迁移到了MariaDB”,不知此时Oracle怎么想。早在今年4月份就有报
继续阅读 »
tbox之前提供的stackfull协程库,虽然切换效率已经非常高了,但是由于每个协程都需要维护一个独立的堆栈,
内存空间利用率不是很高,在并发量非常大的时候,内存使用量会相当大。
之前考虑过采用stacksegment方式进行内存优化,实现动态增涨,但是这样对性能还是有一定的影响,暂时不去考虑了。
最近参考了下boost和protothreads的stackless协程实现,这种方式虽然易用性和灵活性上受到了很多限制,但是对切换效率和内存利用率的提升效果还是非常明显的。。
因此,我在tbox里面也加上了对stackless协程的支持,在切换原语上参考了protothreads的实现,接口封装上参考了boost的设计,使得更加
继续阅读 »
一个新服上线, 玩家人数因推广, 较以前的服在线人数大增, 而且由于物理机器上已经存在以前的几个服, 这次新服上了之后在线人数到一定量就会产生掉线的情况, 很奇怪, 怀疑过sysctl.conf 的range_port设的不够用, 或time_waite过大, 但实际这2个值都应该在正常范围内, 但是还是优化了一下回收time_waite的速度, 以及加大range_port, 最后还是不奏效.
继续阅读 »
一群恶魔的猪从无辜的小鸟那里偷走了所有的前端架构,现在它们要夺回来。一对特工英雄(愤怒的小鸟)将攻击那些卑鄙的猪,直到夺回属于他们的前端架构。(译者注:本系列是关乎前端架构的讨论,作者借用当前最风靡的游戏 - 愤怒的小鸟,为我们揭开了前端架构的真实面目。)
小鸟们最终能取得胜利吗?它们会战胜那些满身培根味的敌人吗?让我们一起来揭示 JavaScript 之愤怒的小鸟系列的另一个扣人心弦的章节!
阅读本系列的介绍文章,查看所有小鸟以及它们的进攻力量。
战况
红色大鸟 - 立即调用的函数表达式
蓝色小鸟 - 事件
黄色小鸟 - 模块化、依赖管理、性能优化
黑色小鸟 - 前端分层架构
白色小鸟 - 代码质量和代码分析
绿色小鸟 -
继续阅读 »
TBOX提供了各种常用算法,对容器中的元素进行各种操作,这里主要介绍下排序和查找算法。
排序算法目前支持如下几种:
快速排序:tb_quick_sort
堆排序: tb_heap_sort
插入排序:tb_insert_sort
冒泡排序:tb_bubble_sort
并且提供通用的tb_sort接口,对各种排序算法进行自动适配,使得任何情况下,性能都是最优的。
例如:
对具有随机迭代特性的容器,采用快速排序来优化
对具有随机迭代特性,并且是超大规模的容器,采用堆排序
对只能线性迭代的容器采用冒泡排序
继续阅读 »