参考博文链接:【毕业设计算法推荐】基于物品的协同过滤推荐算法(ItemCF)_普通网友的博客-CSDN博客_java基于物品的协同过滤算法
首先,随机生成一些用户行为列表,代码如下:
%%生成用户行为矩阵 function User_Behavior_Matrix = Generate_User_Behavior(user_count, item_count, behavior_sum) %创建一个介于1到user_count的伪随机整数矩阵(behavior_sum行,1列) A = randi(user_count, behavior_sum, 1); B = randi(item_count, behavior_sum, 1); %定义用户行为种类 behavior_type = [1, 3, 5, 10]; %以相应概率生成用户行为,这里(点击 = 0.4,搜索 = 0.3,收藏 = 0.2,付款 = 0.1) C = rand(behavior_sum, 1); for i = 1:behavior_sum if C(i, 1) <= 0.4 C(i, 1) = behavior_type(1,1); elseif C(i, 1) <= 0.7 C(i, 1) = behavior_type(1,2); elseif C(i, 1) <= 0.9 C(i, 1) = behavior_type(1,3); else C(i, 1) = behavior_type(1,4); end end User_Behavior_Matrix = [A B C];
前排占坑 请问本文哪里有广告了?一次次审核都不过,唉😔
中国光谷·华为杯2022第十九届中国研究生数学建模已经在可爱的国庆假期落下帷幕,转眼一个月过去了(现在修改的时候又过去了一个月),是该期待一下下最后的评审成绩在什么时候公布了。因此在这里写点笔记,记录下等待成绩的心路历程,顺便下更新成绩的公示情况(后续为了防止审核不过,更新请看评论区)。
11月30日 致电了东南大学组委会秘书处,奚老师回复说目前正在筹办专家集中评审,最快在12月中旬会有结果,所以请大家继续关注研创网上是否有最新通知,本帖评论区也会及时更新。
11月23日 建模公众号怕我们寂寞,更新了“我与数模的故事”征文帖子一篇[笑cry],还是需要耐心等待哈!
11月22日 致电华科承办单位老师电话,王玥老师说目前因为武汉①情严重,专家委员会都尚未召开,需要等待的时间未知
11月14日 收到东南大学组委会秘书处回复,目前还在评审(应该是网上评审,集中评审估计还早)中,并且收到公众号回复,大概12月份出成绩!
11月12日 看到研创网官网说是11月中下旬(官网链接)出成绩,今天是中旬的第二天,还是没有成绩,有成绩的话盲猜下下下周二(11月29日) 会有结果吧。
顺便炫一下,研赛后的另一个建模比赛单核输出拿了一等奖,又是一顿饭嘻嘻(搓手);大英竞赛湖北赛区决赛成绩也出了,榜上有名嘻嘻🤭
11月5日 给东南大学和华科的组委会发了邮件咨询评审进度,等待回复,目前官网无消息。
【需求描述】
主题颜色存在$store中,动态使得部分文字跟随主题颜色
【实现效果】
(主题颜色为蓝色,文字颜色跟随主题)
(主题颜色为紫色,文字颜色跟随主题)
【实现方式】
1、从项目中取出获得到的主题颜色。
2、与需要对应颜色的文字的标签style绑定使用。
【代码】
<template> <div> <a-tag :color="tagColor" v-for="(r,index) in roles" :key="index">{{ r }}</a-tag> </div> </template> <script> export default { name: 'Logout', computed: { tagColor () { return this.$store.getters.color } }, data () { return { roles: ['系统管理员','项目管理员'] } }, methods: { }, mounted () { } } </script> 【color必须写在style中的做法】
<div class="model" :style="{'background-color': tagColor}">
VS2019安装与使用教程 可能有很多小伙伴们,知道VS2019这个软件,但是不知道怎么安装与使用,下面我将具体介绍VS2019的安装方法与创建我们自己的C++项目以及如何运行自己编写的代码!
Visual Studio 2019(VS2019)简介 Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。
Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2019 版本,基于.NET Framework 4.8 。
2018年6月,微软宣布开发新一代集成开发环境(integrated development environment,IDE)Visual Studio 2019。
2019年2月15日,微软敲定了Visual Studio 2019正式版的首发时间,2019年4月2日(北京时间4月3日凌晨1点。
Visual Studio 2019已经发布了四个公开预览版,分别是2018年12月的Preview 1、2019年1月的Preview 2。2月13日推出的Preview 3 和3月1日刚推出的Preview 4。
VS2019的分类 1.个人版:Visual Studio Community 该版本仅供个人使用免费、功能完备的可扩展工具,面向构建非企业应用程序的开发人员。
visual studio 2019 官方正式版授权:免费版,软件大小:4.89GB,语言:简体中文;
Visual Studio 2019 是微软开发的一款功能强大的IDE编辑器,visual studio 2019可完美开发;Windows、iOS 和 Android 程序,并且visual studio 2019 已内置安卓模拟器,让开发人员不必为跨平台的程序运行所烦恼。
2.专业版:Visual Studio Professional 售价1,199 美元,专业开发人员工具和服务,面向单个开发人员或小团队。visual studio 2019 旗舰版 官方正式版授权:免费版,软件大小:7.
目录 一、创建项目1.新建项目2.构建基础页面3.构建tabBar 二、构建首页-轮播图1.使用轮播组件2.禁用原生导航栏达到页面全屏化3.引用组件实现全局变量 三、构建首页-热门电影3.1 使用scoll-view组件3.2 开发自定义组件3.3 父组件向自定义组件传递值3.4 完成评分自定义组件 构建首页-热门预告构建首页-猜你喜欢1. 编写flex布局2. 实现点赞动画效果3.还原动画4.动态渲染列表5. 实现动画数组(修复多个电影同时点赞问题)下拉刷新 构建搜索页面静态搜索页面及搜索框固定在顶部动态获取电影列表分页查询 页面路由api与传参 一、创建项目 开发工具:HBuilderX
Vue版本:Vue3
1.新建项目 2.构建基础页面 1.在pages目录下创建search、me页面
3.构建tabBar tabBar主要在page.json里配置
"tabBar": { "color": "#bfbfbf", "selectedColor": "#515151", "backgroundColor": "#ffffff", "borderStyle": "black", "list": [ { "pagePath": "pages/index/index", "text": "首页", "iconPath": "static/tabBarIco/index.png", "selectedIconPath": "static/tabBarIco/index_sel.png" }, { "pagePath": "pages/search/search", "text": "搜索", "iconPath": "static/tabBarIco/search.png", "selectedIconPath": "static/tabBarIco/search_sel.png" }, { "pagePath": "pages/me/me", "text": "我的", "iconPath": "static/tabBarIco/me.png", "selectedIconPath": "static/tabBarIco/me_sel.png" } ] } 二、构建首页-轮播图 在App.vue里配置首页公共样式
<style> /*每个页面公共css */ .
你也可以上程序咖(https://meta.chengxuka.com),打开大学幕题板块,不但有答案,讲解,还可以在线答题。
一、选择题
1.在 C 语言程序中,若对函数类型未加显式说明,则函数的隐含类型为( )。
A. void
B. double
C. char
D. int
答:D
解析:在不返回结果的函数定义中,void 不能省略;否则,函数类型被默认定义为 int 。
2.以下正确的说法是( )。
A.实参与其对应的形参共同占用一个存储单元
B.实参与其对应的形参各占用独立的存储单元
C.只有当实参与其对应的形参同名时才占用一个共同的存储单元
D.形参是虚拟的,不占用内存单元
答:B
解析:按照 C 语言的规定,在参数传递过程中,将实参的值复制给形参。所以他们各自占用独立的存储单元。
3.以下不正确的说法是( )。
A.实参可以是常量、变量或表达式
B.实参可以是任何类型
C.形参可以是常量、变量或表达式
D.形参应与对应的实参类型一致
答:C
解析:实参和形参一一对应,数量应相同,顺序应一致。实参可以是常量、变量或表达式。
4.在函数调用 Fume(exp1, exp2+exp3, exp4*exp5) 中,实参的数量是( )。
A.3
B.4
C.5
D.语法错误
答:A
解析:参数使用逗号分割,所以题目中是3个参数。
5.下列程序的输出结果是( )。
fun(int a, int b, int c) { c = a * b; } int main(void) { int c; fun(2, 3, c); printf("
2022.11.29日补充:
可能是C#版本的问题,从1.25.2回退至1.25.0后,进行之前写的操作就好了。
安装旧版本方法
-----------------------------------------------------------------------------------------------------------------
某天在unity使用过程中 代码提示出现问题。
个人的解决方式为删除所有csproj文件与sln。重启项目
问题解决
1.首先安装HBuilderX(HBuilderX-高效极客技巧)
2.下载微信开发者工具(微信开发者工具下载地址与更新日志 | 微信开放文档)
安装默认路径, 安装完成之后打开微信开发者工具之后以下操作
设置---->安全设置---->打开服务口端号
打开HBuilderX打开工具--->设置---->运行配置--->微信开发者工具路径进行配置(配置到微信web开发者工具即可)
在HBuilderX的本项目目录中打开manifest.json文件---->微信小程序配置---->配置AppId
在HBuilderX中---->运行---->运行小程序模拟器----->微信开发者工具
完成.
如果没有成功则检查自己的微信开发者工具设置--->安全设置--->是否打开了端口号
再次检查 HBuilderX中manifest.json微信小程序配置是否填写AppId
如果都没有问题检查 工具--->插件安装是否存在uni-app(编译), 没有存在则去插件市场安装
【本文内容是我应届找实习的时候整理的(2020年),如果有部分内容落后或不正确的欢迎指正~同时也更新了社招篇面经,欢迎光临👉 前端面试题型汇总(适合社招两-三年水平)】
目录
HTML
HTML语义化
的作用
SEO中的TDK
HTML5中新增标签
块级元素和内联元素
img中的alt和title的区别
title与h1的区别、b与strong的区别、i与em的区别
元标签
label标签的作用
iframe的缺点
HTML和XHTML的区别
repaint和reflow
为什么div+css的格式替代了table
CSS
css样式初始化
块级元素和内联元素样式区别
css的盒模型
伪类和伪元素
position各属性区别
display各属性区别
float浮动对元素的影响
display:none和visibility:hidden的区别
display,float,position的相互影响
样式中属性的继承
BFC块级格式化上下文
css hack
css选择器及其权重优先级
清除浮动的几种方法
动画(animation)
transition和animation的区别
媒体查询,@media
水平、垂直居中的几种方式
省略文本的样式
box-sizing属性
双栏布局和三栏布局
css预处理,less和sass
css sprite
z-index属性 scale和zoom区别
flex弹性布局
px,em,rem,vh的区别
单行文字居中,多行文字左对齐 CSS面试题
JavaScript
基本数据类型
undefined和null的区别
判断数据类型的方式(比较typeof与instanceof)
参数的按值传递的理解
执行环境和作用域链
模仿块级作用域
js原型和原型链
作用域链和原型链的区别
js创建对象的方式
js实现继承的方式
对闭包的理解
this指向问题 模拟new实现创建对象
防抖函数
节流函数 DOM操作
DOM0级和DOM2级的事件处理程序
事件冒泡和事件捕获
不同浏览器如何阻止事件冒泡
描述: vue中在路由那里你可能经常遇到[Vue warn]: Error in render: "TypeError: Cannot read properties of undefined (reading 'matched')"的报错,导致页面无法显示的问题。如图:
解决: 出现这种情况,你应该首先查看路由的引入是否正确!!在vue里面使用路由有一个比较需要注意的地方,就是要使用router来注册,连Router都不行,严格使用router。
import router from './router' //引入的时候可以不设置router,注册使用的时候必须是router
前言 LeNet是Yann LeCun于1988年提出的用于数字识别的网络结构,可以说LeNet是深度CNN网络的基石,AlexNet、VGG、GoogLeNet、ResNet等都是在VGG基础上加入各类激活函数或加深网络演变而来的,所以理解LeNet对于现在主流CNN深度学习架构的理解有很大帮助。
关于LeNet详细的介绍可以阅读,《Gradient-Based Learning Applied to Document Recognition》,对LeNet的架构做了详细的介绍,并对LeNet与其他算法做了详细的对比。并且这是第一篇通过反向传播成功训练卷积神经网络的研究。
一,介绍 LeNet主要的出现契机是手写数字的识别,并在邮政和银行发挥了非常重要的角色。但是,这个网络在当时流行度没那么高,但是知名度最高的还是MNIST数据集。
所有的都是黑白图。
对于LeNet,总体来看,LeNet(LeNet-5)由两个部分组成:
卷积编码层:由两个卷积层组成全连接密集块:由是哪个全连接层组成 架构图如下图所示:
输入的是28 * 28的单通道图片 得到6输出通道的28 * 28的feature map, 通过池化层,得到 6通道 14 * 14的特征图,最后通过卷积操作得到16 输出通道的特征图,在通过池化得到16通道的5 * 5特征图,最后使用三个全连接层,拉成10通道输出,得到0 ~ 9的数字识别结果。
还有一些超参数:
到c1 是: kernel_size = 5,padding = 2.到s2 是:kernel_size = 5,stride = 2到c3 是:kernel_size = 5到s4 是: kernel_size = 2,stride = 2 卷积块中的基本单元是一个卷积层、一个sigmoid激活函数和平均汇聚层,虽然ReLU和最大汇聚层更有效,但它们在20世纪90年代还没有出现。每个卷积层使用卷积核和一个sigmoid激活函数去代替。
对于LeNet是早期成功的神经网络,先使用卷积层来学习图片的空间信息,然后使用全连接层来转换到别的空间。
这个思想,影响了早期神经网络的训练模式,现在几乎不这样。
二,代码实现 按照卷积的计算公式和上面的超参数,通过卷积的输出计算公式搭建网络:
2.1 搭建网络 导入所需要的包
import torch from torch import nn import torchvision from torchvision import transforms from torch.
最近一直在找工作,有天就遇到一个要求使用auto.js写一些自动化控件的公司(我严重怀疑它其实就想白嫖。。。),于是就有了这个小demo...
因为没用过抖音,也不懂auto.js,所以看了一些教学视频,所以写成这个样子了。。。(有点烂,就单纯记录一下自己的学习过程,auto.js版本是4.1的)
// 回到首页 home(); sleep(2000); // 打开抖音 app.launchApp("抖音"); sleep(5000); // 获取屏幕分辨率 let screenHeight = device.height; let screenWidth = device.width; while (true) { // 点赞 click(screenWidth / 2, screenHeight / 2); sleep(100); click(screenWidth / 2, screenHeight / 2); // 关注 let gzId = id("com.ss.android.ugc.aweme:id/f03"); if (gzId) { let gzView = gzId.findOnce(); if (gzView) { let position = gzView.bounds(); click(position.centerX(), position.centerY()); sleep(1000); } } sleep(2000); // 短视频的滑动 swipe( screenWidth / 2, (screenHeight / 3) * 2, screenWidth / 2, screenHeight / 4, 500 ); sleep(2000); // let user_avatar = id("
源代码:
C:\迅雷下载\2021072816023491335\59e95a4689eeb92f380f4ab2\202107\29976aaa-ef7a-11eb-aba5-00163e0a088c
PPT:
C:\迅雷下载\2021072816023491335\59e95a4689eeb92f380f4ab2\202009\942a5ce8-fe34-11ea-a6a1-00163e0396a1
参考文献:
C:\迅雷下载\2021072816023491335\59e95a4689eeb92f380f4ab2\202009\c53b3bcc-fe34-11ea-97a4-00163e0a088c
2.5 算法的特性 输入输出有穷性确定性可行性 2.6 算法设计的要求 正确性可读性健壮性时间效率高和存储量低 2.9 推导大 O 阶方法
1)用常数 1 取代运行时间中的所有加法常数。
即,不论算法函数运行多少次,只要是通过加法得到的,就改为 1。
2)在修改后的运行次数函数中,只保留最高阶项
3)如果最高阶项存在且其系数不是 1,则去除与这个项相乘的系数。
得到的结果就是大 O 阶。
2.9.5 对数阶 2 x Count >= n 退出循环
由 2Count = n 得到 x = log2n,时间复杂度是 O(logn)
2.10 常见的时间复杂度 常数阶
12
O(1)
线性阶
2n + 3
O(n)
平方阶
3n2 + 2n + 1
O(n2)
对数阶
5log2n + 20
O(logn)
nlogn阶
2n + 3nlog2n + 19
1.引言
是对整个软件需求规格说明的概览,以帮助读者更好地阅读和理解文档。包括文档的意图(日的)、主要内容(范围)组织方式(文档组织)、参考文献(参考文献)和阅读时的注意平项(定义、首字母缩写和缩略语)。
1.1目的
说明软件需求规格说明的主要目标描述软件规格说明所定义的产品或某些产品部分。限定预期的读者。
1.2范围
(1)根据名称确定将被开发的软件产品。
(2)解释软件产品的预期功能,并在必要的时候解释没有纳入软件产品预期的功能。
描述软件产品的应用,包括相关的好处、目标和目的。 (4)如果在此软件需求规格说明之外,还存在着一个更高层次的规格说明(如系统需求规格说明),那么该部分的描述应该与更高层次文档的相关段落保持一致。
1.3定义、首字母缩写和缩略语
定义了正确理解软件需求规格说明所必需的术语、首字母缩写和缩略语。
这部分内容也可以通过添加附录或引用其他文档来提供。
1.4参考文献
(1)提供需求规格说明文档在别处引用的全部文档的清单列表。
(2)利用标题、报告编号(如果适用的话)、日期和出版机构来标识文档。
(3)指定可以获得参考文献的来源。
这部分内容也可以通过添加附录或者引用其他文档来提供。
1.5文档组织
(1)描述软件需求规格说明余下部分所包含的内容。
(2)解释软件需求规格说明的组织方式。
2.总体描述
从总体上描述影响产品和需求的因素。这部分并不涉及那些将在文档第3部分(详细需求描述)中描述的具体需求,而是为其提供背景知识,使其更加易于理解。
2.1产品前景
该节将所定义的产品和其他相关的产品联系起来,在联系中描述产品的起源和背景,进而说明对产品的总体预期。
如果产品是一个独立的、完全自包含的系统,那么就应该在这里进行声明。
如果像常见的情况那样,产品仅仅:是较大系统的一个组件,那么就应该将较大系统的需求和软件的功能联系起来进行说明,并标识,只它们之间的接口。如果能够开发一个能够显示较大系统的主要组件、内部连接和外部接口的框图,将会有很大的帮助。
这一节还应该描述较大系统的其他部分对软件产品的操作预期。这些部分包括:系统接口。系统接口对软件产品的功能要求。
●用户界面。 软件户品和用户之间接口的逻镇特征和优化要求。
●硬件接口。软件产品和较大系统申硬件组件之间接口的理辑特征。
●软件接口。其他软件系统对软产品的要求。
●交流接口。本地网络协议之类的交流接口要求。
●内存。软件产品在主存储器和辅助存储器上的局限性和可适用特性。
●操作。用户要求的正常和特殊操作。
●地点改变需求。对指定地点、任务或者操作模式的需求,调整软件装置而需要改变的地点或者任务的相关特征。
2.2产品功能
概述软件将要执行的主要功能。此处只需要概略地总结,其详细内容将在第3部分(详细需求描述)中描述。例如,一个账目管理程序的软件需求规格说明会在本节中描述顾客账目维护、顾客描述和发票处理等功能,但不会提及上述功能的大量细节。如果存在为软件产品分配功能的更高一层的规格说明,那么这个部分的功能概述应该直接从更高层次规格说明的相关部分提取。
为了清晰起见:功能的组织应该能够让第一次看到文档的顾客或者其他人理解功能列表;可以使用文本或者图形化的方法显示不同功能及其联系。
2.3用户特征
描述产品预期用户的一般特征,包括受教育水平经验和技术能力等。这些描述信息可以用来解释第3部分(详细需求描述)中特定需求出现的原因,但是本节并不涉及这些特定的需求。
2.4约束
对限制开发人员开发方案选择的项目进行一般性描述。这些项目包括:
●规章政策
●硬件限制
●和其他应用的接口
●并发操作
●审计功能
●控制功能
●高阶语言要求(即程序开发语言)
●信号握手协议(即信息交流的可靠性要求)
●应用的临界状态
●安全性考虑
2.5 假设和依赖
列举并描述了那些会对文档中所述需求产生影响的因素。这些因素并不是软件的设计限制,但是这些因素的任何变化都会影响到文档中的需求。例如,有这样一个假设:软件产品的目标硬件上会有某个特定的操作系统。而在实际情况当中,这样的情况并不存在,那么文档中的需求将不得不进行相应的改变。
3.详细需求描述
这通常是软件需求规格说明中最大和最重要的部分。它要对所有的软件需求进行充分的描述。信息的内容应该包括设计人员进行设计时所需要的所有细节,足以让设计人员设计出一个满足需求的系统。信息的内容还需要清楚地告诉测试人员需要怎么样的测试才能保证得到一个满足需求的系统。
在这一部分:
●细节需求的描述要符合优秀需求的特性要求,文档的组织和内容整合要符合优秀软件需求规格说明文档的特性要求。
●细节需求要能够回溯到相关的前期文档,形成前后参照。
●所有的需 求都要被唯一标识。
●需求的组织应该尽可能提高可读性。
该部分内容的最佳组织方式要依赖于软件产品的应用领域和特性。[ IEEE830-1998 ]为该部分的文档组织提供了8中不同的模板方式,图15-5仅为其中之一。图15-5是按照系统特性来进行需求组织的,除此之外也可以按照操作模式、类/对象、刺激/响应、功能分解、用户类别等方式进行组织。关于其他几种组织方式请参见附录1。
[IEEE830-1998]将需求分成了5类,并据此进行内容的组织。这5种内容是:功能需求、性能需求、约束、质量属性和对外接口。第2章已经详细解释了5种类型需求的区别,本章将仅仅对文档内容的组织进行介绍。
3.1对外接口需求
描述了设计人员正确开发与软件外部实体的接口所需要的所有信息。
官方给出的images.txt如下图:
# Image list with two lines of data per image: # 每张图像数据占两行 # IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME # 图像ID, QW, QX, QY, QZ, TX, TY, TZ, 相机ID, NAME # POINTS2D[] as (X, Y, POINT3D_ID) # 2D点坐标和对应3D点ID, 若没有对应的3D点则ID标记为-1 # Number of images: 2, mean observations per image: 2 1 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180141.JPG 2362.39 248.498 58396 1784.7 268.254 59027 1784.
默认情况下,COLMAP使用二进制文件格式(bin,机器可读,速度速)来存储稀疏模型。此外,COLMAP也可以将稀疏模型存储为文本文件(txt,人类可读,速度慢)。在这两种情况下,模型导出的信息被分为关于相机、图像和点云的三个文件。任何包含这三个文件的目录都构成了一个稀疏模型。二进制文件的扩展名是.bin,文本文件的扩展名是.txt。注意,当从包含二进制文件和文本文件的目录加载模型时,COLMAP更倾向于二进制格式。
参考网页:https://colmap.github.io/format.html
导出bin文件 要在GUI(可视化界面)中导出当前的模型,选择File > Export model,要导出当前数据集中的所有重建模型,选择File > Export all models,为bin文件。要想导入已经导出的模型,例如,为了可视化或恢复重建,选择File > Import model,并选择包含相机、图像和点云文件的文件夹。
此外,还可以将稀疏模型导出为其他格式,例如VisualSfM的NVM、Bundler文件、PLY、VRML等,使用File > Export model as....
导出txt文件 要在GUI导出文本格式,使用File > Export model as text导出模型。三个文本文件:camera .txt、images.txt和points3D.txt。注释以前导“#”字符开始。第一行注释简要描述了文本文件的格式。
cameras.txt 这个文件包含了数据集中所有重建相机的内参,每个相机占一行,例如:
# Camera list with one line of data per camera: # 一行一个相机参数列表 # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[] # 相机ID, 相机, 宽, 高, 参数[] # Number of cameras: 3 1 SIMPLE_PINHOLE 3072 2304 2559.81 1536 1152 2 PINHOLE 3072 2304 2560.
“中国自己的编程语言究竟在哪里?”关心IT生态的我们,经常深思与担忧。
语言是文化精髓所在,一方水土养一方人,不管是中文,还是英语,作为交流工具,语言烙印着不同地方的生活场景,一方水土养一方人。
中西方语言文化差异巨大,编程语言作为语言的延伸,影响着成千上万的中国程序员,体现在编程方式与思维习惯上。
中文编程,夹缝中求生存 诚然Java、C等英文编程语言确实优秀,使用便捷,流行全球,然而一些程序员奉英文编程为“尊”,未了解中文编程情况下,便对它嗤之以鼻,认为中文编程只是儿童编程,是玩具。
饱受争议的中文编程,恰逢传来华为自研“仓颉”编程语言的消息,不少人猜测“仓颉”将是中文编程。随着源代码披露,确定了“仓颉”并非中文编程。
中文编程再次陷入沉寂,苹果有Swift语言、微软有TypeScript自研语言,谷歌也有Dart语言......我们就没有属于自己的编程语言吗?
事实上中文编程发展由来已久,自2000年易语言出现,发展至今已超20年,符合国人思维的计算机编程语言不断优化,相关企业蓬勃发展,虽然小众却势如破竹。
中文编程,颠覆认知 如近年发展火热的云表无代码中文编程工具,由前WPS研发团队成员,耗时3年搭建而成,继承了WPS操作简单、可视化等优点。
云表无代码平台首创“表格式编程技术”,组织架构、审批流程、消息推送、权限管理等系统搭建要素,通过它简单的拖拉拽即可实现,纯中文操作界面,无需编写一行代码,真实实现“0”代码编程。
相比于Java、C等英文编程语言,中文编程更能符合国人操作习惯,毕竟Java、C等以英文为内核,中文编程以汉语为内核,开发门槛将大幅度降低,不懂IT技术的小白,只需懂业务流程,即可使用中文编程自行搭建所需的管理系统,软件生态也将百花齐放。
部分程序员认为中文编程只能处理简单数据,其实不然,云表无代码平台内置的简易流程与BMP工作流,让轻量级应用随需搭建,多样的OpenAPI接口,无阻碍对接钉钉、企业微信、金蝶等第三方应用,实现ERP、MES、PLM、进销存、财务管理系统等大型工业级系统搭建。
小结 跪得太久,就站不起来了。
科技领域,不应是西方的一言堂,汉语文化博大精深,中文编程发展历经风雨,缺的不是技术,而是契机与大众理解。
文章目录 一种通过物理分离实现WSUS伸缩性的方案背景WSUS 工作基本原理WSUS 数据分类WSUS 数据存储特点 WSUS 基本部署方案[1](#refer-anchor-1)简单 WSUS 部署多台 WSUS 层次部署隔离网环境 WSUS 伸缩性方案基本部署方案的限制物理分离实现伸缩网络拓扑 进一步拓展引入 CDN引入 应用服务器集群 思考参考 一种通过物理分离实现WSUS伸缩性的方案 作者在《哎,这是个 Windows 的bug》中复现了 Windows 21H2 版本中的下载服务存在bug。当时构造了一种验证场景:利用CDN缓解更新服务端流量压力。当时没有细说,这里把服务端的部署方案做一个描述,即如何实现WSUS伸缩性的方案。
背景 Windows 系列操作系统在 Windows 7 之后就开始使用一种全新的更新升级系统,用于给操作系统"打补丁"、“修漏洞"以及"更新功能”。个人用户无需关心"更新"的问题,联网的计算机会自动连接到微软的更新服务器获取更新。还有一类用户是企业组织用户,这些用户的计算机需要被管理:哪些更新需要安装、什么时候安装。所以微软推出了服务于企业组织的更新服务,Windows Server Update Services (WSUS)就是其中之一。
企业部署WSUS服务器之后,企业内部用户的计算机配置更新服务器地址为WSUS地址。管理员通过选择语言、产品、分类来对同步进行限制;通过审批、拒绝对更新包是否被应用进行设置。这样,企业内所有计算机的更新周期、频率就由企业自己来决定了。同时,企业部署 WSUS 能够很大程度上减小企业的流量消耗。
WSUS 工作基本原理 WSUS通过同步或导入的方式,将微软的 Windows 更新包作为更新数据来源为用户提供服务。客户计算机连接到WSUS服务器后,二者进行一系列报文交互,最终WSUS服务器会告知适用于该客户计算机的更新包描述信息,其中包括接下来需要下载的更新包文件url。客户计算机下载完成后,进行后续的安装过程。
WSUS 数据分类 WSUS 的数据源是 Windows 更新包,更新由两部分组成:描述更新的元数据(metadata),以及安装更新所需的文件。
metadata的主要功能是说明该更新包的适用条件以及安装该更新包后系统的状态。更新包适用条件包括:在什么平台上安装(如x64、x86、arm等),要求客户计算机的系统组件版本(如服务堆栈要大于某个版本、.net framework是某个版本等),某些配置满足要求(如注册表某键值存在、键值大小为多少等)和其他非常细致的检查条件。更新包安装后的检查条件包括:组件更新后的版本、新添加的文件、修改后的注册表键值等等。
安装更新所需的文件即更新的内容文件,主要包括一系列二进制文件、二进制文件片段和一些配置文件,这些文件是要被应用到用户计算机中的内容。
更新元数据的规模通常比更新内容文件要小很多:单个更新包的metadata数据从几十KB到几十MB,而更新内容文件最大超过1GB。
WSUS 存储数据分为两部分:一个是存储 WSUS 配置和更新元数据的数据库,另一个是存储更新文件的可选本地文件系统。 这里的"可选"是指通过配置可以指定更新文件存储在本地 WSUS 服务器上或 Microsoft 更新服务器上。
WSUS 数据存储特点 将更新同步到 WSUS 服务器时,元数据和更新文件存储在两个不同的位置。 元数据存储在 WSUS 数据库中。 更新文件可以存储在 WSUS 服务器上或 Microsoft 更新服务器上(具体取决于同步选项的配置方式)。 如果选择将更新文件存储在 WSUS 服务器上,则客户端计算机会从本地 WSUS 服务器下载批准的更新。 如果不选择这样做,客户端计算机将直接从 Microsoft 更新服务器下载批准的更新。
配置信息泄漏 漏洞原理及危害 应用系统由于配置不当,没有考虑相关的安全隐患,造成相关的配置文件泄露,泄露相关的配置。
攻击者通过配置信息泄露获取敏感数据,为进一步攻击创造条件,设置通过泄露的配置直接控制数据库或网站。
测试方法 1. 通过工具爬虫或扫描得到配置文件的路径,从而找到配置数据。
如tomcat的配置文件泄漏问题,使用目录扫描工具如Dirsearch等工具对目标网站进行扫描。
发现系统的配置文件信息泄漏。
2. 对网页源代码的查看,找到相关的配置信息或是配置文件路径。
在目标主页中点击右键,查看网页源代码,搜索config字段或在源码中逐行查找,分析是否存在系统的配置信息或配置文件路径信息。
修复建议 1、对配置文件目录做好访问控制。列举两个常用中间件的例子,具体参考相关中间件的加固版本。
tomcat限制目标权限
参考配置操作
(1) 编辑tomcat/conf/web.xml配置文件,
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
把true改成false
(2)重新启动tomcat服务
Apache禁止相关目录访问
参考配置操作
编辑httpd.conf配置文件,
<Directory />
Order Deny,Allow
Deny from all
</Directory>
2、补充操作说明
设置可访问目录,
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>
其中/web为网站根目录。
1.顺序表 插入操作时间复杂度
最好O(1),最坏O(n),平均O(n)
移动结点的平均次数n/2
删除操作时间复杂度
最好O(1),最坏O(n),平均O(n)
移动结点的平均次数(n-1)/2
按值查找时间复杂度
最好O(1),最坏O(n),平均O(n)
移动结点的平均次数(n+1)/2
2.单链表 头插法O(n)尾插法O(n)按序查找O(n)按值查找O(n)插入 删除
其中插入和删除操作,指定结点O(1),需要从头查找则花费主要用于查找O(n) 3.二叉树 二叉树的遍历
时间复杂度O(n),空间复杂度O(n)
二叉排序树
插入/删除O(n)
4.图 邻接矩阵存储空间
O(n^2)
邻接表存储空间
无向图O(|V|+2|E|),有向图O(|V|+|E|)
十字链表和邻接多重表存储空间
O(|V|+|E|)
广度优先搜索
时间复杂度:邻接表O(|V|+|E|),邻接矩阵O(|V|^2)
空间复杂度:O(n)
深度优先搜索
时间复杂度:邻接表O(|V|+|E|),邻接矩阵O(|V|^2)
空间复杂度:O(n)
求最小生成树时间复杂度
Prim算法:O(|V|^2)
Kruskal算法:O(|E|log|E|)
求最短路径时间复杂度
Dijkstra算法:O(|V|^2)
Floyd算法:O(|V|^3)
拓扑排序时间复杂度
O(|V|+|E|)
5. 排序 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
内排序:所有排序操作都在内存中完成;
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
时间复杂度: 一个算法执行所耗费的时间。
空间复杂度:运行完一个程序所需内存的大小。
n: 数据规模
k: “桶”的个数
In-place: 占用常数内存,不占用额外内存
Out-place: 占用额外内存
冒泡排序 public static int[] bubbleSort(int[] array) { if (array.length == 0) return array; for (int i = 0; i < array.