自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RegisterNatives()函数映射JNI本地函数与Java本地方法

java 代码HelloJNI.javaclass HelloJNI{ native void printHello(); native void printString(String str); static{System.loadLibrary("hellojnimap");} public static void main(String args[]){ HelloJN...

2020-03-31 21:35:28 337

原创 C 程序中运行 Java 类

Java代码InvocationApiTest.javapublic class InvocationApiTest{ public static void main(String[) args){ System.out.println(args[O]); } }编译 InvocationApiTest.java 生成 InvocationApiTest...

2020-03-31 13:17:18 252

原创 Java 与 C++ 通过 JNI 交互(Java 主程序)

Java 端代码JniFuncMain.javapublic class JniFuncMain{ private static int staticIntField = 300; //加载本地库 jnifunc static { System.loadLibrary("jnifunc");} //本地方法声明 public static native JniTest crea...

2020-03-31 10:30:30 320

原创 Java 通过 JNI 调用 C 函数

第一步:编写 java 代码class HelloJNI{ //本地方法声明 native void printHello(); native void printString(String str); //加载库 static{System.loadLibrary("hellojni");} public static ...

2020-03-30 12:14:02 420 2

原创 Android Studio 新建项目一直在 Gradle Sync 的问题

如何解决,发现阿里云有镜像,只需要添加相应的url地址就可以下载;打开项目build gradle文件。buildscript { repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} google() jcenter()...

2019-10-15 15:16:34 4381 1

原创 并查集算法:quick-find、quick-union、优化的 quick-union

目录1. 问题描述2. quick-find3. quick-union4. 优化的 quick-union1. 问题描述可以想象一张地图上有很多点,有些点之间是有道路相互联通的,而有些点则没有。如果我们现在要从点 A 走向点 B,那么一个关键的问题就是判断我们能否从 A 走到 B 呢?换句话说,A 和 B 是否是连通的。这是动态连通性最基本的诉求。现在给出一组数据,其中每个元素都是一对“点”...

2019-09-04 11:02:36 1966

原创 HashMap 中散列值的计算

HashMap java 1.8 中的源码: static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } i = (n - 1) & hashh >&gt...

2019-09-02 20:31:03 1376

原创 LeetCode & 剑指offer 经典题目总结——二叉树

目录1. 重建二叉树1. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解法:/** * Definition for binary tree * public class TreeNod...

2019-08-26 16:04:23 141

原创 LeetCode & 剑指offer 经典题目总结——递归

目录1. 字符串的排列1. 字符串的排列输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解法:import java.util.ArrayList;import java.ut...

2019-08-25 21:08:53 153

原创 运输层——TCP协议

目录1. 报文格式2. 三次握手3. 四次挥手4. TCP 怎么保证可靠性4.1 TCP 是面向连接的字节流协议4.2 超时重传、应答及数据校验机制4.3 慢启动和拥塞控制4.4 快重传与快恢复1. 报文格式序号:占4字节。序号范围是 0 到 2 的32次方-1 ,序号增加到 2的32次方-1 后,下一个序列号就回到了1。也就是说,序号使用mod 2的32次方 运算。TCP是面向字节流的,T...

2019-08-22 12:08:40 176

原创 应用层——HTTP 协议

目录1. 概述2. HTTP 的报文结构2.1 请求报文2.2 响应报文3. cookie4. session5. HTTP 各版本特点以及 HTTPS1. 概述超文本传送协议 HTTP 是一个应用层协议,HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。 HTTP 不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP 协议本身是无连接的。这就是说,虽然 HTT...

2019-08-19 17:58:46 492

原创 应用层——域名系统DNS

域名系统 DNS (Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名字转换为 IP 地址。域名到 IP 地址的解析过程的要点如下:当某一个应用进程需要把主机名解析为 IP 地址时,该应用进程就调用解析程序(resolver), 并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报方式发给本地域名服务器(使用 UDP 是...

2019-08-17 16:11:20 188

原创 虚拟机类加载机制

整理自《深入理解 Java 虚拟机》。目录1. 类加载时机2. 类加载的过程2.1 加载2.2 验证2.3 准备2.4 解析2.5 初始化3. 类加载器1. 类加载时机虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化。最终形成可以被虚拟机直接使用的 Java 类型,就是虚拟机的类加载机制。一个类从被加载进内存,到卸载出内存,完整的生命周期包括:加载,验证...

2019-08-06 17:46:32 145

原创 内存分配与回收策略

整理自《深入理解 Java 虚拟机》。目录1. 对象优先在Eden分配2. 大对象直接进入老年代3. 长期存活的对象将进入老年代4. 动态对象年龄判定5. 空间分配担保对象的内存分配,大方向上讲,就是在堆上分配,对象主要分配在新生代的 Eden 区上,如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配。少数情况下也可能会直接分配在老年代中,分配规则并不是百分百固定,其细节取决于当前使...

2019-08-05 15:49:09 103

原创 垃圾收集

整理自《深入理解 Java 虚拟机》。目录1. 方法区的回收常量池的回收无用的类的回收2. Java 堆的回收3. 垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法4. 垃圾收集器程序计数器、虚拟机栈、本地方法栈这几个区域不需要过多考虑回收问题,因为方法结束或线程结束时,内存自然就随着回收了。垃圾收集关注的是 Java 堆和方法区这部分内存。1. 方法区的回收HotSpot 虚...

2019-08-03 18:00:38 174

原创 对象的分配、布局、访问过程

整理自《深入理解 Java 虚拟机》。目录1. 对象的创建2. 对象的内存布局3. 对象的访问定位1. 对象的创建虚拟机遇到一条 new 指令时,将执行以下过程:检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,必须先执行相应的类加载过程。分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间...

2019-07-31 11:47:19 129

原创 Java 内存区域与内存溢出

目录Java 内存区域1. 程序计数器2. 虚拟机栈3. 本地方法栈4. 堆5. 方法区内存溢出1. 堆溢出2. 虚拟机栈和本地方法栈溢出Java 内存区域Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为各个不同的数据区域,包括以下几个部分:1. 程序计数器线程私有,是当前线程所执行的字节码的行号指示器。字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码...

2019-07-31 10:58:26 115

转载 Java 网络通信模型 BIO、NIO、AIO

目录1. BIO参照 UNIX 五大 I/O 模型来理解。1. BIOBIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。它的优点就是代码比较简单、直观;缺点就是 I/O 的效率和扩展性很低,容易成为应用性能瓶颈。...

2019-07-29 17:39:46 333

原创 操作系统之 UNIX I/O 模型

目录1. 基本概念2. 五大 I/O 模型2.1 阻塞 I/O2.2 非阻塞 I/O 模型2.3 I/O 复用模型2.4 信号驱动式 I/O 模型2.5 异步 I/O 模型3. 5大 I/O 模型比较1. 基本概念同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。就是我调用一个功能,该功能没有结束前,我死等结果...

2019-07-28 21:18:58 182

原创 操作系统之死锁

目录1. 产生死锁的必要条件2. 处理方法1. 产生死锁的必要条件互斥:任何时刻只能有一个进程使用一个资源实例。持有并等待:进程保持至少一个资源,并正在等待获取其他进程持有的资源。非抢占:资源只能在进程使用后自愿释放。循环等待。2. 处理方法鸵鸟策略:把头埋在沙子里,假装根本没发生问题。死锁预防:确保系统永远不会进入死锁状态。破坏互斥条件:把互斥的共享资源封装成可同时访问。...

2019-07-28 20:20:24 111

原创 操作系统之进程间通信

目录1. 信号2. 管道3. 消息队列4. 共享内存5. 套接字1. 信号进程间的软件中断通知和处理机制。信号的接收处理:捕获:执行进程指定的信号处理函数被调用。忽略:执行进程指定的缺省处理。屏蔽:禁止进程接收和处理信号。不足:传送的信息量小,只有一个信号类型。2. 管道进程间基于内存文件的通信机制,子进程从父进程继承文件描述符,缺省文件描述符:0 stdin,1 stdou...

2019-07-28 18:49:58 93

原创 操作系统之进程同步

目录1. 同步2. 临界区3. 信号量(semaphore)3.1 信号量实现互斥访问3.2 信号量实现同步等待3.3 信号量实现生产者消费者问题4. 管程5. 经典同步问题之哲学家就餐问题6. 读者-写者问题1. 同步协调多线程对共享数据的访问,任何时刻只能有一个线程执行临界区代码。2. 临界区定义:对共享内存进行访问的程序片段。实现方法:禁用中断:没有中断,没有上下文切换,因此没...

2019-07-28 18:31:30 218

原创 操作系统之调度算法

目录1. 比较调度算法的准则2. 调度算法2.1 先来先服务算法(FCFS)2.2 短进程优先算法(SPN)2.3 最高响应比优先算法2.4 最短剩余时间优先算法(SRT)2.5 时间片轮转算法2.6 优先级调度算法2.7 多级队列算法2.8 多级反馈队列算法2.9 公平共享调度算法1. 比较调度算法的准则CPU 使用率:CPU 处于忙状态的时间百分比吞吐量:单位时间内完成的进程数量周转...

2019-07-28 12:07:26 650

原创 操作系统之进程与线程

目录1. 进程2. 线程3. 进程和线程的关系1. 进程概念:进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,进程是资源分配的基本单位。组成:包含了正在运行的一个程序的所有状态信息。特点:动态性:可动态地创建、结束进程。并发性:进程可以被独立调度并占用处理机执行。独立性:不同进程的工作不互相影响。制约性:因访问共享数据/资源或进程间同步而产生制约。进程与...

2019-07-28 11:05:20 142

原创 操作系统之内存管理

目录1. 功能2. 管理方式2.1 重定位2.2 分段2.3 分页2.4 段页式2.5 虚拟存储2.5.1 基本特征2.5.2 缺页异常(中断)的处理流程2.5.3 页面置换算法2.5.3.1 局部页面置换算法1. 最优算法(OPT,optimal)2. 先进先出算法(First-In First-Out,FIFO)3. 最近最少使用算法(Least Recently Used,LRU)4. 时钟...

2019-07-28 10:42:55 158

原创 操作系统特征、内核态与用户态

目录1. 操作系统的特征2. 内核态与用户态3. 中断、异常和系统调用1. 操作系统的特征并发:宏观上计算机系统在一段时间内能同时存在多个运行的程序,需要OS管理和调度。共享:共享是指系统中的资源可以被多个并发进程共同使用。有两种共享方式:互斥共享和同时共享。虚拟:虚拟技术把一个物理实体转换为多个逻辑实体。主要有两种虚拟技术:时分复用技术和空分复用技术。多个进程能在同一个处理器上并发执行...

2019-07-26 18:36:52 132

原创 浮点型商业运算中丢失精度问题

计算机用二进制存储数据,用有限位去近似表示一个浮点数会产生精度问题。为了能精确的表示、计算浮点数,Java提供了BigDecimal类。注意,在创建 BigDecimal 对象时,一定要使用String对象作为构造器参数,而不是直接使用double 数字。原因:public BigDecimal(double val);此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 ...

2019-07-03 11:30:28 154

原创 泛型

1. 类型擦除虚拟机中没有泛型,只有普通的类和方法。定义一个泛型类型,会进行类型擦除,如:public class Pair<T> { private T first; private T second; public Pair() { first = null; second = null; } public Pair(T first, T secon...

2019-07-03 10:36:47 84

原创 String、StringBuilder、StringBuffer 的区别

String 对象是不可变对象(显然线程安全),String 对象一旦创建之后就不可更改了。Java 中对 String 对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。StringBuffer 线程安全的可变字符序列:对 StringBuffer对象本身进行操作,而不是生成新的对象。StringBuilder 线程不安全的可变字符序列:提供一个与 S...

2019-06-27 21:20:31 97

原创 支付宝扫码付模块

按照支付宝官方开发文档,将支付订单信息发送给支付宝网关,支付宝服务器接收到信息后进行校验,校验成功后会将返回信息返回给指定的地址。要让支付宝访问到本机,需要利用 NATAPP 工具进行内网穿透,将本地服务器地址、端口映射到外网域名上。注意这里使用的免费隧道服务,每次启动 NATAPP 域名会变,所以每次调试要在项目的资源文件 mmall.properties 中更改回调地址。...

2019-06-24 20:55:58 861

原创 上传图片到 FTP 服务器,nginx 映射图片资源

后端将用户上传的图片先上传到 Tomcat 的 /opt/apache-tomcat-7.0.73/webapps/ROOT/upload 路径下,然后将其上传到 FTP 服务器的 img/ 目录下,最后删除 Tomcat 上的文件,返回给前端的是 FTP 服务器的地址+文件名(如:http://img.happymmall.com/bb.jpg)。这样前端可以通过这个 url 获取到这个文件。...

2019-06-15 16:44:59 598

原创 后端得到get请求的参数中文乱码

测试后台分类模块时,采用 get 方法发送新增的品类名,tomcat接收到的参数是乱码。后来发现 tomcat 的 配置文件 /opt/apache-tomcat-7.0.73/conf/server.xml 中的 URIEncoding=“UTF-8” 错配置成了 “UTF_8”。...

2019-06-12 22:00:09 870

原创 x-www-form-urlencoded

使用chrome插件 Resetlet 测试用户模。发送 post 请求时需要在 HTTP HEADERS 加上 Content-Type 属性,值为 x-www-form-urlencoded 。HTTP 请求分为三个部分:状态行、请求头、消息主体。协议规定 POST 提交的数据必须放在消息主体,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后...

2019-06-12 10:47:06 6837

原创 2020校招笔试题

目录1. 华为实习笔试:2.vivo校招提前批笔试:1. 华为实习笔试:n个糖果分给k个小朋友,共有几种分法,枚举每种分法。顺时针旋转n阶方阵,输出旋转m次后的结果。两段文字,第一段是在第二段上进行增加单词,删除单词,改变单词得来。每个增、删、改操作算一次校对,求最少校对次数。2.vivo校招提前批笔试:给两个数组A[ ]、B[ ],求在A中出现,B中没出现的元素。给一个链表和...

2019-06-05 10:31:22 1068

原创 LeetCode & 剑指offer 经典题目总结——查找

目录1.搜索旋转排序数组1.搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: num...

2019-05-30 11:48:54 293

转载 java I/O体系

转自:https://www.cnblogs.com/ylspace/p/8128112.htmlJava中IO流的体系结构:Java流类的类结构图:

2019-05-08 20:04:50 92

转载 序列化与反序列化

https://www.cnblogs.com/xdp-gacl/p/3777987.html

2019-05-07 11:40:17 84

转载 Mybatis Mapper接口动态代理实现原理

摘自《Mybatis从入门到精通》(刘增辉)通过上面的学习,大家可能会有一个疑问,为什么 Mapper 接口没有实现类却能被正常调用呢?这是因为 MyBaits 在 Mapper 接口上使用了动态代理的一种非常规的用法,熟悉这种动态代理的用法不仅有利于理解 MyBatis 接口和 XML 的关系,还能开阔思路 。 接下来提取出这种动态代理的主要思路,用代码来为大家说明。假设有一个如下的 Ma...

2019-05-06 21:12:53 3294

原创 反射

Class.forName()方法在jdbc连接数据库中的应用在使用jdbc方式连接数据库时,为什么要执行Class.forName(‘驱动类名’)方法了:将驱动类的class文件装载到内存中,并且形成一个描述此驱动类结构的Class类实例,并且初始化此驱动类,这样jvm就可以使用它了,这就是Class.forName()方法的含义。有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的...

2019-05-06 15:53:51 64

原创 LeetCode & 剑指offer 经典题目总结——字符串

目录1.验证回文串1.验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false解法:public class Solution {...

2019-05-05 11:24:34 635

空空如也

空空如也

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

TA关注的人

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