- 浏览: 19060 次
- 性别:
- 来自: 湖南常德
文章列表
Java程序的运行过程:
1, 编译器将源代码编译成.class文件(对于虚拟机来说并不关心class文件的来源是什么,只要他符合java class文件的规则,就可以在jvm中运行,使用其它语言将其编译成class文件也是可以在jvm中运行的)2, ...
有时候需要从网页上获取数据,比如别一些网页上的新闻获取到放到应用上,其实这也算是一个简单的网络爬虫。
一、使用流和正则表达式的方法
通过流的方式获取网页的数据同时用正则来筛选自己想要的数据。
我测试的网站是湖南师范大学翔网学术天地http://flyhigher.hunnu.edu.cn/channels/399.html
我们以获取标记的标题为例,查看网页的源码
我们可以发现所有标题的规律,然后可以定义出对应的正则表达式:>第\\d{3}讲:[^_]*</a>
首先我们获取读取网页的代码,然后不断用我们定义的正则来匹配
public void getData ...
当遇到一个线程要产生数据而另一个线程要处理数据时,这就是生产者消费者的关系。生产者在生产数据以后可以直接调用消费者处理数据,也可以将生产出来的数据,放到缓冲区中,等待消费者在缓冲区中取出数据然后再处理。第一种算是同步执行的,生产者将数据产生之后等待消费者将数据处理然后进行下一个数据的生产,当消费者处理数据的时间很长,那么会直接影响到生产者的效率。第二种方法算是异步的,当生产者将数据产生以后,将数据存储到一个缓冲区中,然后当消费者要处理数据时,会直接到缓冲区中去数据。当缓冲区中没有数据时,那么消费者就要等待生产者生产数据,当缓冲区中的数据存满时,那么生产者就要先等待消费者先处理一部分数据。
...
1,为什么要有线程同步比如说你有的银行账户有1000块钱,你有一个存折还有一张ATM卡,那么你是不是就可以在你朋友的帮助下同时登录你的帐号,然后没人去到1000呢?结果是显而易见的,这是不可能的。所以为了避免多个线 ...
前些天讨论了位映射的内容,一个具体的例子就对于M个int的排重(就是排除重复的数),M至少大于内存的大小,这样我们就不能把所有的数直接放到数组里面。我们可以令M等于10亿,以32位的电脑为例,其最大可使用内存是4G,也就是2^32个字节,一个int占四个字节,能表示从2^32个数,所以内存是无法将这些数全部放进去的。但是用位映射的方式,我们可以用较小的位来表示int,也就是说我们可以用1位来表示一个int,也就是说原先需要4G容量的,现在我们只需要512M就可以满足要求。(不过这样做也是很暴力!) 但是在java中我们是不能直接对为进行操作的,能操作的最小的是byte(即八位),所以我们需 ...
前几天谈论了关于动态编译的问题,与动态编译相对的肯定就是静态编译。静态编译:在编译时确定类型,绑定对象动态编译:在运行时确定类型,绑定对象。动态编译发挥了java的灵活性的优点。定义一个接口
该接口的实 ...
数据结构之hash
首先介绍两种非常重要的数据结构。数组,为了方便我们把同类型的数据按照一定的数据放在一起[][][][],数组的好处在于,数组的查找很方便,只要知道下标便可以找到数据,但是数据的大小超过数组的大小时,那么就会变得非常麻烦,在java等强类型语言中数组的大小一旦被定义那么就无法改变(javascript中如果定义了一个10长度的数组a可以直接扩张该数组,比如a[10]),我们就只能创建一个新的数组,然后将原数组中的内容拿出来重新放到新数组中。这样做是很麻烦的。还有另外一种数据结构,链表,链表就像一根环环相扣的链子。链表的连接类似于如下结构,每个节点指向它的下一个节点O-> ...
网络通信:一句话说,用网络传输数据(各种数据)
。进行通讯那我们肯定需要知道传送到哪去,比如在现实中我们寄信,肯定需要知道目的地的地址,在计算机网络中我们就需要知道计算机的IP
,每个计算机拥有独立的IP
,这样我们就能把数据传送到我们需要的机器上,但是计算机上运行了那么多的程序我们怎么知道怎么区分他们呢?
因此我们用端口号区分我们计算机上的程序知道了IP
和端口号,我们就能对对应计算机上的对应程序发送数据,我们从最基础的文本消息开始传送。
首先我们需要一个服务器和一个客户端,听上去很牛逼,其实也就几句代码搞定的事。
Java.net.ServerSoc ...
一、数的相关
节点: 节点是树的基本组成单位,它由数据域和指向其他节点的指针
度: 节点拥有子节点的个数称为该节点的度。
叶子节点:叶子节点是树的终端节点,其度为0。
高度: 树种节点的最大层次称为树的高对(或者叫深度)。
根节点:
二叉树: 二叉树是树的一种,其特点是每个节点至多只有两颗子树(即
于2的节点),并且二叉树的子树有左右之分,其次序不能随意颠倒。
二叉树的遍历:二叉树有四种遍历次序,先序遍历,终须遍历,后序遍历
例如,一下面的树为例
先序遍历:
步骤:
若 ...
一、什么是线程 每个java程序都至少有一个线程,在学习线程之前我们的大部分程序都是单线程的,程序从main开始执行,一次向下执行每条代码,要是执行的过程中遇到阻塞,程序就会停滞。基本上所有的操作系统都能同时运行多个任务,而通常每个任务就是一个程序,每个程序就是一个进程。当一个程序运行时,内部可能包含多个顺序执行流(基本上互补影响),我们把这样的每个顺序执行流叫线程。
二、线程和进程
一个任务通常包含一条进程。当每个程序进入内存运行时,即变成一个进程。进程是运行中的程序,特点;
独立性:进程是独立存在的,拥有独立的资源,如地址空间,内存等。
...
首先,链表是一种顺序存储结构,每一个节点由存储数据元素的数据域和指向下一个节点的指针域(双向链表还有指向父节点的指针域)组成。链表在内存中是非连续、非顺序。与线性表相比,链表的插入和删除比较方便。
...
一、哈弗曼树,又称最优树,是一种带权路径长度最短的树。
路径长度: 两个节点之间的路径上的分支数目
数的带权路劲长度:树中所有叶子节点的带权路径长度之和(WPL值,其中WPL最小的就叫最优二叉树或者哈弗曼树)。
二、哈弗曼树的建立
哈弗曼树也算二叉树的一种,所以哈弗曼树的建立和二叉树类似,只是多了个参数--权值。
基本步骤:
一.读取文件,将读取的信息转化为ASCII码,建立数组以ASCII码为下标,记录字符出现的次数
二.生成节点,根据节点的权值排序(使用优先队列) 三.构建哈夫曼树,生成码表根据权值进行排序,根据权值排好序以后,去前两个节点也就是 ...
File是java中的与文件相关的类,可以对进行创建、删除、列出目录下的文件,判断文件或者目录。其位于java.io包中。在windows下的路径格式,例如某个桌面目录路径""。但是在java中“\”视为转译字符,因此在在使用该类是我们会将路径名写成“C:\Users\admin\Desktop”或者“C://Users//admin//Desktop”.
相对路径:指不以文件路径名开头的文件路径
绝对路径:指以文件根目录开头的路径
当前目录:指相对于程序运行时的相对路径
File中常用的方法: 列出根目录:File[]listRoot(),在windo ...
I/O体系结构总结
流的概念和分类: java类库中的I/O类分为输入和输出连个部分,并将其抽象为“流(stream)”,他代表任何有能力产生产生数据的数据源对象或者是有能力接收数据的接收对象,形象的说流像一根水管,将数据从一头,传到另一头。
流按方向分可分为:输入流和输出流。
按性质分可以分为:原始流InputStream和OutputStream,缓冲流BufferedInputStream和BufferedOutputStream,基于具体数据的流DataInputStream/DataOutputStream,基于对象读写的流ObjectInput/Objec ...
java集合框架总结
主要由以下三部分组成:
Set接口及其子类 : 不允许重复的对象(对每个对象只接受一次),是一个无序的集合
List接口及其子类 :按输入的顺序存储对象(所以允许重复的对象),是一个有序的集合
Map接口及其子类 :Map集合中的数据是拥有映射关系的
Set和List继承自Collection接口,Map不是
Set接口:
Set的常用实现类:HashSet,TreeSet,LinkedHashset
Set使用实列,
/**
* 创建
*/
public Set<Student> ...