人生思绪
未读学习Java已经好几个月的了,不管是看书还是看视频,总是感觉的好简单的,看着书上讲的,听着视频中老师讲的,感觉很是简单的,没什么难度的,可事实是真的如此的吗?
沙漠中树之所以能够不断的成长,在于它不断和恶劣的环境作斗争,根不断深入到下面去吸收养分,才得以存活;小鸟之所以能在空中翱翔,是因为它不断的拍打者自己的那双小小的翅膀;石头之所以能被水滴击穿,是因为水滴对着石头的同一个地方不断的滴打着。都是经过不断的努力,不断的奋斗,才得以成功,而且是针对正确的方式去做,用自己实际行动在行动。而想想自己,这几个月的学习,好像是仍然只是停留在原地,没有得到提高,时间花了那么的多,精力也花的不少,可是就是没有得到一点的起色,或是效果实在是太低。
无意间在上网的时候,看到一篇文章,我从头看到尾,连续的看的好几篇的,越是感觉自己就是这样的,自己是真正的弄懂的吗?学到的真正的是成为自己的了吗?没错自己看的视频很多,自己看的书也是很多,自己听别人说的也是很多,自己的努力也很多,可是自己有没有去做,有没有好好的动手,动脑,自己亲手去做,去把一个问题的原由,和解决的方法,从头到尾的用自己的思想,当然也 ...
看十个成功故事,不如看一个失败故事更让自己警醒。中陛资本合伙人丁辰灵根据公开报道整理出了 17 个有代表性的失败案例,并做出了深度点评,为有志创业的人提供了从公司财务、定位、团队,到市场、资本、政府监管、用户价值等各个方面的经验教训。
1. 亿唐网
不少人还记得 2000 年北京街头出现的大大小小的亿唐广告牌,“今天你是否亿唐”的那句仿效雅虎的广告词着实让亿唐风光了好一阵子。亿唐想做一个针对中国年轻人的包罗万象的互联网门户。他们自己定义了中国年轻人为“明黄一代”。
失败的教训:缺少定位,融资过多
1999年,第一次互联网泡沫破灭的前夕,刚刚获得哈佛商学院 MBA 的唐海松创建了亿唐公司,其“梦幻团队”由 5 个哈佛 MBA 和两个芝加哥大学 MBA 组成。
凭借诱人的创业方案,亿唐从两家著名美国风险投资 DFJ、SevinRosen 手中拿到两期共 5000 万美元左右的融资。
亿唐宣称自己不仅仅是互联网公司,也是一个“生活时尚集团”,致力于通过网络、零售和无线服务创造和引进国际先进水平的生活时尚产品,全力服务所谓“明黄e代”的 18~35岁之 ...
前言GOF 基于经验总结并发明了很多设计模式,客观的说,都非常经典,具有重大的理论指导和实战运用价值。然而这些设计模式远远不能穷尽我们的业务需求,自然也不可能完全支撑我们的业务发展;另一方面,削足适履般生搬硬套设计模式,往往使项目在代码维护、需求变更方面耗费更大的精力和成本。
以本人多年的工作经验来看,知道设计模式是架构师或者核心设计人员的基本知识,但如何运用这些基本知识进行再创新并有效解决核心商业问题,才是真正的价值所在,而不是在一些无关紧要的技术面前玩杂耍。
如何基于业务需求驱动理念来开展我们的模式创新,成为了当今软件架构师、设计师的重要职责之一。
所以本文所要阐述的,就是基于本人所经历的具体项目案例,思考并总结如何基于业务需求驱动思想,开展有价值的设计模式创新。
项目背景本人所参与的这个项目,是一个国家级的身份注册项目,叫 NRIC(National Registration Identity Card)项目。本人的角色是项目唯一的架构师。
身份注册涉及很多的资格审核(Eligibility Verification),也就是说,系统需要检查这个那个一系列的条件,以确保在进行身份 ...
多线程-并发
未读这个故事源自一个很简单的想法:创建一个对开发人员友好的、简单轻量的线程间通讯框架,完全不用锁、同步器、信号量、等待和通知,在 Java 里开发一个轻量、无锁的线程内通讯框架;并且也没有队列、消息、事件或任何其他并发专用的术语或工具。
只用普通的老式 Java 接口实现 POJO 的通讯。
它可能跟 Akka 的类型化 actor 类似,但作为一个必须超级轻量,并且要针对单台多核计算机进行优化的新框架,那个可能有点过了。
当 actor 跨越不同 JVM 实例(在同一台机器上,或分布在网络上的不同机器上)的进程边界时,Akka 框架很善于处理进程间的通讯。
但对于那种只需要线程间通讯的小型项目而言,用 Akka 类型化 actor 可能有点儿像用牛刀杀鸡,不过类型化 actor 仍然是一种理想的实现方式。
我花了几天时间,用动态代理,阻塞队列和缓存线程池创建了一个解决方案。
图一是这个框架的高层次架构:
图 1 框架的高层次架构
SPSC 队列是指单一生产者 / 单一消费者队列。MPSC 队列是指多生产者 / 单一消费者队列。
派发线程负责接收 Actor 线程发送 ...
在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code),以类文件的形式保存在磁盘上(.class)。Java虚拟机(JVM)会负责把Java字节代码加载并执行。Java通过这种方式来实现其“编写一次,到处运行(Write once, run anywhere)” 的目标。Java类文件中包含的字节代码可以被不同平台上的JVM所使用。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类。在某些情况下,可能会需要动态的生成 Java字节代码,或是对已有的Java字节代码进行修改。这个时候就需要用到本文中将要介绍的相关技术。首先介绍一下如何动态编译Java源文件。
动态编译Java源文件在一般情况 ...
1. 概述很多企业选择MySQL都会担心它的数据丢失问题,从而选择Oracle,但是其实并不十分清楚什么情况下,各种原因导致MySQL会丢失部分数据。本文不讨论Oracle和MySQL的优劣,仅仅关注MySQL丢失数据的几种情况。希望能够抛砖引玉,让各位MySQL大牛们梳理出MySQL最安全或者性价比合适的适合各种应用场景的方案。
2. 问题定义一般我们希望把一系列的数据作为一个原子操作,这样的话,这一系列操作,要么提交,要么全部回滚掉。
当我们提交一个事务,数据库要么告诉我们事务提交成功了,要么告诉我们提交失败。
数据库为了效率等原因,数据只保存在内存中,没有真正的写入到磁盘上去。如果数据库响应为“提交成功”,但是由于数据库挂掉,操作系统,数据库主机等任何问题导致这次“提交成功”的事务对数据库的修改没有生效,那么我们认为这个事务的数据丢失了。这个对银行或者支付宝这种业务场景来说是不能接受的。所以,保证数据不丢失也是数据库选择的一个重要衡量指标
mysql的架构和普通的数据库架构最大的差异在于它使用插件式的存储引擎。数据的存取由存储引擎负责。要了解MySQL数据丢失的问题就需要从MyS ...
1,创建索引对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。
2,复合索引比如有一条语句是这样的:select * from users where area=’beijing’ and age=22;如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。 ...
Servlet
什么是Servlet? Servlet是一个JavaEE组件,是在服务器端运行以处理客户端请求并作出响应的程序。
Servlet的执行过程?首先,客户端发送请求到服务器端;
其次,服务器端根据web.xml文件中的Servlet相关配置信息,将客户端请求转发到相应的Servlet;
之后,Servlet会根据request对象中封装的用户请求与数据库进行交互,返回数据之后,Servlet会将返回的数据封装到response对象中;
此时,控制权从Servlet重新回到服务器端,最后,服务器端将响应信息返回给客户端,并且跳转到相应的页面。
Servlet的生命周期?1)加载和实例化;在第一次请求Servlet时,Servlet容器将会创建Servlet实例;
2)初始化;Servlet容器加载完成Servlet之后,必须进行初始化,此时,init方法将被调用;
3)Servlet初始化之后,就处于响应请求的就绪状态,此时如有客户端请求发送,就会调用Servlet实例的service方法,并且根据用户的请求方式,调用doPost或者doGet方法;
4)最后,Serv ...
一直想抽空把Spring源码拿来读读,但真正去做这件事的时候发现不简单,Spring发展这么多年,它的规模已不是一个一般的开源框架所能比的,它的主要架构和流程不是非常清晰,很难抓到要害,但有一点可以肯定,它的根基是IoC和AOP,所有的功能扩展和对其他开源框架的支持都是基于这两点来做的,因此要搞定Spring源码主要就是要搞定IoC和AOP这两块。
IoC从原理上来说是非常简单的,无非就是从配置文件解析开始到最后在内置容器中管理各个对象,但从Spring IoC源码上看是个非常庞大的体系,因为Spring能支持的特性太多,针对这一点,我已不太可能仔细地阅读每一个细节,也不太可能通过什么方式把这些细节在有限的篇幅中表达出来,只能抓住关键生命周期中关键步骤。
在我看来,IoC最核心就是两个过程:IoC容器初始化和IoC依赖注入,下面通过简单的图示来表述其中的关键过程。
Spring源码学习(二)—— AOP
AOP有些特有的概念,如:advisor、advice和pointcut等等,使用或配置起来有点绕,让人感觉有些距离感,其实它的实现就是一组标准的设计模式的组合使用:Facto ...
A diagram is sometimes worth 1000 words. The following diagrams are from Java tutorials on Program Creek, they have received the most votes so far. Hopefully, they can help you review what you already know. If the problem is not clear by the diagram itself, you may want to go to each article to take a further took.
1. String Immutability
The following diagram shows what happens for the following code:
12String s = "abcd";s = s.concat("ef");
2. The equals() and hashCode() Co ...
