石建 | Fat Mind


现象与思路 :

1.业务变化快,导致需要不断沟通 ?
    a、开始1、2功能一起,后来拆分开,先上1;再到1功能,各团队不一致上线  (答:难解,要更有产品意识,帮助产品进行分析)
2.开发:
    a、原代码不优雅,总有想重构的冲动 (答:想是白想,一定要有结果)
    b、相互等待,接口定义不明确,如:接口jar无法提供,注释不明确  (答:时间点&白纸黑字,先沟通再找主管)
    c、联调准备不充分,如:hsf 因为IP发布失败,主站页面配置被修改 (答:前提明确要求,不能有逻辑问题)
3.上线
    a、涉及面太广,信息沟通丢失,如:只是暂停审核,演绎成 '停止所有crm操作'  (答:一定要直接周知到所有相关人)
    b、风险点评估的不全面,未全盘考虑,如:simbacall->bp参数对象不一致,是否会导致失败未联调 (答:不要遗漏或轻视任何风险点)


2011.11.18 晚 19:30
posted @ 2011-11-18 19:39 石建 | Fat Mind 阅读(166) | 评论 (0)编辑 收藏

Annotation

 

题记:建议关于spring问题,请记得查看spring reference

 

一、annotation前生后世

Annotations do not directly affect program semantics, but they do affect the way programs are treated by tools and libraries, which can in turn affect the semantics of the running program. Annotations can be read from source files, class files, or reflectively at run time.

译:annotation不会直接影响程序的语义,xxxAnnotation可以从源文件、class文件、通过反射在运行时读取。

 

参考:http://www.developer.com/print.php/3556176

1.       定义

Annotation type declarations are similar to normal interface declarations. An at-sign (@) precedes the interface keyword. Each method declaration defines an element of the annotation type. Method declarations must not have any parameters or a throws clause. Return types are restricted to primitives, StringClassenums, annotations, and arrays of the preceding types. Methods can have default values.

Annotation声明与普通的interface非常相似,在关键字interface前加@。每一个方法的声明定义一个annotation的元素。方法不能有任何的参数或throws异常。返回类型被限制为:原始类型、StringClassenumannotation、前面描述的类型组成的数组。method定义允许有默认值。

 

2.       Java annotation

There are two types of annotations available with JDK5:

1) Simple annotations: These are the basic types supplied with Tiger, which you can use to annotate your code only; you cannot use those to create a custom annotation type.

三个基本的annotation,如:OverrideDeprecatedSuppresswarnings,不能使用它去定义新的annotation

2) Meta annotations: These are the annotation types designed for annotating annotation-type declarations. Simply speaking, these are called the annotations-of-annotations.

annotation,定义annotation的类型。如:TargetRetentionDocumentedInherited

A.      Target:声明annotation注解的目标类型。如@Target(ElementType.TYPE)@Target(ElementType.METHOD)

B.      Retention:声明annotation被保留的长度。如:RetentionPolicy.SOURCERetentionPolicy.CLASSRetentionPolicy.RUNTIME

C.      Documented:声明被注解的target生成doc是否需要显示annotation信息。

D.      Inheritedxxx

 

3.       annotation作用

a. 不影响程序原本语义的情况下,增加信息+工具=声明式编程。如:spring aop

b. 编译检查

 

 

二、利用annotation实现aop

1. 思路

A.自定义注解定义规则(何时执行)

B.标记行为(执行什么)

C.通过反射生成代理,在对象执行任何方法时,进行拦截判断是否符合规则;若符合,执行对应的行为。

2. 例子

场景:一个表演家,表演节目后,观众拍手鼓掌

原始:表演家拥有所有观众的引用,在自己表演完后,通知观众鼓掌

问题:表演家应该关注表演自身的事情,有哪些观众、观众是否鼓掌,不是其所关注的

改进:AOP方式,表演家仅关注表演,观众鼓掌由其它人负责

总结:

面向切面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。 面向对象将应用程序分解成各个层次的对象,而AOP将程序分解成各个切面或者说关注点。这使得可以模块化诸如事务管理等这些横切多个对象的关注点。

 

三、spring aop如何使用annotation

1. 基本方式,通过ProxyFactoryBean

a.通知

b.切入点

b.通知+切入点 à 切面

c.实际对象+接口+切面 à 接口代理()

2. 自动代理方式:

基本方式的问题是,xml配置文件繁琐。

1)基于spring上下文的通知者Bean的自动代理(利用PostBeanProcessor ?)

BeanNameAutoProxyCreator,有属性:beanNames(被代理对象)、interceptorNames(通知)。自动代理beanNames指定的bean,此时interceptorNames指定通知,但interceptor需要实现特定的接口,如:MethodBeforeAdvice

2) 基于aspectJ注解驱动

使用aspectJ风格的注解。原理:生成代理,仅方法级别。使用AspectJ 提供的一个库来做切点(pointcut)解析和匹配。

4.       <aop:config>,优点:任何类都能转化为切面,不需要特殊接口或注解,原始pojo对象

5.       aop参数传递,见:spring reference 6.3.3.6 通知参数

a. around切点,必须传递ProceedingJoinPoint参数,通过ProceedingJoinPoint取得方法的所有信息。

b. 其它切点,利用JoinPoint取得方法的所有参数。

c. 通过参数名绑定传递参数,未理解

 

 

四、annotation相关技术

1. cglib

它的原理就是用Enhancer生成一个原有类的子类,并且设置好callbackproxy 则原有类的每个方法调用都会转为调用实现了MethodInterceptor接口的proxyintercept() 函数。

2.  asm

ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or dynamically generate classes, directly in binary form. Provided common transformations and analysis algorithms allow to easily assemble custom complex transformations and code analysis tools.

ASM offer similar functionality as other bytecode frameworks, but it is focused on simplicity of use and performance. 

简单理解asm是比cglib更高级的code generate lib

 

五、others问题

1. Generics 

Generics - This long-awaited enhancement to the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting. See theGenerics Tutorial. (JSR 14)

泛型提供了编译时类型检查安全。这点很重要吗

 

2. 为什么spring aop aspectJ anonotationpointcut声明,必须注解在方法上 ?通过方法唯一标识一个pointcut

猜测:@PointcutTarget属性指定仅为method。方法签名成为pointcutid

  

 

posted @ 2011-06-25 20:09 石建 | Fat Mind 阅读(327) | 评论 (0)编辑 收藏
参照:http://www.quora.com/What-are-some-interesting-and-innovative-startups-in-China

2011年的中国互联网还有什新奇的事发生吗 ?

1.团购:美团、拉手等(烧钱阶段,抢用户、流量,用户体验必须提升,如:退款等服务;预测:再有1年时间,团购巨头就会形成)
2.在线租书 : booksfly(有创意,但目前的运营方式很难有大的成长)
3.图片搜索 : taotaosou (有创意和前途,目前:用户体验差、效果差)

4.微薄:新浪、腾讯(蒸蒸日上,新浪占据主导地位)
5.垂直化社交网站:Mtime、果壳(新方向,垂直化的社交会去慢慢蚕食)
6.rss服务:鲜果(无自己特点)

7.网页游戏 : 忍者村、三国杀(赚钱的行业,但游戏生命周期短的特点值得考虑)
8.在线音乐 : 豆瓣电台、酷狗(推崇豆瓣的简约,做到了极致)

9.在线存储 : 微盘、DBBank

10.手机应用:豌豆荚、VivaMe(阅读器\传媒)、街旁(lbs)
11.UC乐园(UC社交平台,尽管UCWeb是入口,有着先天优势)



 PS:以下纯属个人YY,随手记录

1.亲子、育儿教育社区 + 电商,如何做 ?淘宝http://t.cn/blAkG 全是tms静态页面[囧] 专业亲子网站排名 http://t.cn/SwZSXr


posted @ 2011-04-16 13:08 石建 | Fat Mind 阅读(190) | 评论 (0)编辑 收藏

主要参考:构建高性能web站点


一、网卡

网卡使用一个特定的物理层数据链路层标准,例如以太网来实现通讯所需要的电路系统。这为一个完整的网络协议栈提供了基础,使得在同一局域网中的小型计算机组以及通过路由协议连接的广域网,例如IP,都能够进行通讯。

1.       作用:

a)         唯一的mac地址,定位机器(局域网/以太网mac寻址)

b)        数据接收和发送。拥有物理缓存区。

                         i.              接收:接收物理层数据,通过DMA方式访问内存。

                       ii.              发送:接收上层数据,分解为适当大小的数据包发送。

转载:

数据的封装与解封:发送时将上一层交下来的数据加上首部和尾部,成为以太网的帧。接收时将以太网的帧剥去首部和尾部,然后送交上一层。
链路管理:主要是CSMA/CDCarrier Sense Multiple Access with Collision Detection ,带冲突检测的载波监听多路访问)协议的实现。
编码与译码:即曼彻斯特编码与译码。

2. 协议

以太网Ethernet)是一种计算机局域网组网技术。

ARP协议Address Resolution Protocol),或称地址解析协议ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址。

http://zh.wikipedia.org/zh/%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E5%8D%8F%E8%AE%AE

3. 传输速率

网卡速率是指网卡每秒钟接收或发送数据的能力,单位是Mbps(兆位/秒)由于存在多种规范的以太网,所以网卡也存在多种传输速率,以适应它所兼容的以太网。目前网卡在标准以太网中速度为10Mbps,在快速以太网中速度为100Mbps,在千兆以太网中速度为1000Mbps等。

主流的网卡主要有10Mbps网卡、100Mbps以太网卡、10Mbps/100Mbps自适应网卡、1000Mbps千兆以太网卡以及最新出现的万兆网卡五种。对于一般家庭用户选购10M或者10Mbps/100Mbps自适应网卡即可,对于企业用户建议购买100Mbps以太网卡或者1000Mbps千兆以太网卡或者万兆网卡。

以太网卡和交换设备都支持多速率,设备之间通过自动协商设置最佳的连接速度和双工方式。如果协商失败,多速率设备就会探测另一方使用的速率但是默认为半双工方式。10/100以太网端口支持10BASE-T100BASE-TX

2.       特点

a)         全双工

b)        传输速率

c)        总线类型:PCI总线架构日益成为网卡的首选总线

d)        MAC地址

二、数据如何发送

1.       将数据写入用户进程的内存地址空间,其实实际的开发过程只需对运行时变量赋值即可

2.       应用程度调用系统函数,将数据从用户态内存区复制到由内核维护的一段称为内核缓冲区的内存地址空间。

a)         内核缓存区大小有限,要发送的数据以队列的形式进入

b)        每次复制一定的数据大小,这个大小取决于网络数据包的大小以及内核缓存区的承载能力

3.       当数据写入内核缓存区,内核会通知网卡控制器来读取数据,cpu转而处理其它任务

a)         网卡将发送的数据从内核缓存区复制到网卡缓存区

b)        数据的复制始终按照内部总线的宽度复制(如32位总线,每次复制32bit信息)

4.       网卡发送数据到物理线路

a)         需要对数据进行字节到位的转换(即将数据按照位的顺序发出)

b)        网卡内部使用特定的物理装置,来生成可以传播的各种信息,如铜线,网卡会根据位信息“0/1的变化产生不同的电信号;光线,网卡会生成光信号。

三、电磁波速度

       不管是电信号,还是光信号,进入物理介质后,其传输速度仅依赖其传播介质,铜线中电信号的传输速度大约2.3*108m/s,光纤中光信号的传播速度大约是2.0*108m/s。光在真空中的传播速度是3.0*108m/s,为什么光纤中的传播速度要慢呢 ?因为光在光纤中的传播利用全反射原理,所以传播距离要大于光纤长度。

       由此看见,不同的传播介质中信号的传播速度几乎是常量。也就是说,不论数据发送装置以多快的发送速度让数据以信号的形式进入路线,在线路中信号的传播速度几乎可以认为是一样快的。

       光纤与铜线相比?光纤采用全反射原理,因此光信号衰减底,因此传播距离远。

四、带宽概念

       从上面分析来看,数据的传输包括:发送端发送数据进入线路 + 线路传输,线路传输的速度在各种传输介质几乎是相同的。

       带宽定义:每秒传播bit数,bit/s

       这样看,影响带宽的因素仅为“发送端发送数据进入线路”,如何提升:a、提升发送速度 b、数据传输的并行度

1.       发送速度

数据发送装置将二进制信号传送至线路的能力。关键是,如果接收能力跟不上,发送能力不可能提高。原理:接收速度决定发送速度。

       也就是“流控机制”,保证接收方能够接收数据,不会丢失数据。如Tcp滑动窗口(滑动窗口协议的基本原理,任意时刻发送方、接收方都保持一个连续的允许发送、接收的帧的序号http://blog.csdn.net/yujun00/archive/2006/03/23/636495.aspx)。

2.    并行度,等价于计算机总线的概念。比如:32位,任意同一时刻能传输32位数据。

总结:显然,网卡影响性能结果。

 

posted @ 2011-04-04 00:17 石建 | Fat Mind 阅读(339) | 评论 (0)编辑 收藏

题记:在淘宝广告技术部工作快1年,写点自己对广告的认识

目前在淘宝主要存在这样几种形式广告 CPTCPCCPS

1.CPT
cost per time
按时长计费。大部分属于品牌广告,主要着重于品牌形象的宣传。比如:淘宝中屏滚动广告,如“dell、九牧王。特点:a、价格非常贵 b、位置少。
CPM
Cost Per ThousandImpression)按千次展现次数计费。能够为广告主带来稳定的广告展现,但效果是未知数,具体要看投放的媒体,以及场景的相关性。能为有流量的站点带来稳定的收入。

2.CPC
cost per click
按点击计费。如:google ads、淘宝直通车,都是根据词的竞价排名,决定展示那个广告主的广告。
目前淘宝大部分收入来自于直通车。
如:在淘宝,搜诺基亚 N73”,首先做搜索词归一化,匹配为与竞价词相关的词,再根据竞价词去搜索。谁出价高,并根据用户的信誉度等因素,决定出谁的广告。
站在长远的发展,淘宝直通车的目的:1.增加淘宝收入 2.促进成交。如果仅仅是点击最大化,增加淘宝的收入,但并没有为卖家带来成交,则卖家的出价必然会降低,对于双方来说都是双输的局面。所以必须站在促进成交的前提下,通过直通车不断提升淘宝自身的收入增加。

3.CPS
cost per Sales
按成交计费。据说:某淘宝广告去日本时在一家书店看到的营销模式,回到淘宝后,决定做"淘宝客"

cps模式更加关注的是“长尾流量”,因为长尾publisher,流量质量一般来说不是很高,如果按照前面说到的3种方式计费,对广告主来说是不公平的。但根据成交,分成给长尾publisher,既能保证广告主的利益,也满足广告主营销、推广的目的。同时也能够给publisher带来收入。


小思考:

    目前淘宝有
8亿商品,仅淘宝自身的广告位置,完全不能满足卖家推广、营销的目的。所以淘宝会去买外部广告位(如优酷),或者与外部网站以“分成”的模式合作(google)。

    其实,淘宝也在建立自己的广告联盟,类似于“圈地运动”,去累积足够多的流量、渠道,到时怎么玩,都是由自己决定。

其实目前的淘宝广告外投,对于客户来说是不透明的,卖家不知道自己的广告是否被外投,与淘宝站内的广告相比,站外的广告效果还是要差很多(会基于成交效果给予广告主打折),准确的说“淘宝的广告主是被外投”。

    其实,目前淘宝联盟,对于广告主与网站主自主选择仅有CPT计费模式,当广告位无广告时淘宝联盟会自动推送CPS模式广告。CPC模式广告,在淘宝联盟目前的网站主管理模式下,无法推广CPC广告。原因是,目前网站主没有明确的层级结构,对于CPC广告,流量好坏决定最后的成交率,相比CPT模式CPC更加赚钱,大量流量差的投放CPC广告,会导致cpc(单次点击消耗)降低,肯定对淘宝广告的收入会有非常大的影响。淘宝如果要开放CPC模式给外部网站主,必须有明确的层级结构、站内&站外竞价区分。

    外投每天能为淘宝带来大约300万收入,但对于主动获取广告的publisher来说没有智能匹配模式、没有灵活的定制化界面、多样的创意。当站内CPC趋于饱和时,如何开拓好外投,对于淘宝直通车则是必然的趋势。而CPS自然去占据长尾流量,CPC如何占据主外部中型网站,则是至关重要的。


posted @ 2011-03-20 20:01 石建 | Fat Mind 阅读(492) | 评论 (0)编辑 收藏
     摘要:  一、Java数据类型   数据类型就是对内存位置的抽象表达 (很多编程语言都依赖于特定的计算机类型和对数据类型属性的具体编译实现,比如word和integer数据类型的大小等;Java通过JVM保证数据所占存储空间的大小不会随硬件的改变发生变化)。 1.   Primitive data type :A primiti...  阅读全文
posted @ 2010-12-18 16:52 石建 | Fat Mind 阅读(279) | 评论 (0)编辑 收藏
题记:很长都没有学到这个时间啦,怀念大三。

一、摘要

1.       什么是“代理”

2.       代理模式与适配器模式、装饰者模式的区别,适用场景

3.       手工代理

4.       动态代理的原理

 

二、什么是“代理”

       如:一个CEO,会有一个助理,任何需要CEO处理的事情,都会经过助理过滤、整理后交给CEO。助理就是CEO的代理。

       自己理解,代理就是为帮实际的执行者,做数据的过滤和控制,为实际执行者屏蔽掉外部其它因素的影响,专心去做应该做的事情。

 

三、代理模式与适配器模式、装饰者模式的区别,适用场景

1、代理模式

HeadFirst 定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问。


如上图,代理模式的结构。

适用的场景,如:远程访问、访问权限控制、日志记录等。

装饰者模式,IO类图结构如下:



可以从OutputStream à FileOutputStream à BufferedOutputStream,功能依次增强,为对象增加更多的行为。

自己理解:目的不一样,代理是为控制对被代理对象的访问;装饰者,是对被装饰者功能的增强,避免过度使用继承实现不同的功能。

 

适配器模式,其区别从类图即可分辨出来,如下



Client请求ExecuteClass,但ExecuteClass暴露的接口不符合client的要求,在双方系统都不修改的情况下,利用适配器模式解决此问题。

三、手工代理



场景:根据id,获取Item;代理检查用户的权限是否有权限查看Item,已经记录log日志。具体代码很容易实现。

四、动态代理

对上面的场景,如果使用动态代理,步骤:

1. 根据interface,通过loader,生成Class对象

Class clazz = Proxy.getProxyClass(ItemService.class.getClassLoader(), ItemService.class);

2. 通过反射,获取Class对象的Construct对象(注意:Construct对象需要的参数类型)

Constructor c = clazz.getConstructor(InvocationHandler.class);

3. 调用Construct对象 newInstance()生成实例对象

proxy = (ItemService)c.newInstance(this); //thisInvocationHandler实例

 

思考问题:实现原理是什么



 

对于上面场景,实际动态生成的代理的类图。对代理的任何调用都会,super.handle.invoke(),用户实现InvocationHandler,覆写invoke方法,实现基于方法的控制。

从类图,也解释了为什么只能实现“接口”的动态代理,因为代理本身需要继承Proxy,如果实现“类”的代理,意味着要同时继承两个类,与Java不支持多继承相违背。

附代码是从网上摘抄过来的,代理的源码:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.lang.reflect.UndeclaredThrowableException;
public final class $Proxy0 extends Proxy implements Manager {
private static Method m1;
private static Method m0;
private static Method m3;
private static Method m2;

static {
   
try {
    m1 = Class.forName("java.lang.Object").getMethod("equals",
      
new Class[] { Class.forName("java.lang.Object") });
    m0 = Class.forName("java.lang.Object").getMethod("hashCode",
      
new Class[0]);
    m3 = Class.forName("com.ml.test.Manager").getMethod("modify",
      
new Class[0]);
    m2 = Class.forName("java.lang.Object").getMethod("toString",
      
new Class[0]);
   } catch (NoSuchMethodException nosuchmethodexception) {
    
throw new NoSuchMethodError(nosuchmethodexception.getMessage());
   } catch (ClassNotFoundException classnotfoundexception) {
    
throw new NoClassDefFoundError(classnotfoundexception.getMessage());
   }
}

public $Proxy0(InvocationHandler invocationhandler) {
   
super(invocationhandler);
}
@Override
public final boolean equals(Object obj) {
   
try {
    
return ((Boolean) super.h.invoke(this, m1, new Object[] { obj }))
      .booleanValue();
   } catch (Throwable throwable) {
    
throw new UndeclaredThrowableException(throwable);
   }
}
@Override
public final int hashCode() {
   
try {
    
return ((Integer) super.h.invoke(this, m0, null)).intValue();
   } catch (Throwable throwable) {
    
throw new UndeclaredThrowableException(throwable);
   }
}
}


posted @ 2010-12-12 02:24 石建 | Fat Mind 阅读(225) | 评论 (0)编辑 收藏

题记:一直对ThreadLocal疑惑,听完facebook大牛演讲后,总结点东西。

一、ThreadLocal的作用,整体结构

二、源代码简单分析
  1.set方法
  2.get方法

三、使用场景实例 ibatis SqlMapClientImp

后记:折腾半天,文章的样式也调整不好,打包上传。但愿能帮到别人。
http://www.blogjava.net/Files/shijian/ThreadLocal.rar [请用“web版式视图”阅读]


遗留问题:

      1.ThreadThreadLocalMap threadLocals 属性什么时候实例化 线程实例化时吗
答:第一次set时,会判断是否为null,若为null,初始化。

2.
ThreadLocalMap replaceStaleEntry(key, value, i); 做了什么
答:全清洗stale对象;存放当前对象在发现的第一个stale位置。因为Entry是继承WeakRerfence,任何一次的垃圾收集,都会导致其引用的对象被回收。

4.与Map方式的一些区别
Map策略:a、相同hash&key,覆盖value b、相同hashkey不同,当前元素做为单向链的第一个元素,原来第一个元素做为当前元素的下一个。
ThreadLocalMap策略:a相同,是不存在b情况;以ThreadLocal作为keyThreadLocalthreadLocalHashCode由原子AtomicInteger计算getAndAdd(0x61c88647)得到;在Entry[]数组的位置,通过threadLocalHashCode & (length-1)计算;对于b情况,继续查找Entry[]数组的下一个位置,是否可存放(key相同或null);当size>=threshold(len*2/3)做resize=oldLen*2. 


3.
ThreadLocalMap  getEntryAfterMiss(ThreadLocal key, int i, Entry e)
答:作用,查找没有存放在hash计算出index位置的元素。为什么出现此情况?见4,由ThreadLocalMap策略决定.

posted @ 2010-12-11 18:50 石建 | Fat Mind 阅读(318) | 评论 (0)编辑 收藏
  对自己、对环境题记:这样的环境,我是很不满意的,但是“有想法的人是不会被环境所束缚的,尽管不满的环境会带给他阻碍”

   2010年的最好一个月开始啦,很快这个月就会结束的,就像转眼间来淘宝已经半年啦!之前,兴奋的选择广告,觉得这是一个新鲜的从未接触的事物,环境的确是这样的;但自己团队负责的业务,更多的是“重复的沟通和劳动”,技术在这样的环境被淡化。其实根本的原因,在于"团队的职责与自己的发展方向不匹配",这是让自己很痛苦的事情。带给自己的是煎熬!幸好有老婆可以说说,和安慰我;不然,或许我已经离开(当然现在也给自己的是一个期限,不会一直在这样的环境待下去)。在2010年结束的时候,希望自己可以高兴的对自己说,我成长啦!在这最后的一个月,让我冲刺一下吧!

  想要的是:Jvm理知识补充、读书(围绕Jvm)、冷静(我想要冷静去平复内心的煎熬,用自己的行动去改善,去满意的度过每天)

  后记:买个篮球,明天早上去打球,肚子越来越大啦,真的不能再胖啦



    随手翻翻,10年写的一点感想。前天师兄有天在讨论,对一个公司、个人,什么到底是"技术" ?一致同意解决问题的能力,才是最关键。问题是"解决问题的能力,如何培养呢?"一致同意"最有效的方式,解决有挑战性的问题"。问题是"日常工作中,挑战性的问题,并不是随时都有?"老毛说的好,"有条件上,没有条件也要上",去深入理解团队、系统定位,去规划、去解决不合理的代码、不要重复劳动 ...
   同时一个人的软技能也是至关重要,擎天柱的培训还是很有收获,一定要尝试去运用学到的理论知识到实际的环境中,如跨团队配合。
   现在的心态是:先全心全意做好事情,再回头看,
对自己、对环境有不满意的,去改变,改变不了则学会放弃。

posted @ 2010-12-03 23:28 石建 | Fat Mind 阅读(234) | 评论 (0)编辑 收藏
题记:周五同学们讨论这个问题,听了很多"过来人"的感受,其实里面的道理还是要自己去慢慢揣摩,成为自己的东西,此会用帮助。

回想自己的学习:

自己最开始接触计算机的时候,是高中;现在还清楚的记得,第一节课,老师告诉怎么开机、关机等,自己心里全是兴奋和一些自卑。真正去学习计算机,还是大学专业的缘故(遗憾的是基础知识不牢);第一次接触编程是C,大一过年的时候,在家一个寒假都在看,感觉“这是一本天书”。
刚开始,主要是看书和老师上课讲,学的比较少;然后,自己去找资料,用baidu和论坛(csdn),尝试去写;慢慢有点自己的想法,去学习课外的知识(很感谢电驴,很多资料都来自于它),google和javaeye,看别人的博客;写过一点小东西之后,尝试着去理解背后的原理,去debug看源码,学习新知识时首先看官方tutorial&运行小例子,关注行业动态和新技术(reader订阅),会有意识去总结理解的内容,做事更加严谨和职业点 ... 这基本也是自己现在的状态。

讨论时,记下认为对自己有帮助的点:

1.学会使用,了解原理,与同类产品比较,提升认知的高度 
注:了解原理(理解的深度不够);与同类产品比较(尚未有这个意识)(重要性:高)

2.点到面,融合,形成自己的知识体系
注:这点,自己慢慢的有点意识(重要性:高

3.信息爆炸,学会筛选;看过的东西要记笔记
注:筛选(做的很不好,必须有选择性的看,工具reader);记笔记(部分阅读有笔记,认为重要的必须写下自己的理解)(重要性:高)

4.学习“相关性”知识
注:比如工作负责广告前段应用开发,有意识的去了解引擎和算法的相关内容(不要求细节,但是对整体必须有理解) (重要性:高)

5.帮助别人、分享,其实是提升自己的一个好办法
注:在精力允许的情况下,一定要善于帮助别人解决问题(原因:自己遇到的问题始终是有限的,同时增强影响力)

6.Java开发应该扩展的知识
注:a、数学(算法)相关   b、如何自己去实现一个框架,必须有质疑的态度   c、运行环境(linux、jboss等知识)

7.阅读别人代码,有新认识的时候去重构自己的代码或尝试去应用
注:

8.理论的总结
注:在广度、深度达到一定程度时,要注意理论的总结,站在更高的抽象层面去理解和解决问题


提醒自己:this is most important  is to do it 




posted @ 2010-11-20 23:34 石建 | Fat Mind 阅读(174) | 评论 (0)编辑 收藏
仅列出标题
共4页: 上一页 1 2 3 4 下一页 

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿

随笔分类

随笔档案

搜索

最新评论

What 、How、Why,从细节中寻找不断的成长点