自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(29)
  • 收藏
  • 关注

原创 Macbook Pro入手一个月使用体验

![Macbook Pro](http://7sbkoj.com1.z0.glb.clouddn.com/macScreen Shot 2015-07-01 at 15.32.56.png) 今年五月份入手了MacBook Pro和iPhone 6,现在已经使用了一个多月,感觉可以写写我的使用感受了。 在没有使用苹果产品之前,我根本不能理解那些果粉们的行为,然而使用了苹果产品一个月后,我已经从

2015-07-01 15:41:53 638

原创 有梦想的人,始终在路上!(记阿里实习生霸面经历,拿到offer)

今年2月份的时候就在网上找了阿里实习生的内推,然后过年期间一直在家里准备算法,看完了《算法》一书,实现了书中提到的多种数据结构,比如堆、散列表、红黑树等等。因为没有面试经验,也不知道面试会是什么样的形式,会问什么样的问题,我只是觉得把数据结构和算法理解透彻就可以了。原来还是我太天真了,我完全没有准备常见面试题。然后阿里3月份的时候就开始了内推的电话面试,由于准备不充分,TCP三次握手的状态都没有弄清

2015-05-09 15:11:29 1142

原创 有梦想的人,始终在路上!(记阿里实习生霸面经历,拿到offer)

今年2月份的时候就在网上找了阿里实习生的内推,然后过年期间一直在家里准备算法,看完了《算法》一书,实现了书中提到的多种数据结构,比如堆、散列表、红黑树等等。因为没有面试经验,也不知道面试会是什么样的形式,会问什么样的问题,我只是觉得把数据结构和算法理解透彻就可以了。原来还是我太天真了,我完全没有准备常见面试题。然后阿里3月份的时候就开始了内推的电话面试,由于准备不充分,TCP三次握手的状态都没有弄

2015-05-09 14:48:40 190

原创 深入学习Memcached

由于实验室在一个项目中用到了Memcached分布式缓存,自己这段时间也对分布式缓存深入学习了一下,本文就总结一下自己的收获,还是从Memcached是什么谈起吧。Memcached是什么Memcached是一款高性能的分布式内存对象缓存系统,使用它可以减少应用系统对数据库的直接访问,减轻了数据库负载,并且提升了应用程序的响应速度。可以将Memcached比作一个巨大的、存储了很多LRU算法操作系统

2015-04-18 22:19:54 561

原创 什么是CopyOnWrite

前段时间写过一篇关于concurrentHashMap的文章ConcurrentHashMap实现原理,其中讲到了实现ConcurrentHashMap的原理,这篇文章就讲一下CopyOnWrite的实现原理。Java中提供了两个CopyOnWrite容器,分别是CopyOnWriteArrayList和CopyOnWriteArraySet。如果想要高效的使用这两个容器,我觉的首先要弄懂CopyO

2015-04-16 22:28:58 1301

原创 Java中的线程

理解线程这段时间在看《Java并发编程实战》这本书,使自己对Java多线程的理解又加深一些,感觉自己可以总结一下了,本文就讲讲与线程有关的内容吧。我们要使用线程,首先需要理解线程,前短时间我在聊聊操作系统这篇文章中提到了一点关于线程的东西,有兴趣的同学可以读一下。有一点需要理解的就是,我们虽然常说“Java多线程”,但实际上线程这东西是由操作系统提供支持的,它并不是由Java本身提供支持的,所以实际

2015-04-16 20:57:03 546

原创 聊聊操作系统

在进入正题之前,先问一句,什么是操作系统,它和普通的应用程序有什么区别?这个问题虽然不难,但是它和我今天想要讲的内容密切相关。下面我就说说我的理解吧,我认为操作系统是一种抽象,这种抽象是人们经过长时间的实践和归纳提炼出来的,在没有操作系统的时候,人们仍然有办法制作程序并在机器上运行,但是人们必须针对硬件编程,这种方式十分繁琐而且有大量的重复劳动。人们慢慢发现,可以把程序对硬件资源的使用抽象出来,并提

2015-03-29 14:45:16 683

原创 MySQL数据库引擎详解

作为Java程序员,MySQL数据库大家平时应该都没少使用吧,对MySQL数据库的引擎应该也有所了解,这篇文章就让我详细的说说MySQL数据库的Innodb和MyIASM两种引擎以及其索引结构。也来巩固一下自己对这块知识的掌握。Innodb引擎Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔离级别这篇文章。该引

2015-03-26 22:30:09 1017

原创 ConcurrentHashMap实现原理

寒假阶段复习了下Java集合框架,感觉有些收获,但是文中没有提到有关并发集合的内容,这篇文章就来谈谈并发散列表——ConcurrentHashMap,我们知道HashMap本身并不是线程安全的,如果程序需要在多线程的环境下运行,那么我们可以选择Hashtable做为替代,但是看过Hashtable源码的同学应该都知道,Hashtable内部实现是将需要同步的方法加上synchronized关键字来实

2015-03-24 16:50:53 669

原创 再谈JVM类加载机制

几个月前写了深入理解Java类加载原理这篇文章,简单的谈了下我对Java类加载的理解,最近这段时间又研习了《深入理解Java虚拟机》一书,对JVM的类加载机制又有了更加系统的认识,下面我就再来讲讲学习心得吧。虚拟机如何进行类的加载通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区中的运行时数据结构。在内存(对于HotSpot虚拟机来说,这个内存是指方

2015-03-23 16:13:42 651

原创 Java内存模型与volatile关键字

Java内存模型(Java Memory Model)Java内存模型(JMM),不同于Java运行时数据区,JMM的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中读取数据这样的底层细节。JMM规定了所有的变量都存储在主内存中,但每个线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的所有操作都必须在工作内存中进行,而不能直

2015-03-23 16:12:57 508

原创 JVM自动内存管理机制分析

最近这段时间学习了Java虚拟机相关的一些知识,对Java程序的运行和JVM的内存管理策略有了更深的理解。这篇文章就对此做一下简单的总结。JVM内存模型要理解JVM的内存管理策略,首先就要熟悉JVM的内存模型,如上图所示,在执行Java程序的时候,虚拟机会把它所管理的内存划分为多个不同的数据区,称为运行时数据区。在程序执行过程中对内存的分配、垃圾的回收都在运行时数据区中进行。对于Java程序员来说,

2015-03-19 17:16:23 427

原创 数据库事务与其隔离级别

什么是数据库事务数据库事务就是一系列的数据库操作。我对事务的理解就是事务是一系列要做的操作,并按照特定的顺序完成。例如:1.换上运动装。2.打篮球。3.洗澡。这三个操作便可以组成一个事务,并且顺序是确定的。这三个操作要么全都做,要么都不做,不能出现如:只换上了运动装,打了篮球,而没有洗澡这样的情况。通过把一组相关的操作组成事务,可以使错误恢复更方便,并且能提高应用程序的可靠性。数据库事务的属性(AC

2015-03-18 12:35:12 377

原创 TCP原理

写这篇文章我已经考虑了很久,总是不愿意草草的下笔,总想等到自己对TCP理解的更深入些再提笔来写。但是又觉得,在写这篇文章的过程中,才能发现自己哪些地方理解的还不够深入,哪些地方已经掌握了。因为检测自己是否理解了一个技术原理的很好的途径,就是看自己能不能把它讲出来。下面就看看我能讲到什么程度吧。TCP是什么?TCP是Transmission Control Protocol(传输控制协议)的

2015-03-17 14:17:55 493

原创 树是一种伟大的数据结构

这篇文章用来简单聊聊“树”这种数据结构,我不想罗列太多的概念,只是讲一讲近期学习新产生的理解和体会。如标题所说,树是一种伟大的数据结构,那么它伟大在哪里呢?我认为树的伟大之处,就在于使用了树,可以让很多看起来不可能做到的事情变成了可能!只是凭借直观的想象可能难以感受得到,我就先列举一个树的应用的例子,然后在用简单的数字说明一下,相信就会有很深的体会了。树在查找领域有广泛的应用,我就用二叉查找树来讲吧

2015-03-16 17:48:50 498

原创 Javac和Java在CLI中的使用

最近这几天在学习Robert Sedgewick和Kevin Wayne的《算法》一书。第一章讲了一些Java编程的基础,第二章讲了一些最基础的排序算法。目前刚刚看完这两章,虽然很基础,但是毕竟不能只看书不练习,于是就动手写代码实践一下。可是刚开始写代码我就遇到了麻烦,我始终不知道在Eclipse中如何把标准输入流重定向到文件,就像在命令行中输入java Test < data.txt这样。我知道在

2015-03-16 17:46:21 465

原创 再谈基础排序算法——堆排序

前段时间写了这篇文章几个常见排序算法的实现,仅仅是对自己所学知识的一点总结。这不寒假这段时间又在看《算法》一书,前两章也是在讲基础排序算法,感觉书中的思路比我自己总结的好太多,于是就抽出时间来再写一写新的理解和体会。也算是对前面那篇文章的一点补充吧。关于堆排序说到堆排序,我们应该不陌生,以前在数据结构课堂上也曾学习过。但是当时老师直接就引出了堆排序,加上当时听课也没有特别认真,于是就听的云里雾里。现

2015-03-16 17:46:16 322

原创 Java集合框架

先来看一张Java集合的类图。本来是想自己画一个的,但是在网上看到了这个图之后就觉得没有再重新画一个的必要了。这个图相对网上其他一些图来说更全面一些。下面我们根据这个图来逐一分析具体的常用集合类。Iterator接口:这个接口定义了从集合中获取元素和判断集合中是否还有元素的方法。下图中是jdk1.8中Iterator接口申明的两个方法通过hasNext()方法可以判断集合中是否还有剩余元素,ne

2015-03-16 17:45:25 360

原创 Spring之思

一直在断断续续的学习Spring框架,到目前为止,虽然没有在实际项目中应用过,但也算是有一些收获了吧。由于刚刚读完吴军博士的《数学之美》,深受其启发,觉得无论做什么事情,心中都一定要有大格局。就像所谓的学习,我看来就可以分成两种,一种是“道”的学习,另一种是“术”的学习。道就是原理,术就是技术。技术可以千变万化,而原理永远都是那个原理。这也是我最近又认真学习算法知识的原因之一——新技术虽然层出不穷,

2015-03-16 17:44:34 398

原创 代码整洁之道

是的,我们就是一群代码猴子,上窜下跳,自以为领略了编程的真谛。可惜,当我们抓着几个酸桃子,得意洋洋的坐到树枝上,却对自己造成的混乱熟视无睹。那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。这段话引用自Robert C.Martin(鲍勃大叔)所著的《代码整洁之道》。当时刚买来这本书时,只是随便翻了翻,觉得没什么意思就扔到一边去了。最近在书堆里又偶然发现了它,便又拿出来重新读了读。而这次就真

2015-03-16 17:42:18 393

原创 我所理解的函数式编程

第一次听说函数式编程应该是至少一年前的事情了,那时候也仅仅是知道有这么个东西,一点也不了解它具体是什么意思。函数式编程本身也不是什么新鲜事物,早在很久以前就已经出现了。而这些日子函数式编程变得越来越受关注,最新推出的Java1.8也加入了函数式编程的特性,于是这些天就认真了解了一下有关函数式编程的内容,这篇文章就总结一下我这几天的所学和我对函数式编程的理解。也希望其他对函数式编程有兴趣的新手同学能从

2015-03-16 17:41:04 432

原创 计算机科学知识和技能评估

前段时间在网上看到《30分钟,让你成为更好的程序员》这篇文章,觉得很有实用价值,对我也很有启发。通过画一张图表分析自己的知识和技能,很高效而且很实用,所以我也对自己的知识和技能进行了分析。也正如那篇文章所说,这个图表并不是要详细列出自己所有的知识和技能,而是让你自己对自己的专业技能有一个全局的了解。下图就是我自己现阶段的相关专业技能评估,每个技能分为5个等级,1代表了解但没有实际操作过,5代表熟练掌

2015-03-16 17:40:45 563

原创 Java的反射机制

今天在慕课网上看了一些有关Java反射的视频,感觉收获不小。反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。自从学Java以来就一直对反射这块内容不是很理解,今天就觉得自己突然开窍了,好像理解了些什么,于是就趁热打铁记录下来吧。一切皆是对象要学习面向对象编程,首先要理解什么是对象,面向对象更是一种思想,而不仅仅是一种技术。在Java中,对象是某个类的实例,那么类本身是不

2015-03-16 17:37:43 320

原创 码农该如何提高英文水平

为什么要写这篇文章呢?原因在于自己深深的认识到了英语水平对于一个不愿安于现状的程序员的重要性。很多高质量的学习资源,尤其是和计算机相关的高质量学习资源,基本上都是英文的。像一些先进技术的资料就更不用提了。即使有了中文翻译版本,也要落后至少半年。况且英文原文经过翻译之后,会有很多不准确的、不能表达作者原意的地方,有时便会误导读者。再者,英文水平的高低也会影响程序员写出的代码质量。比如变量的命名、函数的

2015-03-16 17:34:24 670

原创 Java核心技术复读笔记

关于排序算法的稳定性稳定,即不需要交换相同的元素。 考虑一种情况,有一个已经按照姓名排好序的员工列表,现在需要按照工资再次排序。如果有两个员工的工资相等。那么稳定的排序算法,将会保留按名字排列好的顺序。排序的结果将产生这样一个列表:首先按照工资排序,工资相同者再按照姓名排序。而不稳定的排序算法,将会打乱原来按姓名排好的序列。关于阻塞队列对于许多多线程问题,都可以抽象成生产者与消费者问题,可以通过使

2015-03-16 17:33:30 353

原创 深入理解Java类加载原理

虽然每天都在用Java,现在做的项目后台也是用的Java语言,近期帮师兄做的算法实验也是用Java实现的,但是总觉得自己对这门语言学习的不够深入,仅仅停留在会用的层面上。今天看了一位中科大师姐的文章,觉得自己很有必要再深入学习这门语言,还需要加深自己对Java的理解。我个人觉得,对一个程序员来说,理解力十分重要。一门编程语言,学会使用很容易,但是要真正理解这门语言的设计哲学似乎就没那么容易了。而一但

2015-03-16 17:33:00 332

原创 解决不能远程连接Linux服务器上MySQL的问题

今天在实验室的服务器上安装MySQL,装好后却发现远程的电脑无法连接到MySql服务器。服务器操作系统是Ubuntu 14.04。于是在网上查了些资料,折腾了半天后终于搞定了,下面是具体的步骤。安装好MySQL后,修改如下文件sudo vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1,将绑定地址改成0.0.0.0或者直接将该行注释掉然后启动MySQL服

2015-03-16 17:32:03 505

原创 Git的简单使用

Git作为一款强大的分布式版本控制系统,如今已经变得十分流行,俗话讲:技多不压身。更况且作为一名码农,连Git都不会用的话,也是会很忧伤的。 前几天在廖雪峰的官方网站学习了他的Git教程,感觉收获颇丰。他的教程很详细,很适合初学者学习,现在把我学到的一点东西和大家分享下,并巩固一下经常用到的Git命令。git init #把这个目录变成Git可以管理的目录git add <file> #添加一个

2015-03-16 17:29:21 274

原创 几个常见排序算法的实现

冒泡排序突然心血来潮想要自己再重新实现一下当时学过的几个排序算法,然后马上就打开eclipse开始敲代码。说到排序,首先想到的就是冒泡,记得这个算法还是大一入学不久,编程入门老师讲过的。当时还是用c++实现的冒泡,现在虽然知道冒泡的原理,但是很多实现细节都感觉有些模糊了,今天就重新用Java实现一下,加深一下对其的理解。代码详见冒泡排序java实现。 冒泡排序的原理十分简单也很容易理解,比较两个相

2015-03-16 17:27:01 420

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除