汇报要尽量早做PPT,不要拖延到组会前天通宵去做,因为这样难以避免错漏和偏差的出现。多检查几遍,会发现很多错误。 学术PPT不需要花里胡哨的模版和各种弹入弹出,简单朴实就行。 尽量图多文字少,避免文字充斥版面,特别是忌讳大段文字往PPT上粘。文字过多会导致看起来累,并且吸引观/听众把注意力到文字上,而忽略汇报人的讲述。这样一来,汇报的作用将会被质疑。 每张PPT的下方都应该有汇报题目+页码。因为大家听着听着就容易忘了你的汇报主题,又不好意思打断你的汇报,而页码则是好做提问的定位。 分享/讲述他人的文献一定记得标上作者和论文来源(给听众选择的机会——顶级期刊或有意思的论文才有人会想听)。 组会上做国际/英文文献分享时,不要出现中文(除首页),一方面是原词更能达意,听众能各自领会,自己的翻译可能不那么准确;另一方面,全英文的PPT会更协调一点(口述可以用中文)。 尽量不要有语法错误,找个英语好的同学帮忙 Check一下。
高效云服务器
云服务器(Elastic Compute Service, ECS)是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。
云服务器帮助您快速构建更稳定、安全的应用,降低开发运维的难度和整体IT成本,使您能够更专注于核心业务的创新。
云服务器是云计算服务的重要组成部分,是面向各类互联网用户提供综合业务能力的服务平台。平台整合了传统意义上的互联网应用三大核心要素:计算、存储、网络,面向用户提供公用化的互联网基础设施服务。
本文主要文献参考链接 https://mp.weixin.qq.com/s/kf7q-YjHJmakLpBCcK7E4w https://baike.baidu.com/item/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/6392664?fr=aladdin 云服务器服务包括两个核心产品:
面向中小企业用户与高端用户的云服务器租用服务; 面向大中型互联网用户的弹性计算平台服务。 云服务器平台的每个集群节点被部署在互联网的骨干数据中心,可独立提供计算、存储、在线备份、托管、带宽等互联网基础设施服务。
集群节点由以下硬件构成:
云服务器
管理服务器:采取双机热备的方式,对整个节点的所有计算服务器、共享存储、网络进行管理,同时对外提供管理整个节点的API。
管理服务器上提供:
管理服务(管理节点的计算服务器,对外提供管理接口)、DHCP服务(为计算服务器的网络启动分配管理网段的IP)、tftp 服务(为计算服务器的网络启动提供远程启动映象)、nbd 服务(为计算服务器提供网络块设备服务)。管理服务器上还会运行一个数据采集程序,他定时将各种性能数据采集下来并发送到中央的数据采集服务器上存储服务器群:存储服务器可以是ISCSI或内置存储容量比较大的x86服务器,通过 集群文件系统组成一个统一的存储池,为节点内的虚拟机提供逻辑磁盘存储、非结构数据存储以及整合备份服务。
计算服务器群:计算服务器是高配置的八核以上服务器,计算服务器无需安装操作系统,但必须具备网络引导功能,其上运行一个Linux微内核、云计算机软件、一个与管理服务器进行通讯的Agent
交换机:按不同功能和节点性能要求配备多个三层交换机,分别负责管理网段、公网交换网段、内部交换网段、存储网段等。
云计算服务器(又称云服务器或云主机)主要面向中小企业用户与高端用户提供基于互联网的基础设施服务,这一用户群体庞大,且对互联网主机应用的需求日益增加。该用户群体具备如下特征:业务以主机租用与虚拟专用服务器为主,部分采用托管服务,且规模较大;注重短期投资回报率,对产品的性价比要求较高;个性化需求强,倾向于全价值链、傻瓜型产品 。用户在采用传统的服务器时,由于成本、运营商选择等诸多因素,不得不面对各种棘手的问题,而弹性的云计算服务器的推出,则有效的解决了这一问题。
红海里的「云计算」颠覆者:百亿订单流失背后的云「算计」
旧势力断臂,颠覆者登场,一道中国云市场未来十年的最大谜题,已经摆上了台面。
2022年的一个夜晚,袁哲彻夜未眠。有两个选择摆在面前:火山引擎、拼多多。
作为一个在阿里云和腾讯云见过世面的老兵,如果放在以前,非常清楚字节和拼多多在人才市场的竞争力:除了“没有谁和钱过不去”外,似乎很难再找到一个能说服加入的理由。
但今时不同往日了。
在左右摇摆期间,那时的上海滩依然人潮汹涌、车水马龙。金虹桥国际中心的大楼上,一个对云计算行业产生重要影响的项目也在进行中:拼多多陆续把部分云服务,从腾讯云迁移至其他云上。
为了这一步,已筹谋良久。
这一波的迁移,一个成熟企业在多云大势下,不把鸡蛋放一个篮子里的抉择,也是实现全面自建云的一个过渡。
几十亿的天价订单,在头号玩家们的手上兜兜转转一圈,最终将回到服务器里:既能实现缓冲式过渡,又与一众云巨头们建立起了友好关系,聪明且高明。
同样,抖音也在与阿里云正式分手,走上了自建云之路。
两张合计百亿的订单,辗转数年,如今逐渐回流,让一部分人拨开了笼罩在2022年云计算头顶上的乌云,看见几束光明。
这两个选择,或许是袁哲云计算生涯的转折点,也是中国云计算行业进入下半场的缩影。
1
走进迷途的旧势力,热血冷却的云计算老将
袁哲成为自由身不久后,腾讯云和阿里云都迎来了各自创立史上的最大调整。
今年春天,在更改转售规定之后,腾讯CSIG裁员的消息不绝于耳,不少人员规模较大的部门都开始领取减员指标。
与此同时,CSIG大幅提高自研产品的销售比例,部分销售员工平均要背900万的净利润KPI。
变动之前,腾讯CSIG就已突破2万人大关,在一段时间里,成为腾讯人数第一大的事业群,这时不过成立才三年。
他的另一个老东家,阿里云,同样处在人事变动的巨大震荡当中。
前华为EBG中国区总裁蔡英华空降之后,阿里云至少有两位P11级核心业务高管、数名P9/P10中高层骨干先后离开,多名中高层领导正在空降的路上。目前主要部门的headcount也均已锁死。
与腾讯情况类似,阿里云也多次在高管会议上强调提高自研产品销售比例,同时对代理商体系提出更为苛刻的要求,逐渐放弃那些只具备转售能力的代理商,转而招募具有咨询、研发能力的代理企业。
在面对老东家们空前内卷的处境,和火山、拼多多这两股新兴力量时,袁哲最大的疑惑是:还继续留在一线大厂做云吗?
留下来,中国云市场top 3的光环仍然在。但巨头发展至此,前行的身躯臃肿,步履缓慢,急剧扩张后无尽的内部冲突和管理问题,仍历历在目。
袁哲亲历过,部门内不少员工多是从To C产品线调用,但对要应付的工作内容,以前从未见过,更无法理解。
“怎么让这些专家们形成B端的服务意识和服务能力,以及如何考核服务质量,这对互联网公司来说真的很难。业务流程、工作习惯、思维意识,全部都得转变。”
除了从C端部门借调的公司“原住民”,云部门还有老牌IT软件厂商的销售和方案交付专家,以及从政府、银行等传统机构加盟而来的甲方人。
三方的行事风格、话语体系、价值观、产品理念,各不相同,甚至有些对立。达成共识和文化统一的过程漫长,中间产生冲突几乎不可避免。
有什么可以抵消这种内耗带来的负面影响?曾经最吸引袁哲这群人、充满干劲留在云部门的一点,是云独立分拆上市的可能性。
许多级别更高、资历更深的行业人,愿意留在BATJ的云部门开疆拓土,原因也多半如此。这是错过移动互联网造富潮之后,一次难得的实现财务自由的机会。
这自然是一剂强心针,但事实上,云部门的独立上市已经陷入了无解的死循环,变成吊在驴眼前那根永远吃不到的胡萝卜。
上市本身是合理的诉求,缓解资金压力、激励团队上进,但独立分拆上市过程中,随着各路资本和势力的注入,互联网大厂的部分核心业务数据如果放在分了家的云上,怎么保证此时的数据安全不受外来因素影响?
这是在与众多互联网高管交谈过程中,一个共同的心魔:企业创始人们对数据的极度不安全感,多是对云部门失去控制后的忧虑。
数据不止是资产,更是权力。
不选择上市,也同样合理。云部门可以继续用科技的故事,为母公司的估值加持。但母公司能持续输血“养”云吗?
一线骨干和老员工曾放弃To C部门养尊处优的日子,在苦逼的ToB地头上长年累月摸爬滚打,热血能持续吗?
前京东云总裁申元庆曾向刘强东直言,做云要先做好亏损100亿的准备——可是又有几家能够心甘情愿烧上这一百亿?
同样,如果没有独立上市带来的巨额期权套现机会,创始成员们注定无法在这个周期漫长的新赛道上永远热血永远热泪盈眶,一旦进入事业麻痹期,执行效率必定大打折扣。
ARM中断的介绍 ARM中断 不同的处理器对中断的处理流程大体相同,但是具体的实现细节会差别。
ARM异常源 ARM中断也是异常的一种,ARM处理器有以下几种异常源:
FIQ IRQ Reset Software Interrupt Data Abort Prefetch Abort Undefined Instruction 中断虽然是异常,但不完全是错误,异常也不是,而是为了完成某些功能的东西,只有Undefined Instruction异常是真正的系统错误。
这些在ARM异常机制也介绍过,这里主要介绍的是IRQ。
ARM中断执行过程 在ARM处理器中,CPU收到一个中断时,以IRQ为例,大概会执行以下过程:
修改状态寄存器CPSR从User模式切换到到IRQ模式; 把中断IRQ禁止位打开,防止再次接收IRQ中断信号(FIQ不禁止,FIQ中断信号可以打断IRQ中断程序); 跳转到中断向量表IRQ的指令,该指令如果写了中断执行函数,再跳转到该代码段; 执行完之后再跳转回正常程序。 ARM中断产生的问题 在ARM处理器中,有上百个中断源,可能同时产生多个中断信号,会产生问题。
比如:
同样是产生IRQ的中断源有很多个,但是中断向量表的IRQ只有一条跳转指令,那么处理器不知道是谁产生的中断信号,该执行什么中断处理程序; 在处理器正在执行中断程序的时候,CPSR打开了IRQ禁止位,那么其它中断就会被忽略; Exynos4412芯片集成了4个同样的ARM cortex A9处理器,产生的中断应该让哪个处理器处理。 在复杂封装的ARM处理器芯片中还会产生一系列问题,这时候就需要一个中断控制器GIC,去统一管理外部产生的中断信号。
Exynos4412下的中断控制器GIC 中断控制器做了至少四件事:
接收外部设备产生的中断信号; 多个中断同时产生时,对中断信号挂起,并按照优先级依次发给CPU; 为每个中断选择一个CPU进行处理; CPU处理中断程序时,可以查询中断控制器获取中断信号是由哪个硬件产生的。 这样就解决了前面提到的几个问题,除此之外中断控制器还做了一系列管理中断的事情。
中断实验 中断实验分析 Exynos4412这种SOC要比单片机功能强大很多,相关的寄存器配置也及其复杂,SOC一般会安装一个操作系统,这些事情一般都由操作系统内核去调度。
这里裸机实验就一切从简,只实现基本的中断功能,对于设置中断类型、优先级和选择处理器等不做配置。
原理图: 外围电路原理图:按键Key2连接的引脚是UART_RING。
核心板原理图:所连接的是GPX1_1引脚,同时它是外部中断9的中断源:XEINT9。
中断相关寄存器的配置 Exynos4412中断机制比较复杂,有160个中断,分为三种中断类型:
我们使用的是SPI,提供的SPI类型中断有128个(0-127)。
1. 首先是中断源的配置,即引脚相关寄存器:
GPX1CON GPIO配置寄存器,GPX1CON[1]设为中断功能,0xF。
前面提到我们使用的是外部中断9,但是它使用的中断配置寄存器叫EXT_INT41,不知道三星公司为什么这样设计,但是它正好在寄存器列表的GPX相关寄存器下面。
EXT_INT41_CON 中断配置寄存器,EXT_INT41_CON[1]设为下降沿触发,0x2。
1、问题:在处理数组hotGoodsList时出现一个错误,提示不能将类型“any[]”分配给类型“never[]”
data: { hotGoodsForm: { pageNum: 1, pageSize: 10 }, hotGoodsList: [], }, ... app.ajax.post('/api/goods/getHotGoods', this.data.hotGoodsForm).then((res: any) => { if (res.list.length != 0) { this.setData({ hotGoodsList: [...this.data.hotGoodsList, ...res.list], homeLoadStatus: 0 }) } else { this.setData({ homeLoadStatus: 2 }) } }) 2、原因:res已经定义了any类型,但是hotGoodsList的类型还没有定义
3、处理:这里要用到TS的类型断言,通过TS的类型断言强制把hotGoodsList的类型转化为any,就正常不会报错了
TS断言有两种方式
data: { hotGoodsForm: { pageNum: 1, pageSize: 10 }, //第一种是尖括号语法 hotGoodsList: <any>[] }, data: { hotGoodsForm: { pageNum: 1, pageSize: 10 }, //第二种是as语法 hotGoodsList: [] as any },
1. Tensors \(\text{A tensor is a generalized matrix:}\)
\(\text{an element of }\mathbb{R^3} \text{ is a 3-dimension vector, but it's a 1-dimension tensor.}\)
\(\large \text{The 'dimension' of a tensor is the number of indices.}\)
2. PyTorch operation @ \(\text{ corresponds to matrix/vector or matrix/matrix multiplication.}\)
* \(\text{ is component-wise product.}\)
lstsq:\(\text{ least square: }mq = y\)
y = torch.randn(3) y tensor([ 1.3663, -0.5444, -1.7488]) m = torch.randn(3,3) q = torch.linalg.lstsq(m,y).solution m@q tensor([ 1.
之前在《基于树状位压缩数组的字符集合》中介绍了一种利用位压缩数组来减少空间占用和提高集合操作效率的字符集合 CharSet。
实际测试下来,CharSet 的耗时只有 HashSet<char> 的 50%~80%,而集合操作的耗时更是只有 10%。旧文章里最后的测试结论有问题,应该是误使用 Debug 包来做性能测试导致的,最新的测试分别测试了下列五个场景的性能,并调整了测试的循环次数使得 HashSet<char> 耗时接近,便于对比:
单字符操作:包含 70% Add 调用和 30% Remove 调用。 小范围操作:包含 70% Add 调用和 30% Remove 调用,范围长度 1~10) 大范围操作:包含 70% Add 调用和 30% Remove 调用,范围长度 1~100) 查找操作:Contains 调用。 集合操作:UnionWith、ExceptWith,SymmetricExceptWith 和 IntersectWith 调用。 结果如图 1 所示:
图 1 HashSet 对比 CharSet
可以看到,CharSet 的性能优于 HashSet<char>,特别是集合操作,位压缩数据可以批量进行集合操作,大大提高了性能。并且由于 CharSet 的内存消耗基本是固定的,GC 压力也远远小于 HashSet<char>。
但是在实际使用过程中,涉及 Unicode 范围的逻辑很少会对单个字符做操作,更多的是对字符范围做操作,之前在《判断字符宽度》中整理的宽字符范围就是一个很好的例子,这里用到了 45 个字符范围,大部分范围长度小于 10,但最大的一个字符范围达到了 22224 个字符。具体的字符范围统计情况可以参见下图。
图 2 字符范围统计
对于这类大范围字符操作,虽然 CharSet 的效率还是比较高的,但与其他操作仍然处在在同一个水平。
1、需求:小程序的首页需要添加上拉加载和下拉加载的功能,之前做上拉加载和下拉加载是用的是scroll-view组件,但是感觉首页用scroll-view不是最佳选择,page自带的上拉加载和下拉加载更好用一点,就记录一下
2、解决:
上拉加载:
思路:上拉加载的原理是小程序在页面顶部撑出一块50px的空间,在一定时间后消失,所以在顶部的空间加上样式配置监听方法就好了
首先在首页json里面设置enablePullDownRefresh(还有个onReachBottomDistance属性可以设置拖动时加载区域的高度,默认50)
{ ... enablePullDownRefresh: true, ... } 在js里面配置onPullDownRefresh方法监听用户下拉动作
// pages/home/home.ts export { } const app = getApp<IAppOption>() Page({ /** * 页面的初始数据 */ data: { hotGoodsForm: { pageNum: 1, pageSize: 10 }, hotGoodsList: [] as any, homeLoadStatus: 0 }, getHotGoodsInit(): void { this.data.hotGoodsForm.pageNum = 1 this.data.hotGoodsForm.pageSize = 10 app.ajax.post('/api/goods/getHotGoods', this.data.hotGoodsForm).then((res: any) => { //加载完成停止当前页面下拉刷新 wx.stopPullDownRefresh() this.setData({ hotGoodsList: res.list, homeLoadStatus: 0 }) }) }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { this.
https://blog.csdn.net/L_fly_J/article/details/113744917?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-113744917-null-null-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-2-113744917.pc_agg_new_rank&utm_term=%E4%B8%8A%E8%AE%BE%E7%BD%AE%E6%96%B0%E7%9A%84%E6%89%80%E6%9C%89%E8%80%85+%E6%8B%92%E7%BB%9D%E8%AE%BF%E9%97%AE+%E6%97%A0%E6%B3%95%E5%9C%A8&spm=1000.2123.3001.4430
背景:
SANCTUM_STATEFUL_DOMAINS是.env里的一个配置选项,在controller控制器里使用.env('SANCTUM_STATEFUL_DOMAINS')获取,一直都是正常的,突然就报了null 分析:首先,确认了.env里SANCTUM_STATEFUL_DOMAINS的配置正常,且值不为null
有说是因为laravel的production模式导致env函数返回了null,要改成config函数,但是,这个env返回null,是在本地开发环境下,可以排除production的因素,实际上,改为config获取还是一样的null
解决:导致env函数返回null的真正原因是:bootstrap/cache/config.php,这个文件会影响env函数的返回值,解决方法就是,把bootstrap/cache/config.php删掉,此时.env('SANCTUM_STATEFUL_DOMAINS')就可以正常读取.env文件里的内容了。这个使用我们可以再次执行 php artisan config:cache ,这会在bootstrap/cache/下重建一份最新的config.php,这个时候,.env('SANCTUM_STATEFUL_DOMAINS')仍然能正常获取.env文件里的内容。
所以,导致env函数返回null的真正原因是,bootstrap/cache/config.php较旧导致的,只需要删掉,重建一份最新的即可。
参考资料:https://bigboxcode.com/laravel-env-getting-null-value-when-used-with-configcache
在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?
输入格式 第一行输入一个整数 N。
第二行输入 N 个整数 A1~AN。
输出格式 输出一个整数表示答案。
数据范围 1≤N≤105, 0≤Ai<231 输入样例: 3 1 2 3 输出样例: 3
#include<iostream> using namespace std; const int N = 3000000;//一个数最多有30位二进制数*数据范围,防止越界 int a[N],n; int idx;//节点下标 int son[N][2]; void insert(int x){ int p = 0; for(int i=30;i>=0;i--){ int u = x>>i&1;//&1可以取出右移之后的最后一位 if(!son[p][u]) son[p][u] = ++idx; p = son[p][u]; } } int query(int x){ int p = 0; int res = 0; for(int i=30;i>=0;i--) { int u = x>>i&1; if(son[p][!