分类目录:摩登3官网注册

摩登3新闻554258:_C语言状态机编程思想

有限状态机概念 有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务。单片机C语言的状态机编程,是利用条件选择语句( switch 、 case 或者 if 、 else )切换状态,通过改变状态机状态,让程序按设定的顺序执行。 有限状态机由有限的状态和相互之间的转移构成,在任何时候只能处于给定数目的状态中的一个。当接收到一个输入事件时,状态机产生一个输出,同时也可能伴随着状态的转移。状态机的原理如下:在当前状态下,发生某个事件后转移到下一个状态,然后决定执行的功能动作。可参考如下示意图: 应用举例 要想使用状态机思想进行编程,需要将任务分解成有限个稳定状态。 这里以常见的按键动作进行举例说明: 上图为按键典型的动作图,可以分解为四个状态,分别为: 状态1 = 按键弹起、 状态2 = 前沿抖动、 状态3 = 按键按下、 状态4 = 后沿抖动。 有限状态机的C代码实现如下: if (定时器 >= 10ms) //10ms是典型消抖时间{   switch (按键状态)   {     case 按键弹起状态:      if (IO读取为低电平) 按键状态=前沿抖动;      break;     case 前沿抖动状态:      if (IO读取为低电平) 按键状态=按键按下;      break;     case 按键按下状态:      if (IO读取为高电平) 按键状态=后沿抖动;      break;     case 后沿抖动状态:      if (IO读取为高电平) 按键状态=按键弹起;      break;default:按键状态=按键弹起;   }} 状态机编程建议 巧妙的使用结构体和枚举一方面可以便于扩展和维护状态机的状态和事件,另一方面可提高程序的可读性。假设有3种状态(状态数可以随意增加),状态枚举如下: typedef enum {  state_1=1,  state_2,  state_3}State; 假设有5个事件(也可以随意增加),事件枚举如下: typedef enum{  event_1=1,  event_2,  event_3,  event_4,  event_5}Event; 定义一个结构体描述如下: typedef struct {  State curState;      //当前状态  Event eventId;      //事件  State nextState;   //下一个状态  Action action;     //动作功能}StateEvent; 根据具体的应用场景调整 State 和 Event ,并赋予相应的动作功能,整体的基本流程如下: 当前状态->有事件触发->跳到下一个状态->具体的动作功能 总结 状态机应用很广泛,也可以锻炼逻辑思维,LoRa消息推送也常采用状态机的思想, 实际上状态机涉及的知识点很多,本篇文章只是简要的介绍了下单片机C语言的状态机编程思想,在日后的开发设计中,需要不断的总结经验并灵活应用。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3新闻554258:_你拖后腿了吗?工信部发布前11月软件行业经济报告

近日,工业和信息化部(以下简称工信部)运行监测协调局发布了《2020年1-11月软件业经济运行情况》,从报告中显示,1-11月,我国软件业从业平均人数698万人,同比增长1.9%;从业人员工资总额同比增长5.5%,增速较1-10月回落0.3个百分点,工资总额增速略有下降。 2019年-2020年1-11月软件业从业人员工资总额增长情况 值得关注的是,1-11月,我国软件业业务收入平稳增长,完成软件业务收入73142亿元,同比增长12.5%,增速较去年同期回落3.0个百分点,较1-10月提高0.8个百分点。 2019年-2020年1-11月软件业务收入增长情况 此外,前11月软件业利润总额平稳回升,利润总额增速略有下降。1-11月,我国软件业实现利润总额9009亿元,同比增长7.1%,较1-10月回落0.2个百分点,较上年同期回落3.9个百分点。 2019年-2020年1-11月软件业利润总额增长情况 从分领域运行情况看,软件产品收入增速持续上升,工业软件产品收入增长迅速。 1-11月,软件产品实现收入19749亿元,同比增长10.1%,较1-10月提高0.1个百分点,占全行业收入的比重为27.0%。 其中,工业软件产品收入达到1794亿元,同比增长12.5%,较1-10月提高2.1个百分点,占软件产品收入比重为9.1%,占比较1-10月提高0.6个百分点。 此外,信息技术服务收入、信息安全产品和服务收入增长加快,1-11月,信息技术服务实现收入44572亿元,在软件行业收入中占比为61.0%,1-11月,信息安全产品和服务共实现收入1341亿元,同比增长分别为14.9%、12.8%。 2019年/2020年1-11月软件业分类收入占比情况 从分地区运行情况来看,西部地区软件业收入增速保持领先。 1-11月,东部地区完成软件业务收入59244亿元,同比增长13.3%。中部地区完成软件业务收入3244亿元,同比增长0.8%。 西部地区完成软件业务收入8609亿元,同比增长15.7%。 东北地区完成软件业务收入2045亿元,同比下降2.2%,四个地区软件业务收入在全国总收入中的占比分别为:81.0%、4.4%、11.8%和2.8%。 2020年1-11月软件业分地区收入增长情况 资料、图片来源:《2020年1-11月软件业经济运行情况》 链接: 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3主管554258:_“荣登”美国实体清单的18所中国高校,有你的母校吗?

12月18日,美国商务部再次公布了新的对华77个实体及个人“制裁”清单。 清单中包含众多的中国高校和企业。 算上今年5月份公布的实体制裁清单中上榜的13所高校,新更新的制裁清单中又新增了5所被制裁的高校,现在中国总共有18所高校被美国列入“实体清单”。 cctv新闻截图 什么是“实体清单”? 实体清单 ,是美国为维护其国家安全利益而设立的出口管制条例。简单地说,“实体清单”就是一份“黑名单”,进入此榜单的单位,和美国企业搞进出口需要美国的批准,说白了就是美国的技术制裁。 新入榜单的是哪五所高校? 这回最新上榜的五所高校分别是: 北京理工大学 北京邮电大学 南京航空航天大学 南京理工大学 天津大学 这五所高校之所以上榜,自然与高校超强的实力,对国防建设、科技进步做出的巨大贡献密切相关。 其中,南京航空航天大学和天津大学,在此次嫦娥五号探月任务中扮演了重要角色。南京航空航天大学航天学院院长叶培建院士担任嫦娥系列探测器总指挥、总设计师顾问;天津大学空间力学团队在嫦娥五号着陆器稳定着陆、返回大气层的稳定性和姿态分析上做出了重大贡献。 此外,北京理工大学、北京邮电大学和南京理工大学要么是具有一定的红色军工背景,要么为中国的5G移动通信做出了贡献。 5所高校简单介绍 ( 1 )北京理工大学 985、211、 双一流建设高校 。北京理工大学1940年诞生于延安,前身是自然科学院,是中国共产党创办的第一所理工科大学。学校始终与党和国家同呼吸、共命运,坚持瞄准国家重大战略需求和世界科技发展前沿锐意进取。 ( 2 )天津大学 985、211、 双一流建设高校。天津大学的发展始终得到了党和国家主要领导人的亲切关怀和有力支持。在第四轮全国学科评估中,天津大学共有25个一级学科参评,进入A类学科数达到14个。 ( 3 )南京航空航天大学 211 。学校现设有16个学院和174个科研机构.国家地方联合工程实验室1个、国防科技工业技术研究应用中心1个、国家文化产业研究中心1个、国家工科基础课程教学基地2个、国家级实验教学示范中心4个。 ( 4 )南京理工大学 211、双一流建设高校 ,软科最好大学排名第36名,学校在长期发展过程中形成了兵器与装备、电子与信息、化工与材料三大优势学科群。现院校有国家重点学科9个,江苏省优势学科6个,江苏省重点学科9个,工信部重点学科7个,国防特色学科……. ( 5 )北京邮电大学 211、双一流建设高校。学校信息与通信工程、计算机科学与技术以及电子科学与技术三个一级学科在教育部第四轮学科评估中被评为A类学科,其中信息与通信工程取得了A+的优异成绩。 此前上榜的13所高校 在这次名单公布之前,美国5月份也曾发布“实体制裁清单”,当时有13所高校被美国列入实体清单,具体名单如下: 一、北京市:北京航空航天大学,中国人民大学 二、湖南省:国防科技大学,湖南大学 三、黑龙江省:哈尔滨工业大学,哈尔滨工程大学 四、陕西省:西北工业大学,西安交通大学 五、四川省:电子科技大学,四川大学 六、上海市:同济大学 七、广东省:广东工业大学 八、江西省:南昌大学 其中,北京航空航天大学、西北工业大学、哈尔滨工业大学、哈尔滨工程大学这四所高校和这回最新被制裁的北京理工大学、南京理工大学、南京航空航天大学这三所高校,还有一个我们熟知的霸气称谓——国防七子。 这七所高校为我国国防事业做出了巨大贡献,培养出了无数的国之栋梁。即使在今天,这七所高校也依然是我国国防领域的砥柱中流。比如歼20的主要研发人员基本都是毕业于北航、哈工大、西工大等国防七校。 也就是说,至此,国防七子全部在美国的实体制裁清单上。 国防科技大学作为一所军事院校,俗称“军校中的清华”。学校担负着为全军培养高级科学和工程技术人才与指挥人才、培训军队高级领导干部、从事先进武器装备和国防关键技术研究的重要任务。实力自然不容小觑。 除了以上五所与军工有关的高校外,湖南大学、同济大学、西安交通大学、电子科技大学、四川大学、中国人民大学六所高校均为我国的985工程高校,也是我国高校“双一流”计划中“世界一流大学建设高校”。 这几所高校在机械工程、软件工程、计算机技术等领域都有非常出色的表现,而这也许是美国最忌惮我国超过他们的领域。 而南昌大学、广东工业大学这两所高校,其中南昌大学是211工程高校,广东工业大学虽然并不是双一流高校。但这两所高校在机械工程和自动化领域也都有不俗的表现。 被美国列入清单后会有什么后果呢? 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3平台开户_VS Code会“一统江湖”吗?

作者 | ROBEN KLEENE 策划 | 万佳 在选择用哪种工具时,我最看重的是 软件寿命。学习软件是一项投资,如果以后不得不切换到其他应用程序,那你的投资就损失了一部分。 在大多数软件类别中,选择寿命最长的软件很容易,最流行的工具通常就是存在时间最长的工具。像微软的 Excel 和 Adobe Illustrator 都是在 1987 年发布的,从那时起,它们就一直是同类软件中最受欢迎的。 https://blog.robenkleene.com/2020/04/27/software-to-die-for/ 另一方面,在文本编辑器这个软件类别中,最流行的却是最古老的。根据 Stack Overflow 年度开发者调查,Sublime Text 是 2015-2017 年 Mac 上最受欢迎的文本编辑器。Sublime Text 于 2008 年发布,与 Excel 和 Illustrator 相比,是“一个朝气蓬勃的年轻人”。 文本编辑器这个类别有很多变化: 在过去 20 年中,TextMate、Sublime Text 和 Atom 都是势头最强劲的文本编辑器。 我相信,随着 Visual Studio Code 的出现,新文本编辑器快速兴起并流行的时代已经终结。VS Code 已经达到了前所未有的普及和优化水平,打下了可能意味着数十年市场主导地位的基础。如果像我一样,你选择工具时优先考虑的事项之一是寿命,那么, 这意味着 VS Code 可能是一个不错的、值得现在就开始投入学习的文本编辑器。 VS Code 的长存归结于以下几点: 流行度:它的流行度达到了文本编辑器在近期历史上从未有的高度。 文本编辑器即平台:这是围绕扩展再造文本编辑器的终结。 范式卓越:它超越了桌面应用的范式,成了托管 Web 应用,甚至成了参考实现。 公司管理:它由一家强大的科技公司管理,并且还处于积极开发之中。 1 流行度 VS Code 是当今最流行的文本编辑器。它如此流行,以至于它可能是有史以来最流行的 GUI 编程工具。 自 2015 年以来,Stack Overflow 在调查中就包含关于文本编辑器的问题。当时,Notepad++ 是最受欢迎的文本编辑器,34.7% 的受访者说他们“可能会使用”。在接下来的几年里,不同文本编辑器的受欢迎程度有所变化,但没有任何一个能突破 40% 的大关。2019 年的最新调查显示,VS Code 已跃升至 50.7%。 2015–2019 文本编辑器流行度 (注意:在 2015 年到 2016 年间,Stack Overflow 开始允许有多个答案,所以我对这两年之间的变化持保留态度。) 2 文本编辑器即平台 客观地说,VS Code 非常流行。在过去几十年,文本编辑器一直在发展,而我相信 VS Code 是最终表现形式。这是文本编辑器通过增加扩展的作用和功能而成为平台的进程。下面是这一进程的历史。  2004 年前:BBEdit、Emacs 和 Vim BBEdit、Emacs 和 Vim 本身都是优秀的文本编辑器,但它们都有一些“独特性”(虽然像我这样的人很喜欢它们),因此它们无法成为最受欢迎的文本编辑器。 Emacs 和 Vim 的前身 Vi 都是 1976 年首次发布的,当时,今天的许多用户界面习惯还未固化下来,比如使用修饰键加 Z、X、C 和 V…

摩登3娱乐登录地址_GitHub 40K Star工程师求职记

本文作者是牛客网知名大佬 CyC2018,在他的 GitHub 有一个高达 40K Star 的技术仓库(在所有仓库中排名前五十),可以说在开源项目方面是一骑绝尘的牛人。今天我们分享一下他的求职经历。(最终 Offer:百度、阿里、腾讯、头条、网易游戏、华为) 下面正文开始! 2018,有过迷茫,有过努力,也有很多收获。为了记录这一年以来的感受,于是有了这篇文章。 壹 offer一览 offer情况 经过了长达一年左右的复习,秋招也收到了几个比较满意的 Offer,参加面试的都通过了。 百度,企业智能平台; 阿里,高德地图,部门已联系,目前还在申报 Offer 中; 腾讯,IEG 游戏平台,后台研发,SP; 字节跳动,头条后台研发,SSP; 华为,Cloud Bu; 网易游戏,梦幻事业部; 顺丰科技 贰 前期准备 前期准备 也是在去年十一月份左右,看着身边两年制的同学经历了长时间而又艰难的秋招,我开始意识到自己应该提前准备了,否则自己的秋招会很惨。 本科的时候,虽然学过计算机网络、操作系统和数据结构等课程,而且 Leetcode 也刷了一两百题,但是离招聘要求还差的很远,学的都很浅只够应付考试,也没有实际的项目经验。 我的研究生方向是计算机图形学,研究生期间主要做一些科研项目。在选择招聘方向的时候,我也纠结了是不是找图形学相关方向的,但是考虑到图形学的选择不是很多,所以还是决定投后台研发相关的岗位。 于是开始收集各种学习资料,也买了很多纸质书。最开始的学习效率并不是很高,很迷茫,觉得要学的内容很多无从下手。那时候看别人的面经,感觉自己太弱了,很多内容都没接触过,于是更加迷茫。迷茫的时候总想着逃避,要是不复习多好,玩玩游戏每天多简单。 但是游戏玩的越多,那种焦虑感越是强烈。解决焦虑的唯一办法就是想办法解决当前问题。当慢慢地从消极的学习态度中调整过来,掌握的知识越多,那种焦虑感也随之消失。当然这个过程并不容易,不仅需要很好的毅力,也要根据自身情况找到问题的有效解决方法。 叁 春招历程 春招开始 三月份各个公司就开始春招了,那时候刚把一些基础知识简单地复习了一下,Leetcode 刷到了三四百题。但是没有后台研发相关的项目,于是花了一个星期左右用 PHP 做了一个微博系统。当时做简历特别痛苦,没内容可以写,看着其他人简历各种新技术,自己都没掌握,所以很虚。 阿里一轮游 最开始投的阿里,实验室大几届有个师兄在天猫精灵团队,所以给我内推了。于是我人生中第一场面试就是阿里,很自然地被虐了一遍。记得当时约好下午两点电话面试,午饭都没吃,怕吃完之后犯困影响状态,然后找了一个很安静又没人的地方呆到了两点,调整自己的状态。 可是面试官突然打电话来说有个会议要开,所以推迟了大概一个小时。苦苦等到三点左右,面试正式开始,不出所料面得非常糟糕。首先自己表述的很有问题,很多内容没回答到关键点上,自己会的内容也不怎么继续扩展回答。 其次知识掌握得确实不够,连线程安全、ThreadLocal、函数式编程都不会。虽然被虐的很惨,但是也有好处,知道了面试到底是怎样的,自己还有哪方面的不足,该怎么准备。 腾讯被鞭尸 第二场面试是腾讯,在经历了阿里的面试之后,并且又继续复习了一段时间,我对面试就比较有信心了。一面其实回答的挺理想的,虽然很多问题没有立马回答出来,但是经过面试官的耐心提示之后都能回答一些内容。 当时面了一个半小时,面试体验特别好。印象比较深刻的题目有,阅读一个 Redis 源码,分析存在哪些问题。其实就是一个计数器实现的限流算法,会有临界值的问题,但是当时没回答出来,只能听面试官给我解释。还有一个微信扫二维码,这个过程发生了什么,也没回答得很好,不过面试官也很耐心地纠正我回答上的错误。一面顺利通过了,但是总监面挂了。 总监面没有问什么技术问题,就是问了问项目和职业规划。自己的项目确实比较 Low,我自己在介绍的时候也说得很不堪。职业规划我说自己希望在一些方面深入学习,因为自己现在在这些方面还很薄弱… 面完之后我就知道挂了,因为整个面试过程我都特别虚,还主动说自己技术能力不行。不出所料,面完的当天晚上,状态变成了不合适。 但是过了几天,突然收到腾讯的电话,问我是否愿意去深圳参加面试(笔者学校在广州)。当然我毫不犹豫地答应了,很开心腾讯还能给我机会。经过了上一场面试的启示,这次面试我表现地非常自信,自己知道的知识都很有信心地表达出来,被问到不会的内容也不会那么慌张,和面试官探讨一些细节,然后说说自己的想法,还有自己看过相关的内容。 由于这是腾讯云部门,对 Linux 内核和 C++ 有很高的要求,问了几个相关的问题我都没回答出来,比如如何实现守护进程,Linux 信号机制,Linux 线程的不可中断阻塞状态如何进入等等。除了这些问题,其它地回答的都还行。遗憾的是,当天晚上面试官打电话告知我面试没通过。但是他说我其它方面都很不错,所以问我愿不愿意参加腾讯云 Java 部门的招聘,于是第二天我又去了一个新的部门面试。 这次面试是在部门的会议室进行的,进到公司之后说实话没有自己想象中那么好,工位很挤环境一般。一开始就先随便聊聊,学校的研究工作,学习之类的。然后看了看项目,看完之后我就知道凉了一半,这个项目确实太水了,面试官看了之后没有接着问,也能感受到面试官有点嫌弃。然后他就问了一些基础知识,问到进程调度算法,面试官让我实现一个任务调度系统。 因为是第一次手写代码,而且之前确实没考虑过这个问题,然后就胡乱写了一堆代码,特别乱,而且到处涂改。显然面试官是不满意的,写了也有十几分钟之后,我自己都知道已经凉了,然后面试官没让我接着写,也没给我任何提示,说就到这里,面试结束了,还有没有什么问题想问的。 当然看过任务调度系统相关的文章会觉得挺容易的,比如使用时间轮实现等等。我依然记得面试官送我出门时候的热情,送我坐电梯的时候还很热情地和我说,非常感谢参加本次面试,辛苦了。 肆 春招战果 虎牙过于自信 经过了阿里和腾讯的面试之后,我觉得自己大概已经知道该怎么面试了,面试时候该注意什么,该怎么表达等等。而且腾讯面试表现也不差,虽然最后没通过。所以在虎牙面试的时候特别放松,觉得应该能通过。 前面面的也都还行,虽然有几个问题没回答好,比如分析一下微博的时间线。通过了第一轮面试直接等第二轮,等到了晚上七点多才等到我。虎牙面试还是很注重技术的,虽然问的都不是很深入,只要简单回答到点上就不会接着问下去。 二面也有一些问题没回答好,比如 ConcurrentHashMap 的并发机制,问 Spring 直接说不会。也有一些问题回答得比较乱,没有条理。但是我觉得大部分问题都回答的不错,应该能通过。 可是面试完之后,面试官问有没有什么问题要问他,由于太过放松,我就问你们都加班到这么晚不吃饭吗,好饿啊,周六周日还加班吗… 问完之后面试官就很严肃了,说平常不加班的,我突然意识到了问题的严重性… 最后还是凉了。 百度第一个offer 被三家连续拒了之后,都开始怀疑自己了,不过还是提醒自己要保持信心。 幸运的是,百度的面试非常适合我,三轮都是技术面,而且手写算法题目居多,而我准备最多的是算法,所以很顺利通过了面试。但是面试表现并没有特别好,过了比较长的时间才被捞,而且是工程效率部门,做内部工具的,对个人成长并不好,所以不是特别满意。 网易游戏 最好的游戏体验 其实最开始没有打算投网易游戏的,因为被脉脉洗脑,已经放弃了做游戏。但是因为前面面试基本被拒了,担心没有实习 Offer,因此就试试看。 因为没有特别想去网易游戏,所以面试过程也比较放松,就当去聊聊天。面试官非常 nice,那天下午挤了很久地铁,比较口渴,然后面试官看我说得沙哑了,到门口帮我买了一瓶可乐,非常感激。面试之前我就提出我对 C++ 不熟悉,最近主要看 Java 的内容。 面试官还是说没关系,尽量回答就好。当然最后我都把问题往 Java 那里回答了,比如 Map 的实现,内存管理等等。最后聊了一些玩过的游戏,就让我回去等消息。网易游戏就一轮面试,确实就一轮。周五参加的面试,下周一就给 Offer 了,效率特别高。 微众玄学面试 通过微众面试我自己都非常吃惊,一面的时候就简单自我介绍了一下,然后面试官开始介绍他自己的工作经历,以及现在部门在做的内容。 之后问了我一个场景分析问题,我想了一会儿没想出来,于是面试官拿起草稿纸把各种需求详细说了一遍,然后把系统架构图也画了出来… 最后他问还有什么我优势的地方他没问到的,我问他怎么不问问算法题,他说笔试都通过了没必要再问。 面完之后我觉得聊得很开心,但是技术问题没回答好,出乎意料收到了二面通知。二面没问技术,就让介绍了项目,再问问家住哪之类的问题,也顺利通过了。HR 面就不用介绍。 收到了微众的 Offer,得知了部门是贷款科技部,非常核心,很吃香,近几年也在扩展一些业务,还是有点小心动的。虽然最后没选择去微众实习,但是一面面试官加了我微信,我很感谢他一面非常耐心给我讲解,并让我通过。他说我是他面试的第一顺位,也就是第一个面试者,所以会放宽很多,也希望我秋招能加入他们。 伍 实习回忆 实习选择 其实最理想的是去百度实习,秋招也会容易很多。但是考虑到百度是在北京,部门很边缘,而且需要实习很长时间也不一定能转正,所以还是放弃了。 最后只能在网易游戏和微众选,虽然自己不想做游戏,但是考虑到网易游戏的平台认可程度比微众好,秋招肯定会更容易一些。而且秋招如果还想进微众的话也会比较容易,因为面试官和 HR 都说秋招的时候会优先考虑我,所以最后还是去了网易游戏实习。 实习之前的快速学习期 经历了春招之后,认识到了自己身上的不足,比如交流表达能力的欠缺,知识积累得不够,项目深度不够。因此在实习之前的两三个月,开始针对这些问题逐个解决。 交流表达能力欠缺,就提前准备好各种非技术问题,然后对着镜子回答,把自己当成听众,并且也用录音机录下来。 知识积累不够,采取的策略是保证广度优先,并且在重要的内容上保证深度。其实之前基础知识已经掌握的比较好了,再学其它技术的时候都有很多相同的地方,所以学起来很快。…

摩登3注册网址_青铜变王者,桌面云是如何逆袭的?

1981年8月12日,IBM公司推出世界上第一台个人电脑,并将其命名为IBM 5150。 IBM 5150 IBM 5150的出现,标志着人类正式进入了PC时代,越来越多的用户开始购买和使用计算机。 若干年后,比尔盖茨创办的微软公司陆续发布了一系列版本的Windows“视窗”操作系统。这些操作系统的使用界面,被人们亲切地称之为——桌面(DESKTOP)。 Win98的桌面,暴露了年龄 桌面的出现,降低了PC的使用难度,改善了用户体验,进而加速了PC的全面普及。 进入21世纪后,电脑硬件加速升级,软件日新月异,我们的“桌面”也变得越来越酷炫。 然而,我们会发现,陪伴我们多年的PC和“桌面”,其实并不完美。尤其是对于企业用户来说,痛点很多。 例如,当新员工领用新PC的时候,需要耗费大量时间和精力去安装操作系统、驱动程序、工作软件和补丁。 再例如,PC软硬件频繁出现的故障,往往影响员工的正常工作,浪费宝贵的时间。 更要命的是,如果本机硬盘损坏或误删,很有可能导致数据永久性丢失,给公司造成无法挽回的损失。 此外,PC的信息安全防护也是大问题。员工使用PC,可能会通过USB端口进行文件拷贝,或者通过网络进行资料外发,泄露公司机密。 面对传统PC如此之多的痛点,IT厂商们想出了一个不错的解决方案,那就是桌面云。 ▉ 什么是桌面云 桌面云,简单来说,就是把“桌面”搬到云上。 它把个人计算环境集中存储于云端,由云端按需生成桌面环境。本地用户借助终端设备和网络,可以随时随地访问和使用云端的个人桌面。 桌面云的核心技术有两个,一是虚拟化技术,二是桌面传输协议。 虚拟化技术,大家应该很熟悉了,它是云计算的基础。借助虚拟化技术,云端的服务器才能虚拟出CPU、内存、硬盘等组件,进而生成虚拟桌面。 桌面传输协议就更容易理解了,就像我们通过FTP协议下载文件一样,桌面传输协议可以帮助本地用户顺畅地访问和使用云端上面的虚拟桌面,就像使用本地PC一样。 真正意义上的第一代桌面云解决方案,诞生于2006年左右。 当时,敢于吃螃蟹的用户不多,只有一些对数据安全需求极强的用户(例如政府和银行用户)积极进行了试用。除此之外,大部分企业选择了观望。 这是为什么呢? 很简单,因为不好用。 当时的桌面云,虽然有很好的设计理念,但因为技术不成熟的原因,访问速度慢,运行效率低,用户体验差,没办法媲美传统PC。 所以,员工对桌面云心存抵触,企业管理者也顾虑重重。 后来,随着时间的推移,云计算虚拟化技术和桌面传输协议变得越来越成熟,桌面云也迅速迭代升级,带来了显著的用户体验提升。 就在桌面云苦练内功,准备再次发力的时候,外部市场的需求环境也发生了有利的变化。 首先,是移动办公需求的大爆发。 近年来,企业规模迅速扩张,异地办公变得非常普遍。旺盛的经济发展,也带来了频繁的商业差旅。这一切,都属于移动办公需求。 今年就更不用说了,意料之外的新冠疫情,让“在家上班”成了很多企业员工的常态。 第二个重大变化,就是信息安全危机的大爆发。 信息安全是企业的生存命脉。这些年来,我们经常看到员工私自拷贝核心代码甚至删库跑路的新闻。 这些行为,严重影响了企业的正常经营,甚至可能导致企业倒闭。 因此,企业越来越重视信息安全防护,迫切希望加强办公桌面环境的安全管控。尤其是移动办公场景下的安全防护,更是重中之重。 就这样,内因+外因,第二代桌面云闪亮逆袭的机会终于来了。 ▉ 既安全,又好用,桌面云是如何办到的? 说了半天,桌面云到底是如何满足用户需求的呢? 我们就拿目前国内市场占有率排名第一 * 的深信服桌面云解决方案为例,给大家详细解释一下桌面云技术的秘诀。 *数据来源:IDC《中国VDI客户终端市场追踪报告,2020Q1&Q2》 深信服桌面云解决方案,整体上包括终端接入区和数据中心区两部分。 终端接入区的设备,既可以是深信服的桌面云终端aDesk,也可以是PC、手机、PAD等常见终端。 aDesk,采用ARM架构,外形精致小巧,无风扇,无噪音,耗电量10W以内。 数据中心区,硬件上主要是桌面云一体机(VDS)和桌面云控制器(VDC)。 VDS是一款专为“云桌面”量身定制的软硬件一体化服务器, 可以建设简单、易运维、高性能的桌面云环境。VDC,虚拟桌面接入控制器,主要起管理作用,提供用户认证管理、细粒度策略控制、桌面/云终端统一监控及管理等功能。 VDS、VDC共同组成了深信服桌面云服务端,创建并管理桌面资源,为用户提供桌面服务。 下面这张图,就是一个针对软件开发场景的深信服桌面云案例。 在案例中,桌面云可以实现: 每个用户通过终端接入系统,系统会自动下发安全策略,统一管控外设的使用权限,通过设置USB黑白名单,杜绝病毒引入,也可以防止数据泄密。 本地终端所有的上网行为,都由服务端进行行为策略控制并记录,文件的外发权限也由服务端进行控制和审计。 所有虚拟桌面的数据都存储在服务端,本地终端0数据。即使拆走了本地硬盘,也带不走任何数据。 终端到云端的数据传输采用了加密通信协议,可以防止信息被窃取。 桌面可以分为开发桌面池和上网桌面池,环境物理隔离。既降低了开发环境感染病毒、遭受攻击的风险,也不影响员工使用外网查阅资料。 众所周知,深信服是一家做安全起家的公司,安全已经被刻入他们的DNA。那些凝结了深信服20年安全技术积累的分布式防火墙、屏幕水印、应用软件管控等技术,足以让系统“固若金汤”。 不管是本地办公,还是远程(移动)办公,都不留安全隐患。 一句话,老板安心! 老板安心很关键,但,不是全部。还要看员工用的爽不爽,往人性了说,它关乎员工的办公体验与情绪。往资本家了说,它关乎业务的产出效率。这背后就扯出了桌面云的终端用户体验问题。 除了安全之外,深信服的桌面云还有极佳的用户体验。 大家应该有很多人用过远程桌面软件,例如windows自带的那个。 远程桌面软件多采用RDP协议,占用带宽大,一旦网络速度慢或不稳定,就会卡顿甚至连接中断,影响正常操作。 深信服桌面云解决方案采用了自研的高效能桌面编码协议,将流量削减到极致,同时可根据链路质量自动调节画面传输帧率。单用户普通办公场景下,带宽可以降至惊人的600Kb。 有人可能觉得,桌面云从云端访问资源,性能速度肯定没有本地PC快。 其实,现在的桌面云早已今非昔比。桌面云的背后是企业级的服务器,高性能CPU、内存和硬盘,配合高性能显示协议,轻松完胜PC。即使是复杂的图形处理工作,也完全可以hold住。 最后,是IT运维简化。这简直再明显不过了。 深信服桌面云将所有桌面集中到云端,管理员可以通过Web图形化控制台进行统一的管理维护,员工在本地也可以通过自助界面进行简单维护,从而减免了大量的IT运维工作量。 利用模板克隆等技术,深信服桌面云可以在几分钟内创建上百个桌面。软件和驱动的安装部署,也只需要几秒钟就可以完成,新员工分分钟就可以开始工作。 为了拥有更高的效率,深信服还引入了AI算法,进行智能化运维。 根据粗略的估计,桌面云的维护效率相比传统PC模式,至少提升了4倍以上。 总而言之,现在的桌面云,完全可以做到老板放心、员工开心、IT运维省心。 凭借前面所说的种种优势,桌面云在企业市场受到了越来越多的用户欢迎,普及率直线上升。 包括软件开发、安全办公、图纸设计、车间操作、客服中心、第三方外包等在内的众多企业用户场景,开始抱着试一试的心态使用桌面云,并且试了之后发现,“哎哟,不错哟”。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3注册开户_DIY | 电路与艺术相结合

来源 | 凡亿PCB 你以为搞电路只是一门技术吗? 当然不是 电路也可 是 一门艺术! 免责声明:本文部分素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。 ———— 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3内部554258_我的单片机成长之路

背景 写这篇文章的初衷要从最近带我一个朋友入坑学习单片机的经历开始讲起; 我要用梁静茹给我的勇气写写如何入坑单片机; 我的一个朋友以前是汽车电子技术专业,毕业之后去做了和汽车相关的工作,修了一年车; 其实干一行爱一行,三百六十行,行行出状元,确实挺好的; 不过修车总给他一种一眼看到头的感觉(子非鱼,安知鱼之乐?对不起,他自己告诉我的); 于是,他跳槽了,找了一份电子工程师的工作; 工作内容和我差不多,平日里打打杂; 平淡的日子就这样重复着,直到有一天,他说想学单片机;我准备给他支支招。 基础部分 DAY 1 第一天,帮他整理了整体的学习路线,基础知识篇; C语言是一本必须掌握的编程语言,看视频的效率相对来说会高一点,所以我给他推荐了B站 浙大翁恺老师的C语言视频; 因为视频还挺长的,我只推荐他看了比较基础的部分,做一下课后习题,掌握基本的语法,if,while,for等语句; 纸上得来终觉浅,学单片机还是重在实践;为了开源节流,我把以前吃灰的STM32开发板拿给他,毕竟资料很多嘛,学起来也方便; 理想是很丰满:原本计划用cubemx+st官方的HAL库来进行实践,毕竟B站还有之前开发板的配套资料也不少; 现实却很骨感: 装cubemx软件就搞的满头大汗了,最后是安装的JDK版本不对,直接裂开,一个晚上时间没了; 我给他操作了一遍使用cubemx配置自动生成代码,然后点亮一个LED,整个过程很顺利,没有写一行代码,但是我给他解释代码的时候,他是完全懵逼的状态,不知其所以然,这里有十万个黑人问号脸!!! 好吧,毕竟HAL库封装的很不错,感觉对新手不太友好(前面提到他C语言基础还不是很扎实); 后来我知道他偷偷跑去看结构体和指针的内容了。 看来还是得用51单片机,因为简单,可以先点亮一个灯,建立起兴趣; 给他推荐了某宝的一块51单片机开发板,随便找的,功能都大同小异; DAY 2 —DAY N 开发板隔天就到了,看配套视频,写下了单片机的hello world,然后灯就亮了; #include  sbit LED=P1^0;void main(void){        LED = 1;    while(1){            }} 同样是点亮一个LED,但是这次好像有内味道了,看到实验成果,他笑出了猪叫; 后面给他推荐了郭天祥的视频《十天学会单片机》; 看视频,一边补充C语言知识,一边对照着每个单片机讲解视频进行学习,视频中的讲解大多比较浅显易懂,对于新手比较友好; 把课后习题一个一个做掉,流水灯,数码管,串口,定时器,外部中断,初步掌握这些基本的外设的应用之后, 他还尝试做了一个循迹小车;虽然循迹小车比较简单,但是很有里程碑意义的,这里面涉及到传感器技术,直流电机的驱动,以及微控制器等技术; 虽然《十天学会单片机》的视频标题略显浮躁,但是作为入门,他花的时间远比十天要长,所以新手千万不要因为自己学得没有别人快而焦虑,产生挫败感,从而自我否定,自我怀疑; 但是需要及时思考和总结自己的学习方法是否高效,是否有办法优化效率; 最后,按照我个人的观点(如有偏驳,请轻拍),对于零基础的新手,方法策略是实践; 刚开始要避免学习冗杂的理论,选择简单友好的开发环境,不是一上来就是啃厚厚的理论书,学习工具链,学习Linux环境,汇编,这样学习曲线太陡峭,容易产生挫败感; 设置阶段性的学习目标,可以拆分成容易完成的小任务,每完成一个任务都能形成正向反馈,增加信心,从而坚信自己能学好,能继续学下去; 掌握对单片机进行应用的方法之后,可以以点带面,再对知识盲区进行扫盲,从而拓宽知识的广度同时,增加深度; 回归正题 好了,下面言归正传,问题是如何系统地学习单片机,所以本文着眼于讨论如何系统地学习单片机,而单片机这门技术是否有前景,则不做阐述。 如何系统地学习单片机?我感觉很难系统学习,因为这是一个多学科交叉的技术; 另外,如果你用单片机做不同的项目,应用到不同的领域,那有可能会涉及新的知识盲区; 所以是掌握好单片机这个技术的理论知识作为基础支撑,然后不断拓展自己的知识面,不断提高知识深度; 下图是我平时整理的思维导图,做的不是很好,都是每次想到一些就补充一些,所以还有些凌乱; 如果觉得对你有帮助,可以在[小麦大叔]公众号后台回复[技术思维导图]领取xmind格式的文件; 贴这张图的目的是什么呢?只是想说明和单片机相关的技术会涉及到很多东西,所以着眼点应该是加强基础知识的建设; 基础编程 C语言必须精通,但绝非一朝一夕的事情,需要大量时间去实践,去写代码,去调试,去做项目,同时还得学习理论,通过实践加深理解,推荐书籍《C 和指针》,《C 陷阱与缺陷》等; 语言只是工具,学会了C语言,你已经知道如何砌砖了,但是如何把楼盖高,盖牢,盖的好看呢? 这时候,就需要学习数据结构,算法和设计模式,这里推荐《算法导论》,《代码大全》都不错,也是经典了,而且这两本书也会长期陪伴着你; 再到后面,发现裸机编程已经很难满足学习欲望了,这时候可能会学习实时系统了,FreeRTOS,RTThread,都是十分优秀的项目; 慢慢地学会读这些项目的源码,读优秀项目的源码,这是提高很快的途径; 这时候,还不够,操作系统,微机原理(EE)/计算机组成原理(CS),这些书可以操作起来了; 后来还可能会接触到Linux,这是个庞然大物,LKD,LDD,ULK,这三本书,就够啃了;当然前提还得学会Linux环境下编程,shell脚本,makefile等等等,内容太多了,我对Linux涉猎不是很深入,如果是做应用的话,AUPE啃一下,一定会受益匪浅的; 硬件部分 模拟电子技术和数字电子技术,如果是EE科班都会开设这两门课程的,如果是非科班,零基础,可以自学一下; 推荐麻省理工的公开课《电路与电子学》,教授讲得很好,里面已经涵盖了模电和数电的内容; 原理图设计,能看懂数据手册,根据项目需求进行电子元器件的选型; 前提是,熟悉最基本的电子元器件,阻容,磁珠,MOS管,二极管等等; 另外还有功能元器件也需要了解,运放,数字IC,存储芯片等等; 但是这还远远不够,可能还要板载电源,用LDO,还是DCDC,如果是DCDC还得考虑纹波,噪声等等,不过这好像和单片机又扯远了(通常会有专门电源工程师),如果没有,那你上; PCB的Layout,需要学习一款EDA软件,Altium designer用的比较多,Pads,开源的KiCad也不错,多用用就熟练了,不懂的多问搜索引擎; Layout的设计规范可以参考一下华为的设计规范,注意一下板机的EMC,布线,铺铜,接地方式以及回流面积,如果是低速板,相对难度会小一点,硬件的坑很深,甚踩; 最后我想说的是最重要的还是实践,实践,实践,自己做个板子,发出去打样,现在打样还是很便宜了,甚至连SMT都包了,软件靠精力,硬件靠经历,多爬坑,学的就多了,会的也就多了,技术在于积累。 总结 本文简单介绍了学习单片机的技术路线,分别从软件角度和硬件角度给出了简单的方法,单片机开发是软硬结合的,所以软件的学习和硬件的学习,缺一不可; 笔者能力和水平有限,文中难免存在错误和纰漏,请大佬不吝赐教。 —— The End — — 推荐好文   点击蓝色字体即可跳转  如何优雅地解决STM32的Flash写保护的问题?  当心!别再被大小端的问题坑了  全网最通俗易懂SPWM入门教程,快来白嫖  简易PID算法的快速扫盲 增量式PID到底是什么? 三面大疆惨败,因为不懂PID的积分抗饱和 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3内部554258_Redis的8大数据类型,写得非常好!

来源:https://blog.itzhouq.cn/redis2 NoSQL 开发中或多或少都会用到,也是面试必问知识点。 最近这几天的面试每一场都问到了,但是感觉回答的并不好,还有很多需要梳理的知识点,这里通过几篇 Redis 笔记整个梳理一遍。关注公众号Java技术栈回复面试也可以刷我整理的系列面试题。 Redis 的八大数据类型 官网可查看命令:http://www.redis.cn/commands.html Redis-key 127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> set name xxxOK127.0.0.1:6379> keys *1) "name"127.0.0.1:6379> set age 1OK127.0.0.1:6379> keys *1) "age"2) "name"127.0.0.1:6379> exists name  # 判断key 是否存在(integer) 1127.0.0.1:6379> exists name1(integer) 0127.0.0.1:6379> move name 1(integer) 1127.0.0.1:6379> keys *1) "age"127.0.0.1:6379> set name yyyOK127.0.0.1:6379> expire name 10  # 设置key的过期时间,单位是秒(integer) 1127.0.0.1:6379> ttl name  # 查看当前key的剩余过期时间(integer) 7127.0.0.1:6379> ttl name(integer) -2127.0.0.1:6379> type age  # 查看当前key的类型string127.0.0.1:6379> Redis 有以下 8 种数据类型 1、String(字符串) 127.0.0.1:6379> set key1 v1   #设置值OK127.0.0.1:6379> get key1"v1"127.0.0.1:6379> append key1 "hello"  # 追加值,如果不存在,相当于 set key(integer) 7127.0.0.1:6379> get key1"v1hello"127.0.0.1:6379> strlen key1  # 获取字符串长度(integer) 7127.0.0.1:6379> 自增、自减 127.0.0.1:6379> set views 0OK127.0.0.1:6379> get views"0"127.0.0.1:6379> incr views  # 自增 1(integer) 1127.0.0.1:6379> get views"1"127.0.0.1:6379> decr views       # 自减 1(integer) 0127.0.0.1:6379> decr views(integer) -1127.0.0.1:6379> get views"-1"127.0.0.1:6379> incrby views 10  # 设置步长、自增 10 (integer) 9127.0.0.1:6379> decrby views 5      # 设置步长、自减 5(integer) 4 字符串范围 127.0.0.1:6379> set key1 "hello,world!"OK127.0.0.1:6379> get key1"hello,world!"127.0.0.1:6379> getrange key1 0 3  # 截取字符串\[0, 3\]"hell"127.0.0.1:6379> getrange key1 0 -1  # 获取全部的字符串,和 get key一样"hello,world!"127.0.0.1:6379> 替换: 127.0.0.1:6379> set key2 abcdefgOK127.0.0.1:6379> get key2"abcdefg"127.0.0.1:6379> setrange key2 1 xx(integer) 7127.0.0.1:6379> get key2"axxdefg"127.0.0.1:6379> setex(set with expire):设置过期时间 和setnx(set if not exist):不存在再设置(在分布式锁中会经常使用) 127.0.0.1:6379> setex key3 30 "hello"  # 设置 30 秒后过期OK127.0.0.1:6379> ttl key3     # 剩余过期时间(integer) 25127.0.0.1:6379> setnx mykey "redis"   # mykey 不存在时设置成功(integer) 1127.0.0.1:6379> keys *1) "key2"2) "key1"3) "views"4) "mykey"127.0.0.1:6379> setnx mykey "mongoDB"  # mykey 存在时设置失败(integer) 0127.0.0.1:6379> get mykey     # mykey 值不变"redis"127.0.0.1:6379> mset 和 mget 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  # 同时设置多个值OK127.0.0.1:6379> keys *1) "k1"2) "k3"3) "k2"127.0.0.1:6379> mget k1 k2 k3   # 同时获取多个值1) "v1"2) "v2"3) "v3"127.0.0.1:6379> msetnx k1 v1 k4 v4       # msetnx 是一个原子性的操作,要么一起成功,要么都失败(integer) 0127.0.0.1:6379> get k4(nil)127.0.0.1:6379> 对象 set user:1 {name:zhangsan, age:3}     # 设置一个 user:1 对象 值为 json  字符来保存一个对象127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2OK127.0.0.1:6379> mget user:1:name user:1:age1) "zhangsan"2) "2"127.0.0.1:6379> getset:先 get 再 set 127.0.0.1:6379> getset db redis  # 如果不存在值,则返回 nil(nil)127.0.0.1:6379> get db"redis"127.0.0.1:6379> getset db mongodb  # 如果存在值,获取原来的值,并设置新的值"redis"127.0.0.1:6379> get db"mongodb"127.0.0.1:6379> String 的使用场景:value 除了是字符串以外还可以是数字 计数器 统计多单位的数量 粉丝数 对象缓存存储 2、List(列表) 基本的数据类型,列表。 在 Redis 中可以把 list 用作栈、队列、阻塞队列。 list 命令多数以 l开头。 127.0.0.1:6379> lpush list one   # 将一个值或者多个值,插入到列表的头部(左)(integer) 1127.0.0.1:6379> lpush list two(integer) 2127.0.0.1:6379> lpush list three (integer) 3127.0.0.1:6379> lrange list 0 -1   # 查看全部元素1) "three"2) "two"3) "one"127.0.0.1:6379> lrange list 0 1    # 通过区间获取值1) "three"2) "two"127.0.0.1:6379> rpush list right   # 将一个值或者多个值,插入到列表的尾部(右)(integer) 4127.0.0.1:6379> lrange list 0 -11) "three"2) "two"3) "one"4) "right"127.0.0.1:6379> 弹出 pop 127.0.0.1:6379> lrange list 0 -11) "!"2) "world"3) "world"4) "hello"127.0.0.1:6379> lpop list  # 移除list的第一个元素"!"127.0.0.1:6379> lrange list 0 -11) "world"2) "world"3) "hello"127.0.0.1:6379> rpop list   # 移除list的第一个元素"hello"127.0.0.1:6379> lrange list 0 -11) "world"2) "world"127.0.0.1:6379> 索引 Lindex 127.0.0.1:6379> lrange list 0 -11) "hjk"2) "world"3) "world"127.0.0.1:6379> lindex list 1  # 通过下标获取list中的某一个值"world"127.0.0.1:6379> lindex list 0"hjk"127.0.0.1:6379> Llen 长度: 127.0.0.1:6379> llen list(integer) 3127.0.0.1:6379> 移除指定的值: 127.0.0.1:6379> lrange list 0 -11) "hjk"2) "world"3) "world"127.0.0.1:6379> lrem list 1 world  # 移除list集合中指定个数的value,精确匹配(integer) 1127.0.0.1:6379> lrange list 0 -11) "hjk"2) "world"127.0.0.1:6379> lpush list hjk(integer) 3127.0.0.1:6379> lrange list 0 -11) "hjk"2) "hjk"3) "world"127.0.0.1:6379> lrem list 2 hjk(integer) 2127.0.0.1:6379> lrange list 0 -11) "world"127.0.0.1:6379> trim 截断 127.0.0.1:6379> lrange mylist 0 -11) "hello1"2) "hello2"3) "hello3"4) "hello4"127.0.0.1:6379> ltrim mylist 1 2 # 通过下标截取指定长度,这个list已经被破坏了,截断之后只剩下截断后的元素OK127.0.0.1:6379> lrange mylist 0 -11) "hello2"2) "hello3"127.0.0.1:6379> rpoplpush :移除列表的最后一个元素,将他移动到新的列表中。 127.0.0.1:6379> lrange mylist 0 -11) "hello1"2) "hello2"3) "hello3"127.0.0.1:6379> rpoplpush mylist myotherlist  # 移除列表的最后一个元素,将他移动到新的列表中。"hello3"127.0.0.1:6379> lrange mylist 0 -1  # 查看原来的列表1) "hello1"2) "hello2"127.0.0.1:6379> lrange myotherlist 0 -1  # 查看目标列表中,确实存在该值1) "hello3"127.0.0.1:6379> lset:将列表中指定下标的值替换为另一个值,更新操作 127.0.0.1:6379> exists list  # 判断这个列表是否存在(integer) 0127.0.0.1:6379> lset list 0 item  # 如果不存在的话,更新会报错(error) ERR no such key127.0.0.1:6379> lpush list value1(integer) 1127.0.0.1:6379> lrange list 0 0 1) "value1"127.0.0.1:6379> lset list 0 item  # 如果存在,更新当前下标的值OK127.0.0.1:6379> lset list 1 other  # 如果不存在的话,更新会报错(error) ERR index out of range127.0.0.1:6379> linsert:将某个具体的value插入到列表中某个元素的前面或者后面 127.0.0.1:6379> lrange mylist 0 -11) "hello1"2) "hello2"127.0.0.1:6379> linsert mylist before "hello2" hello(integer) 3127.0.0.1:6379> lrange mylist 0 -11) "hello1"2) "hello"3) "hello2"127.0.0.1:6379> linsert mylist after "hello2" hello(integer) 4127.0.0.1:6379> lrange mylist 0 -11) "hello1"2) "hello"3) "hello2"4) "hello"127.0.0.1:6379> 小结: list 实际上是一个链表,前后都可以插入 如果key不存在,创建新的链表 如果移除了所有的值,空链表,也代表不存在 在两边插入或者改动值,效率最高。 3、Set (集合) 127.0.0.1:6379> sadd myset "hello"  # set 集合中添加元素(integer) 1127.0.0.1:6379> sadd myset "world"(integer) 1127.0.0.1:6379> smembers myset      # 查看指定Set的所有值1) "world"2) "hello"127.0.0.1:6379> sismember myset hello  # 判断某一个值是不是在set中(integer) 1127.0.0.1:6379> sismember myset hello1(integer) 0127.0.0.1:6379> 127.0.0.1:6379> scard myset  # 获取集合中的个数(integer) 2127.0.0.1:6379> sadd myset "hello2"(integer) 1127.0.0.1:6379> smembers myset   1) "world"2) "hello2"3) "hello"127.0.0.1:6379> srem myset hello   # 移除元素(integer) 1127.0.0.1:6379> smembers myset1) "world"2) "hello2"127.0.0.1:6379> 127.0.0.1:6379> smembers myset1) "kkk"2) "world"3) "hjk"4) "hello2"127.0.0.1:6379> srandmember myset   # 随机抽取一个元素"hjk"127.0.0.1:6379> srandmember myset"hello2"127.0.0.1:6379> srandmember myset 2   # 随机抽取指定个数的元素1) "world"2) "hello2"127.0.0.1:6379> srandmember myset 21) "hello2"2) "hjk"127.0.0.1:6379> 127.0.0.1:6379> smembers myset1) "kkk"2) "world"3) "hjk"4) "hello2"127.0.0.1:6379> spop myset  # 随机删除元素"hjk"127.0.0.1:6379> smembers myset1) "kkk"2) "world"3) "hello2"127.0.0.1:6379> spop myset"hello2"127.0.0.1:6379> smembers myset1) "kkk"2) "world"127.0.0.1:6379> 127.0.0.1:6379> smembers myset1) "kkk"2) "world"127.0.0.1:6379> sadd myset2 set2(integer) 1127.0.0.1:6379> smove myset myset2 "kkk"   # 将一个特定的值,移动到另一个set集合中(integer) 1127.0.0.1:6379> smembers myset1) "world"127.0.0.1:6379> smembers myset21) "kkk"2) "set2"127.0.0.1:6379> 127.0.0.1:6379> smembers key11) "b"2) "a"3) "c"127.0.0.1:6379> smembers key21) "e"2) "d"3) "c"127.0.0.1:6379> sdiff key1 key2   # 差集1) "b"2) "a"127.0.0.1:6379> sinter key1 key2         # 交集1) "c"127.0.0.1:6379> sunion key1 key2  # 并集1) "e"2) "a"3) "c"4) "d"5) "b" 4、Hash(哈希) 也是 key – value 形式的,但是value 是一个map。 127.0.0.1:6379> hset myhash field xxx  # set 一个 key-value(integer) 1127.0.0.1:6379> hget myhash field   # 获取一个字段值"xxx"127.0.0.1:6379> hmset myhash field1 hello field2 world  # set 多个 key-valueOK127.0.0.1:6379> hmget myhash field field1 field2   # 获取多个字段值1) "xxx"2) "hello"3) "world"127.0.0.1:6379> hgetall myhash    # 获取全部的数据1) "field"2) "xxx"3) "field1"4) "hello"5) "field2"6) "world" 127.0.0.1:6379> hdel myhash field1  # 删除指定的key,对应的value也就没有了(integer) 1127.0.0.1:6379> hgetall myhash1) "field"2) "xxx"3) "field2"4) "world"127.0.0.1:6379> 127.0.0.1:6379> hlen myhash  # 获取长度(integer) 2127.0.0.1:6379> hexists myhash field1   # 判断指定key是否存在(integer) 0127.0.0.1:6379> hexists myhash field2(integer) 1127.0.0.1:6379> hkeys myhash  # 获取所有的key1) "field"2) "field2"127.0.0.1:6379> hvals myhash  # 获取所有的value1) "xxx"2) "world"127.0.0.1:6379> 127.0.0.1:6379> hset myhash field3 5(integer) 1127.0.0.1:6379> hincrby myhash field3 1  # 指定增量(integer) 6127.0.0.1:6379> hincrby myhash field3 -1(integer) 5127.0.0.1:6379> hsetnx myhash field4 hello  # 如果不存在则可以设置(integer) 1127.0.0.1:6379> hsetnx myhash field4 world  # 如果存在则不能设置(integer) 0127.0.0.1:6379> Hash 适合存储经常变动的对象信息,String 更适合于存储字符串。关注公众号Java技术栈,回复 Redis,可以获取我整理的 Redis 系列教程。…

摩登3测速登陆_不允许程序员透露薪资!!!凭啥?

你肯定遇到过… 1 明文规定 我相信读者里面90%以上的朋友,入职公司的时候都会要求签一个协议,或者公司的明文规定,员工之间不能讨论薪资。 有的公司做的更绝! 谁如果讨论薪资被领导知道,谁就立刻马上滚蛋!那有没有想过这是为啥呢? 我们先来讨论商品上的一个词语:价格歧视,价格歧视是什么意思呢? 价格歧视(price discrimination)实质上是一种价格差异,通常指商品或服务的提供者在向不同的接受者提供相同等级、相同质量的商品或服务时,在接受者之间实行不同的销售价格或收费标准。 其实我们现在说的大数据杀熟,就是价格歧视最典型代表,在外面订酒店经常发现,朋友的手机价格和我的完全不一样。 商家为什么要搞价格歧视呢?显而易见,为了挣更多的钱,获取更多的利润。 从本质上讲,不同员工不同薪资也是一种价格歧视!(这里只是个比如,我们当然不是商品了) 虽然都是价格歧视,但企业究竟是怎么获取最大收益呢? 2 企业的心思 拿2种情况来举例: 1、老板害怕很多人知道自己的价值!大家知道在一个信息不对等的环境中,企业所掌握的信息必然是大于员工的。 企业就是利用这种信息差来获取最大的利益,HR 就成为了企业招聘节省开支的代言人,比如HR在应聘者面试的时候喜欢压价。 这里面有2个可能,第一,HR工资一般比程序员工资低,有些难免心理不太平衡,凭啥要这么高工资;第二,有些公司压价成为习惯性动作,公司为了节省人力成本,也许会将这个做为HR的考核点。 这就导致有一些程序员能力很强,在公司的工资反而不如有些能力差的程序员。如果公司薪资可以随意讨论,这类程序员必然会要求提高工作或者离职。 2、还有一种情况,很多人认不清自己的真正价值,因为默认情况下每个人都觉得自己的水平高于他人。 职场上经常会看到,很多职场上同样出身,同样的工作了5年,有可能薪资直接差倍。 职场并不是直接根据工作年龄来定薪,而是根据工作能力来定薪资。 但是有的人会横向比较,比如都是工作了3年,凭啥他的工资比我高很多?为了避免有的员工心理不平衡,因此很多公司不建议谈论工资。 3 最后 国外一些大的互联网公司,比如 Facebook 是允许员工讨论薪资的,薪酬是完全公式化的,甚至内部有一个群可以专门来讨论。 国内阿里巴巴、腾讯、百度等大厂程序员有对对应的职级,根据职级也能大概推断出某一些员工的薪资。 但对于很多中小互联网企业来讲,薪资保密还是绝大多数企业的标配。所以对于我们个人来讲,避免价格歧视可以做以下准备。 找工作的时候,尽量的去要一个高价,不要指望公司内部涨薪,大部分公司的内部涨薪,聊胜于无。 同时尽量提高自己的技水平,到年底的时候主动提出涨薪的要求,如果公司没有给出应有的薪资,自己也有能力去跳槽到更好的公司。 不过真实的情况下,公司内部有很多小圈子,在圈子内部一定都会讨论薪资的,至少身边人的薪资肯定是清楚的。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!