自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(377)
  • 收藏
  • 关注

原创 Android Framework分析(3)——Zygote进程源码分析

Zygote进程源码分析由app_process运行ZygoteInit classzygote由java编写而成,不能直接由init进程启动运行。若想执行zygote类,必须先创建虚拟机,然后在虚拟机上运行ZygoteInit类。执行这一任务的就是app_process程序。下面我们开始分析zygote进程的启动流程:/system/core/rootdir/init.rc可以看到init.rc中有如下导包import /init.$(ro.zygote).rc如果是64位系统,$(ro

2020-07-10 11:32:35 815 3

原创 深入理解Android Framework(1)-init

回收僵尸进程,在Linux内核中,如父进程不等待子进程的结束直接退出,会导致子进程在结束后变成僵尸进程,占用系统资源。在Android系统中,所有的进程共享系统设置值,为此提供一个名称为属性的保存空间。每个进程在处理其他进程发送的signal信号时都需要先注册,当进程的运行状态改变或终止时会产生某种signal信号,init进程是所有用户空间进程的父进程,当其子进程终止时产生SIGCHLD信号,init进程调用信号安装函数sigaction(),传递参数给sigaction结构体,便完成信号处理的过程。

2020-07-06 21:31:41 968

原创 深入学习Android framework(2)——Handler Native层

基于android28源码,MessageQueue类里面涉及到多个native方法,除了MessageQueue的native方法,native层本身也有一套完整的消息机制,用于处理native的消息,如下图Native层的消息机制。Java层可以向MessageQueue消息队列中添加消息,Native层也可以向MessageQueue消息队列中添加消息MessageQueue初始化过程的调用链如下:在MessageQueue中的native方法如下: private native st

2020-06-30 16:57:28 4334

原创 Android Apk瘦身方案2——gradle插件将png自动压缩为webp

实现思路在 mergeRes 和 processRes 任务之间插入 WebP 压缩任务,如下图所示:使用开源框架Cwebp,使用命令行对所有的图片进行遍历处理,然后将结果输出Google 官方提供的下载地址:https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html 下载的 cwebp 二进制可执行文件 64 位版本。由于 WebP 格式在 14 <= minSdkVersion &lt

2020-06-09 20:11:26 2157

原创 Android Apk瘦身方案1——R.java文件常量内联

R.java 文件结构R.java 是自动生成的,它包含了应用内所有资源的名称到数值的映射关系。先创建一个最简单的工程,看看 R.java 文件的内容:R文件生成的目录为app/build/generated/not_namespaced_r_class_sources/xxxxxDebug/processXXXXDebugResources/r/com/xxx/xxx/R.javaR.java 内部包含了很多内部类:如 layout、mipmap、drawable、string、id 等等这些

2020-06-05 22:57:39 3292 4

原创 Android Gradle源码分析

一.如何调试Android Gralde源码最简单的方式如下:1.配置 gradle.properties比较方便的做法是配置全局的 gradle.properties,这样对所有 Gradle 工具都适用,配置文件位于 ~/.gradle/gradle.properties,在 gradle.properties 文件中加上 org.gradle.jvmargs 属性:org.gradle.jvmargs=-XX:MaxPermSize=4g -XX:+HeapDumpOnOutOfMemoryE

2020-06-04 11:24:52 2446 4

原创 滴滴插件化VirtualAPK框架原理解析(二)之Service 管理

在前一篇博客滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理 中VirtualAPK是如何对Activity进行管理的,本篇博客,我们继续来学习这个框架,这次我们学习的是如何去管理Service。Service工作原理分析说道如何对Service进行插件化,肯定得先了解Service的工作过程,不然何谈插件化?所以我们先一起学习Service的工作原理。Service分为

2017-07-30 23:21:11 4625 1

原创 滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

上周末,滴滴与360都开源了各自的插件化框架,Virtualapk与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是Virtualapk原理解析的第一篇Activity管理,博客只是自己的理解,小弟才疏学浅,可能有很多理解不对的地方,欢迎各位大神指出。(看博客之前,请大家先下载Virtualapk的项目,https://g

2017-07-02 21:15:48 11217 7

原创 程序员副业探索——这18个韭菜级副业千万别碰!

某音某书上动不动就是副业收入轻松几万+,然后开课,收你学费,下面我就列举18个常见坑爹副业,千万别碰!

2024-02-14 22:24:09 393

原创 浅谈Google Play ASO 优化

ASO即APP Store Optimization,是用于提高APP在应用市场排名的工具,其实也就是移动产品的SEO工作。ASO是为了提高该产品的搜索结果成绩,提升APP的下载量,针对Google Play来说,ASO就是优化APP页面。

2023-12-09 22:12:13 164

原创 Handler post与sendMessage还有postDelay区别

post()方法不能指定消息的优先级和延迟时间,它只能立即将Runnable对象发送到消息队列中。本质是封装到了msg的callback里了。Handler的sendMessage()和post()方法都可以用于向Handler发送消息,但它们的使用方式和效果略有不同。以便在指定的时间后才处理消息。

2023-05-10 21:17:09 394

原创 音视频开发系列(8)——详解Android SurfaceTexture

void setOnFrameAvailableListener(SurfaceTexture.OnFrameAvailableListener listener):设置当有新的帧可用时的监听器。当有新的帧可用时,SurfaceTexture会回调该监听器的onFrameAvailable()方法。void attachToGLContext(int texName):将SurfaceTexture绑定到指定的纹理对象上。否则返回false。当有新的帧可用时,可以调用该方法将新的帧数据更新到纹理中。

2023-03-11 19:01:00 1410 1

原创 音视频开发系列(7)——Opengl常用Api介绍part1

指定当纹理被缩小时如何过滤纹理像素,可以是GL_NEAREST(最近邻过滤)、GL_LINEAR(线性过滤)、GL_NEAREST_MIPMAP_NEAREST(使用最近邻过滤的Mipmap纹理)、GL_NEAREST_MIPMAP_LINEAR(使用线性过滤的Mipmap纹理)、GL_LINEAR_MIPMAP_NEAREST(使用最近邻过滤的Mipmap纹理)或GL_LINEAR_MIPMAP_LINEAR(使用线性过滤的Mipmap纹理)。这样,我们就可以只对矩阵的一部分进行缩放,而不影响其他部分。

2023-03-10 15:57:40 728

原创 音视频开发系列(6)——全面了解Android MediaFormat

MediaFormat 是 Android 平台中用于描述音视频格式的类,它提供了许多 API 用于设置和获取音视频的格式信息。用于创建音频和视频格式的 MediaFormat 对象。需要指定媒体类型(例如 audio/mp4a-latm 或 video/avc)、媒体的采样率、通道数、码率、帧率等信息。

2023-03-08 11:37:39 2758

原创 音视频开发系列(5)——全面了解Android MediaExtractor

MediaExtractor的主要API如下:setDataSource(String path): 设置媒体文件的路径。setDataSource(FileDescriptor fd): 设置媒体文件的FileDescriptor。setDataSource(Context context, Uri uri, Map headers): 设置媒体文件的Uri和headers。getTrackCount(): 获取媒体文件中的音视频轨道数量。

2023-03-05 09:56:38 1558

原创 音视频开发系列(4)——全面了解Android Surfaceview

SurfaceHolder是SurfaceView的内部类,它可以获取到SurfaceView的Surface对象,提供了对Surface的操作方法。一般在SurfaceView的回调函数中使用。1.1 getHolder()方法获取SurfaceHolder对象。1.2 addCallback()方法注册SurfaceHolder.Callback回调函数。1.3 setFixedSize()方法设置Surface的大小。

2023-03-04 15:55:17 742

原创 音视频开发系列(3)——全面了解Android MediaMetadataRetriever

该方法用于设置MediaMetadataRetriever要提取信息的数据源,path可以是本地文件路径或者网络URL地址。该方法用于提取指定的元数据信息,参数keyCode可以是预定义的一些常量,例如METADATA_KEY_TITLE表示音频的标题,METADATA_KEY_ARTIST表示音频的演唱者等等。其中,参数keyCode代表要提取的元数据信息类型,可以是预定义的一些常量值,也可以是自定义的键值。

2023-03-04 15:17:27 1385

原创 关于MVC/MVP/MVVM的一些错误认识

在 Android 开发中使用 MVP 和 MVVM 模式早已不是新鲜事了,各种 MVP/MVVM 相关的文章、开源库也已屡见不鲜,甚至是让人眼花撩乱,那么我为什么还要在这个早已被画满涂鸦的黑板上再来涂涂画画呢?是想彰显我的存在感吗?那当然!啊不不不……不完全是!我还想要警醒读到这篇文章的各位:你们对于MVX的理解可能并不完全正确!我们都知道 MVX 的进化过程是从滚球兽进化到 MVC ,然后从 MVC 进化到 MVP,再从 MVP 超进化到 MVVM。

2023-01-22 17:43:21 1777

原创 OPENGL ES 2.0 知识串讲 (10) ——OPENGL ES 详解IV(纹理优化)

纹理时每个图形应用程序中的重要内容,对其使用不当就容易导致很严重的性能、内存、耗电等问题。然而,纹理在应用程序中,并不是一个独立的部分,它和各个系统都有着紧密的联系。

2022-12-26 17:10:10 533

原创 OPENGL ES 2.0 知识串讲 (9) ——OPENGL ES 详解III(纹理)

上面一节课,我们学习了一个OpenGL ES程序必须具备的一些API,从准备shader,到传入绘制信息,到最后的执行绘制命令。然而在上节课结束的时候,我们也提到了OpenGL ES除了这些必备的API之外,还存在一些别的模块。比如这节课我们要说的纹理。纹理,其实我们可以理解为是存在于GPU中的图片信息,是OpenGL ES中很重要的一个概念,也是游戏开发的重要组成部分。我们看到的绚丽的游戏界面,其实就是在一个个模型上,贴上纹理构成的。可以说游戏中的这些元素,它们的形状依靠的是顶点坐标,而色彩基本都是依靠纹

2022-12-25 14:59:42 1376

原创 OPENGL ES 2.0 知识串讲 (8) ——OPENGL ES 详解II(传入绘制信息)

上一节讲述了如何通过 OpenGL ES 给 GPU 关联一套可以使用的 shader,这 一套 shader 是被放在一个 program 中当作一个整体供 GPU 使用的。那么 GPU 绘制图片不止是需要这套 shader,还需要给这套 shader 传递一些必要的输入参数, 比如想要绘制图片的顶点位置,形状,颜色等等信息,那么这一节,将学习如何通过 OpenGL ES API 把这些绘制所需要的信息传递给 GPU。想要绘制一幅图片,最起码需要预先想好要绘制什么形状的图片,比如是绘制一个三角形还是一个圆

2022-12-23 18:53:00 358

原创 OPENGL ES 2.0 知识串讲 (7) ——OPENGL ES 详解I(绑定 SHADER)

在之前的六节中,讲解了 EGL、GLSL 与 OpenGL ES 三个专业术语的概念以及它们的关系,串讲了整个绘制流程;之后分别讲解了 EGL 主要 API 的用处,以及 GLSL 的主要语法。现在,对 EGL 和 GLSL 有了比较全面的了解,那从这一节开始, 会根据 OpenGL ES 与 EGL 和 GLSL 的关系,按照绘制图片的整个流程,对 OpenGL ES 进行详细讲解。之前提过 OpenGL ES 其实就是一个图形学库,由 109 个 API 组成,只要明白了这 109 个 API 的意义和

2022-12-21 15:33:36 834

原创 OPENGL ES 2.0 知识串讲 (6)——GLSL 语法(IV)

上面两节,主要讲解了 GLSL 中变量和函数的定义语法和使用语法,现在我们可以在 shader 中自定义一些我们所需要用到的变量和函数。但是在 shader 中, 还存在着一些内置的变量和函数。这些变量主要是用于将 Shader 计算得到的值传给 GPU,完成 Shader 在 Pipeline 中的功能。由于我们使用 shader 的目的就是为了把所需要的值传给 GPU,所以这些变量对我们非常重要。Shader 中内置的函数也非常重要,就好比 C 语言中的 printf 一样,把我们想要使用到的功能用一个

2022-12-20 18:46:21 1549

原创 OPENGL ES 2.0 知识串讲 (5)——GLSL 语法(III)

简单的解释一下,是这样的,在 shader 中,如果我们将一个变量定义成一个值,比如定义 a 为 3.0,那么 shader 并不会把 3.0 保存起来,而是在使用到 a 的时候,再根据场景重新计算,假如 a 的精度修饰符为 lowp,那么当它和 mediump 的 float 运算以及与和 lowp 的 float 运算,a 在这两次运算中的值会因为精度不同而不同。如果某个参加运算的参数没有精度修饰符,那么就以另外一个参加运算的参数的精度修饰符为准,如果都没有,那么就看下一个操作中的参数的精度修饰符。

2022-12-19 17:50:22 1027

原创 OPENGL ES 2.0 知识串讲 (4)——GLSL 语法(II)

上一节,我们讲解了 Shader 的功能,并从预处理和注释开始,讲解 GLSL 的语法知识。想要学习和使用一门语言,必须先学习这门语言的语法,语法中除了上一节说到的预处理、注释,还有更加重要的变量定义和使用,函数定义和使用, 以及 GLSL 的一些特殊语法。其中变量相关的知识包含变量类型,变量名,变量的操作等,这一节,我们将介绍变量的数据类型等相关知识。一个完整的程序,包括预处理、函数、变量等部分组成。这些部分合在一起, 诠释了程序要做什么事情,以及怎么做。在基本的语言中,比如 C、C++,我们对这些已经很

2022-12-17 18:44:32 516

原创 OPENGL ES 2.0 知识串讲 (3)——SHADER的功能&GLSL语法(I)

在第一节中,我们介绍过 OpenGL ES 与 GLSL 的主要功能,就是往绘制 buffer 上绘制图片。其中虽然 GLSL 制作的 shader 是穿插在 OpenGL ES 中使用,但是我们在流程中可以看出来,两大 shader(vertex shader 和 fragment shader)相对于 OpenGL ES 其他模块还是比较独立的。这两个 shader 就好比两个函数一样,有输入,有输出。从 OpenGL ES 传入一些参数,在 shader 中进行运算,然后再传出给 GPU 的其他模块。

2022-12-17 18:39:53 632

原创 OPENGL ES 2.0 知识串讲(2)――EGL详解

EGL 的 API 还有很多,这一节只是把其中最重要也是最常用的 11 个 API 拿出来进行了讲解,最后总结一下 EGL 使用的大概流程如下:先获取 display 的 handle,对 display 进行 EGL 初始化。从设备上获取匹配的配置信息,再绑定一个绘制 API 用于之后的绘制。根据获取 display 的 handle、 配置信息以及当前绘制 API 生成 surface 和 context,再把它们绑定在一起,绑定在当前 thread 上,下面就可以使用绘制 API 进行绘制。

2022-12-13 18:36:21 735 1

原创 OPENGL ES 2.0 知识串讲(1)――OPENGL ES 2.0 概括

电脑是做什么用的?电脑又被称为计算机,那么最重要的工作就是计算。看过三体的同学都知道, 电脑中有无数纳米级别的计算单元,通过 0 和 1 的转换,完成加减乘除的操作。是什么使得电脑工作?驱动,驱使着硬件完成工作。谁来写驱动?制造电脑的公司自己来写驱动,因为他们对自己的底层硬件架构最熟悉。谁会使用驱动?所有的软件工程师都会直接或者间接的使用到驱动。那么问题来了,如果说不同的电脑公司,制造出来不同的硬件,使用不同的 驱动,提供出来不同的接口供软件工程师进行使用,那么软件工程师就要崩溃了。

2022-12-13 16:11:42 1505

原创 leetcode刷题(134)——剑指 Offer 33. 二叉搜索树的后序遍历序列

划分左右子树: 遍历后序遍历的 [i, j]区间元素,寻找 第一个大于根节点 的节点,索引记为 m。此时,可划分出左子树区间 [i,m-1]、右子树区间 [m, j - 1]、根节点索引 j。右子树区间 [m, j-1]内的所有节点都应 >postorder[j]。根据二叉搜索树的定义,可以通过递归,判断所有子树的 正确性 (即其后序遍历是否满足二叉搜索树的定义) ,若所有子树都正确,则此序列为二叉搜索树的后序遍历。recur(m, j - 1) : 判断 此树的右子树 是否正确。

2022-11-29 09:55:24 83

原创 leetcode刷题(133)——剑指 Offer 07. 重建二叉树

递归共建立 N个节点,每层递归中的节点建立、搜索操作占用 O(1) ,因此使用 O(N)时间。递推参数: 根节点在前序遍历的索引 root 、子树在中序遍历的左边界 left 、子树在中序遍历的右边界 right;在中序遍历中搜索根节点 node 的索引 ,可将 中序遍历 划分为 [ 左子树 | 根节点 | 右子树 ]。根据中序遍历中的左(右)子树的节点数量,可将 前序遍历 划分为 [ 根节点 | 左子树 | 右子树 ]。输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。

2022-11-25 10:25:52 420

原创 leetcode刷题(132)——完全背包问题思路理解

有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。同样leetcode上没有纯完全背包问题,都是需要完全背包的各种应用,需要转化成完全背包问题,所以这里还是以纯完全背包问题进行讲解理论和原理。对照01背包的代码,就是将第二个循环从小到大进行枚举即可。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。版本1:这是朴素版本的,时间复杂度O(nm^2)

2022-11-18 10:15:53 424

原创 leetcode刷题(131)——背包问题理解

面试的话,其实掌握01背包,和完全背包,就够用了,最多可以再来一个多重背包。

2022-11-15 11:36:49 284

原创 leetcode刷题(130)——最大得分的路径数目

给你一个正方形字符数组 board ,你从数组最右下方的字符 ‘S’ 出发。你的目标是到达数组最左上角的字符 ‘E’ ,数组剩余的部分为数字字符 1, 2, …, 9 或者障碍 ‘X’。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。一条路径的 「得分」 定义为:路径上所有数字的和。请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对 10^9 + 7 取余。

2022-11-10 14:41:31 395

原创 leetcode刷题(129)——576. 出界的路径数

给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn]。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 109 + 7 取余 后的结果。

2022-11-08 20:50:47 328

原创 leetcode刷题(128)——1575. 统计所有可行路径,动态规划解法

给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j!= i 且 0

2022-11-08 15:43:29 326

原创 leetcode刷题(127)——1575. 统计所有可行路径,DFS解法

给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出发城市、目的地城市和你初始拥有的汽油总量每一步中,如果你在城市 i ,你可以选择任意一个城市 j ,满足 j!= i 且 0

2022-11-07 21:18:53 306

原创 leetcode刷题(126)——1289. 下降路径最小和 II

给你一个 n x n 整数矩阵 arr ,请你返回 非零偏移下降路径 数字和的最小值。非零偏移下降路径 定义为:从 arr 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。

2022-11-06 16:50:28 356

原创 leetcode刷题(125)——931. 下降路径最小和

给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和。下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1)。

2022-11-06 12:28:20 213

原创 leetcode刷题(124)——64. 最小路径和

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。

2022-11-05 22:00:24 146

原创 leetcode刷题(123)——63. 不同路径 II

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。提示:obstacleGrid[i][j] 为 0 或 1。

2022-11-05 21:25:13 105

12306抢票脚本源码

12306抢票软件源码 下载源码运行请注意下面几条: 1.此项目用到了selenium库,浏览器是chrome 2.将driverchrome放到main同级目录下。 3.进入setting.py文件配置一下chrome.exe的路径。注意driverchrome与chrome的版本要一致!!! 4.请确保安装了PyQt5库。 5.run文件是ESTrain.py

2024-04-17

大麦网自动购票脚本, 支持docker一键部署

使用说明 下载docker-compose配置文件: wget https://github.com/ClassmateLin/dm-ticket/releases/download/v0.1.0/dm-ticket.zip 解压zip: unzip dm-ticket.zip && cd dm-ticket 运行容器: docker-compose up -d 修改配置: vim config/config.yaml, 配置项在config/config.yaml中有详细注释 编写本项目主要目的为学习和研究Rust,无法保证项目内容的合法性、准确性、完整性和有效性。 本项目涉及的数据由使用的个人或组织自行填写,本项目不对数据内容负责,包括但不限于数据的真实性、准确性、合法性。使用本项目所造成的一切后果,与本项目的所有贡献者无关,由使用的个人或组织完全承担。 本项目中涉及的第三方硬件、软件等,与本项目没有任何直接或间接的关系。本项目仅对部署和使用过程进行客观描述,不代表支持使用任何第三方硬件、软件。使用任何第三方硬件、软件,所造成的一切后果由使用的个人或组织承担,与本项目无关。

2024-04-17

数据库设计课程设计-高校选课管理系统

开发意义: 随着信息技术不断向深入发展,越来越多的学校开始着手信息化建设。其中学生选课、成绩信息化管理就是其中重要的一块内容。学生选课与成绩信息规模大、项目条数多、信息量庞大,传统的人工管理方式显然已经无法满足要求,需要借助计算机来进行现代化信息管理,从而提高管理的准确性与高效性。 可行性: 传统人工管理成绩存在诸多弊病,比如准确性低、效率低等。计算机具有存储快、查找便利、准确性高的特点,能非常好的解决人工管理的弊病。 应用环境: Web服务器:tomcat8.5; 编程工具Eclipse Java 2019-09; 数据库:SQL sever 2017; 技术路线: jsp+servlet+javabean; 系统功能框架介绍,处理模块描述。 管理员: 1.查询教师名单; 2.添加教师信息; 3.修改教师信息; 4.删除教师信息; 5.查询学生名单; 6.添加学生信息; 7.修改学生信息; 8.删除学生信息; 9.查询课程信息;

2024-04-16

大麦抢票脚本 V1.0 已有大佬验证可以成功!

功能介绍 通过selenium打开页面进行登录,模拟用户购票流程自动购票 1. 配置环境 1.1安装python3环境 Windows 访问Python官方网站:https://www.python.org/downloads/windows/ 下载最新的Python 3.9+版本的安装程序。 运行安装程序。 在安装程序中,确保勾选 "Add Python X.X to PATH" 选项,这将自动将Python添加到系统环境变量中,方便在命令行中使用Python。 完成安装后,你可以在命令提示符或PowerShell中输入 python3 来启动Python解释器。

2024-04-13

东方财富网股吧爬虫,爬取帖子及其评论的相关信息,并储存到数据库中(附详细操作说明)

该项目使用 selenium 模拟用户操作抓取股吧 发帖 和 评论 数据(允许多线程同时抓取多支股票的相关信息),并将抓取到的数据储存到 MongoDB 中,方便后续使用。 附加说明:非科班新手第一次写爬虫,代码效率一般(比如未使用 redis 做消息队列等等),适合新手入门或小规模爬取。以后若有能力与时间会对代码进行迭代维护,提高爬取效率。 主要功能 爬取指定股票股吧中的发帖信息,包括帖子标题,浏览量,评论数,帖子链接,发帖时间 (YYYY-MM-DD, HH: MM),以 post_XXXXXX 为集合名储存到 MongoDB 中。 爬取指定时间范围中股吧帖子下的评论信息,包括评论内容,是一级或二级评论,点赞数,发帖时间 (YYYY-MM-DD, HH: MM),以 comment_XXXXXX 为集合名储存到 MongoDB 中。 可以通过 post_XXXXXX 下的 _id 与 comment_XXXXXX 下的 post_id 建立映射关系,对帖子标题和评论内容进行匹配。

2024-04-13

某乎爬虫,用于爬取某乎页面 话题 问题 回答 评论 的爬虫 支持 asyncio 异步高并发 支持多用户登陆

某乎爬虫,用于爬取某乎页面 话题 问题 回答 评论 的爬虫 支持 asyncio 异步高并发 支持多用户登陆

2024-04-13

掘金小册爬虫脚本 将小册保存为 markdown,pdf,html 格式

本项目案例使用爬虫爬取的为公开的掘金小册。可在掘金小册/阅读 中查看。本项目仅供学习交流使用,请勿将个人付费小册公开。若公开由此造成的一切后果,与本项目无关。

2024-04-13

微信公众号文章爬虫,仅用于学习

要求 在选定微信订阅号账号的情况下,批量抓取一段时间之内的所有推文的: 链接 标题 封面图 作者 发布账号 正文文本内容 发布时间 阅读量 点赞数 在看数 留言数 是否开启留言 并导出为 excel 表格 实现 整体思路:枚举公众号->爬取公众号下的所有文章->对每篇文章找到所需信息 step1 爬取公众号下的所有文章 即使不是爬虫,想要看到一个公众号下的所有文章也不那么容易。目前统一的手段是在微信应用中打开公众号,但此页面无法抓包,也无法获得爬虫需要的请求和响应。有部分公众号给出了往期文章列表供爬取,但此方法非常依赖公众号,并不统一。 网络上已知的实现有 微信历史消息,但可能被封号 搜狗微信,但现在似乎已经没有维护 微信公众平台,也可能被封号 本爬虫使用的手段是利用微信公众平台,在创作图文消息时插入超链接,可以搜到一个公众号下的所有文章。 微信公众平台需要先注册账号并修改名称通过审核。 实际测试发现,爬取几十页后就会被封一段时间(几十分钟)。因此需要多次启动爬虫,因而记录下了失败时爬取的公众号和页数,方便下次直接跳转。

2024-04-13

轻量型A股每日数据爬虫项目

核心逻辑1:通过财经网址获取全部股票的动态数据,并且经过分析,将日涨,日跌超过x%的股票进行筛选,按照股票的涨跌幅进行排序;通过对股票的大额买入卖出订单进行排序,并预测前10位买入卖出的之后的大概股价,并对买入卖出进行排序;并存储到数据库(DB:Mysql,需要跟进) 核心逻辑2:对保留到数据库的数据按照5日,20日进行分析排序,筛选出5,20日上涨,下降的前x位的股票,进行排序,并存储到数据库(DB:Mysql) 核心逻辑3:做T,通过股票的涨跌幅,对股票进行T操作 (此为量化核心逻辑) 使用技术指标建模交易信号。比如利用布林通道、均线交叉等技术分析指标,建立买入和卖出规则。 加入风险管理作为交易决策依据。比如设置止损价格和动态调整仓位,降低单日风险。 采用复合指标相结合,避免单一依赖某一指标。比如结合MACD、KDJ等多 time frame 的指标信号。 进行回测优化,找出参数组合效果好的交易策略。优化周期、触发点设定等策略变量。 采用平滑移动平均线,避免被短期波动误导。比如用EMA作为买入信号。 重点跟踪行业领跑股票,利用行业势头。同时观察大盘走势变化。

2024-04-13

新浪某博热榜爬虫,利用 Github Action 的调度脚本

使用PHP实现的,爬取新浪某博每日热榜内容,以下是今日热榜 更新于 2024-04-13 20:50:32 Thurman猫一杯视频号被封 1.7M 车辆发生剐蹭女子叫嚣自己老公是国足 1.4M 在高原感受别样的春日浪漫 1.2M 保时捷撞车后女子砸门被行政拘留 1.1M 郑合惠子 垃圾堆里扒好东西 924.0K 张一山银发 892.0K 金秀贤金智媛不再合体 640.4K 伊朗对美国发出警告 509.0K 眼泪女王 482.6K 男子养了20年的海龟竟是国保玳瑁 480.9K 赵丽颖说谢谢狗哥 480.3K 伊朗扣押一艘和以色列相关货船 479.3K 绝大部分人感染HPV后会自愈 470.8K RNG直播需付费观看 446.3K 成龙为刘浩存提裙摆 440.8K 承欢记 404.6K

2024-04-13

矩阵快速幂求解斐波那契

二. 矩阵相乘 若A为n×k矩阵,B为k×m矩阵,则它们的乘积AB(有时记做A·B)将是一个n×m矩阵。其乘积矩阵AB的第i行第j列的元素为: image 代码如下: ###### 矩阵乘法 ###### def mutiply(self,a,b): temp=[[0,0],[0,0]] for i in range(len(a)): for j in range(len(b)): for k in range(len(temp)): temp[i][j]+=a[i][k]*b[k][j]%1000000007 return temp 三. 矩阵快速幂 幂又称乘方。表示一个数字乘若干次的形式,如n个a相乘的幂为a^n ,或称a^n为a的n次幂。a称为幂的底数,n称为幂的指数。 快速幂的思路就是:设A为矩阵,求A的N次方,N很大。例如:A的9次方 A^9 = A*A*A*A*A*A*A*A*A 【一个一

2024-04-13

走迷宫 广度优先搜索与优先队列

2.0版本 迷宫按以下格式输入:第一行输入m与n 表示迷宫行数列数。随后输入m行字符 由# . r a x组成 表示墙壁 地面 地面(起点) 地面(终点) 可破坏的墙壁 迷宫中含有可破坏的墙壁 破坏墙壁可以多罚n步 可以有多个起点 会算出最短的路径 无解的迷宫会打印一个最长的路径 采用优先队列 由队列链表实现 1.0版本 解决简单的迷宫 从控制台输入格式:第一行输入m与n 表示迷宫行数列数。随后输入m行字符 由# . r a组成 表示墙壁 地面 地面(起点) 地面(终点) 输出0 表示无法解出 若能解出 会随后输出路径 采用简单的队列

2024-04-13

通过kmp技术实现的旅行app

使用以下技术构建: Kotlin: 编程语言 Kotlin Multiplatform: 用于在单一代码库中构建多平台应用程序。 Jetpack/JetBrains Compose Multiplatform: 用于在多平台(如Android和iOS)之间共享UI。 Moko Resources: 这是一个Kotlin Multiplatform库(和Gradle插件),提供对macOS、iOS、Android、JVM和JS/浏览器上的资源的访问,并支持默认系统本地化。 Compose Image Loader: Kotlin Multiplatform的Compose图像库。

2024-04-12

基础排序, 高级排序, 堆, 二分搜索树, 并查集, 图以及图相关算法知识总结

basic-algorithm 基础排序 选择排序 使用泛型编写算法 测试算法性能 插入排序 插入排序改进 高级排序算法 归并排序 归并排序改进 归并排序自底向上 快速排序 随机化快速排序 双路快速排序 三路快速排序 堆和堆排序 堆的基本存储 ShiftUp ShiftDown 基础堆排序和Heapify 优化的堆排序 索引堆(IndexHeap) 索引堆的优化 二分搜索树 二分查找法(Binary Search) 二分搜索树基础 二分搜索树的节点插入 二分搜索树的查找 二分搜索树的遍历(深度优先遍历) 层序遍历(广度优先遍历) 删除最大值, 最小值 二分搜索树节点的删除 floor和ceil的实现 并查集 Quick Find Quick Union 基于size的优化 基于rank的优化 路径压缩(Path Compression) 图的基础 图的表示(稀疏图和稠密图), 使用邻接表和邻接矩阵 相邻节点迭代器 图的算法框架 深度优先遍历和联通分量 寻路 广度优先遍历和最短路径 最小生成树 有权图 Prim算法的第一个实现(Lazy Prim) Prim算法的优化 Kruskal算法

2024-04-12

基于 kotlin Channel 的优先级异步任务队列

介绍 OptimusAsyncTask 将每个任务抽象成 OptimusTask,OptimusTask 可以设置任务执行时间,任务优先级,获取任务状态等。 同时 OptimusAsyncTask 提供了 OptimusTask 的默认实现类 BaseOptimusTask,它实现了 Comparable 接口,任务按照优先级排序。 优先级 TaskPriority 优先级的标准如下: TaskPriority.LOW < TaskPriority.DEFAULT < TaskPriority.HIGH 当优先级相同 按照插入次序排队 默认优先级是 TaskPriority.DEFAULT 任务 任务种类可分为 2 种,分别是 执行时间不确定 的任务和 执行时间确定 的任务。执行时间不确定的任务在任务执行完后需要调用 doNextTask() 方法执行下一个任务,否则会一直挂起。 执行时间确定的任务需要重写 getDuration() 方法返回具体的执行时间,单位是毫秒,执行时间到了会自动执行下一个任务。

2024-04-12

最大公约数C#实现的demo

在C#中,计算两个整数的最大公约数(Greatest Common Divisor, GCD)可以通过多种算法实现,其中最著名和高效的是欧几里得算法。欧几里得算法基于这样一个事实:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。 以下是一个使用欧几里得算法实现最大公约数计算的C#示例: 在这个示例中,我们定义了一个名为GCD的方法,它接受两个整数a和b作为参数。方法的核心是一个while循环,它持续执行直到b变为0。在每次循环中,我们计算a除以b的余数,并更新a和b的值为b和余数。当b变为0时,循环结束,此时a的值就是两个数的最大公约数。 这个算法的效率很高,因为它每次都将问题规模缩小一半。在最坏的情况下,当两个数互质(即没有公共因子)时,算法的时间复杂度为O(log(min(a, b)))。 现在,让我们看看如何在实际中使用这个GCD方法:

2024-04-11

一款用于优化png图片的gradle插件,有效减少APK体积,支持极限压缩和无损压缩

img-optimizer-gradle-plugin 一款用于优化png图片的gradle插件,有效减少APK体积,支持极限压缩和无损压缩。 支持的OS 在macOS、windows10、Ubuntu16.04LTS(amd64)上测试通过,如果有更多需求,请提issue。 然后在你想要优化的module的build.gradle文件中: apply plugin: 'img-optimizer' 然后在task tree里面就可以看到对应的task: 双击即可执行。task的名字受当前module的命名影响。 支持的配置项 可以在module的build.gradle文件中添加配置选项,来自定义任务: triggerSize 用于过滤图片,小于该值的图片不会进行优化。默认为0,即每张图片都进行优化。 type 优化类型,目前支持"lossy"和"lossless"。"lossy"为极限压缩(推荐,速度快,压缩率高),"lossless"为无损压缩(速度慢,压缩率低,与原图无差别)。 suffix 优化后的图片后缀。假如配置为"_opt",ic_launcher.png经

2024-04-11

根据规则mysql创建分表

在MySQL中,创建分表(Sharding)是一种处理大型数据库和提高性能的策略。分表通常是基于特定的规则将数据分散存储在多个表中。这种方法可以减少单个表的大小,提高查询效率,平衡负载,并增强系统的可伸缩性。 以下是一个基于用户ID进行分表的简单示例,以及如何实现这个分表策略的说明: 1. **确定分片键**: 首先,我们需要确定一个分片键(Sharding Key),这通常是用户ID或其他唯一标识符。在本例中,我们将使用用户ID作为分片键。 2. **设计分片规则**: 接下来,我们需要设计一个分片规则,用于决定如何根据分片键将数据分布到不同的表中。一个常见的方法是使用模数(取余)操作。例如,我们可以根据用户ID除以某个数字(如100)的余数来确定数据应该存储在哪个表中。 3. **创建分片表**: 根据分片规则,我们可以创建多个表,每个表对应一个分片。例如,如果我们选择100作为分片基数,我们可以创建100个表,命名为`user_data_1`、`user_data_2`...`user_data_100`。

2024-04-11

在iOS中实现设计模式代码实现

在iOS开发中,设计模式是一套被广泛认可的解决特定设计问题的模板。它们帮助开发者构建可维护、可扩展且耦合度低的软件。以下是几种常用设计模式在iOS中的实现说明: 1. **单例模式(Singleton Pattern)**: 单例模式确保一个类只有一个实例,并提供一个全局访问点。在iOS中,可以将单例类实现为一个共享的管理者类,例如,用于网络请求或本地数据存储的管理者。 ```swift class SingletonManager { static let shared = SingletonManager() private init() {} // 单例模式的其他方法 } ``` 2. **工厂方法模式(Factory Method Pattern)**: 工厂方法用于创建依赖对象,而不必将对象的创建逻辑暴露给客户端。在iOS中,这可以用于创建视图控制器或其他复杂的对象,这些对象可能有多个变体。 ```swift protocol ViewControllable {

2024-04-11

sharding-jdbc 分库分表示例

sharding-jdbc 目录结构 sjdbc-read-write-springboot:Spring Boot版 Sharding JDBC 读写分离示列 sjdbc-db-sharding-springboot:Spring Boot版 Sharding JDBC 垂直拆分(不同的表在不同的库中) sjdbc-db-read-write-sharding-springboot:Spring Boot版 Sharding JDBC 垂直拆分(不同的表在不同的库中)+ 读写分离 sjdbc-sharding-table-springboot:Spring Boot版 Sharding JDBC 不分库,只分表案例 sjdbc-sharding-table-read-write-springboot:Spring Boot版 Sharding JDBC 不分库,只分表+读写分离案例 sjdbc-db-sharding-table-springboot:Spring Boot版 Sharding JDBC 分库分表案例 sjdbc-db-sharding-table-rea

2024-04-11

逻辑回归的基本原理实现demo

逻辑回归(Logistic Regression)是一种广泛应用于分类问题的统计方法,尤其是二分类问题。尽管名称中包含“回归”二字,但逻辑回归实际上是一种分类算法。它的基本原理是利用概率模型来预测一个事件发生的概率,并通过一个逻辑函数(通常是Sigmoid函数)将线性回归模型的输出映射到0和1之间,这样就可以解释为概率。 在实现逻辑回归的demo中,我们通常遵循以下步骤: 1. **数据准备**:首先,我们需要收集和准备数据集,该数据集应包含特征变量和一个二元的分类标签(通常是0和1)。数据预处理包括处理缺失值、标准化或归一化特征值等。 2. **模型构建**:逻辑回归模型可以表示为 `p(y=1|x) = 1 / (1 + e^-(β0 + β1*x1 + β2*x2 + ... + βn*xn))`,其中 `p(y=1|x)` 是给定特征向量 `x` 下样本属于正类的概率,`β0, β1, ..., βn` 是模型参数,`e` 是自然对数的底数。 3. **参数估计**:逻辑回归通过最大似然估计(Maximum Likelihood Estimation, MLE)来估计

2024-04-11

基于神经网络的流量异常检测

项目介绍 本项目为基于神经网络的流量异常检测——Traffic Anomaly Detection based on Neural Network 随着网络规模的不断扩大,危害系统资源的危险也在增加,而入侵检测系统(IDS)有助于检测恶意入侵的机制,本项目使用基于网络的IDS,结合流行的深度神经网络,实现基于深度神经网络的流量异常检测(DNN-IDS) 研究内容 网络入侵检测系统(NIDS)被创建用来有效地防御各种类型的网络攻击,并进一步保护网络系统正常运行。目前主要的研究方向是基于异常的检测方法,通过分析网络流量来学习正常和异常行为,尝试将神经网络模型应用到入侵检测中,来解决高误报率的问题 技术要求 预处理数据集 数据集选择CICIDS2017,这是加拿大网络安全研究所于2017年发布的数据集 使用Pandas对CICIDS2017数据集进行数据预处理,清洗数据集并标准化 使用DNN或LSTM进行建模 利用内嵌于TensorFlow中的Keras建立神经网络模型 TensorFlow开源机器学习平台 优化模型,调整超参数 模型设计流程 数据预处理 整合数据 选取特征,转换特征的数据类

2024-04-11

c++顺序栈的实现demo

在计算机编程中,栈(Stack)是一种重要的数据结构,它遵循后进先出(Last In First Out, LIFO)的原则。顺序栈是栈的一种实现方式,它使用数组来存储数据,并提供了一系列操作栈的函数,如入栈(push)、出栈(pop)、获取栈顶元素(top)和判断栈是否为空(empty)等。 在C++中,顺序栈的实现通常涉及一个类,该类包含一个数组来存储栈中的元素,以及一个表示栈顶位置的整数。以下是一个简单的顺序栈实现的示例说明: 首先,我们定义一个顺序栈类SequentialStack,并在其构造函数中初始化栈的大小和栈顶位置。栈的大小可以根据需要设定,或者默认为一个合理的初始值。

2024-04-11

BFS (Breadth-First Search):广度优先搜索和DFS (Depth-First Search):深度优先搜

在计算机科学中,搜索算法是用来在图或树结构中寻找从起点到目标点的路径的算法。其中,广度优先搜索(Breadth-First Search,简称BFS)和深度优先搜索(Depth-First Search,简称DFS)是两种最基本且广泛使用的图遍历算法。 广度优先搜索(BFS)是一种按层次遍历图的算法。它从图的某个顶点开始,首先访问所有邻近的顶点,然后对这些邻近顶点的未访问邻居进行访问,以此类推,直到访问完所有可达的顶点。BFS的特点是从接近起点的节点开始,逐步向外扩展,因此它能够找到最短路径。BFS适用于解决无权图中的最短路径问题,或者在搜索空间较大时,需要快速找到一个解决方案的场景。 BFS的实现通常使用队列数据结构。算法开始时,将起点加入队列。然后,进入循环,在每次迭代中从队列中取出一个顶点,访问它的所有未访问邻居,并将这些邻居加入队列。这个过程一直持续到队列为空,即所有可达顶点都被访问过。 深度优先搜索(DFS)则是一种深入搜索图的算法。它从图的某个顶点开始,尽可能深地搜索每一个分支,当节点v的某条分支被追踪到终点或无法继续前进时,算法回溯到节点v的上一个节点,

2024-04-11

随机生成迷宫的算法,用两种方式:Prime,DFS实现

Labyrinth (迷宫算法,随机生成迷宫) 非常简单的随机生成迷宫的算法,用两种方式:Prime,DFS实现 快要大四了,要赶紧复习下数据结构好找工作,哈哈哈哈哈,所以最近在看图相关的算法,光看书没什么感觉,准备实践一下,写个迷宫算法 主要用Prim算法和DFS算法实现了一遍,没有用BFS是因为Prim的思路跟BFS的其实差不太多,但是看别的博客都说Prim比较自然 思路其实大同小异,主要为:常见迷宫(即任意两点间都能够找到路径,且仅有一条成功路径),迷宫可看做一组连通图(用数组储存),默认所有点间都为墙,我们需要做的就是遍历整个图中所有的点,并且不重复访问,在遍历图的过程中将相邻(指的是上下左右相邻)的两个点间的墙随机打通;满足条件的常见算法有:Prim,Kruskal,DFS,BFS,(另外有个博客中写到了递归分割算法,但是因为本菜很懒没有去具体了解) 具体实现效果图如下: 由Prim实现:

2024-04-10

PHP实现文本快速查找 - 二分查找法

起因 先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称、根据网站分类ID获取分类名称、根据关键词ID获取关键词等。虽然以上需求都可以在原始建表时,通过冗余数据来解决。但仍有部分业务存的只是关联表的ID,数据分析时需要频繁的查表。 所读的表存在共同的特点 数据几乎不会变更 数据量适中,从一万到100多万,如果全加载到内存也不太合适。 纠结的地方 在做数据分析时,需要十分频繁的读这些表,每秒有可能需要读上万次。其实内部的数据库集群完全可以胜任,但会对线上业务稍有影响。(你懂得,小公司不可能为离线分析做一套完整的数据存储服务。大部分数据分析还要借助线上的数据集群) 优化方案的思考 有没有一种方式可以不增加线上的压力,同时提供更高效的查询方式?想过redis,但最终选择用文本存储。因为数据分析是一个独立的需求,不希望与现有的redis集群或者其它存储服务有交集。还有一个原因是每次分析的中间结果,对下一次分析并没有很大的实质作用,并不需要把结果持久存储,而且占的内存也会较多。最终使用文本存储,然后用二分来查找。特点,

2024-04-10

相对于 PHPer 新手而言比较有指导意义的 PHPer 面试指南

作为一位程序员,面试过多次,也面试过很多人,最近又在找工作,总结一下面试经验和面试题,希望可以帮到正在找工作的小伙伴们。 先说一下面试时的心态,刚入门的程序员,技术实力不高,又大多不善言谈,面试一旦遇到难题,很容易心态失衡、惊慌失措、语无伦次,最终丢掉了 Offer。 其实大可不必,心态坦然,是面试必备的一点。 面试新手,面试官心中很清楚,你的实力有几分几两,一般不会过意的为难人,就算是面试真的出了比较难的题,最多也就是要压一压,你的心理预期的薪水,或者就是考验一下你随机应变的能力。 而对于那种内心十分渴望,但是又对技术水平要求比较高的工作,你要明白,只挣自己能力范围内的薪水,对于梦寐以求的 Offer,你应该不断的提升自己的技术水平,来达到这样 Offer 的标准,而不是只是渴望、碰运气。 想要得到某样东西,最好的办法是让自己配得上它。 PHPer 的开发的技术栈大多是 LAMP 或者是 LNMP,其中 Linux、Apache(Nginx)都比较偏运维,但是 PHP、MySQL 是每一位合格的 PHPer 都必须精通的技术栈。 而 Web 开发又不单单只靠 PHP

2024-04-10

整合SSM框架以及Shiro实现了简单的权限控制 ##文件目录 src/main/java/config/**:相关配置文件目录

在现代的Java Web应用开发中,使用SSM(Spring + Spring MVC + MyBatis)框架组合是一种非常流行的做法。SSM框架提供了一种轻量级的方式来构建应用程序,其中Spring负责管理应用程序的生命周期和依赖注入,Spring MVC作为模型视图控制器(MVC)框架处理Web请求,而MyBatis则作为持久层框架负责数据库操作。 为了增强应用程序的安全性,通常会结合使用Apache Shiro,这是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。通过整合SSM框架和Shiro,可以实现对应用程序的简单权限控制。 在`src/main/java/config`目录下,我们可以找到一系列的配置文件,这些文件对于SSM框架和Shiro的正常运行至关重要。以下是这些配置文件的简要说明: 1. **spring-context.xml**:这是Spring框架的核心配置文件,定义了应用程序的Bean以及它们之间的依赖关系。在权限控制方面,可以配置Shiro的安全管理器(SecurityManager)和授权信息(如角色和权限)。

2024-04-09

css 基础知识总结以及demo

< link >标签引用CSS文件 在实际的项目开发过程中,我们一般都是将CSS单独存放在一个文件夹中,然后在HTML页面中通过如下形式进行引用。 <link rel="stylesheet" href="样式表路径+名称.css"> 引用后CSS文件仍然是独立的,不会受到包括HTML和JavaScript任何方法和函数的影响,如果CSS文件中涉及到文件路径的相对位置,那么也是以CSS文件所在的文件路径位置为准,而非引用它的HTML文件的文件路径位置。 相对于“行内样式”和“内嵌样式”而言,“外链样式”即通过<link>标签引用CSS样式有以下好处: 简化了DOM结构,实现了内容和表现的分离,使HTML和CSS文件结构更加清晰,利于维护 大大减少了CSS代码的编写量。项目越大,这一点体验得越明显 <link>可以和其它<link>、JS文件以及<body>内的内容进行多线程加载,使得加载速度更快 利于项目整体风格的调整,维护起来也更加便捷。单文件修改,全网站(应用)生效 浏览器会将CSS文件进行缓存,进一步地减少了加载所需时间 可以根据需要利用JavaScript或Media动

2024-04-09

计算机视觉入门 本项目包含一些基本的机器学习以及深度学的课程,仅供实验室内初学者参考

计算机视觉入门。本项目包含一些基本的机器学习以及深度学的课程,仅供实验室内初学者参考。 首先,初学者应该对人工智能领域有个大体地认识。第一阶段: 机器学习(Machine Learning) 首先,初学者应具备基本的机器学习知识(如SVM, 概率图等)。 基础的机器学习课程包含在机器学习下。 第二阶段: 深度学习(Deep Learning) 组内基本上都是使用深度学习来解决计算机视觉中的问题。 基础的机器学习课程包含在深度学习下。 第三阶段: 深度学习框架(Deep Learning Library) 当下比较流行的框架就是pytorch和tensorflow(基于python)。 教程包含在深度学习框架下。 进阶阶段 当学习完上边的课程之后,根据自身的实际情况针对下边两个阶段进行学习。 第四阶段: 增强学习(Reinforcement Learning) 增强学习教程包含在增强学习下。 第五阶段: 元学习(Meta Learning) 元学习教程包含在元学习下。

2024-04-09

基于k8s实现的管理平台

基于Kubernetes(k8s)实现的管理平台是一种利用Kubernetes这一开源容器编排平台来管理和自动化应用程序部署、扩展和运维的工具。Kubernetes提供了一个用于自动部署、扩展和管理容器化应用程序的系统,它通过简化和自动化这些过程,帮助企业更高效地管理其应用程序生命周期。 在这样的管理平台中,Kubernetes的核心特性包括容器编排、服务发现、负载均衡、自动扩展、滚动更新和自我修复等。这些特性使得开发和运维团队能够快速响应市场变化,灵活地部署和调整资源,同时保持系统的高可用性和稳定性。 容器编排是Kubernetes管理平台的核心功能之一,它允许用户定义和运行多容器应用程序,这些容器可以跨多个主机进行调度和管理工作。通过这种方式,Kubernetes能够确保应用程序的各个组件能够按照预期协同工作,同时也能够灵活地应对单个容器或主机的故障。 服务发现和负载均衡是Kubernetes管理平台的另外两个重要特性。服务是Kubernetes中的一个抽象,它定义了一种访问一组相同容器的方式,而负载均衡则确保了流量可以均匀地分配到这些容器上。

2024-04-08

由Get Sora应用程序提供的Sora AI视频生成器

Sora AI Video Generator是由Get Sora应用程序推出的一项功能强大的视频制作工具。这款工具利用了先进的人工智能技术,旨在帮助用户快速、轻松地创建出专业级别的视频内容。无论是用于个人娱乐、社交媒体分享还是商业宣传,Sora AI Video Generator都能够提供高效的视频编辑解决方案。 该视频生成器的核心特点在于其用户友好的界面和强大的AI驱动功能。用户可以通过简单的操作,如拖放、选择模板、添加文本和音乐等,来制作出具有吸引力的视频。AI技术的应用使得视频制作过程更加智能化,例如,它可以自动分析用户上传的图片和视频片段,为其匹配最佳的滤镜和过渡效果,甚至可以根据视频内容的节奏自动调整背景音乐。 此外,Sora AI Video Generator还提供了丰富的模板库和素材资源,包括动态背景、图标、字幕样式和音效等,用户可以根据自己的需求进行选择和定制。这些资源的多样性确保了视频内容的独特性和个性化,让用户无需具备专业的视频制作技能,也能制作出具有视觉冲击力的视频作品。

2024-04-08

decision-tree处理连续值的决策树

decision-tree 处理连续值的决策树 数据集 traindata.txt为训练数据集,testdata.txt为测试数据集,数据有4个特征,一共有3个label。 实验原理 采用ID3算法,即在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂。 对于特征属性为连续值,可以如此使用ID3算法:先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点, 从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。 代码介绍 生成决策树: decisiontree.py 绘制决策树: treePlotter.py

2024-04-07

SpingBoot框架使用与研究项目

全新的参数缓存框架 一个专注于提升管理页面开发难度的参数缓存框架,简化参数保存流程,支持分布式与集群拓展,详见:https://github.com/cmlbeliever/cacheable-search 博客资源 Mybatis打包jar后无法扫描到bean与mapper问题,解决对应地址http://blog.csdn.net/cml_blog/article/details/53138851 163发送邮件功能问题,解决对应地址http://blog.csdn.net/cml_blog/article/details/54235510 项目结构 web项目整合了多种web项目需求功能,详情点我跳转 rabbitmq项目是对rabbitmq框架整合Spring的学习与研发的工程,详情点我跳转 RabbitmqSpringBoot项目是对rabbitmq框架整合SpringBoot的学习与研发的工程,详情点我跳转 DynamicDataSource项目是db自动对读写分离整合SpringBoot的学习与研发的工程,详情点我跳转

2024-04-07

这个MATLAB和Simulink挑战赛项目中心包含了一系列研究和设计项目的想法 这些项目将帮助你获得实践经验,并对技术趋势和行

为了获得证书以及MathWorks研究负责人的支持和认可,请将您的工作成果公开并易于访问。通过填写项目描述页面上可获取的项目注册表格,让我们知道您打算完成这些项目中的哪一个,我们将向您发送有关项目和认可奖项的更多信息。 有关该计划以及如何提交您的解决方案的更多信息,请访问我们的wiki页面。 如果您是来自行业或教职员工,并且对获取更多信息、提供反馈或提名新项目感兴趣,请通过此处与我们联系。 挑战结束:可持续性和可再生能源挑战! 我们的可持续性和可再生能源挑战已经结束。从众多优秀的提交作品中选出获胜者是一项艰巨的任务。我们现在很兴奋地在这里分享获奖者名单。加入我们,一起庆祝我们才华横溢的参与者取得的成就,以及他们在可持续性和可再生能源领域展示的开创性工作。向所有人表示祝贺!

2024-04-07

Barkify是一个非官方的代码仓库,用于训练Bark,这是由suno-ai开发的一款文本提示生成音频的模型

Barkify是一个非官方的代码仓库,用于训练Bark,这是由suno-ai开发的一款文本提示生成音频的模型。 Bark包含两个与自然语言处理(NLP)提示和其他技巧兼容的GPT风格模型。Bark实现了出色的真实世界文本转语音(TTS)效果,但代码仓库本身并没有提供训练配方。我们希望进行一些实验或训练这个模型。在这里,我们发布了我们的基础训练代码,这可能对开源社区的训练有一定的指导意义。 处理数据集 我们在LJspeech数据集上进行实验。请按照process.ipynb中的说明操作。 对于中文,我们测试了一个名为“峰哥亡命天涯”的著名语音合成器。它显示出可以接受的结果,但不如我们其他的TTS代码仓库的效果。对于英文,我们测试了LibriTTS数据集。它运行良好,我们路线图中的基本项目已经得到了验证。 训练 第一阶段代表文本到语义,第二阶段代表语义到声音。 您应该在configs/barkify.yaml中配置参数。我们使用一块A100 GPU来训练我们的模型(包括S1和S2)。

2024-04-07

基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分

数据库切分是应对大数据场景下性能瓶颈的一种常见解决方案。它通过将数据水平或垂直拆分到多个数据库节点上,从而提高系统的并发处理能力和存储能力。您提供的 demo 使用了 MyBatis 这一流行的 ORM 框架,实现了数据的水平切分和垂直切分。 在水平切分中,您可能使用了诸如 range、hash 或 list 等分片策略,根据某个字段的值将数据存储到不同的数据库节点上。这样可以提高单个节点的查询性能,同时也支持数据的水平扩展。在实现时,您应该在 MyBatis 的 Mapper 接口和 XML 配置文件中,定义动态的数据源路由逻辑,根据查询条件选择合适的数据源。 在垂直切分中,您可能将不同类型的数据表,如用户信息表、订单表等,存储到不同的数据库节点上。这样可以减轻单个数据库的压力,同时也方便了对不同业务的管理和维护。在实现时,您可能需要在 MyBatis 的配置文件中,定义多个数据源,并根据 SQL 语句的 namespace 或 SQL id 来选择

2024-04-06

一个通过python基本库实现的简单的卷积神经网络

非常抱歉,我没有收到您提供的简单卷积神经网络的 demo。如果您能提供相关的代码,我很乐意对其进行 500 字的详细说明。 一个基于 Python 标准库实现的简单卷积神经网络通常包括以下关键组件: 1. 输入数据预处理: - 读取并归一化输入图像数据 - 将输入数据转换为 NumPy 数组格式 2. 卷积层实现: - 定义卷积核参数,如核大小、核数量等 - 实现二维卷积运算,如使用 NumPy 的 `convolve()` 或自定义卷积函数 - 应用激活函数,如 sigmoid、ReLU 等 3. 池化层实现: - 定义池化方式,如最大池化或平均池化 - 实现池化操作,如使用 NumPy 的切片和聚合函数 4. 全连接层实现: - 将卷积层输出展平为一维向量 - 定义全连接层权重参数,如使用随机初始化 - 实现全连接层的前向传播计算 5. 损失函数定义: - 根据实际任务定义合适的损失函数,如均方误差、交叉熵等 6. 反向传播和优化: - 手动实现反向传播算法,计算各层参数的梯度

2024-04-06

深度学习常用优化方法详解

深度学习模型的训练过程中,优化算法是至关重要的一环。常见的深度学习优化方法包括以下几种: 1. 随机梯度下降(SGD): SGD是最基础的优化方法,每次迭代使用一个小批量样本计算梯度,并沿着梯度负方向更新参数。相比全批量梯度下降,SGD可以更快地收敛,特别适合处理大规模数据。 2. 动量法(Momentum): 动量法在SGD的基础上引入了动量项,可以加快收敛速度并减少震荡。动量法记录了之前梯度的指数加权平均,使得优化方向更加稳定和平滑。 3. Adagrad: Adagrad自适应地调整每个参数的学习率。对于稀疏梯度,如自然语言处理中的词向量,Adagrad能够较好地处理。但随着迭代次数增加,学习率可能会过小而影响收敛。 4. RMSProp: RMSProp是Adagrad的改进版本,它使用了指数加权平均来累积梯度的平方,从而动态调整每个参数的学习率。相比Adagrad,RMSProp在训练后期的表现更好。 5. Adam: Adam结合了动量法和RMSProp的思想,在计算参数更新时同时使用了一阶矩(梯度的指数加权平均)和二阶矩

2024-04-06

在线磁力链接,种子文件播放

在线磁力链接和种子文件播放是一个比较复杂的领域,需要结合多方面的技术来实现。下面是一个大概500字的说明: 通常情况下,在线磁力链接和种子文件播放需要借助于 BitTorrent 协议。BitTorrent 是一种点对点(P2P)的文件分享协议,它可以实现大文件的高效分享和传输。用户可以通过磁力链接或者种子文件来连接到 BitTorrent 网络中,从而下载或者播放所需的内容。 实现在线磁力链接和种子文件播放需要涉及以下几个主要部分: 1. 磁力链接和种子文件解析: 用户输入的磁力链接或种子文件需要被解析,提取出 InfoHash、tracker 地址等关键信息,以便连接到 BitTorrent 网络中。这部分工作可以使用开源的 libtorrent 库来完成。 2. 下载管理: 基于 BitTorrent 协议,需要实现文件块的请求、验证和组装等下载管理功能。同时还需要维护 peer 连接、切片下载等机制,提高下载速度和稳定性。这部分可以使用 libtorrent 或者 WebTorrent 库。

2024-04-05

空空如也

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

TA关注的人

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