Kafka基本使用

Kafka基本使用 1.查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafka 或者 ps aux | grep kafka | grep -v grep find / -iname kafka-server-start.sh cd /usr/local/kafka/bin/ #启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties 2.Kafka默认使用9092端口提供服务,可以使用以下命令查看该端口是否已经打开 netstat -tnlp | grep 9092 或者jps 如果Kafka进程正在运行,则会出现一个类似于以下的输出: zookeeper 配置 find / -iname zoo.cfg cd /usr/local/zookeeper/conf kafka 配置 find / -iname server.properties cd /usr/local/kafka/config/ 待更新 启动zookeeper find / -iname zkServer.sh cd /usr/local/zookeeper/bin/ #修改配置重新启动 ./zkServer.sh restart 查看 zookeeper 是否正常启动成功 sudo netstat -tulnp | grep 2181 ps -ef | grep zookeeper 查看Kafka日志

iphone 苹果 IOS 越狱详细图文保姆级教程非常简单

现在随着各个工具的升级,越狱的难度也是越来越低,还记得 iphone 4 的时候我越狱还是花钱请别人搞得,现在只要你的机型支持越狱,下个工具点一点就可以了,非常简单 目前来说整个越狱过程中,寻找合适机型是最难的一步了,其他的只要机型正确也就是点点鼠标的事情,为了方便大家自己越狱特意整理了此篇教程 机型要求: 我这里采用的是 uncOver 越狱支持 IOS 11.0 ~ IOS 14.8 的设备,是目前主流的越狱工具,当然也有其他越狱工具,像 Checkra1n 等也很常用,大家在选择越狱设备时,尽量选择 A7-A11的设备,IOS 也不要太高尽量是 IOS11 - 14,最高IOS 15.4.1,在高可能就很难能越狱了 开始越狱 详细图文教程:https://www.hereitis.cn/articleDetails/2152 1、首先我们下载爱思助手(爱思助手中的一键越狱工具非常方便简单,很适合新手适用),下载完成后,我们连接上手机设备 2、然后选择工具箱,选择一键越狱 3、这里会自动帮你筛选出你的设备支持的越狱工具,这里我们选择第一个 uncOver,点击开始越狱 4、然后就会自动开始越狱,等待进度条完成即可 5、这里进度条完成了,但只是进行了一半,剩下的需要我们在手机上去操作 6、我们打开手机,会发现多了几个软件,这里我们需要打开下图中的 uncOver 应用,我们一开始时打不开的,需要进入设置-通用-设备管理,然后点击信任账户操作 7、点击信任之后,我们在打开 uncOver 应用,然后点击下方按钮开始越狱 8、在越狱途中,可能会弹出广告,我们这里点击左上角关闭按钮就可以了 9、然后点击 ok,等待手机重启 10、手机重启后,我们再次打开该软件,然后点击底部的按钮,在进行一遍,到后面还是一样会出现弹窗,我们在点击ok,等待重启就完成越狱了 越狱成功后手机会自动安装好 Cydia 应用,我们直接使用就可以了,想很多越狱后使用的插件这里面都可能下载的到,还是挺方便的,不过该越狱方式是不完美越狱,手机是不能关机的,如果手机不小心关机了,还需要重新进行一遍越狱操作就可以了,之前安装的东西也都在不需要重新安装

基于hadoop的邮政数据分析系统 毕业设计 附源码46670

Hadoop 基于hadoop的邮政数据分析系统 摘要 为促进邮政业务的发展,充分、合理、高效的使用邮政的各类资源,有效的开展邮政数据分析系统,指导本省业务、管理及营销工作,邮政将邮政业务、速递物流业务、金融业务的数据进行整合,通过利用计算机网络、大型数据库等先进技术建立了邮政数据分析系统,实现了对邮政资源的统一管理和对业务数据的全方位多角度分析;同时通过对邮政资源的整体综合管理,为各项资源的优化和整合提供依据。 关键词:邮政数据分析系统 python MySQL Abstract In order to promote the development of postal services, fully, reasonably, and efficiently utilize various postal resources, effectively carry out postal data analysis, and guide the business, management, and marketing work of the province, postal services have integrated data from postal services, express logistics services, and financial services, and established a postal data analysis system through the use of advanced technologies such as computer networks and large databases, Realized unified management of postal resources and comprehensive and multi-dimensional analysis of business data; At the same time, through the overall comprehensive management of postal resources, it provides a basis for the optimization and integration of various resources.

C# 进行图像处理的几种方法(Bitmap,BitmapData,IntPtr)

在C#中,进行图像处理时主要会使用到 System.Drawing 命名空间中的几个关键类,其中Bitmap、BitmapData和IntPtr是进行高效像素操作的重要工具。以下是如何利用这些类进行图像处理的方法概述: Bitmap 类: System.Drawing.Bitmap 是一个封装了位图数据的类,它允许你加载、保存、显示和操作图像文件或内存中的位图资源。 使用 new Bitmap(width, height, pixelFormat) 创建一个新的空白位图。通过 Bitmap.FromFile(path) 或 Bitmap.FromStream(stream) 加载图片文件。提供 GetPixel(x, y) 和 SetPixel(x, y, color) 方法用于获取和设置单个像素的颜色,但请注意,这种方法对于大规模图像处理效率较低。 BitmapData 类: BitmapData 代表了一个锁定的Bitmap对象的像素数据缓冲区,可以直接对像素进行读写操作以提高性能。 使用 Bitmap.LockBits(Rectangle area, ImageLockMode mode, PixelFormat format, out BitmapData data) 方法可以锁定Bitmap的部分或全部区域,从而获得指向该区域像素数据的指针。data.Scan0 属性是一个IntPtr类型,指向第一个像素的数据地址。解锁位图数据需要调用 Bitmap.UnlockBits(BitmapData) 来释放资源并确保图形设备正确更新。 IntPtr 类型与 Marshal 类: IntPtr 是一个表示非托管指针(即内存地址)的数据类型。在处理BitmapData时,通常会将Scan0属性所指向的内存块直接映射到托管代码中,以便于进行快速的像素操作。 使用 System.Runtime.InteropServices.Marshal.Copy(IntPtr source, byte[] destination, int startIndex, int length) 将未托管的内存块内容复制到托管数组中,这样可以在C#中更方便地进行像素遍历和修改。修改完成后,可以通过类似方法将修改后的数组内容复制回BitmapData所指向的内存区域。 综合以上,一个高效的图像处理流程可能是这样的: 创建或加载Bitmap对象。锁定Bitmap的像素数据,得到BitmapData。使用Marshal.Copy将BitmapData的像素数据复制到本地数组中。对数组进行所需的图像处理操作(如:调整亮度、对比度、滤镜等)。再次使用Marshal.Copy将处理过的数组数据复制回BitmapData的内存中。解锁BitmapData,使得GDI+能够自动更新对应的Bitmap图像。 这种方式避免了频繁调用GetPixel和SetPixel函数带来的性能瓶颈,实现了更快的图像处理速度。 Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。 利用C#类进行图像处理,最方便的是使用Bitmap类,使用该类的GetPixel()与SetPixel()来访问图像的每个像素点。下面是MSDN中的示例代码:

python requests最全使用指南

文章目录 前言安装 ReuqestsHTTP 简介什么是 HTTPHTTP工作原理HTTP的9种请求方法HTTP状态码 requests 快速上手requests 发起请求的步骤requests 发起请求的两种方式请求参数发起 GET 请求发起 POST 请求 requests 实战登录接口的测试获取用户信息接口的测试对响应结果的处理(序列化和反序列化)关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包+项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Requests 是一个 Python 的一个第三方库,通过发送 HTTP 请求获取响应数据,一般应用于编写网络爬虫和接口测试等。 相比 urllib 库,它语法简单,更容易上手。 官方中文文档地址:Requests: 让 HTTP 服务人类 离线文档下载地址:Requests document download 安装 Reuqests pip install requests HTTP 简介 在使用 requests 模拟发送网络请求之前,先来简单学习一下HTTP和常见的请求方式。 什么是 HTTP HTTP(HyperText Transfer Protocol ,超文本传输协议)是一个简单的请求/响应协议。即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。 HTTP工作原理 1.客户端与服务器端建立连接 2.客户端向服务器端发起请求 3.服务器接受请求,并根据请求返回相应的内容 4.客服端与服务器端连接关闭 客户端和服务器端之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭,下次请求再重新建立连接。这样做的好处就是让服务器不会处于一个一直等待的状态,及时释放连接可极大提高服务器的执行效率。 HTTP是一种无状态协议,意思就是服务器不保留与客户端连接时的任何状态。这减轻了服务器的记忆负担,从而保持较快的响应速度。 HTTP的9种请求方法 每种请求方式规定了客户端和服务器端之间不同的信息交换方式。 请求方法描述GET请求指定的页面信息,并返回实体主体。POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头PUT从客户端向服务器传送数据取代指定的文档的内容。PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新DELETE请求服务器删除指定的页面OPTIONS允许客户端查看服务器的性能TRACE回显服务器收到的请求,主要用于测试或诊断CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 请求方法GET和POST的区别: GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码 HTTP状态码 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别: 分类分类描述1**指示信息–服务器收到请求,需要请求者继续执行操作2**成功–操作被成功接收并处理3**重定向–需要进一步的操作以完成请求4**客户端错误–请求包含语法错误或无法完成请求5**服务器错误–服务器在处理请求的过程中发生了错误 常见的状态码:

C语言——结构体类型(一)【结构体定义,创建,初始化和引用】

📝前言: 在实际编程过程中,我们可能会希望把一些关联的数据存放在一起,这样方便我们使用。但是这些数据的类型有时候并不一致,例如一个学生的信息:有名字(字符串),有年龄(整数),性别(字符)······这时候,我们就可以使用自定义类型——结构体类型,将这些类型不一样的关联数据放在一个结构体类型里面。 这篇文章我们来讲讲结构体类型: 1,结构体的定义 2,结构体变量的创建与初始化 3,结构体成员的引用 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础 🎀CSDN主页 愚润求学 🌄每日鸡汤:未来是怎么来的?未来不是等来的! 文章目录 结构体类型一,结构体类型的定义(声明)1,一般结构体定义2,组合型结构体定义 二,结构体变量的创建与初始化1,变量的创建(定义)(1)先定义结构体类型,在创建结构体变量(2)定义结构体类型,同时创建结构体变量(3)通过定义无名结构体类型来定义结构体变量 2,变量的初始化(1)按照结构体顺序初始化(2)按照指定的顺序初始化 三,结构体成员的引用 结构体类型 一,结构体类型的定义(声明) 1,一般结构体定义 C语言中结构体类型的定义形式: struct 结构体名 { 成员项表列 }; //在定义结构体类型的时候,成员不需要初始化;当我们创建了变量时,才需要对变量成员初始化 例如我们要定义一个【有名字(字符串),有年龄(整数),性别(字符)】的结构体类型,名字叫stu: 定义形式如下👇🏻 struct stu { char name[20]; int age; char sex; } 2,组合型结构体定义 比如我们要在上面stu结构体的基础上补充一个出生日期(出生日期还要包括:年,月,日) 这个时候,我们就可以多定义一个能够记录出生日期的date结构体类型,然后再在定义学生结构体类型的时候,引用这个date结构体 具体定义形式如下👇🏻 struct date { int year; int month; int day; }; struct stu { char name[20]; int age; char sex; struct date birthday; }; 注意: 在定义组合型的结构体类型时,一定要遵守先定义后使用的原则。 例如:定义上面的stu结构体时,成员birthday是一个结构体变量,那我们就要保证birthday这个结构体变量的结构体类型在之前已经先定义过了(在这里也就是date已经先定义了) 二,结构体变量的创建与初始化 1,变量的创建(定义) (1)先定义结构体类型,在创建结构体变量 struct stu /*定义学生结构体类型*/ { char name[20]; /*姓名*/ int age; /*年龄*/ char sex; /*性别*/ }; struct stu s1,s2; /*定义结构体变量*/ 利用这种定义形式,可以在程序的任何地方,在先定义后使用的原则下,定义属于改结构体类型的变量

Android11 open failed: EACCES (Permission denied)的解决方法

以下均用kotlin编写,没用过的请酌情参考,方法类似 1、首先Manifest中添加权限 这是Manifest文件的开头 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- 必须要加下面两句--> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 这两句必须加,但是上面那句会提示这样不能在谷歌商店上架,我自己编软件自己用所以不担心,如果真要商用,建议还是老老实实存私有空间,Android11开始应用好像不能在公共空间操作了,需要用户手动设置。 2、动态获取权限 在主Activity的class里定义 private val readRequest = android.Manifest.permission.READ_EXTERNAL_STORAGE 在主Activity中的onCreate的方法中 val readFlag = ActivityCompat.checkSelfPermission(this,readRequest) != PackageManager.PERMISSION_GRANTED // var writeFlag = ActivityCompat.checkSelfPermission(this, writeContacts) != PackageManager.PERMISSION_GRANTED if(readFlag){ if(ActivityCompat.shouldShowRequestPermissionRationale(this,readRequest)){ //引导用户打开读取联系人权限 } ActivityCompat.requestPermissions(this, arrayOf(readRequest), 100 ) }else{ //getContacts() } 这个方法好像就是点开应用提示获取权限,当然这个权限是只能访问media文件(我不清楚这是什么类型的文件,就类似MP4格式?) 然后添加获取权限结果的函数,在onCreate方法外 当然我这里什么都没干,就弹了个提醒而已 override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) { super.

Java超市信息管理系统实训报告(javaEE+swing+jdbc+mysql)

Java实训项目超市信息管理系统(javaEE+swing+jdbc+mysql) 一、主要实训内容 本次实训的主要内容是利用Java Swing构建图形用户界面,运用Idea编译器,DataGrip创建数据库以及使用Maven工具和结合JDBC技术实现与数据库的交互,从而开发一个简单但功能完备的超市信息管理系统。通过本次实训,我希望能够掌握Java Swing的应用,加深对JDBC的理解,同时提高自身编码,数据库建表和开发能力。 项目主页面展示: 二、项目情况介绍 1.项目背景 ​ 超市信息管理系统的开发是为了应对传统超市管理方式的不足,如手工记录的误差和信息不及时等问题。该系统旨在提供一个便捷、高效的平台,帮助管理人员实时追踪库存、销售情况和进货需求,从而优化管理、提高效率,促进超市业务数字化转型。 2.研发目的及意义 ​ 超市信息管理系统的研发目的在于解决传统超市管理模式存在的诸多问题,包括但不限于手工记录的不便、信息不及时、库存管理混乱等。其意义在于提高超市的运营效率和管理水平,实现对商品销售、库存情况和进货需求的实时监控,为超市业务数字化转型提供坚实支持。通过这样的信息化管理系统,超市能够更好地满足顾客需求,提升管理效率,进而促进业务的持续健康发展。 3.项目进度安排 ​ 1)需求分析和收集:搜集和整理超市管理系统的需求,包括进货管理、销售管理、库存管理等方面的功能 需求。时间预估:2天。 ​ 2)概要设计:设计系统的整体架构,包括数据库设计、界面设计、模块设计等。时间预估:3天。 ​ 3)数据库搭建与连接:在概要设计的基础上,建立数据库并与系统连接,确保数据存储和读取的准确性。 时间预估:2天。 ​ 4)功能模块开发:按照需求和设计,逐步实现系统各个功能模块,包括进货管理、销售管理、库存查询 等。时间预估:5天。 ​ 5)界面优化和测试:对系统界面进行优化,保证用户友好性,并进行系统的全面测试,确保系统稳定可 靠。时间预估:1天。 ​ 6)文档整理和报告编写:整理开发过程中的文档,包括需求文档、设计文档等,并撰写实训报告。时间预 估:1天。 三、技术路线: Java语言:主要编程语言,利用其面向对象的特性实现系统功能模块的开发。 Swing GUI:使用Java Swing库进行界面设计和用户交互,构建了系统的用户界面。 JDBC(Java Database Connectivity):连接MySQL数据库,实现数据库的管理和操作,包括数据的增删改查。 MySQL数据库:作为系统的后端数据库,存储和管理超市商品信息、销售记录等数据。 技术路线的知识点列表如下: Java基础知识(面向对象、集合框架等)Swing库的使用(界面设计、事件处理等)JDBC的使用(连接数据库、执行SQL语句等)MySQL数据库管理(建表、增删改查操作等) 四、需求分析 商品管理模块 ​ 进货管理:记录进货信息,包括商品条码、价格设定、数量等。 ​ 库存管理:管理商品的库存情况,提供库存量查询和更新功能。 ​ 商品信息管理:商品的基本信息管理,如商品名、规格、生产厂商等。 销售管理模块 ​ 销售记录:记录销售信息,包括商品条码、价格、销售数量等。 ​ 库存统计:根据销售自动计算库存数量、统计现有货物数量等。 用户权限管理模块 ​ 登录验证:提供不同用户角色的登录,如管理员和销售员。 ​ 权限控制:根据用户角色设定相应的操作权限。 其他需求 ​ 图形界面设计:确保用户友好性、易用性。 ​ 数据安全:保证数据的安全性和完整性。 五、概要设计 1.功能模块设计 用户权限管理模块 1) 用户登录:不同用户具有不同权限,需要登录后才能使用系 统功能。

深入探索Spring Boot的核心功能:快速构建原生程序响应式处理数据(文末送书)

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐一、什么是spring boot二、spring boot 的优势2.1 自动配置2.2 快速开发2.3 微服务支持2.4 起步依赖 三、spring boot 的基本使用2.1 引入Spring Boot依赖2.2 创建Spring Boot应用主类SpringApplication的基本使用2.2.1 修改默认配置2.2.2 关闭Banner 四、学习spring boot 该用那本书4.1 推荐理由4.2 作者简介4.3购买链接4.4 图书目录 五、购买连接&福利放送⛳️ 粉丝福利 📝全篇总结 一、什么是spring boot Spring Boot是目前Java EE开发中颇受欢迎的框架之一。依托于底层Spring Framework的基础支撑,以及完善强大的特性设计,Spring Boot已成为业界流行的应用和微服务开发基础框架。 Spring Boot可以理解为是一个开发框架,其主要思想是通过提供自动配置和起步依赖来简化Spring应用程序的开发。 二、spring boot 的优势 2.1 自动配置 Spring Boot通过自动配置机制,根据项目的依赖和结构,自动配置应用程序所需的各种组件,大大降低了配置文件的编写量。开发者可以专注于业务逻辑的实现,而无需过多关注底层的配置。 2.2 快速开发 Spring Boot提供了丰富的开发工具和插件,支持热部署、快速重启等功能,使得开发周期缩短,能够更迅速地实现功能和调试。 2.3 微服务支持 Spring Boot天然地支持构建微服务架构,通过Spring Cloud等相关项目,可以轻松实现微服务的开发和部署。 2.4 起步依赖 Spring Boot提供了一系列的起步依赖,这些依赖将常用的框架和库进行了封装,并提供了默认的配置和依赖管理。通过使用起步依赖,开发者可以方便地引入所需的功能和组件,而不用手动配置和管理依赖。 三、spring boot 的基本使用 SpringApplication:SpringApplication是Spring Boot的核心类,用于启动Spring应用程序。它通过实例化和配置Spring应用程序上下文,并调用各个组件的初始化方法来完成应用程序的启动。在启动过程中,SpringApplication会加载并应用自动配置,以及处理各种事件。

【Python基础】一文搞懂:Python 中 “requirements.txt“ 文件生成和使用

文章目录 1 引言2 什么是 `requirements.txt`?3 如何生成 `requirements.txt`?3.1 方法一:使用 pip freeze3.2 方法二:使用 pipreqs 3.3 使用 pip freeze 和 pipreqs 的对比4 如何使用 `requirements.txt`?4.1 安装依赖4.2 更新依赖 5 总结 1 引言 在 Python 项目开发中,requirements.txt 文件扮演着至关重要的角色,它记录了项目所需的所有依赖包及其精确版本号。这确保了代码在不同环境中都能以预期的方式运行。本文将深入探讨如何生成和使用 requirements.txt 文件,帮助您在 Python 项目管理中更加得心应手。 2 什么是 requirements.txt? requirements.txt 是一个文本文件,列出了所有必须安装的库,以便于在新环境中复制相同的设置。它通常包括库的名称和版本号,格式如下: flask==1.1.2 requests==2.24.0 3 如何生成 requirements.txt? 3.1 方法一:使用 pip freeze 最简单的生成方法是使用 pip freeze 命令。这个命令会列出当前环境中所有已安装的包及其版本号。 在命令行中运行: pip freeze > requirements.txt 这将会创建一个包含所有依赖项的 requirements.txt 文件。 3.2 方法二:使用 pipreqs pipreqs 是一个更智能的工具,它根据项目文件中的实际导入来生成依赖列表。 首先安装 pipreqs: pip install pipreqs 然后在项目根目录下运行:

Android:AIDL简单介绍+传递简单数据+传递复杂数据

对于AIDL的学习,这些也只能说是我在学习中的理解,有理解不到位或者错的地方也欢迎指正。 1.AIDL的简单介绍 AIDL的目的就是实现进程之间的通信,尤其是在涉及多进程并发情况下的进程间通信。可以将aidl理解为两个进程之间的桥梁,并制定规则,使其传输特定数据。 1.AIDL支持的数据类型有: 基本数据类型(int、long、char、boolean、double),定向 tag 默认且只能是 instring和charSequence,定向 tag 默认且只能是 inlist:只支持arraylist,以及里面的所有元素必须被aidl支持map:只支持hashmapparcelable:所有实现parcelable接口的对象aidl:所有aidl接口本身也可以在aidl文件中使用 需要注意的是:在aidl中声明其他数据类型时,需要在前面加in(输入型参数)、out(输出型参数)、inout(输入输出型参数) 需要注意的是:除aidl所支持的数据类型外,如果要使用则必须导包,就算目标文件与当前文件在同一包下。 比如: 编写了两个文件,一个叫做 Book.java ,另一个叫做 BookManager.aidl,它们都在 com.xxx.aidldemo 包下 ,现在要在 .aidl 文件里使用 Book 对象,那么就必须在 .aidl 文件里面写上 import com.xxx.aidldemo.Book; 哪怕 .java 文件和 .aidl 文件就在一个包下。 2.定向tag: 表示在跨进程通信中数据的流向(流向是针对客户端的对象而言) in(输入型参数):客户端——>服务器 out(输出型参数):服务器——>客户端 inout(输入输出型参数):双向流通. 3.如果不包含非默认支持的数据类型,只需要编写一个AIDL文件,如果包含,通常需要写 n+1 个AIDL文件( n 为非默认支持的数据类型的种类数) 4.非默认支持数据类型的序列化操作 1. 使数据类实现Parcelable接口 例:数据从客户端到服务端,可以在客户端对这个对象进行序列化(通常为实现Parcelable接口),将其中数据转化为序列化流,并传输到服务端内存中,再在服务端对这个数据进行反序列化操作,从而还原数据。 2. 建立一个类,书写其成员变量,建立getter和setter并添加一个无参构造。令这个类implements Parcelable 。 需要注意的是:默认生成的模板类对象只支持为in的定向tag。因为默认生成的类中只有writeToParcel() 方法,如果要实现为 out 或者 inout 的定向 tag 的话,需要实现readFromParcel() 方法。 5.书写AIDL文件 新建AIDL文件,AIDL文件大致分为两类: 一类是用来定义parcelable对象,以供其他AIDL文件使用AIDL中非默认支持的数据类型。 // Book.aidl //用于引入了一个序列化对象Book,供其他的AIDL文件使用 //注意:Book.aidl与Book.java的包名应当是一样的 package com.

Mysql SQL审核平台Yearning本地部署

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用.本地部署,注重隐私,简单高效的MYSQL审计平台。 下面介绍Linux 简单部署Yearning 并结合cpolar 内网穿透工具实现远程访问,破除访问限制,提高工作效率!! 1. Linux 部署Yearning 在Github上下载对应的Linux 安装包:https://github.com/cookieY/Yearning/releases/latest 下载后把安装包上传到Linux 中,这里上传到/usr/local文件夹下面 然后解压文件 unzip 文件名 解压后可以看到一个名叫Yearning 的文件夹, 进入Yearning文件夹,可以看到配置文件:conf.toml 接下来需要修改配置文件,配置mysql数据库连接,如未安装mysql 需提前安装好,然后登录mysql,创建一个名字叫,Yearning的数据库! 然后编辑配置文件: vim conf.toml 设置连接mysql的信息,主要是设置连接mysql用户名和密码 设置完成保存配置文件,执行下面命令进行安装,注意,当前目录必须保持在解压的Yearning文件夹中. ./Yearning install 执行后,可以看到如下信息,登陆web 界面的用户名和密码,还有访问web 界面的端口:8000 然后运行Yearning,当然,这个命令我们可以使用nohup 在后台运行 nohup ./Yearning run & 2. 本地访问Yearning 上面我们运行Yearning后,在外部浏览器或者Linux内部浏览器访问web 界面8000端口即可看到Yearning登录界面,本地访问成功了 输入上面我们看到的用户名密码即可登陆成功,本地访问确认无误后,接下来我们安装cpolar 内网穿透工具,配置实现远程访问Yearning. 3. Linux 安装cpolar 上面我们成功安装了Yearning,下面我们在Linux安装cpolar内网穿透工具,通过cpolar 转发本地端口映射的http公网地址,我们可以很容易实现远程访问,而无需自己注册域名购买云服务器.下面是安装cpolar步骤 cpolar官网地址: https://www.cpolar.com 使用一键脚本安装命令 curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash 向系统添加服务 sudo systemctl enable cpolar 启动cpolar服务 sudo systemctl start cpolar cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可

学生信息管理系统的数据库设计MySQL

学生信息管理系统的数据库设计 1.课程设计目的 学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差,人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着来越重要的作用。数据库课程设计是为了增强学生对所学课程的理解,学会综合地、灵活地运用所学课程知识的一个重要的实践环节。本课程设计是应用java程序设计语言进行数据库应用系统的开发,用MySQL进行后台数据库的管理,编写出某一个小型的管理信息系统。 2.开发环境 硬件环境:服务器、客户机连成局域网结构; 软件环境: 数据库管理系统:MySQL 辅助设计工具ProcessOn、word画图 集成开发环境IntelliJ IDEA或Eclipse 3.系统任务概述 随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。面对庞大的信息量需要有学生管理系统来提高学生管理工作的效率。为了能够为高校学生信息管理提供一种更加高效实用的管理手段,为学生信息的存储、计算、统计、分析、交流提供一种更加安全快捷的信息平台,并且能够减少大量的人工操作,以及在人工操作中由于人为因素而引起的数据错误,保证学生信息数据的安全性和完整性,使学生管理人员能够轻松,正确无误地完成各项工作,为学生管理工作服务。通过这样的系统可以做到信息的规范管理、科学统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。目前社会上信息管理系统发展飞快,各个企业事业单位都引入了信息管理软件来管理自己日益增长的各种信息,学生管理系统也是有了很大的发展,商业化的学生信息管理软件也不少。但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作。 4.系统需求分析 目前随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,需要学校统一管理的数据也越来越多,管理的难度大大增加。面对大量的数据,学校管理者要做的工作实在是太繁杂,因此设计一个学生信息管理系统的必要性显而易见。管理者需要对学生信息进行规范管理、科学统计和快速查询、修改、增加、删除等操作,从而减少管理方面的工作量。本系统可以满足学校管理者的需求,解决大部分学校在学生信息管理上所面临的难题。 4.1分析系统的参与者 学生:可通过该系统查询相关信息,提出相关相关事项的申请如修改密码等。 教师:包括辅导员、院系主任、科任老师等,科任老师可通过该系统录入、修改、核对学生成绩,院系主任主要负责学生学籍信息和课程信息的录入、添加、修改、删除等操作管理,辅导员主要负责学生毕业、奖惩、贫困生等相关信息的管理。 管理员:负责设置各参与用户使用系统的权限和学生学籍信息、学生成绩、辅导员相关信息等的维护,备份系统数据库,恢复系统数据库,系统安全维护。 4.2系统功能需求 学生信息管理系统中,根据管理员、学生和教师的活动步骤,创建活动图如下图4-1所示: 图4-1系统活动图 学生用例图:学生在本系统中可以进行登录、查询成绩、查询学籍、查询档案和查询缴费信息相关操作,通过这些活动创建学生用例图如图4-2所示: 图4-2学生用例图 教师用例图:教师在本系统中可以进行登录、输入学生学号之后可以查询学生成绩、查询学生学籍、查询学生档案和查询学生缴费相关操作,通过这些活动创建教师用例图如图4-3所示: 图4-3教师用例图 管理员用例图:管理员在本系统中可以进行登录、添加用户、修改用户(可以修改用户权限和修改用户信息)、删除用户和查询用户相关操作,通过这些活动创建管理员用例图如图4-4所示: 图4-4管理员用例图 4.3系统数据及数据处理需求 该系统主要包括三个模块,学生管理信息模块、教师管理模块、管理员管理模块。学生管理信息模块主要是入学后对信息的查看,教师管理模块主要是对学生成绩信息的添加、修改、删除和查询。管理员模块能对学生和教师进行添加、修改、删除和查询。根据上述功能,设计出数据流图,如图4-5所示: 图4-5数据流图 数据字典描述 数据存储描述 项目 描述 数据存储编号 D1 数据存储名称 管理员表 简述 添加、修改、查询、删除用户 数据存储组成 姓名+性别+家庭住址+系部 相关联的处理 学籍管理,成绩管理,课程管理 项目 描述 数据存储编号 D2 数据存储名称 学生表 简述 查询学生信息 数据存储组成 学号+姓名+性别+系部班级 相关联的处理 成绩管理,课程管理 项目 描述 数据存储编号 D3 数据存储名称 教师表 简述 教师上课安排 数据存储组成 教师编号+教师姓名+所教课程+上课班级 相关联的处理 课程管理 项目 描述

【Python基础】Python中处理JSON文件的全面指南

文章目录 Python中处理JSON文件的全面指南1. JSON简介2. Python中的JSON模块2.1 读取JSON文件2.2 解析JSON字符串2.3 写入JSON文件2.4 生成JSON字符串2.5 高级JSON处理 3. 结论4. 模块封装模块功能说明使用说明 Python中处理JSON文件的全面指南 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。在Python中,处理JSON数据是一项常见且重要的任务,特别是在数据科学、网络编程和API交互等领域。本文将深入探讨Python中如何处理JSON文件,包括读取、解析、修改和写入JSON数据。 1. JSON简介 JSON格式由键值对组成,其中键总是字符串类型,而值可以是字符串、数字、数组(列表)、布尔值或其他嵌套的JSON对象。Python中的字典和JSON对象在结构上非常相似,使得在两者之间转换变得非常简单。 2. Python中的JSON模块 Python标准库中的json模块提供了处理JSON数据的强大工具。这个模块可以用来解析JSON字符串,将Python对象转换为JSON格式,以及处理文件和JSON之间的转换。 2.1 读取JSON文件 当然,我们可以更详细地探讨Python中读取JSON文件的功能,并通过一个实际的应用示例来展示其使用方法。 Python提供了内置的json模块来处理JSON数据。通过使用json.load()函数,我们可以轻松地将JSON文件中的数据读取为Python对象(通常是字典或列表)。 基本步骤 导入JSON模块:首先,需要导入Python的json模块。打开文件:使用open()函数以读取模式打开JSON文件。加载JSON数据:使用json.load()函数读取文件并将JSON数据转换为Python对象。 示例:读取一个简单的JSON文件 假设我们有一个JSON文件data.json,内容如下: { "name": "John Doe", "age": 30, "city": "New York", "hobbies": ["Reading", "Hiking", "Coding"] } 要读取这个文件并处理其中的数据,我们可以按照以下步骤操作: 步骤1:导入JSON模块 import json 步骤2:使用with语句打开文件 with语句在处理文件时是一个好习惯,因为它会在完成任务后自动关闭文件。 with open('data.json', 'r') as file: 步骤3:加载JSON数据 data = json.load(file) 步骤4:使用数据 现在data变量包含了一个字典,我们可以像处理普通字典那样处理它。 print("Name:", data["name"]) print("Age:", data["age"]) print("City:", data["city"]) print("Hobbies:", ", "

万年历(C语言)-程序设计/作业

··········目录·········· 一,预备知识 1. 关于 struct tm 结构体 2. 计算 星期几 的方式 3. 输出不同颜色的字体 二,代码分段解析 1. 头文件和定义的全局变量 2. 头文件head.h 3. 主函数main 三,代码中使用到的函数 1,展示选择菜单 2,判断给定年份是否为闰年 3,计算返回给定月份的天数 4,计算给定日期是星期几 5,显示当前指定日期的月历 6,显示指定年份的全年日历 7,验证给定的日期是否有效 8,查询指定日期的月历并突出显示 9,重置时间为当前系统时间 10,将当前日期调整为新输入的日期,无效则重置时间 四,全部代码 前言: 文章不足之处请麻烦评论指正! 总体设计: 1,显示菜单提示用户进行输入并执行对应函数 2,获取当前日期:获取系统时间作为默认值,显示所在年月的月历并突出当天日期 3,显示全年年历:显示所在年份的全年日历,并突出当天日期 4,查询日期:输入指定日期并突出显示,用户可选择显示全年日历或月历 5,调整日期:用户输入可修改时间的默认值,且检查到无效日期时可以重置为系统时间 一,预备知识 1. 关于 struct tm 结构体 struct tm 是C语言中的一个结构体,定义在头文件 <time.h> 中。它用于存储时间和日期的信息,我们只需要在程序中包含<time.h>头文件,就可以使用此结构体中的信息,能够更方便地操作和处理时间。结构体的定义如下: struct tm { int tm_sec; // 秒,范围从 0 到 59 int tm_min; // 分,范围从 0 到 59 int tm_hour; // 时,范围从 0 到 23 int tm_mday; // 一个月中的日,范围从 1 到 31 int tm_mon; // 月份,范围从 0 到 11 int tm_year; // 年份,从 1900 开始 int tm_wday; // 一周中的日,范围从 0 (周日) 到 6 (周六) int tm_yday; // 一年中的日,范围从 0 到 365 int tm_isdst; // 夏令时标识 }; 2.

使用VUE和webrtc-streamer实现rtsp实时监控

使用VUE和webrtc-streamer实现rtsp实时监控 前言一、webrtc-streamer是什么?二、使用步骤1.下载[webrtc-streamer](https://github.com/mpromonet/webrtc-streamer/releases),本机测试我下载的最新window版本2.解压下载的安装3.双击webrtc-streamer.exe启动服务4.将下载包html文件夹下webrtcstreamer.js文件和html/libs文件夹下adapter.min.js文件复制到VUE项目public目录下 、在index.html文件里引入这两个js文件5.编写测试页面6.运行项目可查看监控视频播放效果7.另外把页面放到初始(根目录)公共页面(app.vue)可实现不登录的实时检测8.关于截图的部分代码,有需要的可以参考9.部分用到的参考文章简介 总结 前言 项目中遇到过的问题:通过 前端 Vue 或者后端Java 实现对监控的实时预览播放,截图等,刚开始肯定是没有头绪,通过多方面的查找和验证,就有了这篇文章。 提示:以下是本篇文章正文内容,下面案例可供参考 一、webrtc-streamer是什么? webrtc-streamer是一个使用简单机制通过 WebRTC 流式传输视频捕获设备和 RTSP 源的项目,它内置了一个小型的 HTTP server 来对 WebRTC需要的相关接口提供支持。 二、使用步骤 1.下载webrtc-streamer,本机测试我下载的最新window版本 下载地址:https://github.com/mpromonet/webrtc-streamer/releases 2.解压下载的安装 3.双击webrtc-streamer.exe启动服务 如下图则启动成功,此时在浏览器访问127.0.0.1:8000可以看到本机监控画面 当你同时打开多个视频流/访问窗口时,会发现本地CPU会快速上涨,cpu太高的话打字都非常卡。所以在cmd里命令启动exe时,需要加上这个配置参数 -o 4.将下载包html文件夹下webrtcstreamer.js文件和html/libs文件夹下adapter.min.js文件复制到VUE项目public目录下 、在index.html文件里引入这两个js文件 5.编写测试页面 注意:第三步在本机启动服务所以 new WebRtcStreamer(id,serverUrl)中URL传入127.0.0.1端口可 见第三步截图为8000;各监控设备厂商有自己的RTSP地址格式connect要传入正确的rtsp地址。 <template> <div> <a-button @click="handleChange">切换</a-button> <video id="video" autoplay width="900" height="900"></video> </div> </template> <script> export default { name: 'index1', data() { return { webRtcServer: null } }, mounted() { //video:需要绑定的video控件ID //127.0.0.1:8000:启动webrtc-streamer的设备IP和端口,默认8000 this.webRtcServer = new WebRtcStreamer('video', location.

关于unity发布webgl嵌入vue项目通信方法

以下总结主要是前端的嵌入方法 1.引入webgl文件 将unity导出的webgl文件包放至vue项目的public下面 2.在webgl下的index.html添加通信方法,如图 附上代码: var unityInstanceV; function ReportReady() {//初始化 window.parent.postMessage({ guid: "", event: "ReportReady" }, "*"); } function TestSend(data)//unity发消息给vue { window.parent.postMessage(JSON.parse(data), "*"); } /** * GameManager:unity中绑定方法的物体 * receiveMsgFromVue:unity中的方法 * */ function sendMsgToUnity(obj) { //vue发消息给unity unityInstanceV.SendMessage('GameManager', 'receiveMsgFromVue', JSON.stringify(obj)) } 3.页面通过iframe引入webgl 4.具体业务功能中给unity发送消息,调用webgl中写的方法 this.$refs.unityIframe.contentWindow.sendMsgToUnity(data); 5.监听unity给vue发消息,注意需要销毁监听事件 mounted() { window.addEventListener("message", this.getUnityData); //监听unity给vue发消息 } getUnityData(e){ if (e.data.eventName == "初始化" || e.data.eventName == "请求数据") { //通过eventName判断事件名称 } },

链表入门:“单链表“的基本操作详解(C语言)

目录 一,了解链表 二,基本操作的实现 1. 在代码开头的预处理和声明 2. 对链表进行初始化 一个错误案例的分析: 3. 对链表进行“增”操作 (1) “头插法”在链表头结点之后插入结点 (2) “尾插法”在链表的最后一个结点后插入结点 (3) 在指定位置插入结点 3,对链表进行“删”操作 (1) 从链表中删除第 i 个元素 (2) 销毁单链表 4. 对链表进行“查”操作 (1) 打印链表中的元素 (2) 获取链表中元素的个数 (3) 在单链表中查找元素e的位置 (4) 在单链表中获取 i 位置的元素 5. 对链表进行“改”操作 三,整体的实现和效果 一,了解链表 链式存储结构——借助指示元素存储地址的指针表示数据 元素间的逻辑关系:(逻辑相邻,物理不一定相邻) 链表是由一系列结点(链表中每一个元素称为结点)组成,每个结点包括两个部分:数据域(存储本结点的数据元素)和指针域(存储下一个结点的地址)。 由于链表在运行时可以动态生成结点,所以链表相比于数组,具有动态分配内存、方便插入和删除、节省空间等优点。 链表按照节点的连接方式可以分为单链表、双向链表和循环链表三种类型。这里我们只讨论单链表。 一些概念的了解 头结点(在链表的首元结点之前附设的一个结点)是用来辅助链表操作的,它本身并不算作链表的节点,因此在统计链表长度时需要将头结点去掉。头结点的数据域通常不赋值头指针:指向第一个结点(链表有头结点的时候就是头结点)空链表:链表中无元素(有头结点) 下图是一个带有头结点的单链表 二,基本操作的实现 对数据的进行的操作基本就是“增删查改”。 1. 在代码开头的预处理和声明 #include<stdio.h> #include<stdlib.h> typedef struct node { int data; //数据域 struct node* next; //指针域 }LinkNode; 如果你使用的是Visual Studio进行编写的代码,请在第一行添加: #define _CRT_SECURE_NO_WARNINGS

GitHub Copilot 功能介绍和使用场景

原文 : https://openaigptguide.com/github-copilot/ GitHub Copilot是一款由GitHub、OpenAI和Microsoft联合开发的AI辅助开发工具,它以人工智能的方式提供语法结构、表达式、变量名等的自动补全建议,并对代码进行注释解释,将代码自动调试,甚至推荐新方案。Copilot可以帮助用户提高编程效率,节省大量时间。 GitHub Copilot介绍 GitHub Copilot 是一款由微软支持,OpenAI研发的AI开发工具,它能通过理解程序员编写的代码,推荐相应的解决方案,以此来帮助程序员更快、更省力地编写代码。GitHub Copilot可以从注释和代码中获取上下文,理解程序员想要实现的功能,从而立即提出建议。该工具使用OpenAICodex合成并建议代码,尽管GitHub Copilot有一定的准确性,但它不能写出完美的代码,仍需开发者进行仔细的测试和审查。GitHub Copilot可以为程序员提供有用的代码片段和解决方案,比如它可能会向程序员推荐最适合当前情况的函数。GitHub Copilot已被超过37万个组织采用,付费用户超过100万,显示出它在全球开发者社区中的巨大影响力。 GitHub Copilot有哪些功能? GitHub Copilot是由微软、OpenAI和GitHub联合打造的一款AI编程辅助工具,主要有以下几个功能: 自动生成代码:GitHub Copilot可以基于编程者已写出的代码,通过学习和理解上下文,自动生成代码。此功能可帮助开发人员更高效地编写代码。 代码提示:GitHub Copilot能在代码编辑器中根据编程者的上下文自动提供代码提示。开发者可以根据提示快速找到解决方案。 错误修正:GitHub Copilot可以通过解析代码和理解上下文,自动检测代码中的错误和警告,并提供相应的解决方案。 优化代码:GitHub Copilot还可以通过对代码进行分析和优化,从而帮助开发者更高效地开发出高质量的代码。 兼容多种编程语言:GitHub Copilot支持多种编程语言,包括但不限于Python、JavaScript等,可以更好地满足开发者的需求。 总的来说,GitHub Copilot是一种基于公开源代码和文本训练的人工智能,它为程序员提供实时的代码建议,有很强的上下文理解能力。开发者可以利用GitHub Copilot,快速、高效地编写代码,提高编程效率。然而,GitHub Copilot的代码建议需要开发人员进行审核和测试。 GitHub Copilot的使用方法与技巧 GitHub Copilot是一款由OpenAI和GitHub合作开发的AI辅助工具,旨在帮助开发者更高效地编写代码。它基于GPT-35-turbo进行训练,支持多种编程语言和框架,并具有自动代码补全、生成代码片段、多语言支持和学习能力等功能。在使用GitHub Copilot时,您需要注册一个Github账号,可以在Visual Studio Code、Visual Studio和JetBrains Rider上通过插件形式集成进IDEA。以下是一些使用GitHub Copilot的技巧: 明确需求和关键字:在使用GitHub Copilot之前,先明确你需要编写的代码的具体需求和关键字,以便Copilot能更好地理解你的意图。 配置代理:在使用GitHub Copilot时,您可能会遇到一些网络问题,因此配置代理可以提高Copilot的连接稳定性。 使用快捷键:GitHub Copilot支持一些快捷键,例如Ctrl+Space可以显示所有补全建议,Ctrl+Enter可以选择其中一个补全建议。 先写好上下文:Copilot需要理解代码的上下文,因此在使用Copilot之前,先写好代码的上下文,这样可以提高Copilot的预测准确性。 编写具体的需求参数和返回参数:在使用GitHub Copilot时,您需要编写具体的需求参数和返回参数,以便Copilot能够生成更符合您需求的代码。 让Copilot学习您的代码:GitHub Copilot具有学习能力,因此让它学习您的代码可以提高它的预测准确性。 编写算法函数和编写测试用例:在使用GitHub Copilot时,您还可以编写算法函数和编写测试用例,以帮助您更高效地编写代码。 需要注意的是,GitHub Copilot是一款基于人工智能的工具,它不能替代开发人员,但可以帮助开发人员更高效地编写代码。同时,它生成的代码质量可能不足,可能会有版权问题,因此在使用GitHub Copilot时,还需谨慎使用。 GitHub Copilot的应用场景 GitHub Copilot是由GitHub和OpenAI合作的代码生成工具,主要用于辅助开发者编写代码。其主要应用场景如下: 代码补全:GitHub Copilot可以根据代码上下文自动生成代码片段,提高编码效率。当开发者输入代码时,GitHub Copilot会根据历史代码库和代码模板,自动补全代码,减少重复输入的时间。 代码修复:GitHub Copilot还可以识别代码中的错误,并提供修复建议。这对于程序员进行代码调试和修复具有重要帮助。 代码重构:GitHub Copilot可以帮助程序员进行代码重构,优化代码结构,提高代码质量。它可以根据代码规范和编程标准,建议程序员进行代码的重构,减少代码中的错误和问题。