Fork me on GitHub
摘要: ###为什么建议使用对象来替换枚举? ### 在设计模型时,我们经常会使用枚举来定义类型,比如说,一个员工类 Employee,他有职级,比如P6/P7。顺着这个思路,设计一个 Level 类型的枚举: ``` class Employee { private String name; /** * 阅读全文
posted @ 2023-06-09 01:43 木宛城主 阅读(2941) 评论(19) 推荐(15) 编辑
摘要: ### GC 优化 #### 1.防止大对象Buffer到内存中 **现象**:当大包请求时,YGC 耗时严重 **原因**:默认情况下 Zuul2 并不会缓存请求体(DirectByteBuffer),也就意味着它会先发送接收到的请求 Headers 到后端服务,之后接收到请求体再继续发送到后端服 阅读全文
posted @ 2023-05-24 19:15 木宛城主 阅读(646) 评论(1) 推荐(1) 编辑
摘要: 当网络中两个进程需要通信时,我们往往会使用 来实现。 都不陌生。当三次握手成功后,客户端与服务端就能通信,并且,彼此之间通信的数据包格式都是二进制,由 协议负责传输。 当客户端和服务端取得了二进制数据包后,我们往往需要『萃取』出想要的数据,这样才能更好的执行业务逻辑。所以,我们需要定义好数据结构来描 阅读全文
posted @ 2020-03-30 04:03 木宛城主 阅读(3331) 评论(2) 推荐(4) 编辑
摘要: 开篇 在一门编程语言中,往往会提供大量的运算符。按功能来分的话,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符等。这些对于大家来说都不陌生。但是,本期的主角『位运算』符相对而言是比较少去使用的。因为位运算符主要针对两个二进制数进行位运算。 巧用位运算能极大的精简代码和提高程序效率。所以, 阅读全文
posted @ 2020-03-22 23:16 木宛城主 阅读(1092) 评论(0) 推荐(0) 编辑
摘要: 基于个人的经验,谈谈设计模式在网关中的应用。因为是经验之谈,没有绝对的对与错。 下面整理的是我最常使用的设计模式,我用设计模式的前提是 让代码的可读性变强 能支持日后功能扩展 单例 目的 保证全局只有一个实例,防止因为频繁的创建、销毁对象而造成不必要的性能开销。 在网关项目中,单例模式是出现频率最高 阅读全文
posted @ 2020-01-20 17:22 木宛城主 阅读(2575) 评论(7) 推荐(3) 编辑
摘要: 对于应用程序而言,日志是非常重要的功能,通过日志,我们可以跟踪应用程序的数据状态,记录Crash的日志可以帮助我们分析应用程序崩溃的原因,我们甚至可以通过日志来进行性能的监控。总之,日志的好处很多,特别是对Release之后的线上版本进行异常的跟踪。 日志存储的分类 在平常开发时,我们通常喜欢在De 阅读全文
posted @ 2017-07-05 00:52 木宛城主 阅读(2593) 评论(1) 推荐(5) 编辑
摘要: 想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临。你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧。领会了Boss的意图之后,漫长的排查问题开始了。你会写日志,或者是其他工具来追踪原因。那么如何以一种优雅的形式,并且不侵入业务代码的形式来跟 阅读全文
posted @ 2017-07-04 18:42 木宛城主 阅读(3313) 评论(7) 推荐(5) 编辑
摘要: 『设计模式』中有一个模式可以解释特定的语法规则,它就是解释器模式(Interpreter Pattern)。不同于常见的策略模式或者是工厂模式,解释器模式在.NET或者JDK中并不常见,而且在业务上也很少会去解释特定的语法,所以它并不被广泛使用。一个解释器可大可小,大可以是复杂的编译器,小也可以是一 阅读全文
posted @ 2017-06-18 23:25 木宛城主 阅读(9469) 评论(5) 推荐(6) 编辑
摘要: 对于客户端应用程序,免不了和远程服务打交道。设计一个良好的『服务层』能帮我们规范和分离业务代码,提高生产效率。服务层最核心的模块一定是怎样发送请求,虽然Mono提供了很多C 网络请求类,诸如 ,`HttpWebRequest UnityWebRequest WWW`,这是官方推荐的,也是最佳选择。 阅读全文
posted @ 2017-06-08 12:39 木宛城主 阅读(2378) 评论(2) 推荐(1) 编辑
摘要: 在上一回合谈到,客户端应用程序的所有操作都在主线程上进行,所以一些比较耗时的操作可以在异步线程上去进行,充分利用CPU的性能来达到程序的最佳性能。对于Unity而言,又提供了另外一种『异步』的概念,就是协程( ),通过反编译,它本质上还是在主线程上的优化手段,并不属于真正的多线程( )。那么问题来了 阅读全文
posted @ 2017-05-26 12:55 木宛城主 阅读(5036) 评论(6) 推荐(1) 编辑
摘要: 在进入本章主题之前,我们必须要了解客户端应用程序都是 单线程模型 ,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的。而服务器端应用程序,也就是我们常见的Web应用程序往往是多线程的,故用户A访问势必不会影响用户B的访问过程。所以对于We 阅读全文
posted @ 2017-05-24 17:13 木宛城主 阅读(2367) 评论(3) 推荐(3) 编辑
摘要: 谈到 『Repository』 仓储模式,第一映像就是封装了对数据的访问和持久化。Repository 模式的理念核心是定义了一个规范,即接口『Interface』,在这个规范里面定义了访问以及持久化数据的行为。开发者只要对接口进行特定的实现就可以满足对不同存储介质的访问,比如存储在Database 阅读全文
posted @ 2017-03-31 15:37 木宛城主 阅读(2677) 评论(0) 推荐(2) 编辑
摘要: 对象的 『注入』 是企业级软件开发经常听到的术语。如果你是一个 Java 程序员,一定对注入有着深刻的映像。不管是SSH框架还是SSM框架,Spring 全家桶永远是绕不过去的弯。通过依赖注入,可以有效的解耦应用程序。在uMVVM框架中,我提供了另外一种对象注入的方式,称为Service Locat 阅读全文
posted @ 2017-03-31 09:05 木宛城主 阅读(3065) 评论(0) 推荐(7) 编辑
摘要: 一谈到 『IoC』 ,有经验的程序员马上会联想到控制反转,将创建对象的责任反转给工厂。IoC是依赖注入 『DI』 的核心,大名鼎鼎的Spring框架就是一个非常卓越的的控制反转、依赖注入框架。遗憾的是,我们显然不能在Unity 3D中去使用Spring框架,但思想是相通的——IoC也好,控制反转也罢 阅读全文
posted @ 2017-03-31 00:10 木宛城主 阅读(3456) 评论(1) 推荐(3) 编辑
摘要: 什么是 『动态数据集合』 ?简而言之,就是当集合添加、删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面。有经验的程序员脑海里迸出的第一个词就是 ObservableCollection 。没错,它在WPF中盛行其道,通过它开发者可以很方便的达到动态更新界面。要在Unity 3D中使用Ob 阅读全文
posted @ 2017-03-29 12:16 木宛城主 阅读(4038) 评论(2) 推荐(5) 编辑
摘要: 对于客户端应用程序而言,单页应用程序(Single Page Application)是最常见的表现形式。有经验的开发人员往往会把一个View分解多个SubView。那么,如何在多个SubView之间 『共享数据』 是一个很棘手的事情。又因为ViewModel才是真正为View提供数据来源,所以本质 阅读全文
posted @ 2017-03-28 12:31 木宛城主 阅读(2891) 评论(0) 推荐(3) 编辑
摘要: 在我们设计和开发应用程序时,经常要用到控件。比如开发一个客户端WinForm应用程序时,微软就为我们提供了若干控件,这些控件为我们提供了可被定制的属性和事件。属性可以更改它的外观,比如背景色,标题等,而事件可以丰富控件的行为,比如最常见的 『按钮点击』 ,谁也不能确定点击之后将发生什么事,是连接数据 阅读全文
posted @ 2017-03-27 23:32 木宛城主 阅读(1737) 评论(0) 推荐(4) 编辑
摘要: 『可复用』 这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率。 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的 『高内聚,低耦合』 原则。 组件化设计的思路 不管是开发客户端应用程序还是开发服务器端应用程序, 『组件』 这个词我们并不陌生。 阅读全文
posted @ 2017-03-27 17:29 木宛城主 阅读(2186) 评论(3) 推荐(4) 编辑
摘要: 对于一个View而言,本质上是一个MonoBehaviour。它本身就具备生命周期这个概念,比如,Awake,Start,Update,OnDestory等。这些是非常好的方法,可以让开发者在各个阶段去执行自定义的代码。但唯一遗憾的事,这些方法是有引擎调用,并且颗粒度不够细。本文将谈谈怎样构建Vie 阅读全文
posted @ 2017-03-26 19:34 木宛城主 阅读(3540) 评论(1) 推荐(4) 编辑
摘要: 当你开发一个客户端应用程序的时候,往往一个单页会包含很多子模块,在不同的平台下,这些子模块又被叫成子View(视图),或者子Component(组件)。越是复杂的页面,被切割出来的子模块就越多,子模块越多,彼此之间需要同步的数据和状态就越频繁,即易产生耦合。那么如何保证在复杂业务情况下,各个子模块之 阅读全文
posted @ 2017-03-25 17:17 木宛城主 阅读(4730) 评论(2) 推荐(3) 编辑
multifunction lasers
访问人数