刚拿到这个产品的代码时,我也是一头雾水,动就上千行的逻辑代码,看的让人很费劲,完全没有任何套路可言,一撸到底的代码,拿到后,我就先把代码拆开,一块一块的看 ?...最初只有createorder.js,拆开后变成了4个,createordervalidate.js,createorderutils.js,createorderinit.js,拆过之后,代码分工就比较清晰了...重构过之后,编辑,新增订单可以公用一套代码,直接调用对应的方法就行了,即使增加一个查看框,也用不了太久就能搞定,之前的方式就是代码copy,没有抽出业务公共的逻辑。...jquery系列的老的产品代码,最好的重构方法就是插件化,现代三大框架,vue,react,angular,就是组件化,加上,数据状态管理器搞定。
按位或, 同0位0 ^ 异或,两个位相同为0,相异为1 ~ 取反,0转1,1转0 >> 右移,Java中右移,符号位不变,左边补上符号位 << 左移,各二进位全部左移若干位,高位丢弃,低位补0 常用业务场景有...常用业务有:格式化日期,判断周几,获取上一个周几,获取两日期之间时间间隔,获取两日期之间工作日 //====处理日期 private void handlerDate() {...ldt = ldt.plusDays(1); } System.out.println(list); } 集合处理 集合List使用十分常见,对于集合处理常见业务场景有...poi-ooxml 3.11-beta2 代码过长
模块内聚 把具有强关联性的业务逻辑放在一个模块叫功能性内聚,功能性内聚被认为是最佳实践。...下面是主流的分层方案,供大家参考: 展示层:向用户展示软件的功能和信息 应用层:应用的逻辑的协调,不包含业务逻辑和业务对象的状态,包含会话的上下文 领域层:核心业务逻辑,业务对象状态保持,包含完整的领域信息...领域层接口先从一个较大的服务边界开始,然后随着时间推移基于业务需求来重构成更小的接口。我们应该关注微服务的范围,而不是一味的把服务做小。...一个服务的(正确的)大小应该等于满足某个特定业务能力所需要的大小。他们应该是内聚而完整的。...但是也不能不抽象,否则接口数会暴增,随着业务的稳定,有必要抽象合并。
这时候首先想到的是save的事务没有提交,但查看代码,事务是在获取锁3后才开启的,因此save释放锁3前,事务必定也是提交了的,而saveScore也是在获取锁3后才开启的事务。...将saveScore第二层逻辑也改为异步,那每次调用时都会新启一个事务,同时还能提高接口的并发度,但是这要取决于业务,改动影响较大。...从阿里云的sql洞察上也能验证这个猜想,按照代码逻辑,saveScore应该有两次查询才对,但实际上只有一条,说明有一次查询(结合skywalking分析得到是第二次没有查数据库)没有到达数据库。...这里要解决的话也可以把内层事务传播级别声明为REQUIRED_NEW即可,对业务也没有影响。...三、总结 这次的问题好在对业务没有什么影响,但代码确实写的有问题,考验了对锁、事务以及框架的总和运用和理解。
业务代码的要求和常规意义上的编程有很多不一样的地方。我们在学习编程的时候往往被教导: 代码要有良好的设计。...要抽象和封装,要尽量减少重复代码; 代码要有良好的建模,概念清楚,不同实体的关系清晰; 代码要高效,有O(1)的别用O(log n),有O(log n)的不用O(n); …… 但是到了业务上。...ACID事务、隔离性、锁和相关的数据操作 …… 有人觉得写业务代码非常low,因为就是一堆if,太没有技术含量了。但我觉得业务逻辑有时比所谓什么高并发,每秒多少多少数据处理要难得多。...写业务流程不一定用java。java只是工具,帮你把上面的这些关键的东西串起来。如果可能,js,PHP,ruby,py都是可以的。项目组用什么就跟着用什么就好。 ?...我给自己的准则是,业务逻辑是怎样的,业务代码就应该差不多是怎样的。以贴合业务需求为主,以满足软件工程需要为辅。
现如今的代码,根据不同的第三方支付一大堆else if判断。...现如今代码如下: public PayResponse pay(PayRequestType payRequestType) { PayTypeEnum payType = PayTypeEnum.para...getBeansOfType(Class clazz) { return applicationContext.getBeansOfType(clazz); } 优化后代码
我们小程序登录接口涉及到的业务操作除了基本的登录验证功能外还加了个用户小程序openid的获取和保存操作。...1) async_test_timer() tm2 = time.time() tm21 = tm2 - tm1 print('tm21=====', tm21) 上面代码的执行结果为...: tm21===== 1.0052900314331055 start======= ok t21==== 3.0050549507141113 上面的代码是先打印了 tm21 ,然后再执行了 async_test_timer
前言 知乎上有一个提问:如何写好业务代码? ↓↓↓ 今天,我们就这个话题一起来做个讨论。...那话说回来,提问的问题是如何写好业务代码,那和我上文说的写完业务代码有什么区别呢? 由于提问的小伙伴并没阐述清楚对这个“好”字的语意,在这里,我先根据自己的理解,给它下个定义。...特别是当你面对复杂性极高的业务需求的时候,太多的if- else条件判断,太多的状态代码,如果你采用事务脚本模式来写代码,很容易一个类、一个方法几百上千行代码,所有逻辑黏在一起,代码美感不说,其复用性变得极其低下...事务脚本模式:传统的MVC组织架构,业务类方法没有任何状态,所有逻辑都封装在方法内部,进行各种计算、组装 就这样开发持续在里面堆代码,时间长了,连自己都不敢动原来的代码。...很多人为了保证自己的改动不会影响其他功能,他会选择重载一份原来的代码,然后在新方法里面新增业务代码,就这样长此以往,屎山代码终成。 OK,那有什么方法能写出所谓的好的代码呢?
说明 这里举一个非常简单的例子,以案例的业务实现来分析如何写好业务代码。 本案例只是简单的模拟,可能与真实的情况有出入,这里只是为了举例使用。...,或Mybatis版本升级造成用法改变等),业务代码就得改变。...XxDO 是和数据表绑定的,数据表结构变更等也会影响业务代码。...调用第三方API,直接在业务代码中调用HttpUtils完成,未来第三方API修改了方法签名或返回值,或改为了RPC接口,那么业务代码也会随着改变。...发送消息直接使用KafkaTemplate,如果技术选型变了要改为使用RocketMQ,那么业务代码还得变。
1.前言 前阵子休息天日常在寻找项目里不好的代码,看到了这样的一段代码: private Result sshSameExec(Session session, String cmd) {...这段代码有点丑,于是我闻到了学习的味道....首先是对两个Stream的消费,很显然,在多核环境下,我们同时也只能够消费其中一个Stream.其次,这代码太挫了,自己定义一个tmp,然后1024、1024这样的去取出来....着手优化 之前,我们提到了这段代码写得搓的地方: 首先是对两个Stream的消费,很显然,在多核环境下,我们同时也只能够消费其中一个Stream....其次,这代码太挫了,自己定义一个tmp,然后1024、1024这样的去取出来.
/UglifyJS/ https://github.com/LiPinghai/UglifyJSDocCN/blob/master/README.md 使用方法 npm install uglify-js...-g uglifyjs example.js -c -m --mangle-props -c 代码压缩 -m 代码混淆 --mangle-props 混淆属性名 -b 美化显示 // 原代码 const...JShaman https://www.jshaman.com/ JShaman 是国内公司开发的js代码加密商业产品 免费版可以直接使用 // 原代码 const person = { age...,通过数组、字典等各种形式存储、拼接、替换等,最终进行还原,这里面没有利用到复杂的语法以及js 语言本身的特性,所以我们一点点解开也学不到什么; 这个代码就不一样了,我们一步一步解开它,尝试去学习其中的思路...console.log(c) 这次我们设计三个返回值,分别是函数定义、数值、字符串 看到这,我都蒙了,经过查询资料,我找到了两个维度的复杂的原因 JavaScript 中函数只能有一个返回值,你就说这玩意如果没学过 js
记录下近期对JS代码的调试过程 性能分析 启动程序之后,打开google浏览器对应页面,按F12或者Ctrl+Shift+I进入 开发者工具页面 目前主要使用的功能有: Performance....性能评估,比如我想看下页面刷新的性能瓶颈所在,先点击 按钮,然后进行页面操作,当页面刷新完成,再点击 按钮,则会生成性能报告,可以看到资源消耗,JS代码的执行逻辑等 Sources....性能报告页面的 部分,可以通过点击色块查看其所在的js代码文件,如 点击则会跳转到 功能栏,有了源文件就可以进行断点调试;这里注意部分js文件是压缩后的文件,建议手动修改程序替换成可读性更强的原始代码文件...查看程序的打印输出,比如我想知道某个函数的执行时间,可以在js代码中进行修改 当js代码执行之后,可以在console输出中看到foo的执行时间 Network....代码使用for循环进行操作,也就是线性复杂度,计算耗时随数据量的增大而线性增大 通过debug观察发现颜色数组会有不少重复的数值,而同样的输入会导致相同的输出,然后对整个数据的1M个点进行统计分析,发现重复率相当高
前言 在js的代码开发中,我简单的总结出了以下规则,后面会陆续补充并且对规范进行分类。...js代码建议保存到后缀名.js的文件中 js代码不建议放在html中,原因有:不能被缓存,会增大网页文件的大小,可维护性不高,会影响页面的加载。...js吧任何表达式都当一条简单语句,会导致一些隐性的错误。如果自己没加分号,那么js解释器会自动添加分号,按照自己能读懂的断句。 9.2 复合语句 也称为语句块,被包在大括号内部。...比如对象 var obj={} ;var arr=[] eval eval是最容易混乱使用的js函数,他可以执行内部入参的js函数或者表达式,可以直接解析变量。不建议使用 。...尽量使用语法严格模式 消除代码之中的不友好;代码运行更快 ;保证运行的安全 ;为新版本的js做好铺垫。 22.
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170140.html原文链接:https://javaforall.cn
com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; public class MyGenerator { public static void main(String[] args) { // 代码生成目录...String outputDir = "/Users/Destiny/Desktop/temp"; // 创建代码生成器 AutoGenerator...pc.setMapper("mapper"); mpg.setPackageInfo(pc); mpg.execute(); } } 运行就可以生成代码了
join join类似于同步,当A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行(如下代码), 但是B线程必须已经调用start()方法,否则join就会失效...| grep 16进制 top ##寻找进程 top -Hp pid ##寻找进程的线程 printf '%x\n' pid ##转为16进制 jstack pid | grep 16进制 ##定位代码
new Date(file.lastModified())); } IO流 对于目录文件的操作我们可以通过File进行,但是当需要对文件内容进行操作时,就需要IO流,通过IO流我们可以实现如下业务...);//读对象 System.out.println(((IoUtil) obj).i); ois.close(); } 图片加水印 给图片加水印是一种很常见的业务需求
作者:不知世事 原文:https://blog.csdn.net/feibabeibei_beibei/article/details/98232069 JavaScript 代码保护浅谈 国外: 1...vmp 最强的,这种方案其实也是很好理解的,比如对于一个js代码来说,我们只用js操作写一个基于栈的解释器,然后对于本身要保护的js进行虚拟化,定义一堆自定义操作,这个时候其实还是比较弱,因为全部是...4.腾讯防水墙 https://segmentfault.com/a/1190000015216576#articleHeader8 腾讯防水墙这个根据自己的业务需求,以及动态多样性与服务端结合相当于混淆保护出多套...结合服务端针对多样性来增加难度; 5.做移动安全代码保护的传统厂商们 这里就不评论分析了,因为他们可能重点在APP相关的dex、so以及手游相关的文件上;6.其他 像其他的一些大厂比如阿里这种肯定做了jsVMP...总结 对于 js 这种语言来说,由于语言本身的特殊性,一定的保护是非常必要的,再结合浏览器本身的发展,为了性能会在编译上做处理,引入本地层的东西,比如谷歌的 V8 ,火狐的 asm.js 在安全性上:业务上更多的结合服务端动态特性以及客户端强大的静态代码保护的设计会达到一个比较好的效果
Clipboard.js实现文本复制或者剪切到剪切板 引用js文件 js"> 使用一 js.git"> <!
document.addEventListener("keydown", function(e) { if (e.keyCode == 13) { ...
领取专属 10元无门槛券
手把手带您无忧上云