自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

seaicelin的博客

坚持吧,少年!用心做好每件事~

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

原创 简单笔记(rsrp/mbps/session/dialog/dbm)

会话(session),对话(dialog),事务(transaction),分支(branch)名词定义SIP层会话session是媒体交换之后才建立的SIP使用SDP来通知传输层(RTP)来创建,增加,移除和修改会话信令层,媒体层对话两个UA间持续一段时间的点对点的sip连接Call-ID,From,To唯一确认一个对话信令层事务由一个SIP请求和所有对它的响应构成事务的区分通过Via字段栈顶的Branch的值来确定信令层分支用来标识事务,

2022-05-25 20:21:21 980

原创 Android中如何屏蔽IP地址

安卓如何屏蔽一个iP地址

2022-03-08 21:11:57 11370 3

原创 说说策略路由

前阵子问一个老同事,我说你觉得android数据网络管理这部分知识点的核心是什么?他说:apn管理,网络评分机制,这些是最基础最简单的,我认为的核心应该是策略路由。

2022-01-06 21:24:29 7880 1

原创 讲一下iptables

iptables相关概念iptables是运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的处理和转发。它通过定义规则并交给内核中的netfilter即网络过滤器来读取,从而实现iptables的功能。

2022-01-06 21:03:18 3129

原创 说说DNS

DNS简单介绍

2022-01-06 18:49:51 2107

原创 一个mss大小引发的思考

一个mss大小引发的思考

2021-12-20 22:57:17 2863

原创 [2018年底]电信短信自注册,rild重启等项目问题总结

这两个月做了两个项目,可以说算是一年当中最忙的阶段了。升级项目问题难度完全不亚于新项目,和其他模块扯了很多皮, 踢过皮球,也提了很多代码。总的来说,增加了解 bug 经验。此贴记录一下解过的问题,方便以后回顾。电信短信自注册提供相关短信接口给上层app调用,在 ISms.aidl 增加专用接口解决短信7bit编码问题,由于这三个特殊字符,0x00,0x01,0x03,在编码过程中,不能正...

2019-06-21 12:35:27 1375 2

原创 [Java网络编程三]编写基于UDP的Socket程序

基于 UDP 的数据报和套接字UDP 是传出层的一种协议,它比 TCP 具有更快的传输速度,但不可靠。UDP 发送的数据单元称为 UDP 数据报。当网络传输时,无法保证数据报一定到达目的地,也无法保证各个数据报按发送顺序依次到达目的地。在 Java 中,Java.net.DatagramSocket 负责接收和发送数据 UDP 数据报。它提供了接收和发送数据报的方法:① public voi...

2018-10-25 22:01:03 1086

原创 [Java网络编程二]编写基于TCP的Socket程序

读书百遍,其义自现。(三国志) 它的意思是读书一百遍,其中的意义和思想就自然显露出来了。我们知道,在 Java 提供的网络库中,提供了三种套接字类:java.net.Socket, java.net.ServerSocket,DatagramSocket。其中,Socket 和 ServerSocket 是建立在 TCP 协议的基础上,DatagramSocket 建立在 UDP...

2018-09-13 07:37:37 714

原创 [Java网络编程一]TCP/IP协议介绍

TCP/IP 参考模型看完并发编程,接着继续看Java网络编程,不要停!下面是 OSI 参考模型和 TCP/IP 参考模型的比较。TCP/IP 参考模型吸取了网络分层的思想,但是对他的层次做了简化,并且在网络各层(除了主机-网络层外)都提供了完善的协议,这些协议构成了 TCP/IP 协议集,简称 TCP/IP 协议。 各层的协议如下所示:主机-网络层:实际上 TCP/IP 参...

2018-08-16 22:24:58 3580

原创 [Java并发编程实战]状态依赖性的管理之阻塞队列的实现(二)

明日复明日,明日何其多?我生待明日,万事成蹉跎。———《明日歌》 这句诗给人的启示是:世界上的许多东西都能尽力争取和失而复得,只有时间难以挽留。人的生命只有一次,时间永不回头。反复告诫人们要珍惜时间,今日的事情今日做,不要拖到明天,不要蹉跎岁月。上一篇遗留的问题: 有没有某种方法可以达到,当条件为真时,线程立即醒过来执行呢?答案是肯定的。所以,来看第三种方法,代码清单如下...

2018-07-21 07:01:44 318 1

原创 [Java并发编程实战]状态依赖性的管理之阻塞队列的实现(一)

人生自古谁无死,留取丹心照汗青。———文天祥《过零丁洋》 这两句诗的意思,是说自古以来,人终不免一死!但死得要有意义,倘若能为国尽忠,死后仍可光照千秋,青史留名。 类库本身包含了许多存在状态依赖性的类。如FutureTask,BlockingQueue等。这些类中的一些操作,会基于状态的前提条件。比如,不能从一个空的队列删除元素或获取一个尚未结束的任务的计算结果。这两个操作执行之...

2018-07-18 21:33:32 329

原创 [Java并发编程实战]显示锁Lockh和ReentrantLock

Lock 和 ReentrantLock与内部加锁不同,Lock 提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显示的。Lock的实现必须提供具有与内部加锁相同的内存可见性的语义。但是加锁的语义,调度算法,顺序保证,性能特性这些可以不同。public interface Lock { void lock(); void lockInter...

2018-07-10 23:17:07 346

原创 [Java并发编程实战]活锁

我们都知道死锁,然而还存在一种锁叫做活锁。死锁是一直死等,活锁他不死等,它会一直执行,但是线程就是不能继续,因为它不断重试相同的操作。换句话说,就是信息处理线程并没有发生阻塞,但是永远都不会前进了。活锁同样会发生在多个相互协作的线程间,当他们为了彼此间的响应而相互礼让,使得没有一个线程能够继续前进,那么就发生了活锁。好比两个过于礼貌的人在半路相遇,出于礼貌他们相互礼让,避开对方的路,但是在...

2018-07-10 20:53:55 7380 5

原创 [Java并发编程实战]协作对象之间存在的死锁问题

百川东到海,何日复西归?少壮不努力,老大徒伤悲。———《汉乐府·长歌行》 河水东流不复返就如时间的流逝不可能停留,告诫我们年少时如果不珍惜时间努力向上,到老只能白白地悔恨自己与悲伤了。上文讲解了锁顺序死锁发生的情况,但是还存在一些死锁的情况,不是顺序锁那么简单可以被发现。因为有可能并不是在同一个方法中显示请求两个锁,而是嵌套另一个方法去获取第二个锁。我们举个例子来说明,下面代...

2018-06-30 11:32:43 2840

原创 [Java并发编程实战]什么是锁顺序死锁

精诚所至,金石为开。———《后汉书·广陵思王荆传》 意思是人的诚心所到,能感动天地,使金石为之开裂。比喻只要专心诚意去做,什么疑难问题都能解决。锁顺序死锁两个线程试图通过不同的顺序获取多个相同的锁。如果请求的顺序不相同,那么会出现循环的锁依赖现象,产生死锁。但是如果保证同时请求锁L和锁M的每一个线程,都是按照从 L 到 M 的顺序,那么就不会发生死锁了。举个例子说明一下,...

2018-06-30 00:07:17 1012

原创 [Java并发编程实战]线程池的饱和策略

有志者,事竟成。———《后汉书·耿弇传》 一个有志气的人,做事情是一定会成功的!通常情况下,线程池会判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。但是如果有限队列已经满了,则会交给饱和策略来处理这个任务。ThreadPoolExecutor 的饱和策略可以通过调用 setRejectedExecutionHandler 来修改。JDK 提供了...

2018-06-28 00:02:33 1948

原创 [Java并发编程实战] 线程池的使用之饥饿死锁的发生

一屋不扫何以扫天下?———《后汉书·陈蕃传》 这句话的意思是,从一点一滴的小事开始积累,才能做成一番大事业。Executor框架核心之一就是利用线程池,所以接下来这几篇,详细介绍线程池相关的高级选项以及注意事项。任务间隐性耦合的说明虽说 Exectuor 将任务和执行策略解耦,但是实际上言过其实了。假如任务之间存在某种相互依赖关系,其中一个任务必须依赖另外一个的执行,这就...

2018-06-26 23:54:21 1618 1

原创 [Java并发编程实战]管理 Executor 生命周期的几个方法

前文说了 Exectuor 的具体用法,却没有说到如何停止一个任务的执行。所以,本篇文章就来讲解一下 Executor 的生命周期管理。首先,看下这个框架生命周期相关的主要方法。void shutdown();//平缓关闭List<Runnable> shutdownNow(); //强制关闭boolean isShutdown(); //是否关闭boolean is...

2018-06-25 21:40:56 809

原创 [Java并发编程实战] Executor 框架几个常见的实现类介绍(含示例代码)

上一篇文章已经讲了 Executor 的整体框架,其中有提到它的执行的示意流程图。这篇文章就介绍几个常见的实现类的原理和用法,最后通过示例代码,打印 log 来明确它们的执行流程。常见实现类介绍FixedThreadPool 详解SingleThreadExecutorCachedThreadPool代码示例newFixedThreadPool 示例``...

2018-06-22 23:14:05 714

原创 [Java并发编程实战] Executor框架(含思维导图)

Executor 简介Executor 是一个简单的接口,但它却是整个异步任务执行框架的基础,这个框架能支持多种不同类型的任务执行策略。他提供了一种标准的方法将任务的提过过程和执行过程解耦开来,并用 Runnable 来表示任务。Executor 基于生产者-消费者模式,提交任务相当于生产者,执行任务的线程相当于消费者。同时,Executor 的实现还提供了对任务执行的生命周期管理的支持。...

2018-06-11 23:14:03 2083 1

原创 [Java并发编程实战]构建一个高效可复用缓存程序(含代码)

这几天更新了这么多篇文章,其实这些都是并发编程中最基础的知识。现在,我们是时候利用这些知识来写一个小程序了。本篇文章就来介绍如何构建一个用来存储计算结果的高效、可伸缩高速缓存,虽然简单,但也可以说算是对前面知识的一次运用了。高速缓存,无论是在服务器端还是在前端程序中都有不同形式机制的实现。复用缓存里的结果可以大大缩短程序的等待时间,提高吞吐量。说的通俗一点就是利用空间换时间。在本篇文章中,将一...

2018-06-08 23:37:10 944 1

原创 [Java并发编程实战] Future+callable+FutureTask 闭锁机制(含示例代码)

FutureTask 也可以做闭锁,它是 Future 和 callable 的结合体。所以我们有必要来了解 FutureTask的继承关系。FutureTask 的继承关系类图先看 FutureTask 类的继承:public class FutureTask<V> implements RunnableFuture<V> 它继承自 Run

2018-06-06 22:31:28 894 1

原创 [Java并发编程] 用 信号量(Semaphore) 实现一个消息池(含代码)

欲穷千里目,更上一层楼。—唐·王之涣《登颧雀楼》 这句诗的意思是:想看到更远更广阔的景物,你就要再上一层楼。想学到更多更深的知识,你就要比原来更努力。Semaphore,计数信号量,用来控制同时访问某个特定资源的线程数量,需要我们设定它的最大访问数量。 Semaphore 管理着一组虚拟许可,许可的初始数量可以通过构造函数来指定。在执行操作时可以首先获取许可,并在使用后释放许可。...

2018-06-05 22:15:34 483

原创 [Java并发编程实战] 栅栏 CyclicBarrier 实现(含代码)

关卡

2018-06-04 07:56:45 1201

原创 六月第一跑

今天是儿童节,本大叔本想趁着这节日找几个朋友聚聚,到市区浪一浪,吃个牛肉火锅,或者木屋烧烤,喝上几杯小酒什么的,享受一下美好的广州夜生活。但是摸了摸日渐微胖的肚子,还是把持住了,老老实实呆在家吧。想起来,距离上次跑步有半个多月了,中间几次想坚持锻炼一下,结果是一次又一次的借口,愣是没有跑成。不行,今晚必须出去跑一跑,减减压,出出汗,享受美好月光。抬起脚,迈开跑,一路风景。路过红色公交站...

2018-06-01 23:32:33 251

原创 [Java并发编程实战] 闭锁 CountDownLatch 实现(含代码)

路漫漫其修远兮,吾将上下而求索。———屈原《离骚》闭锁闭锁(latch)是一种 Synchronizer,他可以延迟线程的进度直到线程到达终止状态。一个闭锁工作起来就像一道大门:直到闭锁达到终点状态之前,门一直是关闭的,没有线程通过,在终点状态到来的时候,门开了,允许所有线程都通过。一旦闭锁到达了终点状态,他就不能够在改变状态了,所以它会永远保持敞开的状态。闭锁的应用...

2018-05-31 13:46:33 438 1

原创 [Java并发编程实战] 阻塞队列 BlockingQueue(含代码,生产者-消费者模型)

Java 5.0 增加了两种新的容器类型:Queue 和 BlockingQueue。Queue 用来临时保存一组等待处理的元素。BlockingQueue 扩张了 Queue 接口,增加了可阻塞的插入和获取等操作。BlockingQueue 通常运用于一个线程生产对象放入队列,另一个线程从队列获取对象并消费,这是典型的生产者消费者模型。 生产者线程持续生产新对象并插入队列,如果队列已满...

2018-05-30 16:06:31 725

原创 [Java并发编程] 并发容器框架的简单介绍

>三军可夺帅也,匹夫不可夺志也。———《论语》上一篇讲到同步容器类的潜在问题,可以通过两个方法解决。可以通过客户端加锁解决。可以使用并发容器类来解决问题。客户端加锁的方法我们已经知道,所以,这一篇介绍一下并发容器类原理,看它是如何解决这些问题的。下面看下并发容器的框架图: 我们从上图可以看到,它们分为五大类:Map, List, Set,Collection,Qu...

2018-05-29 20:14:56 313 1

原创 [Java 并发编程实战] 同步容器类潜在的问题(含实例代码)

同步容器类存在的问题同步容器类包括HashTableVectorStack同步包装器 : [ Collections.synchronizedMap(), Collections.synchronizedList() ]从同步容器的源码可以看出,它们将状态封装起来,并对每个方法都采用 synchronized 进行了同步,每次只有一个线程能访问容器。这种方式的同步机制很显然会...

2018-05-26 09:54:03 398

原创 [Java 并发编程实战] 集合框架之 同步容器类 & 并发容器类

通过上一篇文章,我们已经知道设计一个线程安全类的原则和步骤,以及在设计过程中我们应当注意的细节。实际上,Java 的集合库包含了线程安全集合和非线程安全集合,可以说 Java 的线程安全集合就是按照上一篇的步骤来实现的。这篇主要简单介绍 Java 集合库。它包含的集合可以区分为:非同步集合同步集合并发集合那么,它们分别包括哪些具体的集合类,它们有什么主要的区别,以及它们的框架是...

2018-05-25 07:55:41 361

原创 [Java 并发编程实战] 设计线程安全的类的三个方式(含代码)

前面几篇已经介绍了关于线程安全和同步的相关知识,那么有了这些概念,我们就可以开始着手设计线程安全的类。本文将介绍构建线程安全类的方法,它们包括:实例封闭。线程安全性的委托。现有的线程安全类添加功能。在设计线程安全类的过程中,需要包含以下三个基本要素:找出构成对象状态的所有变量。找出约束状态变量的不变性条件。建立对象状态的并发访问策略。实例封闭将数据封装在对象...

2018-05-23 20:56:33 852 1

原创 [Java 并发编程实战] 对 volatile 变量进行实例验证(内含源码)

Volatile 变量,在上一篇文章已经有简单提及相关概念和用法。那么,这一篇主要对 Volatile 变量的特性进行验证,直接上源码。验证它的三个特性:可见性非原子性重排序volatile 之可见性验证上一篇文章中,讲到 volatile 变量通常被当做状态标记使用。典型的应用是,检查标记状态,以确定是否退出循环。在这里,我们直接举个反例,源码如下:public cl...

2018-05-21 20:11:26 512

原创 [Java并发编程实战] 共享对象之可见性

我们已经知道同步代码块和同步方法可以保证以原子的方式执行,其实,同步还有另外一个重要概念:内存可见性。换句话说,我们不仅希望防止某个线程正在使用对象状态而另一个线程同时在修改状态,而且希望确保当一个线程修改了对象的状态后,其他线程能够看到修改后的状态。可见性一个线程对共享变量值的修改,能够及时的被其他线程看到。Java 内存模型(JMM,Java Memory Model)...

2018-05-19 00:07:54 845 1

原创 [Java并发编程实战] 线程安全

要编写线程安全的代码,核心在于对状态的访问操作进行管理,特别是对共享的和可变的状态的访问。共享,表示可以由多个线程同时访问;可变,表示变量的值在其生命周期内可以发生变化。Java 中的主要同步机制是关键字 synchronized,它提供了一种独占的加锁方式。当然,同步还包括 volatile 类型的变量,显示锁以及原子变量。什么是线程安全性在线程安全性的定义中,最核心的概念就是正...

2018-05-17 19:51:41 242

原创 [Java并发编程实战] 简介

并发简史在早期不包含操作系统的计算机中,程序都是单一的串行程序,从头至尾只能执行一个程序,并且这个程序访问这个计算机的所有资源。然而,随着技术的发展,操作系统出现了。它使得计算机程序有了进程,线程的概念,每次可以运行多个程序,并且不同的程序都在单独的进程中运行。操作系统为各个独立执行的进程分配各种资源,包括内存,文件句柄,安全证书等。不同进程之间通过系统本身的通信机制来交换数据,如:套接字,信...

2018-05-15 19:44:46 272

原创 DFS 1253 解题报告

DFS 1253 解题报告

2017-12-22 16:52:43 299

原创 字典树 Trie

字典树简单介绍

2017-10-26 00:12:31 313

原创 1024,我在调八数码问题程序...

1024, 程序员节快乐!

2017-10-24 23:05:28 638

原创 康拓展开介绍

本人在解决八数码问题时,看到存储中间状态时用到了康拓展开,故学习之。所以本文简单介绍康拓展开和逆展开,并给出源码,主要应用于将字符或数字序列映射为对应的一个数字,并且可以反映射回原来的字符或数字序列。

2017-10-23 21:43:18 542

空空如也

空空如也

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

TA关注的人

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