随笔分类 - java
摘要:线程技术可以让我们的程序同时做多件事情,线程的工作模式有很多,常见的一种模式就是处理网站的并发,今天我来说说线程另一种很常见的模式,这个模式和前端里的ajax类似:浏览器一个主线程执行javascript,页面渲染等操作,当我们使用ajax向服务端发起请求,由于这个过程很慢,ajax的异步模式可以让
阅读全文
摘要:最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知道我学习java多线程开发是很难的,直到现在写这篇文章的时候,虽然我对java多线程里的API比...
阅读全文
摘要:今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑问无法得到正确的解释,为什么我们现在做java的web开发,会选择struts2或者spring...
阅读全文
摘要:一、下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为【编辑推荐】的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天,按中国辞旧迎新的传统,也作为我2014年第一篇博客,我想开篇前要总结下2013年的技术学习。今...
阅读全文
摘要:一、序言 Hadoop是一个技术生态圈,zookeeper是hadoop生态圈里一个非常重要的技术,当我研究学习hadoop的相关技术时候,有两块知识曾经让我十分的困惑,一个是hbase,一个就是zookeeper,hbase的困惑源自于它在颠覆了我对数据库建模的理解,而zookeeper的困惑却...
阅读全文
摘要:session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的情况时候我们需要更加深入的理解session的机制,本文将梳理下session的相关知识,为设计可替代web容器自带的session机制打个基础。1.1session的概念在计算机专业术语里:session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册入系统到注销系统之间所经过的时间以及如果需要的话,可能还有一定操作空间。具体到web应用里的session,大家都做过web开发,这里我
阅读全文
摘要:计算机系统开发安全是永远都不能回避的问题,这里我想写一篇关于计算机安全的笔记,便于我以后相关问题和知识的查找,今天的文章不讲如何去写加密解密程序,而是宏观的介绍加密加密的相关知识,从整体把控加密解密所涉猎的方方面面,我后面博客会讲解java里实现这些算法的方式,本文作为其铺垫。 安全技术的目标: 安全技术的目标包括九个方面,它们分别是:1) 保密性:确保数据仅能被合法的用户访问,数据不能被没有被授权的用户访问。2) 完整性:指数据只能由授权方或以授权的方式进行修改,即数据在传输的过程中不能被未授权的用户修改。3) 可用性:确保所有的数据仅在适当的时候可以由授权方访问。4) 可靠性:主要...
阅读全文
摘要:在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务。通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解。 远程调用是系统与系统之间的通信机制,它的另一种理解就是进程间的通信。做分布式系统的开发,远程调用技术是其核心技术。远程调用技术可以将一组计算机系统形成一个网络系统,对外提供整体服务,那么这一群的计算机系统就构成了一个更大型,性能更高的计算机系统。 我在前面的博客里介绍了一种分布式网站的架构设计,其中就有一个使用netty技术编写的组件作为前端系统和服务端系统通信的媒介。在一个大型的互联网公司里会...
阅读全文
摘要:开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密。这个可能是我做技术研究的思路有关,我开始学习某一套技术总是想着这套技术到底能干什么,只有当我真正理解了这套技术解决了什么问题时候,我后续的学习就能逐步的加快,而学习hdfs时候我就发现,要理解hadoop框架的意义,hdfs和mapreduce是密不可分,所以当我写分布式文件系统时候,总是感觉自己的理解肤浅,今天我开始写mapreduce了,今天写文章时候比上周要进步多,不过到底能不能写好本文了,只有..
阅读全文
摘要:继续研究hadoop,有童鞋问我,为啥不接着写hive的文章了,原因主要是时间不够,我对hive的研究基本结束,现在主要是hdfs和mapreduce,能写文章的时间也不多,只有周末才有时间写文章,所以最近的文章都是写hdfs和mapreduce。不过hive是建立在hdfs和mapreduce之上,研究好hdfs和mapreduce也是真正用好hive的前提。 今天的内容是mapreduce,经过这么长时间的学习,我对hadoop的相关技术理解更加深入了,这回我会尽全力讲解好mapreduce。 第一篇文件时研究mapreduce前的准本工作。 研究hadoop的准备工作 要研究...
阅读全文
摘要:1.什么是分布式文件系统?管理网络中跨多台计算机存储的文件系统称为分布式文件系统。2.为什么需要分布式文件系统了?原因很简单,当数据集的大小超过一台独立物理计算机的存储能力时候,就有必要对它进行分区(partition)并存储到若干台单独计算机上。3.分布式系统比传统的文件的系统更加复杂因为分布式文件系统架构在网络之上,因此分布式系统引入了网络编程的复杂性,所以分布式文件系统比普通文件系统更加复杂。4.Hadoop的文件系统很多童鞋会把hdfs等价于hadoop的文件系统,其实hadoop是一个综合文件系统抽象,而hdfs是hadoop旗舰级文件系统,hadoop除了hdfs还能集成其他文件系
阅读全文
摘要:在上篇文章里,我列举了一个简单的hive操作实例,创建了一张表test,并且向这张表加载了数据,这些操作和关系数据库操作类似,我们常把hive和关系数据库进行比较,也正是因为hive很多知识点和关系数据库类似。 关系数据库里有表(table),分区,hive里也有这些东西,这些东西在hive技术里称为hive的数据模型。今天本文介绍hive的数据类型,数据模型以及文件存储格式。这些知识大家可以类比关系数据库的相关知识。 首先我要讲讲hive的数据类型。 Hive支持两种数据类型,一类叫原子数据类型,一类叫复杂数据类型。 原子数据类型包括数值型、布尔型和字符串类型,具体如下表所示:基...
阅读全文
摘要:Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多。今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作用。 Zookeeper是针对大型分布式系统的高可靠的协调系统。由这个定义我们知道zookeeper是个协调系统,作用的对象是分布式系统。为什么分布式系统需要一个协调系统了?理由如下: 开发分布式系统是件很困难的事情,其中的困难主...
阅读全文
摘要:我们首先看看下面代码:package cn.com.sxia;public class RefObj { public static void main(String[] args) { String str1;//@1 String str2 = new String();//@2 System.out.println(str2.equals("")); System.out.println(str1.equals("")); }} 代码是在定义字符串,我想所有学过编程语言的人都知道这是怎么回事,但是二者是有区别的:@...
阅读全文
摘要:记得我在写javascript笔记时候说过:程序就是由数据和运算组成。所以对数据存储以及读取方式的研究是熟练掌握语言精髓的重要途径。我在上篇文章里说道我想重新回顾一些知识,这些知识就是数据存储的问题,而且是复杂数据存储的问题。我个人认为一名优秀的程序员应该有四个主要指标:一是项目经验,二是程序优化的能力,三是良好的设计理念,四是快速准确定位程序bug的能力。项目经验不说,这个需要积累,而其他的能力都是可以通过学习而不断强化的。而语言中数据存储能力掌握的优劣是你优化程序的水平的高低的重要指标,你想让自己的程序越来越快,按什么数据模型快速存储数据,并且能很快的检索被存储的数据才是程序优化的本质..
阅读全文
摘要:本文的主题是线程的协作和死锁。 线程的协作我个人觉得就是线程的通信,比如有A和B两个线程,A和B都可以独立运行,A和B有时也会做信息的交换,这就是线程的协作了。在java里线程的协作是通过线程之间的“握手机制”进行的,这种握手机制是通过Object类里的wait()和notify()来实现的。 在我的记忆里,sleep(),wait()和notify()(notifyAll())方法是最爱被面试官问道的问题。下面我就从这几个方法的关系开始说起最终引入到线程协作的问题。 sleep()方法属于Thread类,wait()和notify()(notifyAll())方法属于Object类...
阅读全文
摘要:终于到了这个小系列的最后一篇了,写这个主题的博文感觉很奇特,虽然我尽全力去深入理解这些知识点所蕴含的深意,最终也感觉似乎懂了,但略微冷静下来后又感到自己的理解还是有点似是而非。我想原因还是在于自己知识面还不够宽阔,有些底层的计算机技术我并不熟悉,解决这些不熟悉的计算机技术就是我以后学习的目标之一。开始进入正题之前,我还是想再强调下,线程技术真的很重要,熟练掌握了线程技术一定能解决我们在编程时候碰到的各种难以解决的问题。 上篇博文里最后我们写了一个SynchronizedEvenGenerator类:package cn.com.sxia;public class Synchronized...
阅读全文
摘要:要真正理解如何解决线程资源共享冲突的问题,还真有点复杂,但是这个又是线程的精华所在,也是线程中最重要的知识,我要尽力讲清楚它,因此内容比较多了,从中篇里还出了个中篇。 上篇博文的末尾我写了一段实例代码,想表现线程抢占资源时候所发生的资源冲突问题,不知道大家真的看明白了那段代码的意思吗?反正我对这段代码琢磨了半天才领悟了其中的含义。这里我还是先把前面那段代码贴出来:package cn.com.sxia;public class Semaphore implements Invariant { private volatile int semaphore = 0; ...
阅读全文
摘要:上篇里我讲到了java里如何去创建一个线程的问题,上篇的代码里创建的线程都是独立的,也就是说创建的线程都不会相互的干扰,独立的进行属于自己的运算,更重要的是上篇博文里创建的线程所使用的资源都是独占式的,不会有人跟它争,但是实际对线程的应用中,更多的也是更难的还是几个线程会抢夺同一个资源,比如火车的售票系统,碰到这样的问题就麻烦多了。 由于这个问题比较复杂我把线程的基础篇中篇分为两篇文章来发布,今天是前篇。回到主题吧,当N多的线程同时访问一个资源,并且N多的线程都有对这个资源修改和访问的能力,解决资源冲突的技术就太重要了,记得我在研究前端优化技术的时候,脑海里浮现最多的名词就是高并发,而对...
阅读全文
摘要:最近一直在看提升javascript代码性能的资料,看来看去就是为了如何提升网站的并发能力或者是软件如何对海量数据进行处理,这里我不想探讨解决这些难题的解决方案,但要解决并发或者是海量数据的问题一定离不开线程,线程的确相当的重要,当你要满足日新月异的用户需求而你所做的软件没有好好利用线程的知识绝对是一件无法让人接受的,就算你是一个关注前端技术的工程师也不会幸免对线程的运用,我相信不到三年我们的主流浏览器都会或多或少有类似的线程开发模型。同时线程也是面试最爱问的问题,线程的确可以很好的衡量一个程序员水平的技术难点,对于一个关注技术的工程师,想把软件真正做好,一定要熟练掌握好线程,我就从今天开..
阅读全文