- 博客(28)
- 收藏
- 关注
原创 如何编写出最有运行效率的程序
编译还是解释 排除编码业务逻辑和特定平台因素影响, 编译后程序运行效率应当是高于解释型语言的。预先决策还是临时决策 在面向对象编程中,如果某项决策对多个业务操作都有影响,那么该决策应当在业务服务bean初始化时就已经确定下来,而不是等到处理业务请求时临时路由到具体处理分支。也就是说,在一次业务处理中,对于一个决策项目应当仅有一次决策过程,多次做相同决策不是明智的做法。是否使用缓存 ...
2018-07-05 18:25:59 653
原创 应用架构——由需求和缺陷衍生的复杂之树
应用架构的起源任何一个软件的产生只有满足或缓解了人类在现实生活中的需要,才具有实际意义和发展前途。软件就是依托硬件的高速处理和传输信息的优势(主要指计算机和网络),用来提升工作产出效率的工具。然而,硬件本身具有其固有的可靠性、容量、速度等诸多方面的限制,人类思维和记忆同样具有类似的局限性。为了克服这些问题,确保软硬件整体具有高可用性,我们历代的系统工程师们总结出了一系列的方法,其中系统架构设计
2016-09-11 10:31:39 251
原创 关于技术人员面试和职业发展的经验和思考
这么多年,一方面找工作被面,另一方面协助公司面试他人,也有了一些比较实际的面试体会。1.面试是一个双向过程,作为面试者一定要展示足够的自信,即使遭遇面试官的刁难或贬低。事先要明确自身的优势和定位,不要陷入面试官的陷阱,始终保持正面的价值观,即使与你以往的实践不尽相同。2.不要迷信自己拥有多年实际的工作经验,就轻视面试前的套路和应急准备。实际工作由于关注的点比较狭窄,思考时间相对充裕,问题解决途径相对宽松多样,而面试则需要重点突出,反应迅速适当,如果不准备妥当很难有随机应变的底气。3.简历
2021-08-15 19:40:20 179
原创 金融行业参与软件开发的经验教训
作为一个工作几乎接近8年的老人,一直都从事于金融行业相关的软件系统开发,所以多多少少有一些过来人的经验可以说,希望对你有些用处:1.认清自身职业方向,不要轻易走偏进入金融行业参与软件开发,并不等于你就能有更多机会分享到金融业的收入红利。金融行业很多赚钱的仅仅是利用软件做资金交易,如果你没有特定金融业从业资格证书,就不会拥有分享金融行业红利的机会。2.遵守职业操守,拥有保密意识金融行业的系统开发,特别注重安全和保密性,所以很多时候对于开发有一些并不友好的限制与规定,这点要有足够的预期。不要妄想
2021-08-15 18:41:08 1388
翻译 创建Vue组件的7种方式
在定义 Vue 中的组件模板时,有很多选择。据我统计,至少有七种不同的方式!在本文中,我们将浏览每个示例,并分析利弊,以便您知道在任何特定情况下最好使用哪一个。内容列表:普通字符串 模板字面 X 模板 内联模板 渲染功能 JSX 单文件组件 获胜者是...定义 Vue 组件模板的最快和最简单的方法是将属性添加到组件定义中,并分配包含标记的常规字符串。template这种方法实际上只用于代码示例或快速原型,但是,因为它很难与任何超越
2021-08-15 16:32:46 2269
原创 记一次神奇的代码排错
公司安排接手一个使用了jsp作为视图渲染方案的web项目。结果发现有些界面的<c:import><c:param name=“topFlag” value=“sysset”></c:param></c:import>下的参数并未传过去。在排除了不是jsp写法的问题后,初步怀疑是controller层传参的问题。结果调试也未发现问题。后猜测jsp本身不可能会有如此基础的bug,而且大部分页面的相同写法是正常传参的。引入的子jsp内部通过${par
2021-03-08 21:49:46 91
原创 使用javaparser分析重构java源码
为什么需要一个这样的工具?有时候我想要一个辅助我对现有java工程代码进行全面改造的工具,而这种改造工作比较精细特别,需要我做一些定制操作,而且现有的IDE内置工具没有提供这种特定化的改造功能。这时我就想,为了做这种改造,可以使用什么思路呢?1.使用正则表达式查找并替换对于某些重构操作确实有用,但是对于某些复杂的代码结构却无法精准且一次性就替换完成,精细度比较有限2.编译源码,利用...
2019-08-25 23:28:23 14415 3
转载 思考力
小叽导读:很多工程师在工作一段时间后会遇到迷茫期,虽有技术傍身,也难免会产生焦虑,反复思考怎样才能快速成长。关于如何提高自己的思考力,运用思考的力量推动能力提升,以此实现技术成长,阿里巴巴盒马产品技术部的岩动在阿里工作8年后,总结了一套思考方法,分享给每个正在成长的工程师。(本篇文章较长,阅读时间约30分钟,建议收藏后,找一个合适的时间慢慢品读哦)引言我们来看一下几类在程序员成...
2019-07-08 14:50:16 1225
转载 银行家算法学习笔记
理解:银行家算法是在不考虑需求资源超时的情况下,找出最大化满足所有需求者的资源配置优先级队列或证明死锁存在死锁避免——银行家算法的应用背景要想说银行家,首先得说死锁问题,因为银行家算法就是为了死锁避免提出的。那么,什么是死锁?简单的举个例子:俩人吃饺子,一个人手里拿着酱油,一个人手里拿着醋,拿酱油的对拿着醋的人说:“你把醋给我,我就把酱油给你”;拿醋的对拿着酱油的人说:“不,你把酱油给...
2019-04-18 14:35:56 484
转载 在阿里做了五年技术主管,我有话想说
来源:云狄阿里技术今天阿里妹导读:在历史文章《如何成为优秀的技术主管?》中,阿里巴巴高级技术专家云狄从开发规范、开发流程、技术规划与管理三个角度,分享对技术TL的理解与思考。今天的文章,他将继续深入探讨这一话题,从管理的角度分享技术TL的核心职责,主要包括团队建设、团队管理、团队文化、沟通与辅导、招聘与解雇等,希望与大家共同探讨、交流。背景互...
2019-04-17 09:20:08 590
原创 spring cloud 注册中心之Eureka Server和Client的搭建与使用
一、server 端搭建1.配置maven 依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId>...
2019-03-25 10:43:51 349 1
原创 多线程开发带来的并发问题的根源与解决之道
多线程开发带来的并发问题大致有以下3类:1.可见性问题2.原子性问题3.有序性问题下面分别对这3类问题的产生根源和解决之道一一讲解:1.可见性问题简而言之,就是一个线程对另一个线程的操作结果能够立刻可见。问题根源:在多核时代,同一进程的多个线程可能位于不同CPU之上,而不同CPU各自拥有自己独立的缓存,但是会共用同一块主存。在实际运算时,CPU运算并不是直接操作主存...
2019-03-09 16:30:29 1322
原创 记一次git不当操作造成的灾难
公司项目将几乎所有的工程都存放在同一个仓库目录下,而不是每个不同项目单独弄一个仓库。1.当克隆项目代码到本地时,尽管你实际上只对其中一个工程做修改,当时你不得不为其他项目的克隆和检出忍受耗时2.导入项目到IDEA中,默认会导出一堆你并不关心的项目工程,为了idea内存和运行速度,你不得不编辑project structure,将其排除。尽管排除了,当日初次导入到IDEA中生成的项目环境配置...
2019-03-07 09:07:10 215
转载 史上更全的 MySQL 高性能优化实战总结
1 前言 2 优化的哲学 3 优化思路 3.1 优化什么 3.2 优化的范围有哪些 3.3 优化维度 4 优化工具有啥? 4.1 数据库层面 4.2 数据库层面问题解决思路 4.3 系统层面 4.4 系统层面问题解决办法 5 基础优化 ...
2019-02-22 13:42:55 221
转载 Oracle SQL 内置函数大全(转)
SQL中的单记录函数1.ASCII 返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;A A ZERO SPACE--------- --------- --------- ---------65 ...
2019-02-21 16:30:03 553
转载 Logback - SiftingAppender
1. 作用Logback将写日志事件的任务委托给appender组件完成,SiftingAppender顾名思义就是筛选日志事件,具体点就是:对于Logback委托给它的日志事件,SiftingAppender会对日志事件做一些区分,然后不同的事件SiftingAppender会委托不同的appender去完成真正的写操作。设想一下这样一个场景:有一个Task类完成成一些特定的任...
2019-02-18 13:58:46 2822
原创 使用jacoco maven插件做单元测试覆盖率统计
1.在项目pom.xml中build->plugins下添加<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <...
2019-02-14 16:17:43 1129
原创 java开发运维最佳实践经验
1.使用通用第三方工具jar减少造轮子工作,提升代码优雅度使用apache commons系列工具包<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.3&l...
2019-02-14 16:16:47 2312
转载 《Nginx官方文档》–入门指南
原文链接本指南会对nginx进行基本的介绍并描述一些它可以完成的简单任务。如果你还没有安装nginx,请参阅nginx的安装。本指南不仅描述了怎么启动和停止nginx,怎么重新加载nginx的配置,还解释了nginx配置文件的结构以及如何设置nginx提供静态资源,还会教你如何将nginx配置为一个代理服务器,以及如何将它和FastCGI应用连接。nginx有一个主进程和其它的工作进程。主...
2019-02-11 13:37:01 326
原创 extjs6 Ext.Class的配置详解
1. alias String/String[] 类别名列表,命名方式为<namespace>.<name>namespace 描述了别名的类型,一律为小写name:允许通过别名实现延迟实例化,一般不应再包含.分割的空间以下是框架预定义的一些命名空间及其用法:feature - Grid features plugin - Plugins sto...
2018-09-18 17:22:12 1097
原创 业务架构是演化出来的而不是预先设计出来的
有一句话说 :“业务架构是演化出来的而不是预先设计出来的”。起初,我并不是很理解这句话,感觉是一个偷懒的或者经验不足的架构师说的。因为直觉是如果一次性就能达到的结果为什么要绕弯子。 后经过2-3年的工作,终于理解了这句话要表达的意思: 1.业务需求是逐步明确下来的 逐步明确的需求引入了新的变量或者消除了变量,这些都在影响构架分离相同和不同。 2...
2018-07-05 19:12:27 511
原创 关于“约定大于配置“的理解
人类社会在不断文明的过程就是不断建立契约的过程,基于契约建立了我们想要的稳定的社会关系。契约亦或是约定,消除了不同事物在合作过程中的不协调的地方,使得对于共同理想能够更容易的建立一致建设意见。 在软件编程中,需要面对技术上的各种选型、系统组件组合上的各种适配、以及业务需求描述的复杂多变。建立从业务需求描述到技术实现的映射,建立上层调用方式与底层实现逻辑的相互协作,这里面有大量的变量需...
2018-06-25 10:37:46 10499
原创 对面向对象与面向服务编程思想的感悟
人类利用编程将社会生活中重复性的活动交给计算机辅助完成,利用计算机快速的计算、稳定的存储传输等性能弥补人类在重复单调事务上持续执行的缺陷。所以说,程序代码本质是人类对社会实践的总结在计算机行为上的映射。 由于社会实践的在不同社会环境中的差异和共同点,所以反映到编码上是抽象、分离的思想。面向对象就是一种将流程规则按照执行上下文环境分割的思想。社会实践是具体的,所以需要具...
2018-06-21 11:13:24 2600 1
原创 如何构建一个自动编程系统
自动编程系统构造一个软件,与人类软件工程师思考构建系统的思路并无二致,必须遵循一定的流程:需求分析-->业务划分-->技术选型-->模块划分-->领域接口设计-->代码实现-->集成测试-->部署上线 1.需求分析 每一个需求的诞生都与具体业务环境相关,解决的问题也必须能够在当前的软件工程技术条件下解决。所以需求的问题域、业务环境域和软件工程能力域必须有合适的匹配度。当如何确定
2018-01-30 09:37:17 1090
原创 架构思维——代码功能聚散之道
天下大势,分久必合合久必分,这一切的聚散变化无非源于人心向背。在有限的资源空间内,求得资源的均衡分配与及时调度,调和人类在生存斗争中的产生的诸多矛盾,进而使得生机勃勃,繁衍无尽。在软件世界,代码的分分合合无非以需求为领域界限,继而以应用模块为功能界限,其次以部署拓扑为运维界限,最后以进程、文件 、类和函数划分代码创造维护界限。每一层的界限提供了代码功能聚散的限制和标准。每一次应用架构的升级优化
2016-09-15 11:58:04 350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人