Fork me on GitHub
摘要: 大家好,我是木宛哥;在 10余年的工作经历让我深刻体会到软件开发不仅仅是写代码,更是一个系统化的交付过程。 为此我总结了20条编程感悟,涵盖了代码规范、设计原则、测试方法与交付流程等多个方面;​通过遵循代码规范,让代码更加可读与可维护,同时合理的设计能够有效应对需求变化,模块化的单元测试又确保了产品 阅读全文
posted @ 2024-11-09 01:19 木宛哥说编程 阅读(2202) 评论(3) 推荐(5) 编辑
摘要: 大家好,我是木宛哥,今天和大家分享下——代码 CR 时针对恼人的空指针异常(NullPointerException)如何做到体系化去防控; 什么是空指针异常 从内存角度看,对象的实例化需要在堆内存中分配空间。如果一个对象没有被创建,那也就没有分配内存,当应用程序访问空对象时,实际上是访问一个“无效 阅读全文
posted @ 2024-10-21 02:08 木宛哥说编程 阅读(541) 评论(2) 推荐(1) 编辑
摘要: 使用枚举替换布尔值主要基于以下几个原因 ● 可读性 ● 可拓展性 ● 安全防控 可读性 我们会定义 boolean 类型(true 或 false)作为方法参数,虽然比较简洁,但有时候参数的含义往往不够清晰,造成阅读上的障碍, 比如:参数可能表示“是否开启某个功能”,但仅凭 true 和 false 阅读全文
posted @ 2024-10-16 02:11 木宛哥说编程 阅读(1318) 评论(7) 推荐(4) 编辑
摘要: 为什么需要“依赖注入” Case 1 public class Foo { private Bar bar; public Foo() { bar = new Bar(); } public void doSomething(int key) { String result = bar.getRes 阅读全文
posted @ 2024-10-07 22:56 木宛哥说编程 阅读(376) 评论(0) 推荐(2) 编辑
摘要: 书接上回为什么需要依赖注入再做下扩展 上文谈到:“基于抽象接口编程确实是最佳实践:把易于变动的功能点通过定义抽象接口的形式暴露出来,不同的实现做到隔离和扩展,这体现了开闭原则” public class Foo { private Bar bar ; @Inject public Foo(Bar b 阅读全文
posted @ 2024-10-07 22:54 木宛哥说编程 阅读(2990) 评论(1) 推荐(11) 编辑
摘要: ###为什么建议使用对象来替换枚举? ### 在设计模型时,我们经常会使用枚举来定义类型,比如说,一个员工类 Employee,他有职级,比如P6/P7。顺着这个思路,设计一个 Level 类型的枚举: ``` class Employee { private String name; /** * 阅读全文
posted @ 2023-06-09 01:43 木宛哥说编程 阅读(3497) 评论(21) 推荐(16) 编辑
摘要: ### GC 优化 #### 1.防止大对象Buffer到内存中 **现象**:当大包请求时,YGC 耗时严重 **原因**:默认情况下 Zuul2 并不会缓存请求体(DirectByteBuffer),也就意味着它会先发送接收到的请求 Headers 到后端服务,之后接收到请求体再继续发送到后端服 阅读全文
posted @ 2023-05-24 19:15 木宛哥说编程 阅读(867) 评论(1) 推荐(3) 编辑
摘要: 当网络中两个进程需要通信时,我们往往会使用 来实现。 都不陌生。当三次握手成功后,客户端与服务端就能通信,并且,彼此之间通信的数据包格式都是二进制,由 协议负责传输。 当客户端和服务端取得了二进制数据包后,我们往往需要『萃取』出想要的数据,这样才能更好的执行业务逻辑。所以,我们需要定义好数据结构来描 阅读全文
posted @ 2020-03-30 04:03 木宛哥说编程 阅读(3624) 评论(2) 推荐(4) 编辑
摘要: 开篇 在一门编程语言中,往往会提供大量的运算符。按功能来分的话,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符等。这些对于大家来说都不陌生。但是,本期的主角『位运算』符相对而言是比较少去使用的。因为位运算符主要针对两个二进制数进行位运算。 巧用位运算能极大的精简代码和提高程序效率。所以, 阅读全文
posted @ 2020-03-22 23:16 木宛哥说编程 阅读(1174) 评论(0) 推荐(1) 编辑
摘要: 基于个人的经验,谈谈设计模式在网关中的应用。因为是经验之谈,没有绝对的对与错。 下面整理的是我最常使用的设计模式,我用设计模式的前提是 让代码的可读性变强 能支持日后功能扩展 单例 目的 保证全局只有一个实例,防止因为频繁的创建、销毁对象而造成不必要的性能开销。 在网关项目中,单例模式是出现频率最高 阅读全文
posted @ 2020-01-20 17:22 木宛哥说编程 阅读(2691) 评论(7) 推荐(3) 编辑
摘要: 对于应用程序而言,日志是非常重要的功能,通过日志,我们可以跟踪应用程序的数据状态,记录Crash的日志可以帮助我们分析应用程序崩溃的原因,我们甚至可以通过日志来进行性能的监控。总之,日志的好处很多,特别是对Release之后的线上版本进行异常的跟踪。 日志存储的分类 在平常开发时,我们通常喜欢在De 阅读全文
posted @ 2017-07-05 00:52 木宛哥说编程 阅读(2684) 评论(1) 推荐(5) 编辑
摘要: 想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临。你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧。领会了Boss的意图之后,漫长的排查问题开始了。你会写日志,或者是其他工具来追踪原因。那么如何以一种优雅的形式,并且不侵入业务代码的形式来跟 阅读全文
posted @ 2017-07-04 18:42 木宛哥说编程 阅读(3529) 评论(7) 推荐(5) 编辑
摘要: 『设计模式』中有一个模式可以解释特定的语法规则,它就是解释器模式(Interpreter Pattern)。不同于常见的策略模式或者是工厂模式,解释器模式在.NET或者JDK中并不常见,而且在业务上也很少会去解释特定的语法,所以它并不被广泛使用。一个解释器可大可小,大可以是复杂的编译器,小也可以是一 阅读全文
posted @ 2017-06-18 23:25 木宛哥说编程 阅读(9565) 评论(5) 推荐(6) 编辑
摘要: 对于客户端应用程序,免不了和远程服务打交道。设计一个良好的『服务层』能帮我们规范和分离业务代码,提高生产效率。服务层最核心的模块一定是怎样发送请求,虽然Mono提供了很多C 网络请求类,诸如 ,`HttpWebRequest UnityWebRequest WWW`,这是官方推荐的,也是最佳选择。 阅读全文
posted @ 2017-06-08 12:39 木宛哥说编程 阅读(2447) 评论(2) 推荐(1) 编辑
摘要: 在上一回合谈到,客户端应用程序的所有操作都在主线程上进行,所以一些比较耗时的操作可以在异步线程上去进行,充分利用CPU的性能来达到程序的最佳性能。对于Unity而言,又提供了另外一种『异步』的概念,就是协程( ),通过反编译,它本质上还是在主线程上的优化手段,并不属于真正的多线程( )。那么问题来了 阅读全文
posted @ 2017-05-26 12:55 木宛哥说编程 阅读(5181) 评论(6) 推荐(1) 编辑
摘要: 在进入本章主题之前,我们必须要了解客户端应用程序都是 单线程模型 ,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的。而服务器端应用程序,也就是我们常见的Web应用程序往往是多线程的,故用户A访问势必不会影响用户B的访问过程。所以对于We 阅读全文
posted @ 2017-05-24 17:13 木宛哥说编程 阅读(2498) 评论(3) 推荐(3) 编辑
摘要: 谈到 『Repository』 仓储模式,第一映像就是封装了对数据的访问和持久化。Repository 模式的理念核心是定义了一个规范,即接口『Interface』,在这个规范里面定义了访问以及持久化数据的行为。开发者只要对接口进行特定的实现就可以满足对不同存储介质的访问,比如存储在Database 阅读全文
posted @ 2017-03-31 15:37 木宛哥说编程 阅读(2758) 评论(0) 推荐(2) 编辑
摘要: 对象的 『注入』 是企业级软件开发经常听到的术语。如果你是一个 Java 程序员,一定对注入有着深刻的映像。不管是SSH框架还是SSM框架,Spring 全家桶永远是绕不过去的弯。通过依赖注入,可以有效的解耦应用程序。在uMVVM框架中,我提供了另外一种对象注入的方式,称为Service Locat 阅读全文
posted @ 2017-03-31 09:05 木宛哥说编程 阅读(3202) 评论(0) 推荐(7) 编辑
摘要: 一谈到 『IoC』 ,有经验的程序员马上会联想到控制反转,将创建对象的责任反转给工厂。IoC是依赖注入 『DI』 的核心,大名鼎鼎的Spring框架就是一个非常卓越的的控制反转、依赖注入框架。遗憾的是,我们显然不能在Unity 3D中去使用Spring框架,但思想是相通的——IoC也好,控制反转也罢 阅读全文
posted @ 2017-03-31 00:10 木宛哥说编程 阅读(3561) 评论(1) 推荐(3) 编辑
摘要: 什么是 『动态数据集合』 ?简而言之,就是当集合添加、删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面。有经验的程序员脑海里迸出的第一个词就是 ObservableCollection 。没错,它在WPF中盛行其道,通过它开发者可以很方便的达到动态更新界面。要在Unity 3D中使用Ob 阅读全文
posted @ 2017-03-29 12:16 木宛哥说编程 阅读(4151) 评论(2) 推荐(5) 编辑
multifunction lasers
访问人数