在创建桶时出现这个提示,主要原因是桶名不合法 str(time.time()*1000) 这个并不能确保得到的是一个整数 str(int(time.time())) 这个就能确保了
# 新建项目 (这是对的写法) form = pro_add_form(request,data=request.POST) if form.is_valid(): # 创建项目的时候,同时为这个项目创建一个腾讯桶,这个是后期在有mkdanng编辑器以后, # 为了实现上传图片的功能,新写的 在这里需要在models中增加桶的字段 # 桶名就等于当前用户的手机号+时间戳+桶的数字后缀 bucket = {}-{}-1255926157.format(request.dashuju.yonghuxinxi.shoujihao,str(int(time.time()))) region = ap-nanjing create_bucket(bucket,region) # 把桶和桶的区域区域写入数据库 form.instance.bucket = bucket form.instance.region = region form.instance.creator = request.dashuju.yonghuxinxi # 增加creator 创建人的值 form.save() # 新建项目(这是错误的写法) form = pro_add_form(request,data=request.POST) if form.is_valid(): # 创建项目的时候,同时为这个项目创建一个腾讯桶,这个是后期在有mkdanng编辑器以后, # 为了实现上传图片的功能,新写的 在这里需要在models中增加桶的字段 # 桶名就等于当前用户的手机号+时间戳+桶的数字后缀 bucket = {}-{}-1255926157.format(request.dashuju.yonghuxinxi.shoujihao,str(time.time()*1000)) region = ap-nanjing create_bucket(bucket,region) # 把桶和桶的区域区域写入数据库 form.instance.bucket = bucket form.instance.region = region form.
pycharm的git设置
pycharm的VCS VCS:version control system 1,添加git程序的位置 file-->setting-->version control-->Git-->选择git.exe的位置 2,填写git的clone地址 VCS -->Git-->clone-->填写地址 4,保存提交 pycharm可以用两种方法来保存和提交代码 1,命令行,打开最先的teminal选项,可以直接输入git命令 2,按钮操作, 2.1,点击右上角的勾号,或者快捷键ctrl+k,在左面打开的commit Message中写入备注消息 2.2,ctrl+shift+k, 直接点击push 多项目时,项目的git的clone地址在: VCS -->get from version control-->repositrory url 设置以后记录保存在VCS-->Git-->remotes
可变参数(不定向参数) 在指定参数类型后加一个省略号(...) 在一个方法中只能制定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在他之前声明。 package big.com.Cai; public class Annotation { public static void main(String[] args) { System.out.println(printMax(new double[]{1,2,3})); System.out.println(printMax(77.5, 32.4, 34.6, 99.0)); } public static double printMax(double... num){ double result=num[0]; for (int i = 1; i < num.length; i++) { if(result<num[i]) result=num[i]; } return result; } } 输出:
1.请你谈谈Cookie的弊端
cookie
1.IE6或更低版本最多20个cookie 2.IE7和之后的版本最后可以有50个cookie。 3.Firefox最多50个cookie 4.chrome和Safari没有做硬性限制 Opera 会清理近期最少使用的Firefox会随机清理 4096字节,为了兼容性,一般不能超过 IE 提供了一种存储可以持久化用户数据,叫做IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。
优点:极高的扩展性和可用性
1.通过良好的编程,控制保存在cookie中的session对象的大小。 2.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。 3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。 4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。 缺点:
1.`Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。 2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。 3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。 2.浏览器本地存储
在较高版本的浏览器中,sessionStorage和HTML5中提供了globalStorage。
Web Storage包括了两种存储方式:localStorage。
sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
而 3.web storage和cookie的区别
cookie相似,区别是它是为了更大容量存储设计的。Cookie都会被发送过去,这样无形中浪费了带宽,另外 除此之外,setItem,getItem,removeItem,clear等方法,不像setCookie,getCookie。
但是Cookie的作用是与服务器进行交互,作为Web Storage仅仅是为了在本地“存储”数据而生
浏览器的支持除了UserData其实就是web storage。
sessionStorage都具有相同的操作方法,例如removeItem等
3.CSS 相关问题
display:none和visibility:hidden的区别?
display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢, 就当他从来不存在。 visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。 CSS中 link 和@import 的区别是?
(1) link属于HTML标签,而@import是CSS提供的; (2) 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; (3) import只在IE5以上才能识别,而link是HTML标签,无兼容问题; (4) link方式的样式的权重 高于@import的权重. position的absolute与fixed共同点与不同点
A:共同点: 1.改变行内元素的呈现方式,display被置为block;2.让元素脱离普通流,不占据空间;3.默认会覆盖到非定位元素上 B不同点: absolute的”根元素“是可以设置的,而fixed的”根元素“固定为浏览器窗口。当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。 介绍一下CSS的盒子模型?
1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading; 2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).
一 简介 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。实现了微信登录、收发消息、搜索好友、数据统计等功能。
总而言之,可用来实现各种微信个人号的自动化操作。(http://wxpy.readthedocs.io/zh/latest/bot.html)
安装:wxpy 支持 Python 3.4-3.6,以及 2.7 版本
pip3 install -U wxpy
安装 pillow模块
pip3 install pillow
安装 pyecharts模块
pip3 install pyecharts
二 登录微信 1 、 扫码登录微信
from wxpy import * bot = Bot() 2、cache_path=True
运行上面的程序,会弹出二维码,用手机微信扫一扫即可实现登录。
但上面的程序有一个缺点,每次运行都要扫二维码。不过wxpy非常贴心地提供了缓存的选项,用于将登录信息保存下来,就不用每次都扫二维码,如下
bot = Bot(cache_path=True) # 必须先登录过一次以后才可以使用缓存 三 微信好友男女比例 # pip install pyecharts==0.5.11 # pip install pyecharts_snapshot from wxpy import * from pyecharts import Pie import webbrowser bot=Bot(cache_path=True) #注意手机确认登录 friends=bot.
联通宽带, 包年续费,千万别在网上缴费,坑爹了。 疫情处不了门, 结果微信把包年续费缴了,
结果 连半年都没到, 费用已经扣了以大半了。
网上给宽带缴费,都是坑。 被坑了第二次了。
第一次被坑是 网上营业厅缴费。
1. 概述 将路线加载到三维地图中,能直观显示道路的坡度变化,协同DEM和遥感影像,能极大丰富道路的可视化效果
本文此处基于Cesium,加载地形数据,叠加遥感影像,再叠加路网数据,形成三维地图,效果如下:
2. 代码实现 2.1 CDN引入 笔者这里使用 CDN 引入 Cesium,另外后续加载路网数据需要使用Ajax,这里引入jQuery
<!-- Include the CesiumJS JavaScript and CSS files --> <script src=https://cesium.com/downloads/cesiumjs/releases/1.92/Build/Cesium/Cesium.js></script> <link href=https://cesium.com/downloads/cesiumjs/releases/1.92/Build/Cesium/Widgets/widgets.css rel=stylesheet> <script src=http://libs.baidu.com/jquery/2.0.0/jquery.min.js></script> 2.2 加载地形 笔者这里使用Cesium的地形数据
// Initialize the Cesium Viewer in the HTML element with the `cesiumContainer` ID. var viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider: Cesium.createWorldTerrain() }); 2.3 加载遥感影像 笔者这里使用Bing的遥感影像
var bingStyle = [ Cesium.BingMapsStyle.AERIAL_WITH_LABELS, Cesium.BingMapsStyle.COLLINS_BART, Cesium.BingMapsStyle.CANVAS_GRAY, Cesium.BingMapsStyle.CANVAS_LIGHT, Cesium.BingMapsStyle.CANVAS_DARK, Cesium.BingMapsStyle.ORDNANCE_SURVEY, Cesium.BingMapsStyle.ROAD, Cesium.BingMapsStyle.AERIAL, ]; var bingMapProvider = new Cesium.
参考:
b站:编译原理-哈工大
知乎:v8架构是如何一步步演进成如此成熟的架构的
cocos论坛:开挂了:iOS 14.2 开启 JIT 支持,大幅提升 JS 性能!
python变成基础:编译型语言和解释型语言的区别
看到cocos论坛说ios不支持JIT,说起JIT要从编译说起...
编译原理
cpu只能识别机器码,就是0和1,所以使用c++、java、javascript、typescript等语言写的代码最终都要变成机器码,这个高级语言变成机器语言的过程叫编译。
编译型和解释型
不同语言变成机器码的途径不同,分成了编译型和解释型语言。
编译型:C语言、C++、Golang、Pascal(Delphi)、汇编等
解释型:Python、JavaScript、PHP、Shell、MATLAB 等
编译型语言
1. 一次编译,无限运行。例如c语言编译成windows下exe文件,一次性将源码编译成机器码,exe文件包含了机器码,无需再次编译,直接运行即可。
1.可执行程序不能跨平台。不同操作系统对不同执行文件要求不同,不能将windows下执行文件拿到linux下运行。
2.代码不可跨平台。不同平台支持的函数、变量、类型不同。例如c语言windows下是Sleep()单位毫秒,Linux下是sleep()单位秒。
解释型语言:
1. 边解释,边执行。运行哪些源码,就将哪些源码转成机器码,运行多少次就重新转换多少次,所以效率很低。
2. 跨平台,一次编写,到处运行。相同的源码被不同平台的解释器解释执行,生成了对应平台的机器码。所以有了解释器这个中间层,才能将源码执行在不同的平台上。
由上述可见,要高效率就不能跨平台,要跨平台就不能高效率...
那么问题来了
1. 为什么c语言不能在编译的时候编译成不同平台机器码的执行文件呢?比如发布时选择windows、Linux、iOS等,生成对应平台的可执行文件。
不同平台支持的c语言类库不同,语法也不同,要跨就得在代码层面兼容。再者像android和iOS开发,一个java,一个Objective-C和Swift。
2. 为什么javascript不能由解释器直接解释成机器码保存起来运行呢?比如不同平台的解释器一次性将源码转成机器码,保存起来运行。
编译是个长的过程,解释型语言是马上开始执行。JIT就是运行时编译成机器码的技术。
JIT
如下图,javascript源码编译过程,先翻译成字节码,字节码边执行边编译成机器码。
在边执行边编译过程中,解释器会记录特定代码片段执行次数,如果执行次数超过某个值,就记录成hot code,通过优化编译器编译成优化机器码。
当再次执行这段代码时,不用再次编译,直接使用优化机器码,大大提高效率。
这种在运行时编译代码的技术,就叫JIT(即时编译)。
字节码
字节码是一种中间码,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。
搜索
这个项目是我从上clone下来的一个视频播放器,作者提供了Makefile,但是项目结构比较乱,所以我把Makefile删了,并调整了项目结构。
项目重构 项目作者将.cpp文件和.h文件混在一起,但提供了一个Makefile。我直接把Makefile删掉了,在Clion上自己编写CMakeLists.txt来构建项目。
重构后的项目结构如下 │ CMakeLists.txt │ ├─include │ demuxer.h │ display.h │ ffmpeg.h │ format_converter.h │ player.h │ queue.h │ timer.h │ video_decoder.h │ └─src CMakeLists.txt demuxer.cpp display.cpp ffmpeg.cpp format_converter.cpp main.cpp player.cpp timer.cpp video_decoder.cpp 关于SDL2和FFMPEG等第三方库 SDL2和FFMPEG的介绍后续再补充。
SDL2和FFMPEG库可以到官网下载编译好的版本,需要根据系统环境选择相应的版本。下载后解压,将得到的文件夹放入专门存放第三方库的文件夹中,我是统一放在D:/Code/cpp/third_party_lib目录中。
解压后的文件夹中会包含bin include lib三个目录,bin下存放exe和dll等二进制文件,include下存放头文件,lib下存放静态链接库。
写代码时和编译时,我们需要用到include中的头文件和lib中静态库文件,因此需要在CMakeLists.txt中设置好;而dll则在运行时才会用到,且不用在CMakeLists.txt中指明所需的dll(猜想:程序所需的dll由静态链接库指示)。尽管如此,我们仍需要为操作系统指明dll所在位置(需要将dll所在目录的路径写入PATH环境变量)。可以将所有用到dll放在同一个文件夹中,这样只需要设置一次PATH就可以了。
编写CMakeLists.txt 根目录下的CMakeLists.txt用于管理项目,如:设置头文件的路径,设置第三方库的路径等。
cmake_minimum_required(VERSION 3.5) # 设置项目名称 project (player) set(CMAKE_CXX_STANDARD 14) # 设置SDL2头文件与lib的目录,分别命名为SDL2_INCLUDE_DIR和SDL2_LIB_DIR供后续使用 set(SDL2_INCLUDE_DIR D:/Code/cpp/third_party_lib/SDL2-2.0.22/x86_64-w64-mingw32/include) set(SDL2_LIB_DIR D:/Code/cpp/third_party_lib/SDL2-2.0.22/x86_64-w64-mingw32/lib) # 设置ffmpeg头文件与lib的目录 set(FFMPEG_INCLUDE_DIR D:/Code/cpp/third_party_lib/ffmpeg-master-latest-win64-gpl-shared/include) set(FFMPEG_LIB_DIR D:/Code/cpp/third_party_lib/ffmpeg-master-latest-win64-gpl-shared/lib) # 设置输出的可执行文件的目录 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # 导入项目内定义的头文件 include_directories(include) # 导入SDL2和FFMPEG的头文件 include_directories(${SDL2_INCLUDE_DIR}) include_directories(${FFMPEG_INCLUDE_DIR}) # 链接SDL2和FFMPEG到项目中 link_directories(${SDL2_LIB_DIR}) link_directories(${FFMPEG_LIB_DIR}) # 添加子文件夹。这样运行当前CMakeLists.
5.5 快速排序模板类型 主要思想:分治;
对于这种边界容易出错的,直接背过模板就好
这里是需要先找出x分界点对其进行比较,然后比较,最后递归,
void quick_sort(int q[], int l, int r) { if (l >= r)//如果左边大于有右边那么不符合条件,退出 return; int x = q[l], i = l - 1, j = r + 1;//取数组的边界区域 while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); //两个指针都在走,当发现还是存在i<j的情况就交换, if (i < j) { swap(q[i], q[j]); } } quick_sort(q, l, j);//分而治之 quick_sort(q, j + 1, r); } 排序的稳定:原来两个数的值是相同的,如果排完序后位置不发生变换就是叫做问稳定,快排是不稳定的,除非将序列里面的数都是不同的