- 博客(66)
- 资源 (3)
- 收藏
- 关注
原创 哈夫曼树及哈夫曼编码到底是怎么回事儿?
哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(HuffmanTree),或霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。路径从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径。路径长?从一个结点到另一个结点所经过的边的数量,被我们称为两个结点之间的路径长度。结点的带权路径长度结点的带权路径长度=节点路径长*节点权重如何构建?当然构建方法有好多
2020-06-14 18:47:19 1007
原创 Git使用(二)分支 合并 冲突解决 远程分支操作 变基
1、添加url:git remote add url名字 url2、查看已有url git remote -v96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)$ git remote add Url1 https://github.com/xxxx/xxxx.git96916@DESKTOP-D7SKL2J MINGW...
2020-04-09 17:19:13 1826
原创 Android JNI和NDK 自动创建Hello world
前言:博主现在已经找到一份比较满意的工作,做的是偏底层的JNI方面的嵌入式软件开发。因此从现在开始将会持续跟新这方面的知识以巩固和提高。Android NDK 与 JNI为什么要有这两个? 对于Android的嵌入式软件开发、调用到硬件、与操作系统交互或者执行一些比较重要的行为来说,一般是通过与C或C++结合进行,通常的做法就是将编译好的动态库.so放到我们的Android APK中,然后加载该库进行调用即可,但是如果我们需要在我们的项目中编写自己的本地代码怎么办呢?这就需要用到两个东西:NDK
2021-05-06 11:13:56 373 2
原创 Android大图片加载方法
图片在计算机中表示的几种常用格式:bmp:位图格式,使用普遍。其结构简单,未经过压缩,高质量,图像文件较大,但能被大多数软件采用。jpg:广泛引用,压缩率高,有损压缩,占用磁盘空间较少。GIF:分为静态GIF和动画GIF两种png:与JPG格式类似,压缩比高于GIF,高质量保存,支持图像透明图片占用内存大小计算公式:总像素单个像素大小如bmp位图可以按每个像素能表示多少种颜色进行划分:单色位图:每个像素可表示两种颜色,即非黑即白,一个像素占1/8个字节16色位图:一个像素占1/2个字节2
2020-11-27 13:54:42 986
原创 android 内容提供者
android中的四大组件之一----内容提供者用于不同app之间的数据共享,比如我在A应用程序中有个数据库,而应用B需要用到这个数据库的某个表信息,我们就可以在A应用中用ContentProvider来提供这个表的查询接口,这样也就做到了app之间的数据共享,还能让用户自定义接口提高安全性,避免了进程间调用,权限和开发成本问题。先来复习一下UriUri 通用资源标志符,Web上可用的每种资源 -HTML文档、图像、视频片段、程序等可由一个Uri进行定位构由以下几个部分组成scheme、autho
2020-11-26 21:12:31 1332 2
原创 Android Service
fun test(view: View) { startService(Intent(this, MyService::class.java)) stopService(Intent(this, MyService::class.java)) startService(Intent(this, MyService::class.java)) startService(Intent(this, MyService::class.java))
2020-11-26 14:11:39 220
原创 对话框小例子
普通对话框fun danxuan(view: View) { var dialog = AlertDialog.Builder(this) dialog.setTitle("黄立志帅不帅") dialog.setMessage("请选择") dialog.setNegativeButton("确定", object : DialogInterface.OnClickListener { override fun
2020-11-25 19:50:38 123
原创 Android intent
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的 Activity / Service和广播之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。Intent种类显示意图如直接
2020-11-25 13:16:48 113
原创 LitePal简单使用
LitePal:一、创建新数据库由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要整个项目使用的是LitePalApplication,所有的数据库操作就都不用再传Context了,直接使用当前对象即可,如下所示:class MyApplication: LitePalApplication() {}然后在清单文件配置中的application标签中加a
2020-11-24 18:55:16 269
原创 Android原生数据库操作
原生数据库框架SQLite Databases介绍一下SQLite 是一种数据库,使我们的应用和与之交互的设备上创建一个本地数据库。Lite 一词是指典型数据库的轻量级版本(lightweight version)。对应地就存在着重量级数据库,例如 MySQL,它可以提供更加复杂的功能。SQLite 不需要服务器,数据存储在设备的本地文本文件里。SQLite 是免费开源的,并且是 Android 自带的数据库这就是为什么需要学习这一特定类型的数据库。首先创建数据库管理类:class MySQLit
2020-11-24 11:52:05 664
原创 SDK目录介绍
打开androidstudio:新建工程打开下图所示的SDKManager可以下载安装所需要的开发工具和andrid版本查看SDK所在目录SDK目录source:存放着android源码add-ons:这里保存着附加库,第三方公司为Android平台开发的附加功能。例如googleMapsbuild tools:这里保存着一些Android开发常用的工具,例如adb、aidl等等。aapt即Android Asset Packaging Tool , 在SDK的build-too
2020-11-23 19:01:00 2725
原创 Android入门--系统架构简介和虚拟机对比
Android系统架构Application层:也就是应用层,不仅包括通话短信联系人这种系统级的应用,还包括用户自己安装的一些第三方应用FrameWork层:这一层大部分用Java写的,包括系统服务和四大组件,我们最常用的组件和服务都在这一层Android Runtime/Library层:这一层大部分都是C/C++写的,主要是虚拟机,还有一些三方库比如SQLite, WebKit,开发者可以通过调用Java API Framework来使用原生库的功能,也可以用Android NDK直接调用原生
2020-11-23 18:31:56 909 1
原创 服务器网络编程基础
几个重要的信号SIGPIPE管道中止,当写入无人读取的管道时产生该信号,默认终止进程SIGCHLD子进程结束或停止时发送SIGALRM定时器信号,以秒为单位,默认终止进程SIGUSR1/SIGUSR2自定义,默认终止进程SIGINT键盘输入的退出信号SIGQUIT键盘输入的退出信号SIGHUP控制终端的挂起信号SIGPIPE网络程序必须要处理SIGPIPE信号,否则当客户端退出后,服务器仍然向该SOCKET发数据时,则会引起CrashSIGCHLD僵尸进程是一个早已死亡的..
2020-07-31 15:34:37 163
原创 OpenGL学习---HelloOpenGL
输入以下代码即可生成一个不带任何东东的黑窗口。#include <glad/glad.h>#include <GLFW/glfw3.h>#include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height);void processInput(GLFWwindow* window);int main(){ //初始化GLFW gl
2020-07-17 21:49:40 128
原创 OpenGL学习---环境搭建
本人环境:win10visual studio 2019glfw-3.3.2cmake-3.18.0GLFWGLFW下载页下载解压:CMakeCMake是一个工程文件生成工具。用户可以使用预定义好的CMake脚本,根据自己的选择生成不同IDE的工程文件。下载页安装完成后点击启动需要我们指定源代码目录和一个存放编译结果的目标文件目录(可自己创建,这里我在glfw根目录创建了个build文件夹)以上步骤做完点击Configure按钮,如果使用默认设置,再次点击Configure
2020-07-04 15:23:37 137
原创 KMP算法
题目:如我有两个字符串String str1 = "BBC AVCDAB ABCDABCDABDE"String str2 = "ABCDABD"(空格别忽略了)需要求str2在str1中第一次出现的位置,现在用人眼看来实在下标19处暴力算法:过程:初始化,首先将这两个字符串转成char数组并创建连个索引:i、j分别记录str1、str2匹配位置。开始匹配,第一遍没匹配成功:i往后移一位,j回到str2头第二遍省略n遍。。。第十一遍这时候又得回头,索引回
2020-06-19 22:05:04 107
原创 强软弱虚引用
尚硅谷JVM笔记既偏门又非常高频的面试题:强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么? 在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference) 4种,这4种引用强度依次逐渐减弱。除强引用外,其他3种引用均可以在java.lang.ref包中找到它们的身影。AndoridStudio中:查看类继承关系快捷
2020-06-16 21:17:21 123
原创 垃圾回收器概述---JVM(十三)
垃圾回收器概述垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。① 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可以
2020-06-11 16:33:12 100
原创 垃圾回收算法---JVM(十二)
相关算法finalize()只被调用一次,即对象复活后,不再调用MAT:当程序出现OOM时生成Dump文件标记的是不会被回收的对象 没有上述算法都有stw的过程
2020-06-11 16:01:12 125
原创 后缀表达式生成
使用栈完成表达式的计算思路1.通过一个index值(索引),来遍历我们的表达式2.如果我们发现是- -个数字,就直接入数栈3.如果发现扫描到是- -个符号,就分如下情况3.1如果发现当前的符号栈为空,就直接入栈3.2如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数在从符号栈中pop出-个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈,如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈4.当表达式扫描完毕,就
2020-06-09 21:59:03 392
原创 链表反转
题目输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL初始化:反转第一次可以看到临时节点是用于保存后续剩余链表的临界值pre指向null改进我们直接让back、pre和temp节点等于链表上的节点,而无需做next指向操作,道理一样。class Solution { public ListNode reverseList(ListNode head) {
2020-06-08 18:30:28 63
原创 用数组来实现一个循环队列
1. 初始化数组头尾节点2. 插入3. 判满需要预留一个位置,用于判断队列是否满了如上图发现(rear+1)%maxSize == front;不再插入4. 删除如上直接移动front,相当于删除了下标0的元素1,此时(rear+1)%maxSize != front;可继续插入到rear处,然后移动到下标0处:5. 判空判断队列空的条件:rear==front;打印整个队列:for循环所需条件:开始下标:front有效个数:(rear+maxSize-
2020-06-08 16:23:54 1555
原创 执行引擎---JVM(十一)
执行引擎概述执行引擎是Java虚拟机核心的组成部分之–。虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虛拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字
2020-06-08 12:29:56 132
原创 本地方法栈---JVM(六)
b站尚硅谷的JVM学习笔记--https://www.bilibili.com/video/BV1PJ411n7xZ简单地讲,一个Native Method就是- 一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现。Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)本地方法是使用C语言实现的。它的
2020-06-01 15:29:27 107
原创 虚拟机栈---JVM(五)
虚拟机栈背景一次次方法的调用就对应这方法的入栈和出栈操作,不存在垃圾回收问题。主管java程序运行,保存方法的局部变量(基本数据类型、对象的引用地址)、部分结果、并参与方法的调用和返回。idea设置栈大小抛异常会在方法层层向上传递,知道找到处理异常的位置,如果直到栈底即main方法都没有异常处理则程序退出栈帧:栈帧各个结构内容:局部变量表注:this(访问索引)也要一个槽位,且Index为0操作数栈也就是操作数栈应该是从局部变量表中取值,做运算,
2020-06-01 15:17:50 263
原创 程序计数器---JVM(四)
JVM中的程序计数寄存器, 并广义上所致的物理寄存器,其翻译为PC计数器或指令计数器更为合理,是对物理寄存器的抽象模拟
2020-05-30 19:25:26 112
原创 运行时数据区---JVM(三)
红色区域一个进程对应一份(线程共享),灰色则一个线程对应一份(线程独占)Class Runtime一个JVM实例对应一个Runtime实例JVM所拥有的线程:
2020-05-30 19:01:10 102
原创 类加载子系统---JVM(二)
类加载器ClassLoader加载器做的事情分三个阶段加载阶段, 链接阶段(验证,准备,解析),初始化阶段加载器分类加载器分为引导类加载器和自定义加载器,自定义加载器都是间接或直接继承ClassLoader类的获取ClassLoader详细的讲解加载器:引导类加载器:自定义类加载器所有为什么要自定义加载器:隔离加载类修改类加载方式扩展加载源防止源码泄漏自定义:继承ClassLoader重写方法,获取二进制流,转换成Class没有复杂需求则课继承URL
2020-05-30 18:46:57 86
原创 JVM简介---JVM(一)
b站大学—尚硅谷的JVM学习总结为什么要学 JVM?面试的需要:入职 BATJ、TMD、PKQ 等一线大厂不光关注技术的广度,更关注技术的深度,JVM 技术是大厂面试的必备技能,掌握越深越好中高级程序员、架构师必备技能:架构师每天都在思考如何让我的系统更快,如何避免系统出现性能瓶颈。单纯的依靠物理机不足以解决问题,分析系统性能、调优系统瓶颈离不了对 JVM 中内存、垃圾回收、字节码指令、性能监控工具、调优参数的熟练掌握。精进技术、极客追求:JVM 是 Java 生态的核心价值的体现,垃圾回
2020-05-30 18:12:36 373
原创 sharedPreference apply 和 commit区别
apply没有返回值而commit返回boolean表明修改是否提交成功apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后再操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。apply方法不会提示任何失败的提示。由于在一个进程中,sharedPreference是单.
2020-05-29 18:12:00 392
原创 DataBinding的快捷使用
添加依赖:由于我更新了最新版的AndoridStudio3.6.3因此只需添加dataBinding { enabled = true }vandroid { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.example.jetpack" minSdkVersion 21 target
2020-05-29 16:44:00 646
原创 java反射
认识反射反射是什么? 反射是动态获取信息以及动态调用对象方法的一种反射机制。反射能做什么?可在运行状态中,获取类的属性和方法,并且调用以及修改。java不是动态语言,但java被视为动态语言的一个重要的原因就是反射动态构建对象获得类型反射是各种框架的灵魂通过反射越过泛型检查我们编写的大代码是存储在.java文件里的,当编译时就会生成.class文件,当类加载时会将.class文件读入内存,并得到Class对象使用要用到的api:由于Class这个类构造方法被私有化,只能通过Cl
2020-05-15 17:59:06 113
原创 Volley用法
Android中几个网络请求框架HttpClient、HttpURLConnection、OKHttp和Volley、Retrofit2HttpClient,以被Google弃用HttpURLConnection,官方提供,实现简单,遇到大量网络请求性能较差,底层用Socket来实现OKHttp,对http和https都有良好的支持,比较成熟,自己实现底层网络连接,用socket实现了网络连接,与HttpUrlConnection不同的是,HttpUrlConnection在IO方面用到的是Inp
2020-05-15 15:19:38 165
原创 ListView使用以及乱序问题如何解决
ListView是个ViewGroup,可有多个子控件,由名字即可知道可以像列表一样展示子View。设计上用到了适配器模式,可达到与适配器兼容和协同工作的作用。使得ListView使用起来只需定制适配器即可完成想要的展示。我们先写以下怎么简简单单的使用,然后进行优化:版本一:1、activity_main.xml<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLa
2020-05-12 13:52:40 448
android的事件分发.wps
2020-06-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人