一,编程语言 - 348052148/learnGraph GitHub Wiki

  1. Go 语言
  2. Php 语言
  3. Java 语言
  • 一,关于go值传递问题。为什么 将一个实现值传递给声明的interface 变量的时候 使用的是拷贝。而讲 interface 传递给 interface 时,使用的是原来的数据
  1. 可能原因是,interface 并不能进行结构的数据改变。直接引用同一对象值。
  2. 传递给 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

源码

go实现的web服务器

AOP 面向切面 (动态代理实现

  • 要素
  1. 切面 Aspect
  2. 切点 Pointcut
  3. 通知 Advice (Before After AfterReturning AfterError AfterPanic Around
  4. 加入点 joinPoint
  • 原理
  1. go语言 使用装饰器进行包装函数,利用反射 makeFunc 生成执行函数。
  2. Aspect 中维护着加入 Pointcut列表。代理函数执行时。回去进行模式匹配。匹配到则进行包装 相关实现https://github.com/gogap/aop

PHP