代码优化

代码优化之不要在循环中查询数据库

匿名 (未验证) 提交于 2019-12-02 23:34:01
不要在循环里面查询数据库因为查询数据库要通过url建立连接,初始化,获取连接池,再把资源放回连接池,关闭等操作,十分的消耗资源。如果在循环里面查询数据库,就会出现频繁的进行上面的那些操作,就会消耗掉大量的资源。会导致延迟,卡死,等待等诸多状况。所以尽量不要在循环里面查数据库。 在数据库的properties里面存储的是一些URL,地址等一些final static(最终的,不会改变的常量)的信息。当项目中需要某些信息,但是这些信息是固定的常量,不会改变。比如一些URL地址,请求头信息等。我们一般的想法是设置成final static放在工具类中,但其实在项目中如果这样做,一是显得代码比较散乱。二是维护起来比较麻烦,每次还要打开程序,进入到工具类中进行修改。一般都放在数据库中。需要时提前查出来这些信息就可以使用,当需要修改的时候,直接修改数据库就可以了,比较便捷,利于维护

iOS无埋点数据SDK实践之路

匿名 (未验证) 提交于 2019-12-02 23:03:14
SDK 已经具备不需要代码埋点就能 自动的、动态可配的、全面且正确 的收集用户在使用 App 时的所有事件数据。除此之外,还单独开发了与之配合的圈选SDK,能够在 App 端完成对界面元素的圈配以及 KVC 配置的上传。而界面元素圈配的工作完全可以交给用研与产品人员来做,减轻了开发人员的工作量。 SDK 已有的功能可以分为两大部分: 基本事件数据的收集:基本事件的收集是指应用冷启动事件、页面事件、用户点击事件、ScrollView滑动事件等,这部分全部都是自动完成的,实现思路会在第一节中介绍。 业务层数据的收集:业务层数据的收集是指对与业务功能相关的一些数据,例如:在用户点击提交订单按钮时,收集用户购买的物品以及订单总金额的数据。这种业务层数据的收集以往大多通过 代码埋点 的方式去做,本SDK则真正的实现了 无埋点 的去获取这些想要的业务数据。这部分的实现会在本文的第二节详细介绍。 SDK的整体实现思路 SDK 整体采用了 AOP(Aspect-Oriented-Programming)即面向切面编程的思想,就是动态的在函数调用的前后插入数据收集的代码。在 Objective-C 中的实现是基于 Runtime 特性的 Method Swizzling 黑魔法。 SDK 的数据收集功能的实现主要通过 Method Swizzling 来 hook 相应的方法

为什么Python为这么慢?

匿名 (未验证) 提交于 2019-12-02 22:11:45
Python http://benchmarksgame.alioth.debian.org https://en.wikipedia.org/wiki/Just-in-time_compilation https://en.wikipedia.org/wiki/Ahead-of-time_compilation 那么其他Python解释器的速度又如何呢? PyPy拥有GIL,通常比CPython快至少三倍。 Jython没有GIL,因为在Jython中Python线程是用Java线程表示的,这得益于JVM内存管理系统。 JavaScript是如何做到这一点的呢? 首先,所有的Javascript引擎使用标记加清除的垃圾收集系统,而之前提到GIL的基本诉求是CPython的存储管理算法。 JavaScript没有GIL,但因为它是单线程的,所以也并不需要GIL。 JavaScript通过事件循环和承诺/回调模式来实现异步编程的并发。Python有与异步事件循环相似的过程。 ” 我经常听到这句话。我觉得这只是对于CPython实际运行方式的一种简单解释。如果你在终端中输入python myscript.py,那么CPython将对这段代码开始一系列的读取,词法分析,解析,编译,解释和运行。 这个过程中的重要步骤是在编译阶段创建一个.pyc 文件,这个字节码序列将被写入Python3下

关于Java代码优化的44条建议!

匿名 (未验证) 提交于 2019-12-02 21:53:52
关于Java代码优化的N条建议! 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。 这个观点,在现在看来,是要进行代码优化的一个原因,但不全对。在机械工艺发展的今天,服务器动辄8核、16核,64位CPU,代码执行效率非常高,StringBuilder替换StringBuffer、ArrayList替换Vector,对于代码运行效率的提升是微乎其微的,即使是项目中的每个点都注意到了,代码运行也看不出什么明显的变化。 我认为,代码优化的最重要的作用应该是:避免未知的错误。在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是一个非常小的原因。然而为了解决这个错误,我们需要先自验证、再打包出待替换的class文件、暂停业务并重启,对于一个成熟的项目而言,最后一条其实影响是非常大的,这意味着这段时间用户无法访问应用。因此,在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降低了工作量。 一、代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 本文的内容有些来自网络

java代码优化笔记

匿名 (未验证) 提交于 2019-12-02 21:53:52
本文由网上资料初步整理,仅供于学习交流,下班后再上传完整的优化笔记,如有侵权请尽快联系小编,如有不足,可发表评论,谢谢 资料下载 Howard 于 2018/6/22 10:24 修改 序号 优化点 细节 1、 try{}catch(){}使用 不要对于所有的异常捕获都使用Exception,最好是捕获对应的异常类型。异常捕获了就需要做相应的处理,而大多数人并未处理,更多的是打印一句e.printStackTrace(); 就了事了,这样做是不好的。 2、 减少使用new关键字创建对象 3、 乘除法是否可以使用移位运算 4、 注意循环的写法 for(int i=0,j=list.size();i < j; i++) Map<String, Object> map; for (int i = 0, j = 1000000; i < j; i++) {map = new HashMap<String, Object>();// 不再每次都做声明了} 5、 实现字符串拼接 string = “abc” + ‘d’; 6、 提升HashMap遍历效率 优: for (Entry<String, String[]> entry : paraMap.entrySet()) { values = entry.getValue(); //System.out.println(values[0]);

《重构:改善既有代码的设计》-学习笔记二(+实战解析)

匿名 (未验证) 提交于 2019-12-02 21:53:52
我不是个伟大的程序员;我只是个有着一些优秀习惯的好程序员而己 本人比较直接,不说虚的,直接上干货。 Ŀ¼   Long Parameter List(过长参数列)   Divergent Change(发散式变化)   Shotgun Surgery(散弹式修改)   Feature Envy(依恋情结)   Data Clumps(数据泥团)   Primitive Obsession(基本型别偏执)   Switch Statements(switch惊悚现身) Long Parameter List(过长参数列) 上一节有提过,当函数的入参过多时,可以用第三招,参数对象化,把参数封装成对象,然后参数对象当成函数的入参,达到减少参数的作用。 除了参数对象化,还可以使用另一种方法来处理。 这种方法叫做:Replace Parameter with Method(以函数取代参数) 优化思路: 前提,这个参数是只被赋值一次的 1、如果有必要,将参数的计算过程提炼到一个独立函数中。 2、将函数内有使用参数的地方替换成独立函数。 3、每次替换后,测试。 4、全部替换完成后,最后把这个参数删除。 eg:未优化的代码 public double getPrice() { int basePrice = _quantity * _itemPrice; int discountLevel; if

优化不易,且写且珍惜

匿名 (未验证) 提交于 2019-12-02 21:53:32
本文要感谢我职级评定过程中的一位评委,他建议把之前所做的各种性能优化的案例和方案加以提炼、总结,以文档的形式沉淀下来,并在内部进行分享。力求达到如下效果: 1. 形成可实践、可借鉴、可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始。 2. 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。 文章在内部分享后,引起强烈分享,得到了不少同事和朋友的认可和好评,觉得对日常的工作有很好的指导作用。考虑到这些经验可能对业界同行也有帮助,所以在博客公开分享给大家。 常见性能优化策略分类 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次等。 数据库 数据库的调优,总的来说分为以下三部分: SQL调优 这是最常用、每一个技术人员都应该掌握基本的SQL调优手段(包括方法、工具、辅助系统等)。这里以MySQL为例,最常见的方式是

前端代码优化

混江龙づ霸主 提交于 2019-12-02 19:16:52
1.不生成map文件 vue项目打包之后的js会自动生成map文件 map文件作用:项目打包后,代码是压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里代码报错;map可以像未加密代码一样,输出是哪一行哪一列有错。 如果不需要,可以找到config/index.js文件,修改productionSourceMap:false 不生成map文件可以减少dist包的大小,加快部署时间。 来源: https://www.cnblogs.com/candy-xia/p/11760028.html

php优化方法

扶醉桌前 提交于 2019-12-02 19:07:23
代码优化是开发程序和网站必不可少的一步,代码优化好了,可以大大增加程序的运行效率。使网站或程序加载反应更快。用户体验也就会更好。下面就为大家总结了50条PHP代码优化技巧。  1、 用单引号代替双引号来包含字符串,这样做会更快一些。因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数 加上了双引号)。   2、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近 4 倍。   3、$row['id'] 的速度是$row[id]的 7 倍。   4、echo 比 print 快,并且使用 echo 的多重参数(译注:指用逗号而不是句点)代替字符串 连接,比如 echo $str1,$str2。   5、在执行 for 循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用 foreach 代替。   6、注销那些不用的变量尤其是大数组,以便释放内存。   7、尽量避免使用__get,__set,__autoload。   8、require_once()代价昂贵。   9、include 文件时尽量使用绝对路径,因为它避免了 PHP 去 include_path 里查找文件的速 度

深度学习入门

谁说我不能喝 提交于 2019-12-02 14:50:43
Deep Learning with Pytorch_002 chapter03_深入研究神经网络的构建块 在上一章中,我们使用Py Torch的低级操作来构建模块,如网络体系结构、损失函数和优化器。在本章中,我们将探讨解决现实世界问题所需的神经网络的一些重要组成部分,以及PyTorch如何通过提供大量的高级函数来抽象出大量的复杂性。 本章将讨论以下主题: 深入研究神经网络的各种构建块 探索PyTorch中的高级功能来构建深度学习体系结构 将深度学习应用在一个真实图像分类问题 任何深入的学习训练都需要获取数据,构建一个总体上是将一堆层聚集在一起的体系结构。 理解PyTorch为构建层、损失函数和优化器提供的更高层次的抽象。 层次——神经网络的基本块 最重要的层之一——线性层 对输入的数据应用线性变换: y = x A T + b y y = xA^T + by y = x A T + b y torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor 返回一个由均值为0、方差为1的正态分布(标准正态分布)中的随机数组成的张量。 o u t i ∼ N ( 0 , 1 ) out i ∼N(0,1) o u t i ∼ N ( 0 ,