JPEG结构及编码解码
为什么会想到看这个东西呢,因为选了个数据恢复的课不得不了解一下(早知道就应该选水点的实验课了)
或许后面还会造个轮子玩玩吧。。
JPEG文件格式JPEG文件通常以FFD8头部标识,以FFD9作为结束标识,在文件中以FF表示一个段的开头,后跟标识信息表示段的内容,再之后是两字节的数表示段的长度
编码过程色彩空间大多数JPEG算法的实现使用亮度和色度(YUV编码)而非RGB编码,因为人眼很难观察到高频亮度在很小的区域中的变化。RGB使用3个字节来存储颜色信息,而YUV也使用3个字节来存储,但是每个字节表示的信息和RGB相比是不同的。图片的编码流程如下
离散变换和量化JPEG在处理图像之前将图片划分为8x8的小块来进行处理(这样的小块被称为最小编码单元),在处理的时候需要将像素值的范围进行修改,使得值的范围在$[-127, 128]$之间,未进行处理的范围在$[0, 255]$,使得像素值以0为中心,便于利用离散余弦变换。离散余弦变换把离散的数据变成多个余弦信号的组合。
二维DCT变换二维DCT的变换公式:$$F(u,v) = c(u)c(v)\sum_{i = 0}^{N - 1} ...
来点mysql—索引
本篇博文记录学习mysql的一些笔记(学习数据库+准备面试
较为抽象的地方不会有很细地记录,可能存在理解不是很精确的地方
然后之前虽然用过数据库但是sql语句也不太会,还是必须要学的(
索引索引(是Mysql中也叫做键)是存储引擎中用于快速找到记录的一种数据结构
1SELECT first_name FROM sakila.actor WHERE actor_id = 5;
该语句用于在actor_id列上建立的索引查找值为5的行,然后返回所有包含该值的数据行
索引分为单索引和组合索引,单列索引中一个索引只包含一个列,而组合索引中一个索引可以包含多个列(在多个列中创建的单索引并不能提高查询性能)
索引提高了查询速度,但是会降低更新表的速度,因为在更新表的时候也需要对索引文件进行更新
在创建了索引之后,查询会根据语句情况选择使用索引以提高查询效率,快速定位数据,不用扫描表中给定查询的每一行
B-TreeM阶的B树,每个节点最多有M个子节点,非叶子节点具有至少$ceil(m/2)$个子节点
B树的根节点拥有的子节点数量和上限的内部节点相同,如果根节点不是唯一节点,至 ...
2021腾讯暑期实习面经
TEG 一二面一面 2021.03.123.10的上午接到第一次电话,但是在上课就挂了,打回去结果是AI
3.11下午还在摸鱼,然后又打过来了,问第二天下午3点有没有时间,然后冲了(
头一天接到电话没有问是什么部门的,面试开始的时候面试官自己介绍了一下是TEG的(我怎么还被广州捞了啊
首先是自我介绍
结束了之后开始问项目(整个面试过程都在问项目,一点算法都没问),项目是寒假赶工赶出来的俱乐部Web
Web程序有用户鉴权吗(有,但是只针对管理员)
你的这个项目使用了Django,那么你知道Django的用户鉴权是怎么实现的你清楚吗(不清楚,没来得及看过)
怎么存储的用户信息,例如密码,怎么保证安全性,如果让你来设计保存,会怎么进行保存(哈希,加盐)
加盐的话使用的字符串都是同一个吗(在我构想的加盐方案中是这样)
加盐是为了防止什么(防止暴力跑彩虹表之类的)
你的项目里还使用了RSA,主要是用来干什么?(登录认证,balabalabala)
你使用公钥对用户信息进行加密,但是中间人截取不是也可以用来进行登录(不能,用户一旦登录成功服务器会销毁记录)
项目用的什么数据库(Postgresq ...
Google二次验证
该博文用于记录一下Google二次验证的生成及验证过程,以便以后需要用的时候不用到处查资料×
密钥生成在文档中查询到二次验证密钥属于Base32编码,所以在服务端生成密钥时使用的是随机字符串通过Base32后得到的字符串截取前16个字符作为密钥,实际上只要是Base32编码字符串,不管长度都可以。为了保证安全性可以取更长的编码字符串。
实际上这一过程也可以直接放在客户端生成,但是写的时候还是直接放在的服务端,主要也是为了通过进行字符串的混淆添加一些密钥信息到随机时间戳中保证一定的安全性
12345678def generate_secret(): timestamp = int(time.time()) half = len(secretString) // 2 import_str = secretString[:half] + str(timestamp) + secretString[half:] #添加其他信息到随机时间戳中 digest = hashlib.sha256(import_str.encode('utf-8')).he ...
Bukkit服务端插件开发(三)
昨天才把Ver 1.0放出来,只实现了简单的功能还没进行细节的完善
子命令配置将目前功能命令进行修改
/bvote setid [room_id]:设置绑定房间id号
/bvote setworld:设置当前世界为受影响世界
/bvote time [random|static] <args>:设置间隔时间为随机或定时
/bvote switch:设置插件状态
对于子命令的实现,之前进行time指令的实现中使用参数的方式可以进行实现
但是在游戏中输入指令的时候没用补全提示,现在需要实现的就是补全提示
在查阅了文档和一些开源代码后,在插件主类中可以覆写一个onTabComplete方法,其声明如下
1public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args);
在主类中,可以通过判断参数然后返回一个列表作为待选的可以通过tab补全的子命令,而在onCommand中可以使用参数实现子命令
项目中的命令是通过实现Comm ...
Bukkit服务端插件开发(二)
有点摸了,现在开始复习下学期考试然后每天只修一点bug,所以这一部分的内容不是很多
线程分离在进行插件的测试过程中,存在一个问题,输入指令/debugvote之后,记分牌能够正常工作
但是由于在这之前插件的运行是单个线程,在插件的相关程序运行的过程中需要等待程序运行结束
这就导致了在客户端看来能够正常移动,但是在这个过程中服务端却是在运行命令程序的
PS:突然想起来之前用一些插件的时候也会出现类似的问题不知道是不是也是这个原因
Bukkit中提供了org.bukkit.scheduler中的相关类用来解决线程的问题,但是进行异步调用的时候,子线程中是不能调用Bukkit中提供的API的
准确来说,是只能调用Bukkit中提供的线程安全的API
关于线程安全的问题,在mcbbs上了解到关于MC本身的一些操作不是线程安全的,具体的函数还不是很清楚
但是,在插件开发的过程中最好是将一些需要调用API的方法放到主线程中进行实现
对于这个问题,可以通过在异步线程中调用Bukkit中的同步调用
在项目中的实现如下:
DanmakuListener中开启异步线程对弹幕进行监听
12345 ...
Bukkit服务端插件开发(一)
前言:
博客停了很久没更,主要也是上一个学期一直摸鱼,没啥写的
然后开发的项目也一直放着,完成度比较高的就是课设和机器人的API,没什么好写的
之前打算用在MC建筑中使用的插件也是鸽了很久没动,因为那个东西除了我需要一个填充功能之外想不出其他的功能了
然后这个假期除了开发BilibiliVote之外还会改一下机器人API的前后端代码
而这一系列的博文仅仅在开发DanmakuVote过程中的一些记录,后续或许会系统的把Bukkit相关的东西整理一下
本项目仓库地址:DanmakuVote
DanmakuVote基本构想这个插件其实也是测试了一下土豆的HyperScape,然后看到有一个插件可以获取bilibili直播间弹幕发送到游戏中
土豆的这个游戏里面有一个观众互动性比较高的功能,每局游戏可以让观众投票一个事件,然后票高的事件接下来会在游戏中发生
那么结合bilibili直播间信息获取的一个接口,是不是可以考虑将这个功能在Minecraft中进行实现
那么基本的一个思路就是这样:
插件只有服务端,仅仅考虑直播间播主为腐竹(OP)的情况,当然后续开发中还可以进行扩展
OP指定一个世 ...
Minecraft Forge服务器搭建
放一个Minecraft服务器搭建的博文,免得后面什么时候要用上又把过程忘了。。。
这个教程后半段是参考了网络上的教程,因为现在没有搭建的需要所以还没进行实际操作(逃
此处搭建服务器为linux服务器,minecraft版本为1.12.2
安装MCSManagerMCSManager用于网页端管理mc服务器,不需要可以跳过这一步
MCSManager仓库
# 安装 Node 版本控制工具(若没有 wget,请安装它)wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash# 关闭终端重新打开再执行以下命令# 项目支持 8.0 版本以上,这里使用11版本nvm install 11.0.0nvm use 11.0.0# 克隆仓库git clone https://github.com/suwings/mcsmanager.git# 进入目录cd mcsmanager/# 安装依赖库npm install# 启动面板sudo npm start #或 sudo node app.js
...
IndigoRobot开发日志
Version 1.0 - 200120
添加了UESTC教务处成绩检测功能
添加了前端的教务处模块
修复了部分小bug
将词频统计集成为了statistic类中,简化server-views的代码,此处依旧需要重构
Version 1.0 - 200121
修复检测到新成绩后会重复发送的bug
修复成绩的空格未删除的bug
修复了在settings.py中将debug改为False后导致的静态文件无法加载问题
添加了Minecraft服务器检测接口
celery任务队列学习
学习celery是为了后面写一个抢票系统,先咕咕咕一下。。
本文主要实现在Django中使用celery,安装模块为django-celery celery redis
Celery的基本架构(此处是一堆废话)
Celery的架构有三个部分:消息中间件、任务执行单元、任务结果存储
消息中间件(Broker):任务调度队列,接收任务并将任务存入队列。Celery不提供队列任务,本文使用RabbitMQ(因为我配置的redis一直没法让celery连接上)
任务执行单元(Worker):任务执行处理单元,它实时监视消息队列,获取队列中调度的任务并执行。
任务结果存储:用于存储任务的执行结果,以供查询
Django中celery的配置首先配置环境,python环境安装celery django-celery,本地配置 RabbitMQ数据库,我本地建的项目名为CeleryTest
项目基本目录结构:
123456789101112131415161718CeleryTest├── app│ ├── __init__.py│ ├── admin.py│ ├── apps.py ...