暂无个人介绍
2020年03月
2020年02月
源码框架不需要背诵吧,但要改框架也要能做到。 3是基本需求,4,5因为不单是要考虑到实现需求,还要为效能,并发,定制化等需要服务,上线后什么幺蛾子都会有,用了很多年的轮子也漏气
其实根本没有这么多苹果吃,偶尔一两个,偶尔来一车,一月个加班十几天,产品一上线就通宵,给人感觉就是加班不停
Effective C++
代码加密:针对dotNet程序,保护IL代码:一种动态运行方法解密被保护代码。把当前代码加密存储为密文,存储起来,当程序运行到被保护函数时候自动解密并且执行,执行之后再擦除代码,执行之后再擦除代码,运行到哪里才解密哪里的代码,黑客无法获得原始的中间语言的指令和内存完整性的代码,由于是纯内存操作所以运行速度快, 性价高的保护手段,建议全加
代码混淆:将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
· 重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。
· 打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。
· 添加花指令,通过特殊构造的指令来使得反汇编器出错,进而干扰反编译工作的进行。
代码混淆器也会带来一些问题。
主要的问题包括:
· 被混淆的代码难于理解,因此调试除错也变得困难起来。开发人员通常需要保留原始的未混淆的代码用于调试。
· 对于支持反射的语言,代码混淆有可能与反射发生冲突。
· 代码混淆并不能真正阻止反向工程,只能增大其难度。因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。
加壳:采用第三方加壳方案
建立数据库连接时出错一般出现在首次部署时,如你所说,很有可能是mysql重启了。要分析下整点时进行的业务,比如存档,汇总落库等操作,看这些操作是否有异常行为或者程序Bug。 另外建议增加数据库重启的日志,排除程序影响后再考虑升级性能。
可以使用递归求和 int GetSum(int *a,int n) { return n == 0 ? 0 : GetSum(a,n - 1) + a[n-1]; }
登陆页面可以是用md5加密,但上面的信息是广告信息,对异常订单监控很严格的,尤其是这种打了广告的。
依据《非经营性互联网信息服务备案管理办法》规定: 第五条 :在中华人民共和国境内提供非经营性互联网信息服务,应当依法履行备案手续。未经备案,不得在中华人民共和国境内从事非经营性互联网信息服务。本办法所称在中华人民共和国境内提供非经营性互联网信息服务,是指在中华人民共和国境内的组织或个人利用通过互联网域名访问的网站或者利用仅能通过互联网IP 地址访问的网站,提供非经营性互联网信息服务。
第十九条 :互联网接入服务提供者应当记录其接入的非经营性互联网信息服务提供者的备案信息。
所以,在国内提供服务的网站也需要备案
建议先使用基础配置测试瓶颈,在数据监控中观察CPU、内存负载、流量负载,再根据需要升级配置。
在gradle.properties中添加以下内容:
android.useAndroidX=true android.enableJetifier=true
AndroidX 是对 android.support.xxx 包的整理后产物。由于之前的 support 包过于混乱,所以,Google 推出了AndroidX android.enableJetifier=true 表示将依赖包也迁移到androidx 。如果取值为false,表示不迁移依赖包到androidx,但在使用依赖包中的内容时可能会出现问题,如果项目中没有使用任何三方依赖,可以设置为false。
如果你固定了Y轴旋转,那么2D角色也将不会“面对敌人”,可以通过改变图片的“UV”翻转。这里只讨论如何固定Y轴。添加如下mono脚本,在你的角色上。
public Transform targetPoint; //目标骨骼 float z; // Use this for initialization void Start () { y = targetPoint.position.y; }
// Update is called once per frame void LateUpdate () { transform.position = new Vector3(targetPoint.position.x,y, targetPoint.position.z); }
小细节,放在lateUpdate中更新,保证你的逻辑做完后再把Y轴置为原始数值。