知识图谱与demo

主要技术栈是安卓native和鸿蒙native应用层开发,其他的前后端、音视频和算法。

贴卡片的地方是技术栈对应的文章详情,链接是对应代码。

目录

日常练习

安卓

kotlin

《第一行代码》和《安卓艺术开发探索》

生命周期

Activity

Handler

线程

 照片墙

广播

广播实战

内容提供者

自定义view

碎片fragment

fragment

 AIDL

IPC

 文件存储IO

JNI

LBS

ContentProvider

 SQLite数据库存储

RecyclerView

FlowLayout

RemoteView

Permisson

Service

SharePreferences

ProgressBar、AlertDialog

动画

滑动冲突

View

WonderfulDay

MediaVideoDemo

其他

Embedding

自定义view

常用组件

组件化开发

多渠道

阿里云仓库代理配置

通过反射实体类创建数据库表

 IPC

SDK、Gradle和应用资源

安卓demo-壁纸预览、分屏小窗与U盘播放时长记忆功能

 Layout Inspector image server for API

AndroidManifest、Activity、Fragment和常用控件

构建首个应用和应用基础知识

NDK/JNI

Makefile&CMake

C++11

音视频

播放原理&基础知识&SDL

 ffmpeg基础介绍&常用命令

demo-ffmpeg&sdl

安卓demo-wifi点对点视频实时传输实例及原理

知识积累

JVM&内存分析

字、字节、比特、进制、位运算

进程&线程

设计

solid

设计模式

鸿蒙

其他(未调试成功)

rtmp

NestedRecyclerView

 JAVA后端

在线办公系统-OA系统

简介

功能模块

特点

技术栈

代码https://gitee.com/flying-guy/office

传统Web前后端

共享租赁平台

简介

功能模块

特点

技术栈

代码

音视频相关demo

安卓端到端投屏软件

简介

功能点

流程图

功能界面展示

技术栈

测试手机

实现详解

代码

单屏分屏效果

简介

功能界面展示

技术栈

在线电台(安卓应用)

简介

用例图

功能界面展示

demo 视频

代码

技术栈

特点

空间众包任务分配算法研究与实现(算法实现与改进)              

简介

TBG 算法

BB 算法

分析过程

MNTP 算法

算法验证

创新点

技术栈

算法有效性验证方式

介绍视频

代码


日常练习

安卓

kotlin

kotlinhttps://blog.csdn.net/mix39/article/details/144332743?spm=1001.2014.3001.5501

《第一行代码》和《安卓艺术开发探索》

https://gitee.com/flying-guy/ds/tree/master/HelloWorldDemo

生命周期

Activity生命周期:onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart、onSaveInstanceState

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ActivityLifeCycleTest/src/main/java/com/desay/activitylifecycletest/MainActivity.java

Activity

显示/隐式intent使用,传参

acitivtyTask、launchMode

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ActivityTest/src/main/java/com/desay/activitytest/FirstActivity.java

Handler

ui更新

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/AndroidThreadTest/src/main/java/com/desay/androidthreadtest/MainActivity.java

线程

线程:Thread、IntentService、AsyncTask、HandlerThread

线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool、SingleThreadExecutor

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ThreadTest/src/main/java/com/lwj/threadtest/MainActivity.java

 照片墙

方形图片自定义view、图片压缩功能(高效加载图片避免oom/计算采样率)、是否是wifi、GridView、磁盘缓存DiskLruCache、图片加载器(图片从网络下载、存储、磁盘/内存缓存、线程池、图片加载策略)

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/BitmapTest/src/main/java/com/lwj/bitmaptest/MainActivity.java

广播

静态注册广播、动态注册广播、发送自定义标准广播、发送自定义有序广播、本地广播

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/BroadcastTest/src/main/java/com/desay/broadcasttest/MainActivity.java

接收广播

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/BroadcastTest2/src/main/java/com/desay/broadcasttest2/AnotherBroadcastReceiver.java

广播实战

sp、登录/踢登

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/BroadcastBestPractice/src/main/java/com/desay/broadcastbestpractice/MainActivity.java

内容提供者

读取系统联系人

申请权限、ContentResolver、ContactsContract、cursor、ContentProvider

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ContactsTest/src/main/java/com/desay/contactstest/MainActivity.java

自定义view

继承自view、ondraw/onmeasure、获取资源

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/CustomView/src/main/java/com/example/customview/CircleView.java

碎片fragment

新闻实践。recyclerview、fragment

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/FragmentBestPractice/src/main/java/com/desay/fragmentbestpractice/NewsTitleFragment.java

fragment

碎片

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/FragmentTest/src/main/java/com/desay/fragmenttest/MainActivity.java

 AIDL

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/AIDLClientTest/src/main/java/com/desay/aidlclienttest/BinderPoolActivity.java

使用AIDL完成跨进程通信

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/AIDLServerTest/src/main/java/com/desay/aidlservertest/service/BookManagerService01.java

使用自定义Binder完成跨进程通信

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/AIDLServerTest/src/main/java/com/desay/aidlservertest/service/BookManagerService02.java

binder池

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/AppBinderCenter/src/main/java/com/lwj/appbindercenter/service/BinderPoolService.java

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/BinderManagerLib/src/main/java/com/lwj/bindermanagerlib/SecurityCenterImpl.java

IPC

跨进程通信方法,除了常用的AIDL还有下面几种。还有tx经典的mkkv

binder池

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/IPCTest/src/main/java/com/lwj/ipctest/BinderPool.java

文件共享

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/IPCTest/src/main/java/com/lwj/ipctest/MainActivity.java

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/IPCTest/src/main/java/com/lwj/ipctest/SecondActivity.java

Messenger

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/IPCTest/src/main/java/com/lwj/ipctest/MessengerActivity.java

ContentProvider

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/IPCTest/src/main/java/com/lwj/ipctest/ProviderActivity.java

TCP-Socket

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/IPCTest/src/main/java/com/lwj/ipctest/TCPClientActivity.java

 文件存储IO

数据存到文件中,从文件中读数据、FileOutputStream 、FileInputStream 、BufferedWriter 、BufferedReader、OutputStreamWriter、InputStreamReaderhttps://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/FilePersistenceTest/src/main/java/com/desay/filepersistencetest/MainActivity.java

JNI

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/JNIAndNDKTest/src/main/java/com/lwj/jniandndktest/jni/com_lwj_jniandndktest_jni_JniTest.h

LBS

百度地图。LocationClient、BaiduMap、LocationClientOption、BDLocation 、权限申请、MapView、

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/LBSTest/src/main/java/com/desay/lbstest/MainActivity.java

ContentProvider

增删查改某个数据库表的数据。Uri、ContentValues、getContentResolver、Cursor

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ProviderTest/src/main/java/com/desay/providertest/MainActivity.java

 SQLite数据库存储

建表、升级表、增删查改数据。SQLiteDatabase、ContentProvider、UriMatcher、Cursor、ContentValues、SQLiteOpenHelper

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/DatabaseTest/src/main/java/com/desay/databasetest/MainActivity.java

RecyclerView

基础使用。LinearLayoutManager、RecyclerView.Adapter、RecyclerView.ViewHolder、Glide、PagerSnapHelper

https://gitee.com/flying-guy/ds/blob/master/RecyclerView/recyclerview-01/src/main/java/com/example/recyclerview_01/MainActivity.java

竖直布局、横向布局和瀑布式布局

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/RecyclerviewTest/src/main/java/com/desay/recyclerviewtest/MainActivity.java

消息聊天。滚到指定行、消息插入

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/UIBestPractice/src/main/java/com/desay/uibestpractice/MainActivity.java

FlowLayout

流式布局。测量、布局

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/RecyclerviewTest/src/main/java/com/desay/recyclerviewtest/other/FlowLayout.java

RemoteView

桌面小组件,自定义通知栏。通知NotificationManager、NotificationChannel、RemoteViews、PendingIntent、AppWidgetManager、AppWidgetProvider、Bitmap、广播

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/RemoteViewTest/src/main/java/com/lwj/remoteview/MainActivity.java

Permisson

运行时申请权限

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/RuntimePermissionTest/src/main/java/com/desay/runtimepermissiontest/MainActivity.java

Service

启动、停止、解绑服务。IntentService(独立线程处理后台任务不过已经被抛弃)、Service(主线程)

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ServiceTest/src/main/java/com/desay/servicetest/MainActivity.java

SharePreferences

SharePreferences存储。存储、读取数据

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/SharedpreferencesTest/src/main/java/com/desay/sharedpreferencestest/MainActivity.java

ProgressBar、AlertDialog

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/UIWidgetTest/src/main/java/com/desay/uiwidgettest/MainActivity.java

动画
  1. 通过xml实现动画AnimationUtils

  2. 通过代码实现动画AlphaAnimation

  3. 帧动画AnimationDrawable

  4. 给listView增加入场动画AnimationUtils/LayoutAnimationController

  5. 属性动画(ValueAnimator、AnimatorSet /ObjectAnimator、AnimatorInflater)

  6. activity的切换效果overridePendingTransition

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ViewAnimationTest/src/main/java/com/desay/viewanimationtest/MainActivity.java

滑动冲突
  1. 外部拦截法:修改父容器需要拦截事件的条件

  2. 内部拦截法:父容器拦截除ACTION_DOWN以外的事件

获取屏幕宽度、获取当前进程名

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ViewConflictTest/src/main/java/com/desay/viewconflicttest/MainActivity.java

View

View的事件体系Demo。绘制文字、绘制图片

  1. view、位置参数、MotionEvent、TouchEvent、VelocityTracker、GestureDetector和Scroller

  2. view的滑动

  3. 弹性滑动

  4. view的事件分发机制

  5. view的滑动冲突

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/ViewTest/src/main/java/com/desay/viewtest/MainActivity.java

WonderfulDay

天气实战。让背景图和状态栏融合在一起、处理省级市级县级数据、获取状态栏高度、长期在后台运行的定时任务、网络数据获取、图片加载、签名打包上线

window、SharedPreferences、Glide、JSONObject、JSONArray、Gson、okhttp、Service、Fragment、DrawerLayout、ScrollView、SwipeRefreshLayout、litepal

https://gitee.com/flying-guy/ds/blob/master/HelloWorldDemo/WonderfulDay/src/main/java/com/desay/wonderfulday/MainActivity.java

MediaVideoDemo

数据扫描,展示本地视频列表,文件夹+视频。基于LinkedHashMap实现一个LRU算法的Cahce对象

SQLiteDatabase、Fragment、RecyclerView

https://gitee.com/flying-guy/ds/blob/master/MediaVideoDemo/app/src/main/java/com/example/mediavideodemo/MainActivity.java

其他
Embedding

安卓-折叠屏平行视界适配(embedding方案)https://blog.csdn.net/mix39/article/details/145686041?spm=1001.2014.3001.5502

自定义view

自定义RecylerView

https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CustomRecyclerview

旋转的小车

https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CarView

自定义TextView

https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CustomTextView

自定义游动的🐟

https://gitee.com/flying-guy/ds/tree/master/fish

粒子爆炸

https://gitee.com/flying-guy/ds/tree/master/subassembly/CanvasExplosion

歌词解析及展示

https://gitee.com/flying-guy/ds/tree/master/subassembly/LyricTest

旋转的小球+图片扩散

https://gitee.com/flying-guy/ds/tree/master/subassembly/LyricTest

常用组件

SeekBar、ProgressBar、DatePicker、TimePicker

https://gitee.com/flying-guy/ds/tree/master/subassembly/app

Glide

https://gitee.com/flying-guy/ds/tree/master/subassembly/GlideTest

LooperViewPager

LooperViewPager1

https://gitee.com/flying-guy/ds/tree/master/subassembly/LooperPage

ViewPager2+List

https://gitee.com/flying-guy/android-practice/tree/master/ViewPager/ListViewPager2

ViewPager2+Fragment

https://gitee.com/flying-guy/android-practice/tree/master/ViewPager/FragmentViewPager2

ExoPlayer

https://gitee.com/flying-guy/android-practice/tree/master/ExoPlayerDemo

组件化开发

APT

https://gitee.com/flying-guy/ds/tree/master/Start_Modular_APT

Gradle

https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Gradle

Javapoet

https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Javapoet

Rout

https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Routing_Design

多渠道

https://gitee.com/flying-guy/ds/tree/master/%E5%A4%9A%E6%B8%A0%E9%81%93%E9%85%8D%E7%BD%AE/TestDemo

阿里云仓库代理配置

https://gitee.com/flying-guy/ds/blob/master/build.gradle

通过反射实体类创建数据库表

https://gitee.com/flying-guy/ds/tree/master/DatabaseTest

 IPC

安卓基础知识学习第四周_IPC石墨文档是一款轻便、简洁的在线协作文档工具,PC端和移动端全覆盖,支持多人同时对文档编辑和评论,让你与他人轻松完成协作撰稿、方案讨论、会议记录和资料共享等工作。https://shimo.im/docs/rp3OV9l8oYTYbvAm

SDK、Gradle和应用资源

SDK、Gradle和应用资源石墨文档是一款轻便、简洁的在线协作文档工具,PC端和移动端全覆盖,支持多人同时对文档编辑和评论,让你与他人轻松完成协作撰稿、方案讨论、会议记录和资料共享等工作。https://shimo.im/docs/pmkxQdz5R5i7BGAN

安卓demo-壁纸预览、分屏小窗与U盘播放时长记忆功能

安卓demo-壁纸预览、分屏小窗与U盘播放时长记忆功能https://blog.csdn.net/mix39/article/details/145415656?spm=1001.2014.3001.5501

 Layout Inspector image server for API

 Layout Inspector image server for API石墨文档是一款轻便、简洁的在线协作文档工具,PC端和移动端全覆盖,支持多人同时对文档编辑和评论,让你与他人轻松完成协作撰稿、方案讨论、会议记录和资料共享等工作。https://shimo.im/docs/ZzkLVPx8bOsrQ03Q

AndroidManifest、Activity、Fragment和常用控件

AndroidManifest、Activity、Fragment和常用控件石墨文档是一款轻便、简洁的在线协作文档工具,PC端和移动端全覆盖,支持多人同时对文档编辑和评论,让你与他人轻松完成协作撰稿、方案讨论、会议记录和资料共享等工作。https://shimo.im/docs/8Nk6Me2PL2FgyrqL

构建首个应用和应用基础知识

构建首个应用和应用基础知识石墨文档是一款轻便、简洁的在线协作文档工具,PC端和移动端全覆盖,支持多人同时对文档编辑和评论,让你与他人轻松完成协作撰稿、方案讨论、会议记录和资料共享等工作。https://shimo.im/docs/pmkxQQMPndiXEzAN

NDK/JNI

使用ffmpeg从mp3提取pcm数据

https://gitee.com/flying-guy/practical-demo/tree/master/FFmpegDemo/FFmpegAudioPlayer

使用ffmpeg播放视频

https://gitee.com/flying-guy/practical-demo/tree/master/FFmpegDemo/FFmpegVideoPlayer

都到这了,肯定得来个交叉编译呀

Makefile&CMake

Makefile&CMakehttps://blog.csdn.net/mix39/article/details/145415248?spm=1001.2014.3001.5501都交叉编译了,肯定要c++呀

C++11

https://gitee.com/flying-guy/c--practice/tree/master/c++11

C++(基础知识&c++11)https://blog.csdn.net/mix39/article/details/145409131?spm=1001.2014.3001.5501学了c++,不得搞点demo,音视频拿捏~

音视频

播放原理&基础知识&SDL

音视频-播放原理&基础知识&SDLhttps://blog.csdn.net/mix39/article/details/140507735?spm=1001.2014.3001.5501

 ffmpeg基础介绍&常用命令

音视频-ffmpeg基础介绍&常用命令https://blog.csdn.net/mix39/article/details/145416168?spm=1001.2014.3001.5501

demo-ffmpeg&sdl

音视频demo-ffmpeg&sdlhttps://blog.csdn.net/mix39/article/details/151589491?spm=1001.2014.3001.5501

安卓demo-wifi点对点视频实时传输实例及原理

安卓demo-wifi点对点视频实时传输实例及原理https://blog.csdn.net/mix39/article/details/145415389?spm=1001.2014.3001.5501

知识积累

JVM&内存分析

JVM内存模型、垃圾回收算法、内存抖动、内存溢出、内存泄漏、内存分析和内存泄漏检测(profiler、MAT、LeakCanary)、ADB命令

JVM&内存分析https://blog.csdn.net/mix39/article/details/145408581?spm=1001.2014.3001.5501

字、字节、比特、进制、位运算

字、字节、比特、进制、位运算https://blog.csdn.net/mix39/article/details/149673225?spm=1001.2014.3001.5501

进程&线程

进程常用的是安卓的多进程(开启多进程、进程间通信)

线程:线程状态切换、创建线程的方式、线程常用接口、并发编程、锁、死锁、同步异步

进程&线程https://blog.csdn.net/mix39/article/details/145460352?spm=1001.2014.3001.5502

设计

solid

设计-面向对象的六大原则https://blog.csdn.net/mix39/article/details/148034245?spm=1001.2014.3001.5502

设计模式

设计-设计模式Part01-Java版https://blog.csdn.net/mix39/article/details/148036409?spm=1001.2014.3001.5502todo::mvvm/mvc/mvp

鸿蒙

鸿蒙基础开发https://blog.csdn.net/mix39/article/details/145407967?spm=1001.2014.3001.5502

其他(未调试成功)

未调试成功的demo,但是后面可能又会遇到,到时候还得接着调所以记录一下

rtmp

rtmp推流

https://gitee.com/flying-guy/practical-demo/blob/master/VideoTest/GameLive/src/main/java/com/lwj/gamelive/MainActivity.java

rtmpdump推流

https://gitee.com/flying-guy/practical-demo/blob/master/FFmpegDemo/PushFlow/src/main/java/com/lwj/pushflow/MainActivity.java

NestedRecyclerView

header+tab+recyclerview 二级嵌套滑动

https://gitee.com/flying-guy/daily-practice/blob/master/AndroidProject/MyApplication/CeilingNestScrollView/src/main/java/com/lwj/ceilingnestscrollview/MainActivity.java

 JAVA后端

在线办公系统-OA系统

时间:2021.4-2021.7(3个月)

简介

常见的oa系统。学习向,全后端开发,1人完成。前后端对接时0bug。

功能模块

注册/权限登录、角色管理、菜单管理、职位管理、职称管理、部门管理、操作管理、员工入职管理、工资账 套管理、聊天。

特点

前后端分离降低代码耦合性。squrity用户权限登录控制,Swagger管理接口前后端全功能对接只有1个bug,Postman单元测试接口,Redis缓存优化左侧菜单栏。RabbitMQ实现消息可靠性发送。使用存储函数/公式/优化sql等方法优化数据查找速度。

技术栈

Java、SpringBoot、SpringSqurity、EasyApi、MyBatisPlus、Redis、RabbitMQ、MySQL、WebSocket、 Vue.js、ElementUI。

代码

https://gitee.com/flying-guy/office

传统Web前后端

共享租赁平台

时间:2021.2-2021.4(2个月)

简介

该平台分为B端和C端。B端为厂商可以发布商品,对商品各信息进行管理,C端用户可以租赁商品。

功能模块

主要负责B端注册登录审核、三级管理功能前后端开发,B端发布商品、库存管理前端开发。C端登录注册功能开发,收藏夹、购物车后端开发以及部分功能的前后端对接。

特点

第一次搞这么完整的项目。收获颇多啊,hhhhhhh

技术栈

语言java、vue.js,后端使用SpringBoot、MyBatis-plus、shiro ,前端B端使用 LayUi 框架、C端使用 Uni-App ,数据库用mySQ

代码

rent-product: 实战共享租赁平台

音视频相关demo

安卓端到端投屏软件

简介

这是一个视频画面安卓端到端投屏软件

功能点

视频源数据采集(Camera或者屏幕信息)

视频画面点对点双向传输

H264、H265高清投屏

流程图

图1-1. 点对点视频流程图

功能界面展示

图1-2. H265高清投屏视频效果图

左边为服务端推流视频数据,右边为客户端连接服务端热点后接受视频数据,使用h265编码格式。将左边屏幕展示数据推到右边屏幕展示。

图1-3. H265高清投屏+摄像视频效果图

左边为服务端推流视频数据,右边为客户端连接服务端热点后接受视频数据,使用h265编码格式。将左边摄像头采集到的数据推到右边屏幕展示。

图1-4. H264双向摄像视频效果图

左右两边都为服务端和客户端。分别将自己摄像头采集到的数据展示在右下角并把数据推到对方的屏幕上。

技术栈

WebSocket、MediaProject、VirtualDisplay、Camera、MediaCodec。

测试手机

三星Glaxy a6s、红米Note40

实现详解

石墨文档

代码

https://gitee.com/flying-guy/practical-demo/tree/master/VideoTest

单屏分屏效果

简介

这是一个单个屏幕分屏效果的摄像头效果。

功能界面展示

图2-1. OpenGL分屏效果图

技术栈

CameraX、OpenGL(.fsh、GLThread)

在线电台(安卓应用)

时间:2022.6-2022.8(2个月),1人完成。

简介

在线电台是一个使用喜马拉雅在线电台SDK的免费api做成的一个在线听电台应用。具有推荐、订阅、历史、模糊搜索、播放控制(播放、暂停、按纽上下曲、滑动上下曲、列表模式切换、排序切换)、进度条、播放列表、订阅功能、电台节目详情页、ID3信息专辑图展示、mini播放器等功能。

用例图

图3-1. 喜马拉雅app用例图

功能界面展示

图3-2. 喜马拉雅 app 功能界面图

以上截图分别是推荐、订阅、历史列表界面、电台详情页、播放界面、搜索界面的截图。

demo 视频

待放入

代码

https://gitee.com/flying-guy/practical-projects

技术栈

喜马拉雅电台SDK、Java、SQLite、RxJava、Glide、RecyclerView、Android。

特点

面向对象编程,代码可移植性好,复用性高。

空间众包任务分配算法研究与实现(算法实现与改进)              

时间:2021.12-2022.05(5个月)

简介

空间众包任务分配算法有打车、外卖配送等实际应用场景。该次算法实现是基于基础算法 TBG(基于阈值的贪婪算法)、BB(批处理算法)的基础上,使用 MNTP 算法进行改进,通过缩短最大延迟的方式以改善任务分配的整体延迟效果。

TBG 算法

基于阈值的贪婪算法(TBG)的基本思路就是多层的循环迭代,直到车辆与用户匹配完成。即来一个用户订单就分配一个可用工人去接单。

优点:该算法可以预防请求长时间没有工人接单的情况发生。

缺点:在算法中,服务器需要在每个任务到达的ε时间内对其进行响应,较短时间内对任务进行匹配,这可能会导致稍后到达但更适合请求的工人无法被选择。

BB 算法

为了缓解稍后到达但适合请求的工人无法被选择的这种现象,出现了 BB 算法。使用的基于批处理的算法对请求和工人都进行了缓冲,在缓冲时间内匹配更合适的工人和用户。

优点:该算法无需立刻对刚到达的新请求进行匹配。可以让服务器有更大的选择合适工人的空间,让稍后到达但更适合的工人可以被选择。

缺点:在算法中,对请求和工人都进行了缓冲,且每一批请求都需要缓冲至少一 个时间戳。因此,缓冲时间对任务分配的延迟有较大影响。

分析过程

图4-1. 2016 年 4 月纽约市出租车订单分布热力图 

图4-2. 2016 年 4 月纽约市离群任务栅格化图

通过将 TBG、BB 算法跑实际数据测试和将任务订单可视化发现,较远的订单对整体的任务分配延迟有重要的影响。如果能对其进行优化则可以更大的可能缩短整体的订单任务分配延迟时间。

MNTP 算法

对地理位置栅格可视化化,通过分析前几日一个月的订单数据的分布规律,查到大部分任务分配时间长的订单都是在一些偏远的机场或者娱乐中心。我们根据这个规律提取安排合适数量的车辆在合适的时间前去等待。避免用户订单等太久或者没有工人接单的情况出现。

算法验证

使用可能会对算法结果造成影响的因素对算法进行测试,我们可以从图中看出,MNTP 在大多数情况下都优于其他算法。

图4-3. 请求和工人密度对任务分配延迟的影响

请求和工人密度对不同算法性能的影响。图4-3 给出了在请求和工人密度影响下不同算法的有效性,图4-3 中的横坐标 Amount 表示任务匹配完成的订单数, 图4-3(a)的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时的竞争比,图4-3(b) 的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时该批订单里面的最大延迟,图4-3(c)的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时该批订单整体的平均延迟。

图4-4. 时空相对密度差异的影响

时空相对密度对不同算法性能的影响。图4-4 给出了不同时空相对密度下不同算法的有效性,我们通过改变时间跨度来模拟不同的时空相对密度,不同的时空相对跨度拥有不同密度的订单数和可用车辆。图4-4 中的横坐标 Amount 表示不同的时间跨度,图4-4(a)的纵坐标表示不同算法在不同时空跨度下的竞争比,图4-4(b)的纵坐标表示不同算法在对应横坐标数时间跨度下的匹配完成的订单里面的最大延迟,图4-4(c)的纵坐标表示不同算法在对应横坐标数时间跨度下的匹配完成的订单里面的平均延迟。

图4-5. 不同时间段的影响 

析不同时间段对算法性能的影响。图4-5 给出了不同时间段下不同算法的有效性,图4-5 中的横坐标表示选取的时间段,我们这里选取一些具有代表性的时间段。图4-5(a)的纵坐标表示,不同算法在不同时间段的竞争比。图4-5(b)的纵坐标表示不同算法在不同时间段匹配完成的订单中的最大延迟。图4-5(c)的纵坐标表示不同算法在不同时间段匹配完成的订单中平均延迟。

创新点

对历史数据进行可视化分析发现,通常情况下,离任务群较远的任务点拥有最差的单个性能。本文的创新点是将时间段划分为时间片,将空间众包涉及的地理位置进行栅格化,分析历史数据,预测出单位时间片单位网格内的任务数量,得到离任务群较远的任务点,提前安排合适的工人前往任务请求的位置,缩短任务请求者等待合适工人出现的时间和工人行进到任务请求者的位置的时间,最大可能的最小化最差单个性能带来的最大延迟。

技术栈

算法实现(基于阈值的任务分配算法、基于批处理的任务发分配算法)、算法改进(基于任务预测的任务分配算法)、GIS数据处理(栅格化处理/.shp/.csv/GeoDataFrame)、可视化分析技术(matplotlib/pyplot/transbigdata/seaborn)、Jupyter、Python、GeoPandas、Numpy、数据预处理、中英文文献阅读并提取关键信息能力、算法有效性验证。

算法有效性验证方式

采用对不同时间段、不同密度的数据和影响算法关键参数进行分组的方式对程序进行分组测试。

介绍视频

待放入

代码

https://gitee.com/flying-guy/spatial-crowedsourcing-task-allocation-algorithm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值