自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 资源 (4)
  • 收藏
  • 关注

原创 Protobuf 学习记录

支持多种语言,只需定义好数据结构,利用Protobuf框架生成源代码,就可很轻松地实现数据结构的序列化和反序列化。对于string,bytes和嵌套消息类型的数据,使用Length-delimited编码,也就是把value的length也编码进去。protobuf中消息的字段都是k-v类型的,每个字段进行编码后,再利用T-L-V或T-V的方式进行数据存储。对于大整数类型的数据,使用64-bit和32-bit编码方式(固定长度的编码类型),存储格式为T-V。使用简单自动进行序列化和反序列化。...

2022-07-21 20:21:04 317 1

原创 InputStream.read()

read(byte[]b,intoff,intlen)将输入流中最多len个数据字节读入byte数组。尝试读取len个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。read(byte[]b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。以整数形式返回实际读取的字节数。read()从输入流中读取数据的下一个字节。InputStream有如下三个read方法。...

2022-07-15 15:03:29 3196

原创 instanceof 运算符

instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。

2022-07-14 19:58:06 374

原创 RN 封装 Android原生组件

RN 封装 Android原生组件背景当在React Native暂时未提供部分原生功能或者模块,我们需要复用部分原生代码时,比如复用一个原生方法,此时就需要将原生方法进行封装,暴露出一个接口来让React-Native调用。步骤官网样例以封装一个自适应字体大小的文本框为例,实现了设置文本、字体大小、可缩小到的最小字体大小、字体颜色、是否中划线、是否下划线、是否加粗、文字对齐方式、文本超出限制时省略号的位置、文本最大行数。创建一个RN工程命令行:react-native init 项目名打开

2022-04-22 15:00:58 2612

转载 雪球 Android 客户端网络框架改造实践

使用 OkHttp 和 Retrofit 作为网络框架的底层支持原文链接:雪球 Android 客户端网络框架改造实践

2021-10-29 10:28:51 99

转载 Retrofit 注解

原文链接:https://blog.csdn.net/yuzhangzhen/article/details/109958977?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163538681016780262513041%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=1635386810167802625130

2021-10-28 10:17:07 95

转载 Android加载图片的几种方式

Android加载图片的几种方式android中图片分为Drawable和Bitmap,两者可以相互转化,我们在res目录下放的Image图片都可以通过R类索引得到对应的Drawable,而assets目录则不会生成id,raw目录会生成id但不能直接使用现在讨论获得图片的几种方式一,获得res/raw目录下的原始图片文件InputStream is = getResources().openRawResource(R.id.fileNameID) ;Bitmap bmp=BitmapFactor

2021-04-23 22:54:39 2820

转载 自定义View

自定义View视图坐标系View获取自身宽高getHeight():获取View自身高度getWidth():获取View自身宽度View自身坐标通过如下方法可以获得View到其父控件(ViewGroup)的距离:getTop():获取View自身顶边到其父布局顶边的距离getLeft():获取View自身左边到其父布局左边的距离getRight():获取View自身右边到其父布局左边的距离getBottom():获取View自身底边到其父布局顶边的距离MotionEvent提供的方

2021-04-23 22:32:15 138

转载 接口和抽象类

接口和抽象类抽象类定义如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。抽象类用abstract修饰。特点(1)不能实例化,因为抽象类中含有无法具体实现的方法。(2)可在抽象类中定义公共成员变量、成员方法、构造方法等。(3)只要包含一个抽象方法的类,该类必须要定义成抽象类(抽象方法是一种特殊的方法,它只有声明但没有具体的实现,抽象方法必须为public或protected)。故可理解为抽象类是在普通类结构里增加抽象方法的组成部分。(4)如果子类继承于一个抽象类,则该子类

2021-04-20 11:24:03 245

原创 小米安卓岗一面总结

小米安卓岗一面总结面试官人很好,非常耐心,最后还会总结你的亮点和不足,面试体验非常棒。下面总结如下:1.http和https2.get和post区别3.http请求报文和响应报文4.TCP三次握手5.http和tcp联系6.tcp和udp的区别以及应用场景7.进程和线程的区别8.Java的四种引用9.接口和抽象类的区别10.创建线程的方式有哪些11.线程池在哪里12.线程池怎么实现13.final的作用14.static的作用15.四大组件(每一个都进一步问)16.事件分发

2021-04-19 16:02:46 223

原创 小米安卓面经

小米安卓面经jre和jdk区别JDK是Java的开发工具,它不仅提供了Java程序运行所需的JRE,还提供了一系列的编译,运行等工具,如javac,java,javaw等。JRE只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机)及核心类库。线程池核心参数核心参数corePoolSize(核心线程数)(1)核心线程会一直存在,即使没有任务执行;(2)当线程数小于核心线程数的时候,即使有空闲线程,也会一直创建线程直到达到核心线程数;(3)设置allowCoreThreadT

2021-04-18 22:59:52 379

转载 Android通信相关

Android通信相关AsyncTask是一个Android已封装好的轻量级异步类,属于抽象类,使用时需要实现子类。它本质上是一个封装了线程池和Handler的异步框架线程池:缓存线程+复用线程,避免频繁创建、销毁线程带来的系统开销用于:1.异步任务,如在工作线程中执行耗时任务2.消息传递,如实现工作线程和主线程之间通信,将工作线程处理结果传递给主线程,并在主线程中执行相关UI操作3.和Handler一样用于处理异步任务,不过AsyncTask代码量更为轻量级,且后台是一个线程池,在异步任务

2021-04-18 14:21:42 264

原创 美团4.4笔试复盘

美团4.4笔试复盘第一题一天,小美在写英语作业时,发现了一个十分优美的字符串:这个字符串没有任何两个字符相同。于是,小美随手写下了一个字符串,她想知道这个字符串的的所有子序列,有多少个是优美的。由于答案可能会很大,输出对20210101取模后的结果。一个字符串的子序列定义为:原字符串删除0个或多个字符后剩下的字符保持原有顺序拼接组成的字符串为原串的子序列。如:ab是acba的子序列,但bc则不是。在本题中。空串也为原串的子序列。两个子序列不相同,当且仅当他们对应原串的下标不相同。如aab则含

2021-04-10 20:28:01 900

转载 C++虚函数

我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例12.1(具体代码请查看:C++多态性的一个典型例子)程序中,在Circle类中定义了 area函数,在Circle类的派生类Cylinder中也定义了一个area函数。这两个函数不仅名字相同,而且参数个数相同(均为0),但功能不同,函数体是不同的。前者的作用是求圆面积,后者的作用是求圆柱体的表面积。这是合法的

2021-04-06 18:38:12 93

原创 常见编码方式

常见编码方式ASCll码统一规定了英文字符与二进制位之间的关系,一共规定了128个字符的编码Unicode是一种所有符号的编码,将世界上所有的符号都纳入其中存在的问题是,Unicode只是一个符号集,只规定了符号的二进制代码,没有规定这个二进制代码该如何储存。为了解决这个问题,就有了Unicode的三种实现方式:UTF-8,UTF-16,UTF-32UTF-8它是一种可变长度的编码方式,可以用1~4个字节表示一个符号,根据不同的符号变化字节长度编码规则:1.对于单字节的符号,字节的第一位设

2021-04-06 17:43:09 2996

转载 Android性能优化

Android性能优化内存优化ANR(应用程序无响应)原因:一般是主线程未及时响应用户的输入事件(如触摸、按键);或者当前事件正在被处理,但是由于耗时太长没有能及时完成。常见的原因是主线程频繁进行耗时操作解决:使用多线程,将耗时操作交给工作线程执行CRASH(应用程序崩溃)原因:一般是内存溢出解决:内存优化,如:避免内存泄漏、避免内存抖动、图片Bitmap优化、优化代码内存溢出应用程序所需内存超出系统分配的内存限额,从而导致内存溢出原因:内存中加载的数据量过于庞大,如一次性从数据库取出过

2021-04-02 21:50:47 72

转载 Android 五大存储

Android 五大存储SharedPreferences是一种轻量级存储类,数据存储格式为键值对。适合保存一些简单的配置参数等轻量级数据,如自动登录功能保存上次登录成功的用户名和密码只支持Java基本数据类型和String类型数据存储。如果要存取复杂的数据类型(类、图像等),就需要对这些数据进行编码,通常转换成Base64编码,然后将转换后的数据以字符串的形式保存在XML文件中它保存数据是用xml文件存放读取数据使用awaitLoadedLocked同步锁,是线程安全的一般采用单例模式使用

2021-04-01 19:54:29 228

转载 Android六大布局

Android布局六大布局LinearLayour线性布局组件一个挨一个排列常用属性:orientation:组件排列方式,水平或垂直gravity:组件包含的子元素的对齐方式layout_gravity:组件在父容器里的对齐方式layout_weight:布局的权重RelativeLayout相对布局子控件以其兄弟控件或父控件为参考按照相对位置进行布局,适用于复杂的嵌套布局常用属性:1.根据父容器定位:layout_alignParentLeft\Right\Top\Bottom

2021-04-01 19:51:36 350

转载 计算机网络

计算机网络一次网络请求的流程/浏览器访问一个url网址所经历的过程1.域名解析(DNS查找)2.建立TCP连接(三次握手和四次挥手)3.建立TCP连接后客户端向服务端发起HTTP请求(HTTP请求报文:请求行,请求头,空行,消息体)4.服务器接收并处理请求,返回HTTP响应信息,HTTP响应报文的消息体为服务端返回给客户端的HTML文本内容(HTTP响应报文:状态行,响应头,空行,消息体)5.浏览器解析HTML代码,同时请求HTML中的静态资源(如js,css,图片等)遇到静态资源是,向服务端发

2021-03-30 21:16:44 111

转载 Android四大组件

Android四大组件Activity(活动)是android程序与用户交互的窗口,可以显示一些空间用于监听并处理用户的事件生命周期有四个状态、七个方法、两个异常四个状态Running:处于栈的最顶端,此时处于不可见并可和用户交互的激活状态Paused:当Activity被另一个透明的或者Dialog样式的Activity覆盖时的状态,此时仍然可见,但失去了焦点,不可与用户交互Stopped:Activity完全不可见,处于后台,但仍保留着当前状态和成员信息Killed:当前界面被销毁,等

2021-03-29 15:42:50 291

转载 垃圾回收机制

垃圾回收机制如何判断对象是否是垃圾引用计数法一个对象A,任何一个对象引用A,A的引用计数器加一,当引用失效时,A的引用计数器减一,如果A的引用计数器为0,说明A没有引用,可以被回收。缺点是无法解决循环引用的问题可达性分析算法程序把所有的引用关系看作一张图,从一个节点GC Root开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,可达的对象都是存活的。当所有的引用节点寻找完毕之后,剩余的不可达节点则被认为是没有被引用到的节点,即无用的节点(GC Root 不可达对象),无用的

2021-03-26 16:34:16 80

转载 JVM相关

JVM相关Java代码执行流程源码编写:编写java文件编译生成class文件:将源代码文件编译生成class字节码文件,字节码文件存放了类的字段、方法、父类、实现的接口等信息加载class文件:通过类加载器将class二进制数据读入内存。读取class文件中的数据并存储在方法区中,建立一个Class对象,作为运行时访问类中数据的接口。运行class文件:JVM执行class文件,执行引擎找到main()入口方法,在栈里创建一个栈帧,逐行执行方法中的字节码指令。操作完成后返回给调用方,栈帧出栈。

2021-03-26 16:33:28 89

转载 MD5加密总结

MD5加密总结概述MD5消息摘要算法,属于Hash算法。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)特点不可逆相同的数据MD5值一样性质压缩性:任意长度的数据,算出的MD5值长度都是固定的容易计算:从原数据计算出MD5值很容易抗修改性:对原数据进行任何改动,哪怕只修改一个字节,所得到的MD5值都有很大区别弱抗碰撞:已知原数据和其MD5值,想找一个相同MD5值得数据非常困难强抗碰撞:想找到两个不同的数据具有相同的MD5值非常困难原理数据

2021-03-23 14:59:54 323

原创 C++定义一个宏,比较两个数的大小

C++定义一个宏,比较两个数的大小要求不使用<,>,if语句思路:负数是用补码表示的,最高位是符号位,所以判断a-b的最高位是不是1就可以知道a-b是不是负数。​ 1<<31得到最高位是1,其余位都是0,然后和a-b做与运算就可以知道最高位是不是1了代码如下:#define MAX(a,b) ( (((a)-(b)) & (1<<31) )>>31 ? (b):(a) ) 验证:#define MAX(a,b) ( (((a)-(b

2021-03-22 21:38:36 1688

转载 进程间的通信方式

进程间的通信方式管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用,进程的亲缘关系通常是指父子进程关系有名管道:也是半双工的通信方式,但是允许无亲缘关系的进程间通信消息队列:消息的链表存放在内核中并由消息队列标识,克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点共享存储:共享内存就是映射一段能被其他进程所访问的内存,由一个进程创建,多个进程都可以访问。共享内存是最快的通信方式,往往与其他通信机制(如信号量)配合使用,来实现进程间的同步和通信

2021-03-22 21:10:10 125

转载 进程与线程的区别

进程与线程的区别根本区别:进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位资源开销:每个进程都有独立的代码和数据空间,程序之间的切换会有较大开销;线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间的切换开销较小包含关系:线程是进程的一部分影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。(多进程比多线程健壮)执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但

2021-03-22 21:08:25 88

原创 Activity间数据传递

Activity间数据传递使用putExtra()传递数据putExtra(name,value)方法可将指定的数据封装到Intent对象中。其中,name为表示数据名称的字符串,value为要传递的各种数据类型的值。要获取lntent对象中封装的数据,可调用各种getXXXExtra()方法。使用Bundle对象传递数据将各种数据封装到一个Bundle对象中,再将Bundle对象封装到Intent对象中传递给启动的活动。Bundle对象的各种putXXX(String key,XXx val

2020-12-12 20:34:40 489

转载 Android事件分发机制

转载:https://www.cnblogs.com/aademeng/articles/10923336.html

2020-12-10 20:18:30 68

转载 HashSet 与TreeSet和LinkedHashSet的区别

HashSet 与TreeSet和LinkedHashSet的区别本文转载自:https://www.cnblogs.com/wl0000-03/p/6019627.htmlSet接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,只要两个对象用equals方法比较返回true,Set就不会接受这两个对象。HashSet与TreeSet都是基于Set接口的实现类。其中Tree

2020-12-10 18:16:05 408

原创 设计模式

设计模式1、单例模式(创建型)**1.**定义作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。**2.**特点单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。3、创建方式①懒汉式,线程不安全是否 Lazy 初始化:是是否多线程安全:否实现难度:易描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不

2020-12-09 21:27:17 96

原创 Android主流网络请求框架

Android主流网络请求框架1、Volley框架特点:适用于频繁请求而每次请求数据量不会很大;在请求的基础上做了磁盘缓存;防止多次相同请求浪费资源;提供String、Json、图片异步下载;网络请求的优先级处理;图片请求无需担心生命周期问题。使用:首先,通过Volley的静态方法new一个请求队列1 RequestQueue mQueue = Volley.newRequestQueue(context); 假如我们创建一个StringRequest实例(Volley

2020-12-09 21:26:43 3667 1

原创 Java基础面试题

Java基础面试题1. HashMap 和 HashTable 以及 CurrentHashMap 的区别首先说下最大的区别,HashMap是线程非安全的,效率比较高;HashTable和CurrentHashMap是线程安全的,效率比HashMap差一点,但CurrentHashMap比HashTable更加高效一些,因为CurrentHashMap采用了更加高效的分段锁机制。https://blog.csdn.net/majingjing66/article/details/744519162.

2020-12-08 22:32:18 115

原创 Android 性能优化

Android 性能优化1、布局优化(1)使用布局标签优化布局(2)去除不必要的嵌套和view节点(3)减少不必要的infalte(4)布局调优工具(5)检查overdrawhttps://blog.csdn.net/u012124438/article/details/545646592、内存优化https://blog.csdn.net/u012124438/article/details/546472873、apk瘦身(1)图片优化使用tinypng有损压缩使用jpg格式缩

2020-12-08 19:47:43 105

原创 Android Framework 相关

Android Framework 相关1、Android 系统架构1.应用程序层这一层一般我们最为熟悉了,我们平常开发安卓用java编写的app都属于这一层,当然系统自带的程序比如时钟、email等都是属于这一层2.应用程序框架层(Framework)这一层是核心应用程序所使用的API框架,为应用层提供各种接口API,包括各种组件和服务来支持我们的安卓开发,包括ActivityManager,WindowManager,ViewSystem等我们讲到AndroidFramework时很经常要提到

2020-12-08 18:03:57 195

原创 Android基础面试题

Android基础面试题1、什么是 ANR ,如何避免?应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应 用程序无响应(ANR:ApplicationNotResponding)对话框。不同的组件发生 ANR 的时间不一样,Activity 是 5 秒,BroadCastReceiver 是 10 秒,Service 是 20 秒(均为前台)。1. 在 UI 线程中做尽可能少的工作;2. 在 Activity 的 onCreate 和 onResume 中做尽可能少

2020-12-07 22:21:54 1093

原创 计算机网络面试题

计算机网络面试题一、HTTP/HTTPS1、HTTP和HTTPS有什么区别简单来说HTTPS是HTTP的安全版。传输方式不同,http是超文本传输协议,信息是明文传输;https则具有安全性的SSL/TSL加密传输协议。用的端口不同,http是80,https是443.连接方式不同,http的连接是无状态的;https是由ssl/tsl+http构建的可进行加密传输、身份认证的网络协议。客户端处理方式不同,如果 URL 的协议是 HTTP,则客户端会打开一条到服务端端口 80(默认)的连接,并

2020-12-06 00:20:45 523

原创 Android 短视频混合开发(DS-Bridge框架实现视频通信)

Android 短视频混合开发(DS-Bridge框架实现视频通信)先看看实现的效果实现原生视频的播放,暂停,快进,快退,全屏,退出全屏功能混合跨平台开发包括web开发、Hybrid开发、React Native、Flutter等这里使用Hybrid实现web与原生的混合开发,通过DS-Bridge框架+HTML、JS代码+android Native实现视频通信Hybrid框架Hybrid结构层次(1)H5页面层。(2)桥接层:BridgeJs是一个.js文件,是NA和H5通信的桥梁

2020-12-04 21:03:19 680

原创 Java反射机制

Java反射机制概述Java反射机制定义Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java 反射机制的功能1.在运行时判断任意一个对象所属的类。2.在运行时构造任意一个类的对象。3.在运行时判断任意一个类所具有的成员变量和方法。4.在运行时调用任意一个对象的方法。5.生成动态代理。Java 反射机制的应用场景1.逆向代码

2020-12-04 00:29:00 119

转载 HashSet与HashMap的区别

HashSet与HashMap的区别本文转载自:https://www.cnblogs.com/codercui/p/6841730.htmlHashSet:HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现:public boolean add(

2020-12-03 00:11:20 247

原创 HashMap

HashMap概述HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量 只是哈希表在创建时的容量。加

2020-12-03 00:10:08 103

PKVideo.zip

使用Hybrid实现web与原生的混合开发,通过DS-Bridge框架+HTML、JS代码+android Native实现视频通信

2020-12-04

PKHotelManager.zip

酒店管理系统,包括后台服务端和android客户端,实现登录,管理经理、员工、客房信息功能,查询财务报表功能等

2020-12-01

胖葵音乐(安卓云音乐app)

一款云音乐app,功能包括用户登录注册,退出登录,自动登录,修改密码,播放暂停网络音乐,通知栏显示等

2020-11-23

在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)包含短信验证功能,ForAndroid(java web后端服务器),yiyu(android studio客户端)

2020-10-11

空空如也

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

TA关注的人

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