自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(481)
  • 收藏
  • 关注

原创 Java连载157-try...with...resource

一、使用try…with…resourcepackage com.newJava;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class D157_tryWithResource { public static void main(String[] args) { String address = "E:\\d05_gitcode\\Java\\ne

2022-12-11 16:20:12 52

原创 Android连载43-网络管理相关分析

一、常用adb命令// 用于查询网络状态以及网络连接等相关日志adb shell dumpsys connectivity例如:下面是查询我的huawei P20的详情NetworkFactories for: UntrustedWifiNetworkFactory Ethernet TelephonyNetworkFactory[1] WifiNetworkFactory TelephonyNetworkFactory[0] PhoneSwitcherNetworkRequstListener P

2022-12-11 16:19:39 65

原创 C连载28-宏、编译宏、select、epoll函数

define是C语言中的一个宏定义,用来建一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本例如:#define PI 3.1415926 #define A(x) x。

2022-11-22 23:56:18 13

原创 Android连载43-Netd相关学习笔记

手动阀

2022-10-28 23:20:20 421

原创 Gradle连载8-构建的应用类型和使用混淆、共享库

每个BuildType还会生成相应的assemble任务,如果常用的assembleRelease和assembleDebug就是Gradle自动生成的两个Task任务,他们是release和debug,这两个BuildType自动创建生成的,执行相应的assemble任务,就能生成对应BuildType的所有apk。新增的BuildTYpe名字,不能是main、androidTest,这两个已经被占用了。每一个BuildTYpe都会生成一个SourceSet,默认位置就是src//...

2022-08-13 00:53:54 11

原创 Gradle连载7-配置签名

十分三大

2022-06-29 23:14:42 367

原创 Gradle连载6-AndroidGradle任务之defaultConfig配置

一、android工程配置buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.1.4' }}apply plugin: 'com.android.application'android { compileSdkVersion 23 // 还可以写成compileSdkVersion

2022-06-16 00:01:32 512

原创 Gradle连载5-多个构建工程以及android工程配置

一、常用的源集属性apply plugin:'java'sourceSets { main { // 对main SourceSet进行配置 }}task custom65SourceSetTask { sourceSets.all { println "name:" + name println "outputs.getFiles():" + outputs.getFiles() println "out

2022-05-10 08:58:21 104

原创 Gradle连载4-依赖包打包方式

一、apply方法的使用apply plugin:'java'// 上面是一个短名,下面也有一个完整的名字apply plugin:org.gradle.api.plugins.JavaPlugin// 由于org.gradle.api.plugins是默认导入的,所以可以简写为apply plugin:JavaPluginapply from:'version.gradle'task ex52PrintlnTask { println "App版本是:${versionName},

2022-04-29 08:48:29 658

原创 Gradle连载3-任务的排序启动禁用,only函数以及插件

一、任务排序task ex46OrderTask1 { println 'ex46OrderTask1'}task ex46OrderTask2 { println 'ex46OrderTask2'}ex46OrderTask1.mustRunAfter ex46OrderTask2我们可以从中看出task的执行是有先后顺序的。二、任务的启用和禁用task ex47DisenabledTask { println 'ex47DisenabledTask'

2022-04-23 13:37:32 1765

原创 Gradle连载2-多种方式创建任务

一、闭包委托闭包有thisObject、owner、delegate三个属性,在闭包内调用方法的时候,由他们来确定使用哪个对象呢来进行处理。默认情况下delegate和owner是相等的,当时delegate是可以被修改的,这个功能是非常强大的,Gradle中的闭包很多功能都是通过修改delegate进行实现的。task helloDelegate { new Delegate().test { println "thisObject:${thisObject.getClass

2022-04-16 00:33:10 196

原创 Gradle连载1-闭包

一、闭包委托闭包有thisObject、owner、delegate三个属性,在闭包内调用方法的时候,由他们来确定使用哪个对象呢来进行处理。默认情况下delegate和owner是相等的,当时delegate是可以被修改的,这个功能是非常强大的,Gradle中的闭包很多功能都是通过修改delegate进行实现的。task helloDelegate { new Delegate().test { println "thisObject:${thisObject.getClass

2022-04-10 23:47:08 85

原创 Gradle连载1-闭包

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2022-04-10 19:59:03 333

原创 Java连载156-IO总结(三)

一、管道流 final PipedOutputStream pps = new PipedOutputStream(); final PipedInputStream pis = new PipedInputStream(pps); new Thread(new Runnable() { public void run() { try { pps.write("厉害了".getBytes(StandardCharsets.UTF_8)); pps.close()

2021-12-27 00:12:47 160

原创 Java连载155-IO总结(二)

一、四种方式分别举例1.FileInputStream InputStream is = null; String address = "E:\\d05_gitcode\\Java\\newJava\\src\\com\\newJava\\newFile.txt"; int b; try { is = new FileInputStream(address); while ((b = is.read()) != -1) { // 可以看出是一个字节一个字节读取的 Sy

2021-12-23 00:43:52 293

原创 Java连载154-IO总结(一)

一、类图基本上IO可以分为字节流和字符流二、字符大小一般来说一个字母占用一个字节,一个汉字占用两个字节。具体还要看字符编码,比如说在 UTF-8 编码下,一个英文字母(不分大小写)为一个字节,一个中文汉字为三个字节;在 Unicode 编码中,一个英文字母为一个字节,一个中文汉字为两个字节。三、常用方法InputStreamint read() 读取数据int read(byte[] b, int off, int length) 从第off个字节开始读取长度为length的字节,

2021-12-22 00:36:23 413

原创 Java连载153-可变参数、多线程状态图

一、可变参数可变参数顾名思义就是,编写一个函数的时候,可以传入一个或者多个参数实际原理:根据传入的参数类型以及个数,创建一个数组,用于存储这些数据,在函数中调用的时候,也可以使用数组的形式调用,下面我们举个例子package com.newJava;public class D152_VariableParameters { public static void main(String[] args) { System.out.println("打印出了"); printString

2021-12-21 00:06:51 152

原创 Java连载152-HashMap中的hash函数有什么用

一、取模运算和取余运算取余运算,这个很好理解,我们经过多年的数学学习也知道,就是求余数,一个整数和另一个整数相除,得到它们的余数,就是我们说的取余取模运算,通俗的来讲大多运算在计算机领域,取模运算其实就是两个二进制数字之间做与运算,它们最后得到的数字就是取模我们举个简单的例子,有一个二进制数字0000 0001 1001 1101,1111 0101 1010 0011,这个两个数字做与运算,它们相同位置的数字,如果有一个数字出现1,那么计算后的数字的那个位置就是1,这两个数字与运算后的值为1111

2021-12-17 00:43:54 585

原创 Java连载151-JUnit简介以及HashMap初步分析

一、配置JUnit环境JUnit是一个集成测试单元框架,我们先下载软件包,来配置环境package com.bjpowernode.java_learning;public class D149_TestJunit { String message = "hello world"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() { assertEqu

2021-12-16 00:45:00 1057

原创 Java连载150-NIO详解(一)

一、IO原理1.底层原理操作系统在进行IO的时候,实际上并不是即时操作,它们是通过缓冲区的,也就是说,我们读写文件都是通过一个中介来进行的。读系统就是把内核缓存区的内容复制到进程缓冲区;写系统就是把进程缓冲区的内容复制到内核缓存区。之所以这样做的原因是避免大量的IO操作,大量的IO操作效率是很低的。这个过程并不等价于数据在内核缓冲区和磁盘之间的交换。...

2021-12-13 00:13:10 377

原创 Java连载149-集合类小节

一、Collection和Collections之间的区别Collection是一个接口类,是Set和List接口的父接口Collections是一个工具类,是不应该初始化为一个对象,内部含有很多对集合操作的静态方法二、Set和List之间的区别Set和List都是接口,但是各有不同Set是一个无序集合,对于放入的元素是不能重复,可以用于进行去重List是一个有序集合,按照先进先放的原则三、ArrayList\LinkedList\Vector之间的区别ArrayList的底层是一

2021-12-01 00:21:29 1604

原创 Java连载148-Class常量池

一、常量池的分类字符串常量池、Class常量池、运行时常量池编译相关,java代码可以使用javac来进行编译成字节码,然后运行在java虚拟机上,生成字节码在linux机器上可以使用vim来进行打开,如果要以16进制的形式打开,则可以:%!xxd即可字节文件的前几个字符是cafe babe,这是java的魔数使用javap -v HelloWorld.class命令可以查看常量池内容常量池主要存放两种东西:字面量和符号引用二、class常量池有什么用Java代码在进行Javac编译的

2021-11-10 00:33:12 942

原创 Java连载147-对象存储的地方

异常处理:处理错误异常处理就像是与程序正常执行路径并行的,在错误发生的时候执行的另一条路径,因为它是另一条完全分离的执行路径,所以它不会干扰正常执行的代码客户端编程浏览器的提交动作通过所有的WEB服务器都提供的通用网关接口(common gateway interface,CGI)传递,提交的内容会告诉CGI应该如何处理它,最常见的动作就是运行一个在服务器中常被命名为“cgi-bin"的目录下的一个程序。一切都是对象Java是基于C++开发的对象可能会存储到什么地方寄存器:最快的

2021-08-16 00:17:46 48

原创 Android连载42-复习自定义控件

继承关系所有的控件都直接或者间接继承自ViewView是Android中的一种基本的UI组件,可以在屏幕上绘制一块矩形区域ViewGroup则是一种特殊的View,它可以包含许多的子View和子ViewGroup,是一个用于放置控件和布局的容器....

2021-08-12 00:11:29 36

原创 Java连载146-内存泄漏和容器

内存溢出和内存泄漏的区别内存溢出,就是我们在内存种分配了一块内存区域,但是当我添加了超出内存的数据的时候,就会导致溢出部分,覆盖了其他的内存,影响到了其他数据.内存溢出容易招致黑客攻击,修改未经分配给的内存.内存溢出在C++和C中存在,在Java中基本不存在,如果是堆栈会报OutOfMemory异常;对于数组就会报ArrayOutOfIndex异常.JVM有一系列机制来进行内存的检测等,出现异常会直接抛出内存泄漏是指分配了一段内存,当我们不在使用内存中存储的数据或者对象的时候,没有及时释放掉,导致这块

2021-08-08 23:44:40 53

原创 Java连载145-对象概论总结

一、对象概论总结抽象过程每一个对象看起来都有点像一个微型计算机–它具有状态,还具有操作,用户可以要求对象执行这些操作可以把消息想象为对某个特定对象的方法的调用请求“类”也就是“类型”的同义词对象具有状态、行为和标识每一个对象在内存中都有唯一的地址每个对象都有一个接口面向对象程序设计的挑战之一,就是问题空间的元素和解空间的对象之间创建一对一的映射被隐藏的具体实现public表示紧随其后的元素对任何人都是可用的private表示除了类型创建者和类型的内部方法之外的任何人都不能访问

2021-08-04 00:26:45 28

原创 Android连载41-复习四种基本布局

详解四种基本布局LinearLayout线性布局android:orientation=vertical 垂直排列horizontal 水平排列android:layout_gravity= 用于指定文字在控件中的对齐方式topcenter_verticalbottom注意若orientation是horizontal,那么控件只能是垂直方向上的对齐若orientation是vertical,那么控件只能是水平方向上的对齐android:layout_we

2021-08-03 00:40:30 32

原创 Java高并发28-ThreadPoolExecutor原理剖析(2)

线程池转换状态如下:Running->Shutdown 显示调用shutdown()或隐式调用finalize()中的shutdown()Running或者Shutdown->Stop 显示调用shutdownNow()Shutdown->Tidying 当线程池和任务队列都是空的时候Stop ->TidyingTidying -> Terminated线程池类型如下newFixedThreadPool创建一个核心线程数和最大线程个数为都为nThr

2021-07-30 00:03:47 19

原创 Java高并发27-ThreadPoolExecutor原理剖析(1)

类图线程池的好处:(1)性能好;(2)工厂方法便捷创建线程,个数自定义指定类图描述Excutors其实是一个工具类,ThreadPoolExecutor继承了AbstractExecutorService,成员变量ctl是一个Integer的原子变量,用来记录线程池的状态和线程池中的线程个数这个Integer原子变量,前三位代表的是线程池的状态,后面29位代表的是线程池中线程的个数private final AtomicInteger ctl = new AtomicInteger

2021-07-06 23:02:43 31

原创 Android连载40-ITelecomService详解

一、拨号流程总结DialpadFragment提供用户拨号的交互界面CallIntentBuilder创建拨号请求的intent对象TelecomManager继续传递拨号请求intent对象二、ITelecomService接收拨号请求服务/packages/services/Telecomm/src/com/android/server/telecom这个代码库编译出来就是Telecom.apk Android应用程序,后面统一称为Telecom应用 <serv

2021-04-29 00:37:55 298

原创 Android连载39-简析HAL、拨号盘

一、简析HAL结构HAL是一个位于操作系统和驱动程序之上,运行在用户空间中的服务程序。目的:对上层应用提供一个统一的查询硬件设备的接口。好处:简化了应用程序查询硬件的逻辑注意:HAL所谓的抽象不提供对硬件的实际操作,对硬件的操作仍然由具体的驱动程序来完成。1.android为什么引入HAL由于安卓是基于Linux内核进行开发,而linux内核使用GPL许可证,这就要求,使用到这个许可证的软件,对开源软件的任何修改扩充都必须开源,如果引入了HAL,就可以让android系统层和内核靠HAL隔

2021-04-27 00:18:25 198

原创 Java高并发26-释放锁以及ReentrantLock实例演示

一、释放锁1.void unlock()方法尝试释放锁,如果当前线程持有锁,则调用该方法会让该线程对该线程持有的AQS状态值减1,如果减去1后当前状态值为0,则当前线程会释放该锁,否则仅仅减去1而已,如果当前线程没有持有该锁而调用了该方法就会抛出IllegalMonitorStateException异常,代码如下 public void unlock() { sync.release(); } public final boolean tryRelease( int releases

2021-04-16 00:05:58 142 2

原创 Java高并发25-独占锁ReentranLock的原理

一、类图结构ReentrantLock是一个可重入锁,只有一个线程可以获取到该锁,其他线程想要获取该锁的时候会被放到AQS队列中。从类图中可以看到实现了Lock接口,内含一个Sync类型变量,该类型是继承自AQS抽象类,同时又有两个继承了类,分别为公平锁和非公平锁。 Sync sync; public ReentrantLock() { sync = new NonfairLock(); } public ReentrantLock(boolean fair) { sync

2021-03-31 00:13:15 82

原创 Java高并发24-使用自定义锁生成一个消费模型

一、使用自定义锁实现生成–消费模型1.下面我们使用上节自定义的锁实现一个简单的生产–消费模型,代码如下:package com.ruigege.LockSourceAnalysis6;import java.util.Queue;import java.util.concurrent.locks.Condition;public class Test { final static NonReentrantLock lock = new NonReentrantLock(); final s

2021-03-05 00:19:58 64 2

原创 Java高并发连载23-基于AQS实现自定义同步器

一、在如下代码中,当另外一个线程调用条件变量的signal方法的时候(必须先调用锁的lock方法获取锁),在内部会把条件队列里面队头的一个线程节点从条件队列里面移除并且放入AQS的阻塞队列里面,然后激活这个线程。public final void signal() { if(!isHeldExclusively()) { throw IllegalMonitorException(); } Node first = firstWaiter; if(first != null){ //

2021-02-26 00:26:33 50 1

原创 JavaScript连载38-编写评论界面

一、编写评论页面<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>D38_1_Review</title> <style> *{ margin:0; padding:0; list-style:none; }

2021-02-24 00:28:39 92

原创 Java高并发22-AQS条件变量的支持

一、入队操作当一个线程获取锁失败之后会被转换为Node节点,然后会使用enq方法,将该节点插入到AQS的阻塞队列,下面看一下这个方法如何实现 private Node enq(final Node node) { for(;;) { Node t = tail; if( t == null) { if(compareAndSetHead(new Node())) { tail = head; } }else { node.prev = t;

2021-02-22 23:01:14 39

原创 Java高并发21-AQS在共享,独占场景下的源码介绍

七、源码:所在包:com.ruigege.ConcurrentListSouceCodeAnalysis5https://github.com/ruigege66/ConcurrentJavaCSDN:https://blog.csdn.net/weixin_44630050博客园:https://www.cnblogs.com/ruigege0000/欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流...

2021-01-31 18:55:18 69

原创 Java高并发20-并发包中锁原理解析(二)

一、例子下面来一个例子加深对park和unpark的理解package com.ruigege.LockSourceAnalysis6;import java.util.concurrent.locks.LockSupport;public class TestParkAndUnpark { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(ne

2021-01-23 15:40:28 94

原创 Java高并发19-并发包中锁原理解析(一)

二、源码:所在包:com.ruigege.ConcurrentListSouceCodeAnalysis5https://github.com/ruigege66/ConcurrentJavaCSDN:https://blog.csdn.net/weixin_44630050博客园:https://www.cnblogs.com/ruigege0000/欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流...

2021-01-17 00:25:33 72

空空如也

空空如也

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

TA关注的人

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