Web API:节点操作
什么是Web ApiAPI(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使用即可。Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM )。参考:https://developer.mozilla.org/zh-CN/docs/Web/API DOM文档对象模型(Document Object Model,简称DOM)DOM树 又称为文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。DOM把文档当作对象,它的顶级对象是document 文档:一个页面就是一个文档,DOM中使用document表示 节点:网页中的所有内容,在文档树中都是节点(标签、属性、文本、注释等),使用node表示 标签节点:网页中的所有标签,通常称为元素节点,又简称为“元素”,使用element表示 节点操作 创建 document.crea...
Chrome DevTools Console调试
console console.log()打印内容的通用方法console.error()打印一条错误信息console.warn()打印一个警告信息 - console.info()打印资讯类说明信息console.time()启动一个以入参作为特定名称的计时器长 console.timeEnd()结束特定的 计时器 并以豪秒打印其从开始到结束所用的时间 复制 先在代码里console.log 然后在控制台上右键点击输出的对象 选择 store as global variable 控制台会输出temp1 或者temp2 temp3 然后在控制台输入copy(temp1) 或者copy(temp2) 回车 会输出undefined 这时已经被复制到粘贴板上了,直接去别的地方粘贴就好了 选择器 $ -简单理解就是 document.querySelector 而已 $$ 简单理解就是 document.querySelectorAll 而已。 $$('span')[1].getAttribute('name') $$('spa...
py面向对象特性:继承、封装、多态、鸭子模型、魔法方法
继承的重点1、子类拥有父类非私有化的属性和方法。 2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。 3、子类可以用自己的方式实现父类的方法。(重写)。 单继承1234567891011121314151617181920212223class Animal: def eat(self): print("eating...") def sleep(self): print("sleep...")// 继承父类的方法class Dog(Animal): def swimming(self): print("goupaoshi...")class Cat(Animal): def climb_tree(self): print("climb_tree...")alex = Dog()alex.eat() 1234567891011121314151617181920class Animal: d...
git工作流模式:集中式工作流
集中式工作流开发者直接在本地 master 分支开发代码,开发完成后 push 到远端仓库 master 分支。 功能分支工作流开发者基于 master 分支创建一个新分支,在新分支进行开发,开发完成后合并到远端仓库 master 分支。 Git Flow 工作流Git Flow 工作流为不同的分支分配一个明确的角色,并定义分支之间什么时候、如何进行交互,比较适合大型项目的开发。 Forking 工作流开发者先 fork 项目到个人仓库,在个人仓库完成开发后,提交 pull request 到目标远程仓库,远程仓库 review 后,合并 pull request 到 master 分支 详细查看:https://www.v2ex.com/t/770008 例子(仅仅只是参考)123456789101112131415161718192021222324252627282930313233343536373839==分支开发==1.git clone // 到本地2.git checkout -b xxx 切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上)3...
git的子模块:学习笔记与要点整理
git submodulehttps://git-scm.com/book/en/v2/Git-Tools-Submodules 为什么要用submodules?经常发生的情况是,在处理一个项目时,您需要使用其中的另一个项目。也许它是第三方开发的库,或者您正在单独开发并在多个父项目中使用。这些场景中出现了一个常见问题:您希望能够将这两个项目视为独立的项目,但仍然能够在另一个项目中使用一个项目。 1234$ mkdir test$ cd test$ git init$ git submodule add https://github.com/my-user/my-submodule.git <指定目录> 加上 –recursive 拉取嵌套的子模块(子模块本身又有子模块) git submodule update --init --recursive 在clone时加上 –recurse-submodules选项自动拉取子模块 git clone --recurse-submodules <main-project-repo-url> git submod...
NDK和JNI:学习笔记与要点整理
NDK与JNI基础1.由来: Android 平台从一开就已经支持了C/C++了。我们知道Android的SDK( Software Development Kit )主要是基于Java的,所以导致了在用Android SDK进行开发的工程师们都必须使用Java语言。不过,Google从一开始就说明Android也支持JNI编程方式,也就是第三方应用完成可以通过JNI调用自己的C动态度。于是NDK就应运而生了。 2.NDK是什么: NDK全拼是:Native Develop Kit。官方定义: Android NDK 是一套允许您使用原生代码语言(例如C和C++) 实现部分应用的工具集。在开发某些类型应用时,这有助于您重复使用以这些语言编写的代码库 。 so文件,其本质就是一堆C、C++的头文件和实现文件打包成一个库。目前Android系统支持以下七种不用的CPU架构,每一种对应着各自的应用程序二进制接口ABI:(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,...
APP加固理论:app加固技术发展
app加固技术发展摘录:https://mp.weixin.qq.com/s/j35pPdZyeg_InS9LcPmnkQ dex保护代码混淆 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。ProGuard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。 动态加载 将需要保护的代码单独编译出来,将其进行加密后在程序运行的过程中对其进行解密,并使用 DexClassLoader 来动态的进行加载 DexClassLoader是什么? 在java环境中,有个概念叫类加载器(ClassLoader),其作用是动态加载class文件,标准的java sdk中,有ClassLoader这个类,可以用来加载想要加载的class文件,每个ClassLoader在初始化的时候必须指定class的路径。 每个ClassLoader都有一个父ClassLoader,当加载类的时候,子ClassLoader会先请求父ClassLoader去加载class文件...
Android逆向分析思路:从AndroidManifest.xml找到程序…
静态分析android程序从AndroidManifest.xml找到程序的入口分析每个android程序都有一个主的activity,它是程序启动的第一个activity,然后每个activity都需要在 AndroidManifest.xml文件中声明,看下面得例子: 123456<activity android:theme="@style/DrugTheme.Launcher" android:name="cn.dxy.medicinehelper.activity.DrugLaunchActivity" android:exported="true" android:screenOrientation="portrait"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.in...
Android常用的命令:命令分类
命令分类把在adb shell中的执行的命令成为shell命令,在外面执行的叫非shell命令 非shell命令查看当前正在运行app的activity信息12adb shell dumpsys activity topadb shell dumpsys > infos.txt 查看包名应用详细的信息1adb shell dumpsys package(包名) 查看指定包app的数据组存储信息1adb shell dumpsys dbinfo 包名 转发设备端口1adb forward 协议:端口 ... 查看设备中可以被调试的应用进程号1adb jdwp 查看当前日志信息12adb logcat -v time > E://log.txt-v 显示日志格式 -v time 时间格式 adb logcat 命令格式:adb logcat [选项] [过滤项],其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的; (1) 选项解析 – “-s”选项 : 设置输出日志的标签, 只显示该标签的日志; –”-f”选项 : 将日志输出到文件, 默认输...
JNI静态注册和动态注册:JNI是什么?
JNI是什么? JNI是Java Native Interface的缩写,中文名为JAVA本地调用。它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。Java是支持调用C/C++代码的,不过不能直接调用,因此需要一个中间层来进行转换、翻译,这就是JNI(Java Native Interface)的意思,JNI的作用就是粘合Java代码和C++代码。 JNIEnv类型JNIEnv类型实际上代表了java的环境,通过JNIEnv *指针就可以对java端的代码进行操作。 jclass类型为了能够在c/c++中使用java类,jni.h头文件中专门定义了jclass类型来表示java中的class类: jclass FindClass(const char* name) 通过类的名称获取jcalss,例如jclass str = env->FindClass (“java/lang/String”);获取java...