自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Maoning Guan的博客

Following your heart.

  • 博客(133)
  • 资源 (4)
  • 收藏
  • 关注

原创 虚函数和纯虚函数

在C++中存在虚函数和纯虚函数,这两种存在异同点,有时会让人混淆,以下分别对这两种函数的异同点进行说明。

2022-12-21 20:08:23 422 1

原创 D-Bus资料索引

最近在研究D-Bus相关的技术,但发现国内资料较少,因此准备在此汇总一下D-Bus相关的资料。

2022-12-21 00:04:43 172

转载 微信逆向分析(四)——逆向分析的工具

前言老话,工欲善其事,必先利其器。这篇聊聊逆向分析用到的工具。不聊工具细节,自行百度学习。重要的是理清:使用工具,是为了解决什么问题。工具1、CE找偏移的方法中聊到,最直接就是在内存里面搜索。CE(CheatEngine又称CE修改器),就是用来搜索内存里面东西,得到内存地址。2、IDA逆向分析,我们拿到手的是已经编译好的软件,看不了代码。要是能把软件恢复成代码,分析起来就方便多了。IDA这个工具,就是用来把软件恢复成代码的。软件编译过程会去掉一些多余的信息。所以IDA没办法说完全恢复

2021-06-24 17:00:23 960 6

转载 微信逆向分析(三)——逆向分析的实现思路

前言找到偏移之后,就是写辅助工具了。这一篇聊聊写辅助工具的原理。具体的代码细节,等到实战会展开细说。明确一下逆向两个目的1、调用功能2、获取数据对应的实现方法1、调用功能找到偏移,直接调用。2、获取数据对于全局数据,找到偏移,直接得到。对于局部数据,拦截代码,间接得到 。写外部工具1、调用功能windows系统提供了接口(CreateRemoteThread),允许一个软件调用另一个软件的功能。2、获取数据对于全局数据windows系统提供了接口(ReadProcessMe

2021-06-24 16:57:51 822

转载 微信逆向分析(二)——逆向分析的方法

上一篇,聊到逆向分析是找偏移,有依据地找,效率会快。这一篇聊下找偏移方法。只说概念,具体的细节,后续会配合实战再展开细说。找偏移的方法1、内存逆向的目的,是找功能或者数据在内存的地址。最直接的方法,就是在内存里面搜索。对于数据:可以直接在内存搜索。对于功能:如果知道代码的特征码,也可以直接在内存寻找。(所谓代码的特征码,具体是一串字符串,在内存是唯一的,可以用来搜索定位)。2、界面带界面的软件,一般流程就是:1、软件生成界面,界面上会有按钮,编辑框这些控件。2、用户操作界面,点击按钮或者

2021-06-24 16:53:13 799

转载 微信逆向分析(一)——逆向分析的原理

逆向的简单理解正向开发,是先写代码,再编译成软件。而逆向分析,到手的只有软件。从软件入手,推测对应的代码,需要了解一下编译之后的软件是怎么跑起来的。软件运行过程1、软件加载到内存。2、CPU读取内存的指令。3、根据指令,再读取数据,进行运算。4、运算的过程,数据是存在CPU里面的寄存器。5、运算过程,用到另一个功能,需要保存当前环境,存到堆栈。代码语言的变化1、C/C++语言:高级语言,给人看的2、汇编语言 :低级语言,给机器用的(逆向分析,接触多是汇编语言)软件加载过程磁盘

2021-06-24 16:49:29 3680

转载 安装visual studio后,打开excel提示安装Office自定义项出错

出错的文件是:Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto按网上搜索的结果,在com加载项里删除相关项就行了,但是删除了也一样提示,而且重新打开com加载项,发现删除不了。具体是左上角的倒三角,工具,com加载项。最后下载和安装了Registry Workshop,查找Microsoft.VisualStudio.QualityTools.LoadTestExce

2021-01-19 12:06:01 770

转载 Python CPU密集型对IO密集型 多进程更优于多线程 GIL

转载来源:https://blog.csdn.net/lambert310/article/details/50605748CPU密集型和IO密集型最近在看Python的多线程,经常我们会听到老手说:“python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢?要知其然,更要知其所以然。所以有了下面的深入研究:首先强调背景:1、GIL是什么? GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。2、每个CP

2020-10-16 20:57:08 1382

转载 Python的GIL(全局解释器锁)

转载来源:https://blog.csdn.net/weixin_41594007/article/details/79485847在进行GIL讲解之前,我们可以先回顾一下并行和并发的区别:并行:多个CPU同时执行多个任务,就好像有两个程序,这两个程序是真的在两个不同的CPU内同时被执行。并发:CPU交替处理多个任务,还是有两个程序,但是只有一个CPU,会交替处理这两个程序,而不是同时执行,只不过因为CPU执行的速度过快,而会使得人们感到是在“同时”执行,执行的先后取决于各个程序对于时间片资源的争夺

2020-10-14 21:54:09 237

转载 深度剖析凭什么python中整型不会溢出

转载来源:深度剖析凭什么python中整型不会溢出前言本次分析基于 CPython 解释器,python3.x版本在python2时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数。在python3后,统一使用了长整型。这也是吸引科研人员的一部分了,适合大数据运算,不会溢出,也不会有其他语言那样还分短整型,整型,长整型…因此python就降低其他行业的学习门槛了。那么,不溢出的整型实现上是否可行呢?不溢出的整型的可行性尽管在 C 语言中,整型所表示的大

2020-09-23 16:38:00 224

原创 秋招总结:遇到的手撕代码题

跟谁学一面:求连续子数组的最大和(力扣 53)【思路:力扣系列略,题解区都比我讲得好】二面:翻转字符串中的每个单词(简单题,比较常见,没去找对应的原题)【思路:遍历字符串,每找到一个单词就把它翻转一下,空格跳过】字节x面:不使用除法实现除自身外数组元素的乘积(力扣 238)【思路:力扣系列略,题解区都比我讲得好】x面:实现NMS【思路:略,目标检测的相关基础】一面:k个一组翻转链表(力扣 25)【思路:力扣系列略,题解区都比我讲得好】拼多多一面:给n个标签和位置的pair,位置表示

2020-09-18 22:11:16 639

原创 运用递归解决树的问题

基于递归解决树的问题我们知道可以利用递归求解树的遍历。 递归是解决树的相关问题最有效和最常用的方法之一。我们知道,树可以以递归的方式定义为一个节点(根节点),它包括一个值和一个指向其他节点指针的列表。 递归是树的特性之一。 因此,许多树问题可以通过递归的方式来解决。对于每个递归层级,我们只能关注单个节点内的问题,并通过递归调用函数来解决其子节点问题。通常,我们可以通过 “自顶向下” 或 “自底向上” 的递归来解决树问题。1. “自顶向下” 的解决方案“自顶向下” 意味着在每个递归层级,我们将首先

2020-09-10 21:58:01 363

原创 146. LRU缓存机制

146. LRU缓存机制题目描述运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留

2020-09-07 16:11:23 105

原创 MySQL——锁

锁一、原因开发多用户、数据库驱动的应用时,最大的一个难点是:一方面要最大程度地利用数据库的并发访问,另外一方面还要确保每个用户能以一致的方式读取和修改数据。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。二、lock 与 latch的比较三、InnoDB存储引擎中的锁1. 行级锁的类型InnoDB存储引擎实现了以下两种标准的行级锁:共享锁(S Lock),允许事务读一行数据;排他锁(X Lock),允许事务删除或更新一行数据。如果一个事务T1已经获得了行

2020-09-06 19:45:49 145

原创 MySQL——InnoDB和MyISAM存储引擎的区别

InnoDB: MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。MyISAM: 在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺

2020-09-05 16:58:08 157

原创 MySQL体系结构和存储引擎

MySQL数据库一、数据库基础概念1. 数据库数据库(database) 是保存有组织的数据的容器(通常是一个文件或一组文件)。理解数据库的一种最简单的办法是将其想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。2. 数据库软件数据库软件应称为DBMS(数据库管理系统),如 MySQL。数据库是通过DBMS创建和操纵的容器。二、MySQL体系结构MySQL由以下几部分组成:连接池组件管理服务和工具组件SQL接口组件查询分析器组件优化器组件缓冲(

2020-09-05 16:23:06 180

原创 数据库基础知识——用正则表达式进行搜索(使用技巧)

使用MySQL正则表达式为了下面的展示,我们创建了 crashcourse 数据库:CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;crashcourse 是我自己设置的数据库的名称,下面的使用示例,都是使用这个数据库。为了下面的展示,我们还需要为 crashcourse 数据库创建一些表和往表中插入一些记录, 相关的 SQL 文件有:创建表:create.sql插入数据:popul

2020-09-03 17:09:29 1130

原创 数据库基础知识——用正则表达式进行搜索

使用MySQL正则表达式为了下面的展示,我们创建了 crashcourse 数据库:CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;crashcourse 是我自己设置的数据库的名称,下面的使用示例,都是使用这个数据库。为了下面的展示,我们还需要为 crashcourse 数据库创建一些表和往表中插入一些记录, 相关的 SQL 文件有:创建表:create.sql插入数据:popul

2020-09-03 16:39:12 398

原创 正则表达式全集

字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。*匹配前面的子表达式零次或多次。例如,...

2020-09-03 16:10:37 239

原创 数据库基础知识——SELECT 语句(排序检索数据)

SQL使用SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。SQL 语言特点:SQL 语言不区分大小写;在命令行窗口的 SQL 语句要以分号 ; 结束。为了下面的展示,我们创建了 crashcourse 数据库:CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;crash

2020-09-02 20:31:50 4537

原创 数据库基础知识——SELECT 语句(检索数据)

SQL使用SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。SQL 语言特点:SQL 语言不区分大小写;在命令行窗口的 SQL 语句要以分号 ; 结束。其中 SELECT 语句是我们最常用的。为了下面的展示,我们创建了 crashcourse 数据库:CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE ut

2020-09-02 19:43:48 2687

原创 数据库基础知识——MySQL连接、数据库的创建、选择、展示和表的创建

MySQL简介MySQL数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。MySQL是一种DBMS,即它是一种数据库软件。

2020-09-02 16:39:50 317

原创 数据库基础知识——数据库基础概念和名词术语

数据库基础概念数据库数据库(database) 是保存有组织的数据的容器(通常是一个文件或一组文件)。理解数据库的一种最简单的办法是将其想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。数据库软件数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。表在你将资料放入自己的文件柜时,并不是随便将它们扔进某个抽屉就完事了,而是在文件柜中创建文件,然后将相关的资料放入特定的文件中。在数据库领域中,这种文件称为表。表是一种结构化的文件,可用

2020-09-02 15:41:55 861

转载 计算机网络——HTTP

转载来源:CS-Notes/notes/HTTP一 、基础概念URIURI 包含 URL 和 URN。请求和响应报文1. 请求报文2. 响应报文二、HTTP 方法客户端发送的 请求报文 第一行为请求行,包含了方法字段。GET获取资源当前网络请求中,绝大部分使用的是 GET 方法。HEAD获取报文首部和 GET 方法类似,但是不返回报文实体主体部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。POST传输实体主体POST 主要用来传输数

2020-09-01 21:33:10 325

原创 计算机网络 - 传输层

一、传输层为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。UDP和 TCP的特点1. UDP用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于

2020-08-31 22:52:41 539

原创 计算机网络体系结构

计算机网络体系结构1. 五层协议应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。网络层 :为主机提

2020-08-31 21:40:18 166

原创 Linux基础知识——进程管理

进程管理查看进程1. ps查看某个时间点的进程信息。示例:查看自己的进程# ps -l示例:查看系统所有进程# ps aux示例:查看特定的进程# ps aux | grep threadx2. pstree查看进程树。示例:查看所有进程树# pstree -A3. top实时显示进程信息。示例:两秒钟刷新一次# top -d 24. netstat查看占用端口的进程示例:查看特定端口的进程# netstat -anp | grep port进程状态

2020-08-31 20:12:48 161

原创 Linux基础知识——Bash

Bash可以通过 Shell 请求内核提供服务,Bash 正是 Shell 的一种。特性命令历史:记录使用过的命令命令与文件补全:快捷键:tab命名别名:例如 ll 是 ls -al 的别名shell scripts通配符:例如 ls -l /usr/bin/X* 列出 /usr/bin 下面所有以 X 开头的文件变量操作对一个变量赋值直接使用 =。对变量取用需要在变量前加上 $ ,也可以用 ${} 的形式;输出变量使用 echo 命令。$ x=abc$ echo $x$ e

2020-08-31 19:53:34 129

原创 Linux基础知识——压缩与打包

压缩与打包压缩文件名Linux 底下有很多压缩文件名,常见的如下:扩展名压缩程序*.Zcompress*.zipzip*.gzgzip*.bz2bzip2*.xzxz*.tartar 程序打包的数据,没有经过压缩*.tar.gztar 程序打包的文件,经过 gzip 的压缩*.tar.bz2tar 程序打包的文件,经过 bzip2 的压缩*.tar.xztar 程序打包的文件,经过 xz 的压缩压缩指令1.

2020-08-31 19:43:51 110

原创 Linux基础知识——文件

一、文件(一)文件属性用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。使用 ls 查看一个文件时,会显示一个文件的信息,例如 drwxr-xr-x 3 root root 17 May 6 00:14 .config,对这个信息的解释如下:drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段3:链接数root:文件拥有者root:所属群组17:文件大小May 6 00:14:文件最后被修改的时间.config:文件名常见

2020-08-30 21:55:48 403

原创 Linux基础知识——文件系统

一、文件系统分区与文件系统我们对磁盘进行分区完毕后,还需要进行格式化(format),对分区进行格式化是为了在分区上建立文件系统,即把分区格式化成为一个文件系统。一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统,也可以把多个分区格式化为一个文件系统。而且,每种操作系统能够使用的文件系统并不相同,举例来说:Windows系统的文件系统:FAT / FAT16(windows 98 以前),NTFS (windows 2000 以后)Linux系统的文件系

2020-08-30 17:00:27 351

原创 Linux基础知识——常用操作以及概念

前言在面试中,Linux 知识点相对于网络和操作系统等知识点而言不是那么重要,只需要重点掌握一些原理和命令即可。为了方便大家准备面试,在此先将一些比较重要的知识点列出来:能简单使用 cat,grep,cut 等命令进行一些操作;文件系统相关的原理,inode 和 block 等概念,数据恢复;硬链接与软链接;进程管理相关,僵尸进程与孤儿进程,SIGCHLD 。...

2020-08-29 18:28:24 158

转载 RAM、ROM和硬盘的区别

转载来源:https://www.jianshu.com/p/3d0b3af6cc59RAM、ROM和硬盘的总结很久就对存储相关的介质感兴趣,一直不清楚电脑里的存储介质,比如:硬盘,光盘,内存,缓存都是什么?手机上的内存和存储又是什么?U盘又是什么介质?这些都困扰着我,重点是我还是嵌入式的,这就很尴尬了。。。计算机的存储器分为主存储器和辅助存储器,主存储器又称内存储器(简称内存),辅助存储器又称外存储器(简称外存)。RAM计算机内存储器有两种型号:ROM和RAM。ROM表示的是只读存储器,即:

2020-08-28 20:11:25 3838

原创 计算机操作系统——存储管理

一、地址空间1)定义:地址空间为程序创造了一种抽象的内存。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址空间外)。2)基址寄存器与界限寄存器:当一个进程运行时,程序的起始物理地址装载到基址寄存器中,程序的长度装载到界限寄存器中。每次一个进程访问内存,取一条指令,读或写一个数据字,CPU硬件会在把地址发送到内存总线前,自 动把基址值加到进程发出的地址值上。同时,它检查程序提供的地址是

2020-08-27 21:57:35 944

原创 算法与数据结构——二叉树遍历

一、二叉树:1. 二叉树的遍历方式:深度优先搜索(DFS):先序遍历、中序遍历、后序遍历往往利用 递归 或者 栈 来实现广度优先搜索(BDF):层序遍历(即按层遍历)往往利用 队列 实现...

2020-08-27 15:55:38 288

转载 Python 各种集合内置方法的时间复杂度

转载来源:https://blog.csdn.net/Baoli1008/article/details/48059623Python内置方法的时间复杂度本文翻译自Python Wiki本文基于GPL v2协议,转载请保留此协议。本页面涵盖了Python中若干方法的时间复杂度(或者叫“大欧”,“Big O”)。该时间复杂度的计算基于当前(译注:至少是2011年之前)的CPython实现。其他Python的实现(包括老版本或者尚在开发的CPython实现)可能会在性能表现上有些许小小的差异,但一般不超

2020-08-25 10:13:50 3182 2

原创 计算机操作系统——死锁

一、死锁的定义大部分死锁都和资源相关,资源分为两类:可抢占的和不可抢占的:可抢占资源(preemptable resource)可以从拥有它的进程中抢占而不会产生任何副作用,存储器就是一类可抢占的资源。不可抢占资源(nonpreemptable resource)是指在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。总的来说,死锁和不可抢占资源有关,有关可抢占资源的潜在死锁通常可以通过在进程之间重新分配资 源而化解。所以,我们的重点放在不可抢占资源上。死锁的规范定义如下:

2020-08-24 21:28:49 2271

原创 算法时间复杂度大小排序

算法时间复杂度大小排序:

2020-08-24 15:19:45 2337

转载 线程同步机制

线程同步机制一、互斥量(mutex)互斥量本质上是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其它试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为运行状态的线程可以对互斥量加锁,其它线程将会看到互斥锁依然被锁住,只能回去再次等待它重新变为可用。在这种情况下,每次只有一个线程可以向前执行。二、信号量(semaphore)互斥量只能用于一个资源的互

2020-08-23 21:14:33 666

原创 进程管理、同步和通信

1、进程的定义进程实体由程序段、相关的数据段和PCB(进程控制块)三部分构成。进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。例如:在电脑中,一个正在运行的软件应用可以视作一个进程,如:微信客户端、QQ、网易云音乐等2、进程控制块(Process Control Block, PCB)的作用:作为独立运行基本单位的标志能实现间断性运行方式提供进程管理所需要的信息提供进程调度所需要的信息实现与其他进程的同步与通信参考文献:进程和线程基础知识全家桶,30 张图一套带

2020-08-02 21:24:20 431

Sublime Text3

Sublime Text3绿色版,由于Subline Text在安装package control中会遇到各种问题,而无法成功安装,所以直接在此上传已经安装好package control的安装包,解压到对应的文件夹即可使用。

2018-04-11

语音识别系统代码

语音识别系统的代码,MATLAB版本,该语音识别系统可以实现说话人的语音识别功能,同时也可以实现识别不同的单词。

2017-09-09

libsvm工具箱(libsvm-3.22版)

libsvm工具箱(libsvm-3.22版),已经包含了matlab数据集heart_scale.mat。该工具箱为用C++编写的代码,使用前要在MATLAB中调用C++编译器进行编译(如Visual Studio 2013)。

2017-09-04

JDK_API_1_6_zh_CN(中文)

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。通过JavaAPI有利于Java新手快速入门并深入学习。

2016-02-12

空空如也

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

TA关注的人

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