一,编程语言 - 348052148/learnGraph GitHub Wiki
- Go 语言
- Php 语言
- Java 语言
- 一,关于go值传递问题。为什么 将一个实现值传递给声明的interface 变量的时候 使用的是拷贝。而讲 interface 传递给 interface 时,使用的是原来的数据
- 可能原因是,interface 并不能进行结构的数据改变。直接引用同一对象值。
- 传递给 interface的结构实例值,可能会改变从而导致interface 方法调用被影响。所有使用copy
var n1 Inter
var n2 inter
a := A{}
n1 = a // 对 a 进行值传递
n2 = n1 // 直接改变指向
- 二,关于interface{} nil 问题, interface{}(nil,nil) == nil 判断需要注意,可以引入一个bool 来判断func是否返回成功
java 垃圾回收
年轻代 (8:1:1)Eden Survivor, 老年代, 永久代 gc 什么时候出发
- Minor GC
- Eden申请空间失败时,就会触发Minor GC
- Full GC
- a) 年老代(Tenured)被写满;
- b) 持久代(Perm)被写满;
- c) System.gc()被显示调用;
- d) 上一次GC之后Heap的各域分配策略动态变化;
关于go factory bean IOC 设计
- type 存储 Register type
- define 定义,定义如何实例化,定义结构 属性的引用
- factory 获取对象。根据定义生成对象
- scop 范围 property 和 singleton
//基本接口和类
//class提供者
type TypeProvider interface {
Register(interface{}, string) error
}
type ModelProvider struct {
model map[string]reflect.Type
}
//注册type
func (provider *ModelProvider)Register(a interface{}, alias string) error {
provider.model[alias] = reflect.TypeOf(a)
return nil
}
//获取type
func (provider *ModelProvider)GetModel(name string) reflect.Type {
return provider.model[name]
}
//设置
type Options func(o *DefineClass) error
type DefineClass struct {
Name string
Type reflect.Type
Options []Options
scope int
refs map[string]string
refsOptions map[string]Options
refsOrder []string
}
type InstanceFactory struct {
Defind map[string] DefineClass
objAliases map[string]string
Instance map[string] interface{}
modelProvider *TypeProvider
}
//描述依赖
func (fac * InstanceFactory) Define(name string, scope int, model string, op ...Options) {
}
//获取对象
func (fac * InstanceFactory)GetObject(name string) {
}
相关实现 https://github.com/gogap/factory
源码
AOP 面向切面 (动态代理实现
- 要素
- 切面 Aspect
- 切点 Pointcut
- 通知 Advice (Before After AfterReturning AfterError AfterPanic Around
- 加入点 joinPoint
- 原理
- go语言 使用装饰器进行包装函数,利用反射 makeFunc 生成执行函数。
- Aspect 中维护着加入 Pointcut列表。代理函数执行时。回去进行模式匹配。匹配到则进行包装 相关实现https://github.com/gogap/aop
PHP
- Tars Rpc 框架。腾讯
- Swoft
- easy swoole
- https://wiki.swoole.com/wiki/page/p-open_source.html