博文

目前显示的是 一月, 2019的博文

由txt文件制作带目录的kindle电子书

图片
由txt文件制作带目录的kindle电子书 正则修改文章内容 我们使用正则来更改正文,让标题用上markdown的标题样式“#”,正则如下: 查找:^(|)第(. )卷替换:#第\2卷^表示一行的开始(|)表示空格(. )任何字符 \2表示第二个括号的内容不改变 使用calibre制作 注意生成步骤下的内容目录 h1对应//h:h1 h2对应//h:h2 等等 最后希望大家做出自己想要的电子书样式 放一张自己制作成功的图

循序渐进Socket网络编程(多客户端、信息共享、文件传输)

循序渐进Socket网络编程(多客户端、信息共享、文件传输) 前言:在最近一个即将结束的项目中使用到了Socket编程,用于调用另一系统进行处理并返回数据。故把Socket的基础知识总结梳理一遍。 1、TCP/IP协议   既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输。这里就要使用到TCP/IP协议。   TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成。IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机。TCP层负责面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象。 2、TCP与UDP   TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。   UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 TCP与UDP区别: TCP特点: TCP是面向连接的协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接协议,所以只能用于点对点的通讯。而且建立连接也需要消耗时间和开销。 TCP传输数据无大小限制,进行大数据传输。 TCP是一个可靠的协议,它能保证接收方能够完整正确地接收到发送方发送的全部数据。 UDP特点: UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。 TCP与UDP应用: TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠...

线程池

线程池 先看几个概念: 线程:进程中负责程序执行的执行单元。一个进程中至少有一个线程。 多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。 线程池:基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。 线程池的优点 1)避免线程的创建和销毁带来的性能开销。 2)避免大量的线程间因互相抢占系统资源导致的阻塞现象。 3}能够对线程进行简单的管理并提供定时执行、间隔执行等功能。 线程 创建线程的两种方式 继承Thread类,扩展线程 ​ x class DemoThread extends Thread { ​ @Override public void run() {   super.run();   // Perform time-consuming operation... } } ​ DemoThread t = new DemoThread(); t.start();} 备注 线程和进程的区别 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。 Thread 类中的 start() 和 run() 方法有什么区别? 调用 start() 方法才会启动新线程;如果直接调用 Thread 的 run() 方法,它的行为就会和普通的方法一样;为了在新的线程中执行我们的代码,必须使用 Thread.start() 实现Runnabke接口 xxxxxxxxxx public class DemoActivity extends BaseActivity implements Runnable { ​ @Override public void onCreate(Bundle savedIns...