纵有疾风起,Petterp与他的2022

引言

每逢年末,都要来聊一聊关于今年的各种事情,今昔也不例外:)

与往年不同的是,今天刚搬完家,现在是晚上 1:44 ,正是忙碌一天后比较头痛的时刻。

此刻写点东西,脑子也许会放松一下。?

坐在桌子前,脑子里飞速的旋转,好多回忆或者事情飞速轮播;

去审视自己的心灵,有坚忍、也有丑陋;有下意识的谦逊、也有如初生的自大。 你是谁?Petterp 又是谁? 如分裂的同化对峙,又似 ? 桥段的即将预演。

Hi,这是 Petterp 与他的 2022

本篇可能不会对你有技术上的帮助,更多是一个技术的经历与思考,希望我的生活,对你也会有所体会。

年末碎碎念

每到年末,总会有一些感觉。

好像什么都没做,好像什么都做了一点。

总觉得时间流逝的好快,自己似乎在一天天变的拖延,第二天计划列了一堆,但到了第二天,大概率又是原地停留,看似表现的很努力,但如果努力只是坐在桌前发呆或者前进一步,那就等同于一种病态的麻木,或者自我安慰。

这一情况在年中到达了顶点,做任何事都要想很多,却没有去完成第一步,那就是 行动 起来。

直到年中结束时,这一征兆开始现有改观,总算有些好转,再次回头去看,别想复杂,先动起来。

你不可能任何事都会按照预期来做,但别放弃最基本的行动。 No more excuses.

技术三两事

我觉得每一个同学都希望得到一种身份认同,或者说是小圈子文化,无论是在 IT 行业还是其他行业。

这一年,为了加速融入小圈,Petterp 做了这些事。

第一次参加DevFest

我在左边 ??,右边是未来的移动端隐藏大佬-康神,掘金地址。 今年第一次参加 Google DevFest,也认识了几个常常活跃在掘金的大佬们,比如江同学(江佬)。

compose工作坊 时,硬着头皮写了半小时 compose ,因为许久没使用,基本都给遗忘了,好几次求助了江同学,最终写了一个过于简陋的demo。结束时又在江同学的帮助下厚着脸皮拿到了参与礼品,脸上那是一顿烧啊,情景不能说很惭愧,可以说特别惭愧,一度想找个地缝钻进去?。

回去路上那是一顿痛下决心啊,哈哈。

对比之下,觉得距离追上江佬还是差距甚远,任重而道远。

我是这样坚信,别人行,我怎么能不行。

第一次作为GDG讲师

下半年一直在 GDG 进行投稿,因此受到了 阿力 的邀请线上分享,第一次邀请时没有想好该分享什么(也是因为不敢踏出第一步,就退缩了?),等到第二次再邀请时,想着那就试试吧,就硬着头皮开始了。

选题时,想了很多,起初想聊聊 Android JetPack 生命周期组件系列的设计探索,但最后还是将选题落到了Kotlin 相关。

最终定的标题是 聊聊Kotlin的进阶使用技巧 ,主要谈一谈 Kotlin 隐藏的性能误区及常用注解和使用技巧。

定位相对比较简单,属于学会就能运用的一些技巧,对于经常使用 Kotlin 的同学而言,的确很简单,大佬看个热闹就行。

虽然 [相对] 简单,不过为了准备这次分享,前前后后还是花了近一周时间,在家里自己还预演了几次,哈哈哈。

最后等分享完再看完 乔禹昂(乔佬) 的分享 Kotlin函数式编程,脸上又是一度滚烫,甚感惭愧,自己离大佬差距还是很大。

借用群里小伙伴的话就是:

不过还是感谢阿力,以及GDG的小伙伴们。

对我而言,这是我第一次迈出自己的熟悉的环境,作为线上直播的处女秀。对于移动端开发而言,希望我的经验也能帮助到使用 Kotlin 的小伙伴们,如果觉得有用,那就是最大的满足了。

更重要的要感谢我女朋友,听我一遍遍的预演与纠正我的英语发音。

第一次开源受到打赏

今年是 认真 做开源贡献的第一年,FloatingX 依然是花的时间最多的一个项目,对我个人而言,这个项目的开源是因为业务中需要,以及对其他同类开源组件的不满意,于是就有了其的诞生。

在过程中,也第一次收到了其他同学的打赏,@litaomn ,这是一种正向的反馈,自己的开源对别人有所帮助。

也感谢不断找出隐藏问题,帮助 FloatingX 前进的这些同学:

  • @lexluthors
  • @likfe

严格来说,FloatingX 并不是一个复杂或者有难度的项目。随着不断地迭代,相应的,它变得也越来越臃肿及复杂,这也是我在考虑的问题,一定程度上这是对自己负责,也是对使用的小伙伴负责。

年度优秀作者

今年是我在腾讯云写文的第一年,对我而言,这是 [认真写文] 的第二年。

其实,对我自己而言,更多的是属于 身份认同 ,关于这个话题,我们下面会再聊到。?

技术小圈的一些事

伪大佬,真白菜

今年陆续收到其他小伙伴 大佬 这样的评价,内心却一点高兴不起来,反而感到更多的是惭愧与不适。

自觉承受不起这个title,每次都比较尴尬,深知自己就是个白菜,而真大佬往往笑而不语。

那怎么样才算是一个大佬呢?

其实这个问题没有答案,人群往往就像一个金字塔一样,在这一层或者某一个房间内你是经验先驱者,有这超过其他同学的经历或者技巧,但走出这个门,或者抬头去看,自然又会有更多的先驱者,大佬更像一种认同,仅代表这个同学对你的认可。

关于认同感

如果你想得到其他人认同,或者在这个圈子中有自己的标签。自然也应该展示出应有的价值,比如最基本的某厂title、或者分享界大佬、Github冲浪达人,后者往往与前者是在一起关联。

更重要的是你能带给别人什么?你的思想传递?你的经验指北?你的人脉?

如果你什么都不能赋予,那只能作为被动的等待者,看着高朋满座,却找不到自己的坐席,当然,这些都是不明之说。

当然,你也可以放弃这些认同,专心去做一些事,找到内心的平静。大隐于市,扫地僧级别,但我相信,无论你是否要做到后者,这个过程中你都会找到自己的天地。

在社区活跃有用吗

今年,我收到了这一个 比较现实 的问题 :)

实话说,很少(于我个人而言)。

如果写博客或者开源没有为增加自己曝光的想法从而以此获得更多机会,我想,那是不可能的。

无论是那种交流群,或者技术进阶分享,背后都是提出者为了增加多的曝光机会,并以此得到潜在机会。这些行为看着掩藏着利益驱使,但我坚信 这些行为本身所带来互动是善意、正向的,是一种共振激励

在技术领域,无论是 写作 还是 开源社区贡献 或者 产品 的诞生,都是一种 创作 ,创作本身是为了解决一些问题或者创造新的可能。对于创作者而言,将所思所想能完整的叙述出来,不止是 文字视频,也可以是其他形式,并因此得到其他同学的 正向反馈 ,这便是一种能力。

Flag的打脸时刻

去年定了一些Flag,到现在我们再回顾一下2022:

  • Flutter 的学习与深入
  • 设计模式在开源组件中的应用
  • 音视频入门,开源相关组件
  • Android 三方库的源码梳理
  • Github star400
  • 视频剪辑,能做简单的视频处理

说来惭愧,上述的任务实现的只有寥寥数几,但相关的,又去干了其他事:

  • 能写简单的 gradle 小插件,了解相关流程;
  • JetPack 系列库的源码解析(目前完成了生命周期系列组件)
  • Android 资源管理的流程分析
  • Kotlin 相关文章分享

如果去查看 Github ,也不难发现,上半年一直处于偷懒状态,下半年才开始逐渐发力。

北京生活这些事

关于感情

如果某个人比你妈对你都在意,那这个人可能是你所寻找的那一个。

今年,我找到了她。

我遇到了一个女孩,她是我最坚定的支持者。她的脾气我偶尔也琢磨不定,她很会在意一些 [小] 事情,但对我这种大粗心而言,总觉得这些事情不都是小事吗?于是这种想法让我们不止一次长谈?‍?️。

相比于以前,今年能更好的控制情绪,也能更加理解别人的感受,有时候想想,我的某些行为是挺够糟糕的。

有时候,问过几遍自己,如果人生要选择一个人这样走下去,会觉得后悔吗?

起初我没有答案,但突然某些时刻,你希望生命中能与这个人常伴,答案也就 跃然于心

希望你有如冬般的冽气,如水般的自由,无论到哪里,也别遗失对自己的充盈。

养猫日子

今年家里新添加了两个小朋友,西瓜妹妹

左边妹妹,右边西瓜。

妹妹是前主人因为猫毛过敏,送给我代养,西瓜是为了陪伴妹妹然后再养的一只,主要是担心一只猫比较孤独。

然而没准对妹妹来说:可悲的人啊,本姑娘一个才不孤独呢。 ?

家里的宠物设备也一直没更新,还是老的智能四件套,凑合用吧,要啥自行车。

摄影随拍

什么是好的照片?

这个问题我想了一会,是 技巧、后期、还是拍摄的主体与专业的摄影师呢

我的理解是:对每个人而言,当拿起手机或者相机,按下快门的那一刻,这便是好的照片,或者说值得留存的回忆,至少对我们自己而言是这样。

摄影是一门艺术,上帝将神来之笔给予我们每个人,让我们得以记录影像,从而留下瞬间。

无论岁月如何变迁,当你或者朋友再次翻起这张照片,这段视频,我们嘴角都会不自然的微笑,或者思绪的无限飞舞。

什么是好的照片,一定要增加好的故事,好的手法吗?

我想并不需要,因为当你开始按下快门的这一刻,这就是 好的照片

为什么要买一部相机?

不知道为什么,当我拿起手机,站在人群中,某些时刻会有点 社恐 ,没法很认真的去拍摄一张我想保存下的珍贵时刻。但如果是相机,这种情况就会少很多。我没法去评定为什么会这样?

所以,于我而言,拿起相机,意味着有更多的瞬间,被我留存。

这些我所参与的时刻、爱着的人、呼吸的世界,走过的土地、见过的事物、望过的天,都将连同这一瞬的照片而被隐如字节之中。 在未来的某个时刻,也许我会再翻起这些回忆,也相信依然会想起那天我所珍重的世界。

关于印象

其实我挺反感背后对某人进行议论,因为大概率是 一个故事从一个人物传递到另一个人物 ,在没有当事人在场的情况下,这些话语就 逐渐变了味道 。但大多数时候,我们总会经历这样的事情,然后某一刻你在别人那里听到了这些评价,感触良多,甚至会有点叹气。

很多时候,我们也无法决定别人对你的评价或者印象,就像对我个人而言,逐渐也无法看不懂这个世界的有些变化。

但事物总是 一个板子拍不响 ,与其在意这些想法,不如放弃这些 繁琐 的礼仪。

道不同不相为谋,就是如此。

关于身体

年初因为坚持健身,体重一度掉到了 120 斤以下,然后随着疫情在家隔离后,开始摆烂,现在又胖回到了140(里外里胖了40斤) 。真是尴尬,仿佛又要看到 [160] 的自己了,每天摸摸肚子,不由叹气。?

今年一定要控制在130,这个事情不是Flag,这是基本属性。?

今年去检查视力时,发现左右眼都近视了(左眼100+散光40,右眼150),而这个数据两年前似乎是 左眼1.0,右眼近视150? 。

于是怀着一种恐慌的心情,转角就去潘家园配了一副眼镜,戴上后那是一个清晰啊?。 神说,仿佛若有光!如果说以前看到的世界是 4k+朦胧效果 ,那现在就是 真4k+HDR+分区背光 ,不由的一阵眩晕。不过我觉得戴的几率应该不大,主要还是不适应。

虽然觉得平时已经够注意用眼了,但事实总是让人沉默,朋友们,还是要注意用眼姿势啊。

立一下Flag

新的一年,当然按照老传统,要立一下新的 Flag ,先给自己打打气。??

关于技术

  • Gradle 系统化学习;
  • Android 常见库源码梳理;
    • Glide
    • OkHttp
    • LeakCanry
    • MMKV
    • Mvrx
  • Android 系统流程的梳理;
    • windows 相关;
    • App 启动流程分析;
    • Android 打包流程分析;
  • Kotlin 相关
    • KMM 学习与组件输出
  • 使用 Flutter 去写一个实际产品;

关于生活

  • 摄影艺术; 拍 1000 张照片(其实我觉得相机带出去就算一种胜利 : )
  • 做三次线上分享; 主题暂定
  • 关于我们的 未来规划
  • Github Star 破1500;
  • 有一个 百人 的技术小群;
  • 两个 未知城市,上海及厦门(待定)
  • 坚持背单词,年底之前能读懂常见技术文档;

最后

纵有疾风起,这是 Petterp 与他的 2022 ,也是一个普通技术的随笔,如果本篇对你有所帮助,那就再好不过了。

大家新年快乐~

本文转载于网络 如有侵权请联系删除

相关文章

  • Java中接口作用的理解[通俗易懂]

    大家好,又见面了,我是你们的朋友全栈君。关于Java中接口作用的深入理解。这是个很容易遇到的问题吧,看下面红色的部分应该就能理解了。要把接口视作一种共同规范。1、首先是关于接口的疑问:为什么要使用接口?接口的作用是什么?为什么不直接在实例类中进行方法实现,而是需要首先进行接口的定义?是不是多此一举了?2、其次是关于接口的使用规范:1、接口中可以定义常量,不能定义变量,如果你在接口中定义属性,那么通过反编译可以看见他会自动用publicstaticfinal修饰,接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。2、接口中所有的方法都是抽象方法,接口中方法都会自动用publicabstract修饰,即接口中只有全局抽象方法。3、接口不能实例化,接口中不能有构造。4、接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。5、接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。3、然后我们回答一下开始提出的问题:2接口的作用是什么?笔者认为接口是一种协议。例如两个开发者,开发时间完全不一致,那么需要两个人的配合开发,则需要一个人讲接口写

  • C3P0连接池配置和实现详解「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。一、C3P0配置 c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件1.setters一个个地设置各个配置项 这种方式最繁琐,形式一般是这样:[java] viewplain copy print ?<spanstyle=“font-size:14px;”>Propertiesprops=newProperties();InputStreamin=ConnectionManager.class.getResourceAsStream(“/c3p0.properties”);props.load(in);in.close();ComboPooledDataSourcecpds=newComboPooledDataSource();cpds.setDriverClass(props.getProperty(“driverClass”));cpds.setJdbcUrl(props.getProperty

  • 手把手教你把Java SDK发布到中央仓库

    写了个JavaSDK(avaLibrary),想要让更多的猿媛使用,如何发布到中央仓库(MavenCentral)呢?踩了挺多坑,简单记录下。1.向官方申请自己的groupId首先,你需要向官方申请唯一的groupId。如何申请呢?1.1.注册帐户打开链接,注册一个帐户并登录:https://issues.sonatype.org/secure/Signup!default.jspa1.2.创建一个Jira点击导航栏中的Create, Project选择CommunitySupport-OpenSourceProjectRepositoryHosting(OSSRH) IssueType选择NewProject Summary可输入mycodeproject GroupId可输入你心仪的(我这里输入的是com.github.xu42,如果你需要用自己的域名倒置一般需要做一下TXT解析) ProjectURL输入你的githubproject地址 SCMurl同理 Username输入你的用户名这是我之前的,可以参考下:https://issues.sonatype.org/browse

  • Web前端学习 第5章 node基础教程4 Node基础

    一、模块化开发之前我们做过一个练习,使用node运行一个js文件。但是在实际项目开发中,不可能将全部代码都写在一个文件中。node为我们提供了模块化的语法,每一个js文件都可以当做一个模块:require()引入一个外部模块module.exports暴露模块接口现在我们实现一个加法计算的功能,在一个add.js文件中编写一个加法函数,然后用module.exports暴露这个方法,然以在创建一个入口文件main.js引入这个加法函数,并通过加法函数计算结果。示例代码如下所示:1//add.js定义一个模块,处理加法和减法 2functionadd(a,b){ 3returna+b; 4} 5module.exports=add; 6 7//main.js引入外部模块,使用加法和减法函数 8constadd=require("./add"); 9letresult=add(10,20); 10console.log(result)复制可以看到在命令行中输出运算结果30。ES2015的模块化语法这里需要补充一个知识点,在ES2015中的模块化语法与node的模块化语法

  • Python调用基于Dubbo的Hess

    Dubbo本身支持多种远程调用方式,例如DubboRPC(二进制序列化+tcp协议)、httpinvoker(二进制序列化+http协议)、hessian(二进制序列化+http协议)、WebServices(文本序列化+http协议)等。     Dubbo是支持hessian+http协议调用的,hessian是一种二进制序列化的方式。咱们用python调用的dubbo的时候,就是用hessian+http的方式调用,所以dubbo项目要配置使用hessian方式序列化,如果小伙伴要用python调用的时候,注意要找开发小哥哥在项目里面改成hessian方式的序列化,也就是改个配置文件的事,不影响原来的项目,如下图:  咱们用python调用的时候,hessian+http这种方式调用,需要安装一个第三方模块,python-hessian这个模块,直接pip安装即可:1 2pip install python-hessian当然我们要调用dubbo接口的话,要知道dubbo接口的调用地址、方法、入参对象和入参,这个就需要开发小哥哥提供给你文档了。如果没有文档的话,就需要你能看懂ja

  • C#开发BIMFACE系列5 服务端API之文件直传

    系列目录【已更新最新开发文章,点击查看详细】BIMFACE使用了分布式对象存储来存储用户上传的模型/图纸文件。如使用普通的文件上传接口,文件流会通过BIMFACE的服务器,再流向最终的分布式存储系统,整个上传过程会受BIMFACE服务器的带宽限制,上传速度非最优。如使用文件直传接口,开发者应用在申请到一个Policy凭证后,可以直接上传文件跟BIMFACE后台的分布式存储系统,这样上传速度和稳定性都会有提升,是我们推荐的上传方式。另外,很多BIMFACE应用都有自己的Web前端页面,这种情况我们也推荐使用文件直传接口。文件直传的逻辑图如下:使用流程如下:开发者应用向BIMFACE申请上传Policy请求。 BIMFACE返回上传Policy和签名给开发者应用。 开发者应用使用在第二个步骤中获取的URL信息,直接上传文件数据到BIMFACE后端的分布式对象存储。 步骤一:获取文件直传的policy凭证请求地址:GEThttps://file.bimface.com/upload/policy请求参数: 请求path(示例):https://file.bimface.com/upload/

  • 计算机视觉中的细节问题

    (1)单阶段检测器和多阶段检测器的区别?单阶段检测器训练的时候提出直接用已知的类进行分类和回归,而多阶段检测器先提出proposal,然后根据图像中目标的坐标和大小对proposal进行筛选,之后进行分类和回归,在筛选的时候类是未知的。(2)深度学习模型的参数是存在内存中还是存在硬盘中?训练结束后将训练好的模型存入硬盘,需要使用这个模型时从硬盘读入内存,机器学习算法的时间复杂度一般指测试时间。(3)特征金字塔中特征层级的区分?高层或深层特征指的是经过层数较多的特征,此时featuremap较小。低层或浅层特征指的是经过层数较多的特征,此时featuremap较大。(4)jaccardoverlap是什么?就是IoU,表达式为:(5)训练中的epoch是什么?当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个epoch。然而,当一个epoch对于计算机而言太庞大的时候,就需要把它分成多个小块。为什么要使用多于一个epoch?我知道这刚开始听起来会很奇怪,在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但是请记住,我们使用的

  • 亚马逊提出新的表征方法,使Alexa的技能选择错误率降低了40%

    编译:chux出品:ATYUN订阅号亚马逊的研究人员通过使用新颖的数据表征技术,成功地提高了Alexa选择第三方应用程序的能力。在博客文章和随附的论文“CoupledRepresentationLearningforDomains,IntentsandSlotsinSpokenLanguageUnderstanding”中,AlexaAI部门的亚马逊科学领导者Young-BumKim和团队描述了一个为自然语言任务设计的方案,可以将Alexa的技能选择错误率降低40%。该研究将在本月晚些时候在希腊雅典举行的IEEE口语技术会议上展示。Kim表示,“近年来,数据表示已成为机器学习中的一个重要研究课题,例如,自然语言理解(NLU)系统很少将原始文本作为输入。相反,它们采用嵌入,数据表示来保留关于文本的语义信息,但是以一致的,形式化的方式来呈现。并且一次又一次地使用嵌入而不是原始文本来提高特定NLU任务的性能。”新的表征方法利用了Alexa处理请求的方式。正如Kim解释的那样,Alexa首先按照主题区域或域名(例如音乐或天气)对请求进行分类,然后按意图或预期行动对请求进行分类。它们根据定义Al

  • Autodesk Revit 2019安装教程

    Revit是Autodesk公司一套系列软件的名称。Revit系列软件是专为建筑信息模型(BIM)构建的,可帮助建筑设计师设计、建造和维护质量更好、能效更高的建筑。AutodeskRevit作为一种应用程序提供,它结合了AutodeskRevitArchitecture、AutodeskRevitMEP和AutodeskRevit,Structure软件的功能。Revit是我国建筑BIM体系中使用最广泛的软件之一。使用平台:Windows获取方式:微信公众号:小白课代表后台回复『073』或『Revit』。Revit2019❶解压下载好的压缩包。❷在非系统盘新建一个文件夹(不包含中文)❸双击安装程序,解压到刚刚新建的文件夹。❹解压好之后点击安装。❺接受协议许可并下一步。❻更改软件安装路径到之前新建的文件夹,点击安装。❼经过耐心地等待,安装好以后,点击立即启动。❽点击“输入序列号”并点击“我同意”。❾点击“激活”❿断开网络连接,进行脱机激活!!!输入序列号“666-69696969”,输入密钥“829K1”(提示已过期或失败重新激活即可)。如果出现下图↓关闭后再重新打开Revit进行激活,

  • Spark学习入门(让人看了想吐的话题)

    这是个老生常谈的话题,大家是不是看到这个文章标题就快吐了,本来想着手写一些有技术深度的东西,但是看到太多童鞋卡在入门的门槛上,所以还是打算总结一下入门经验。这种标题真的真的在哪里都可以看得到,度娘一搜就是几火车皮,打开一看都是千篇一律的“workcount”、“quickstart”,但是这些对于初学者来说还差的太多,这些东东真的只是spark的冰山一角,摸着这些石头过河的话,弯路太多、暗礁涌动,一个不留神就掉河里了。希望我这篇文章能让大家看到些不一样的地方。文章分五个部分,包括官网、blog(特指某sdn)、书籍、源码、视频五个角度,多视角分享一下对于初学者而言在选择学习方法时改如何取舍。奇葩的技术blog之所以说奇葩,是因为大家都是相互抄啊抄,这个在某sdn特别流行,知乎上已经有关于这个的吐槽了,国内的技术论坛跟国外还差几条街,StackOverflow上关于各种疑难杂症的回答都非常专业,但是国内鲜有这样的大型平台。如果大家要通过某sdn的技术博客学习spark,那坑真是太多,大家能碰到及时更新并且分析深入、全面且合理的博主的概率真是太低。首先在信息大爆炸时代,人人都是信息源,博客

  • Ansible 详细用法说明(二)

    例:获取某台主机的变量ansible10.1.6.68-msetup复制===================================== script:发送脚本到各被管理节点,并执行。不需要参数=====================================ansibleall-mscript-a'test.sh'复制直接在-a后面指定脚本即可。=============================== selinux:管理selinux。===============================conf#指定应用selinux的配置文件。 state=enforcing|permissive|disabled#对应于selinux配置文件的SELINUX。 policy=targeted|minimum|mls#对应于selinux配置文件的SELINUXTYPE复制关闭selinux:ansibleall-mselinux-a'state=disabled'复制===========================

  • 【Flutter 异步编程 - 贰】 | 详细分析 Future 类的使用

    theme:cyanosis本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究! 张风捷特烈-出品一、分析Future对象对于Dart语言来说,异步使用的过程中,绝大多数场景和Future对象有关。C++、Java语言中也有Future的概念,对于JavaScript/Typescript来说就是Promise对象。它们是异步任务结果的封装,对暂未完成任务的一种预期(Future)或允诺(Promise)。1.认识Future对象前面说过,异步任务有三种状态。在任务分发之后,任务处于未完成状态,而其返回值便是Future对象。比如上一篇中使用的文件异步写入方法writeAsString,其返回值是Future<File>类型。Future可以指定一个泛型,该类型就是所期待的结果。如下所示,在触发writeAsString方法之后,返回值是一个对未来的期待。这里期待返回的类型是File,也就是写入后的文件对象。voidsaveToFile(TaskResultresult){ StringfilePath=path.join(Direct

  • springboot websocket 跨域_前端websocket框架

    大家好,又见面了,我是你们的朋友全栈君。WebSocket是HTML5开始提供的⼀种在单个TCP连接上进⾏全双⼯通讯的协议,可以实现跨域访问。 websocket安装命令npmiws-S 服务器端:letWebServerSocket=require("ws").Server; letwss=newWebServerSocket({ port:8200}); constmysql=require("mysql2"); //数据库连接 letconnection=mysql.createConnection({ host:"localhost", user:"root", password:"123", database:"firstdb", charset:"utf8" }); //websocket服务端 //连接成功后,会执行回调函数返回一个ws参数 wss.on("connection",function(ws){ /

  • 《从0到1:CTFer成长之路》ctf 学习笔记

    文件包含 [第一章web入门]afr_11 打开靶机:http://2653e528-79eb-4ce4-bb1c-1208500fa8f8.node4.buuoj.cn:81/?p=hello 看到形如?p=或者?file=、?page=类似的就要警惕。很有可能是文件包含漏洞。 尝试包含index或者flag。发现包含flag后报错nonono(导致代码执行了,看不到flag) 尝试伪协议包含。 http://2653e528-79eb-4ce4-bb1c-1208500fa8f8.node4.buuoj.cn:81/?p=php://filter/read=convert.base64-encode/resource=flag 得到PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9,base64解码即可。 需要注意的是这道题用write不可以。不写read=,或者写read=都可以。 合天网安练习题 到合天官网,搜索:第十一周|签到般的包含 https://www.hetianlab.com/expc.

  • 关于VS2015支持编译Linux程序的问题

    现状目前已经发布的VS2015中包括VS2015Preview以及VS2015CTP6,这两个版本均不支持直接编译C++代码为Linux程序,具体情况可以参考VisualStudio2015CTP6和VisualStudio2015Preview。正式版发布时间在微软官网没有找到明确的发布时间,只是说在今年晚些时间发布。另外Windows10正式版的发布时间为夏末秋初,推测到时候VS2015正式版也会一起推出,参考文章夏末秋初!Windows10正式版发布时间确认。可能的问题从目前各种资料来看,VS2015正式版发布后,有可能会支持Linux程序的开发和编译,但更大的可能性是通过C#开发,来达到跨平台的可能,目前微软已经开源了DotNetCoreCLR,计划支持Windows、Linux、IOS三个平台。从OpeningupVisualStudioand.NETtoEveryDeveloper,AnyApplication:.NETServerCoreopensourceandcrossplatform,VisualStudioCommunity2013andpreviewofVisu

  • SEO技巧之WordPress篇幅

    随着搜索引擎大兴,排列在前的网站引入大量流量.无论是搜索页面的广告还是查出来的结果,与搜索者的目标匹配度都比较高(如果搜索引擎足够智能),所以通过搜索引擎而来的访客很可能会从网站上得到他想要的东西,并记住这个网站.也就是说,搜索引擎会带来很多有价值的流量,所以花点时间针对搜索引擎优化一下WordPress博客也是值得的.本文将为你分享一些 WordPressSEO技巧.以前我没有花太多时间做搜索引擎优化,搜索引擎收录效果不是很好.去年二月我终于为博客搞了一下SEO,写下这个文章.一年半以来陆续进行了更多SEO优化,博客文章写得不多了,流量却有增无减,网站也重回PageRank7,效果相当不错的.这次我根据自己的WordPressSEO方案更新了本文的内容.我不是什么SEO高手,但作为一个搞搜索的前端开发,或多或少知道一点,折腾一下算是自我陶醉,高人请绕道前行.目录优化博客副标题区分显示页面标题Keywords和Description定义面包屑使用h1,h2,h3,strong标签将RelatedPost改为MorepostsaboutXXX在类目页面和标签页面的添加概要描述与

  • 【模板】最小圆覆盖

    P1742最小圆覆盖 题目描述 给出N个点,让你画一个最小的包含所有点的圆。 输入格式 先给出点的个数N,2<=N<=100000,再给出坐标Xi,Yi.(-10000.0<=xi,yi<=10000.0) 输出格式 输出圆的半径,及圆心的坐标,保留10位小数 输入输出样例 输入#1 6 8.09.0 4.07.5 1.02.0 5.18.7 9.02.0 4.51.0   输出#1 5.0000000000 5.00000000005.0000000000 说明/提示 5.005.005.0 随机数处理复杂度为O(n) 第一个点定为圆心; 第二个点和第一个点的连线的中点定位圆心,距离为直径; 第三个点要和前两个点进行三点定圆;     #pragmaGCCoptimize(2) #pragmaGCCoptimize(3,"Ofast","inline") #include<bits/stdc++.h>//O(n),最小圆覆盖 #definelllonglong #definemet(a

  • tomcat更新class不生效

    替换线上lib里的class不生效,需要想想是不是前人为了图方便在classes里面扔了一份老版本class

  • CSRF攻击原理

    CSRF是什么呢?CSRF全名是Cross-siterequestforgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。想要深入理解CSRF的攻击特性我们有必要了解一下网站session的工作原理。  session我想大家都不陌生,无论你用.net或PHP开发过网站的都肯定用过session对象,然而session它是如何工作的呢?如果你不清楚请往下看。  先问个小问题:如果我把浏览器的cookie禁用了,大家认为session还能正常工作吗?    答案是否定的,我在这边举个简单的例子帮助大家理解session。 比如我买了一张高尔夫俱乐部的会员卡,俱乐部给了我一张带有卡号的会员卡。我能享受哪些权利(比如我是高级会员卡可以打19洞和后付费喝饮料,而初级会员卡只能在练习场挥杆)以及我的个人资料都是保存在高尔夫俱乐部的数据库里的。我每次去高尔夫俱乐部只需要出示这张高级会员卡,俱乐部就知道我是谁了,并且为我服务了。   这里我们的高级会员卡卡号=保存在cookie的sessionid; 而我的高级会员卡权利和个人信息就是服

  • 7天用Go动手写/从零实现Web框架Gee

    目录 第一天:前置知识(http.Handler接口),Code-Github 第二天:上下文设计(Context),Code-Github 第三天:Tire树路由(Router),Code-Github 第四天:分组控制(Group),Code-Github 第五天:中间件(Middleware),Code-Github 第六天:HTML模板(Template),Code-Github 第七天:错误恢复(PanicRecover),Code-Github 设计一个框架 大部分时候,我们需要实现一个Web应用,第一反应是应该使用哪个框架。不同的框架设计理念和提供的功能有很大的差别。比如Python语言的django和flask,前者大而全,后者小而美。Go语言/golang也是如此,新框架层出不穷,比如Beego,Gin,Iris等。那为什么不直接使用标准库,而必须使用框架呢?在设计一个框架之前,我们需要回答框架核心为我们解决了什么问题。只有理解了这一点,才能想明白我们需要在框架中实现什么功能。 我们先看看标准库net/http如何处理一个请求。 funcmain(){ http

  • 35.winform之保存对话框

    效果 实现 代码 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.IO; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Windows.Forms; namespaceWindowsFormsApp5{ publicpartialclassForm1:Form{ publicForm1(){ InitializeComponent(); } privatevoidbutton1_Click(objectsender,EventArgse){ SaveFileDialogsaveFileDialog=newSaveFileDialog(); saveFileDialog.Title="请选择要保存的路径"; saveFileDialog.InitialDirectory=

相关推荐

推荐阅读