2020年度总结
2020年度总结引子
Dream as if you’ll live forever. Live as if you’ll die today. ——James Dean
从刚入行的新人,到看着新一届的实习生实习,新一届的应届生入职。很快,我也在OPPO一年半了
开始过年的时候经历了一把疫情,当时最直观的感觉有两个,一个是每天的生活都充斥了许许多多的新闻,从武汉封城到雷神山火神山医院,另一个感觉就是每天起来假期就会被延长几天,看着假期不断增加还是挺开心的。
过去的一年有收获有遗憾,新的一年刚开始,就从收获开始说吧
收获做饭因为疫情原因,在深圳的生活的时候重拾了做饭这个已经被荒废许久的技能。一直到现在,周末的时候还是喜欢自己做饭吃,也算是自己减压的一种方式吧
成就感从OPPO Relax开始到后面参与开发、维护的各个模块和项目都给我带来了一种特别的成就感,在微博刷到用户用了我参与开发的功能、在软件商店看着用户的评论,内心都有一种浓浓的成就感,虽然开发的过程中总有磕磕绊绊,也曾失落、气馁过,但是等到功能上线的时候,成就感总是能让我重新振作起来面对下一个问题
扩展爱好读书 ...
微信小程序学习笔记--Note one
微信小程序学习笔记–Note one小程序的代码目录结构
app.js
注册微信小程序应用
app.json
当前小程序的全局配置,包括小程序的所有页面路径
app.wxss
保存微信小程序的全局样式
project.config.json
项目配置文件,我们可以在这里做一些个性化的配置,例如调节我们开发的时候界面的颜色,或者小程序的编译配置等等
sitemap
配置小程序机器页面是否允许被微信索引
pages
微信小程序内的所有页面
每一个页面最多由四个部分组成
js
微信小程序页面逻辑和数据交互
json
配置微信小程序的页面信息
wxml
展示小程序页面的元素和内容
wxss
设置页面的样式
utils
存放工具函数,让代码复用,从而更加简洁
小程序的配置文件全局配置在小程序中,我们总共有五个配置是全局配置独有的
Pages
主要是用于注册我们小程序的所有页面
tabBar
如果我们的小程序是一个多tab的应用,我们可以通过这个配置来指定我们tab栏的表现
networkTimeout
设置各个网络请求的 ...
Hexo 2021年8月23日之后无法提交Blog的解决办法
Hexo 2021年8月23日之后无法提交Blog的解决办法今天上传日志的时候突然发现了一个这个错误
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
解决办法如下
打开Github创建token
第一步,点击Settings
第二步,找到Developer Settings
第三步,创建新的Token
第四步生成Token
第五步添加Token
复制生成的Token,window10 可以搜索凭据管理器
第六步
第七步
输入Tokens,并确定
第八步
hexo clean
hexo g
hexo d
分别执行上述命令,即可上传Blog
如何阅读论文文献
如何阅读论文文献最近因为工作需要,开始阅读了一些计算机图形学以及计算机视觉的文献,根据自己的看论文的经验和项目的需要总结了以下几个看文章的Tips
初筛论文在这一步,我们需要筛选出适合我们当前方向的论文,具体应该如何做呢?
了解需要涉足的领域的会议、期刊的分类和级别,选文章看方向,可以从顶会顶刊开始向下看
了解这个方向的大牛,时刻关注他们的动向
当我们找到一篇文章之后,首先我们要阅读摘要和标题,摘要部分会提供给我们一篇文章的主要研究手段和研究成果从而帮助我们确定这篇文章是否与我们的研究方向一致
看过摘要之后,我们可以通过文章的结论进一步确认该文章和我们研究方向是否有偏差
摘要和结论和我们的研究方向一致就可以继续读下去
文章尽量找最近五年的文献
阅读文章当我们正式开始阅读我们的文章的时候,我们可以遵循如下的阅读步骤
快速扫描一次标注和图示
阅读引言进一步了解文章背景
深度挖掘文章的结论和讨论部分以及实现部分
在阅读的过程中,我们可以尝试通过一些实现较为快捷同时语言本身有很多三方包可用的语言来复现文章的实验结果,例如Python
在阅读的过程中,我们也会有相关的笔记, 关于做笔记个人 ...
Android MVVM Study Note--ViewModel学习总结&&源码解析
Android MVVM Study Note–ViewModel学习总结&&源码解析https://developer.android.com/topic/libraries/architecture/viewmodel
简介ViewModel是Android Jetpack组件库中的一个组件,其主要特性为ViewModel自身同Activity、Fragment、Service的生命周期绑定,在组件的声明周期内数据会一直保存在内存中。
简而言之,它就是一个具有生命感知能力的用于存储和管理数据的组件
ViewModel的优势
与UI层的低耦合
在MVVM模式的设计中,ViewModel只需要关注数据和业务逻辑而不需要处理UI上的逻辑
Fragment间共享ViewModel的数据
使用ViewModel共享数据可以免去Fragment之前相互回调,官方文档介绍如下:
https://developer.android.google.cn/topic/libraries/architecture/viewmodel#sharing
使用ViewModel可以让F ...
深入拆解Java虚拟机学习笔记2
深入拆解Java虚拟机学习笔记2在Java中,我们引入了八个基本类型来支持数值计算,我们首先需要来了解下基本类型在Java中的具体实现
Boolean类型
Java语言规范中,Boolean类型的值只有两种可能,分别用true和false来表示
在Java虚拟机规范中,Boolean类型被映射成为了int类型,具体来说就是true被映射为了1,而false被映射为了0
Java的基本类型
类型
值域
默认值
虚拟机内部符号
boolean
{true,false}
false
Z
byte
[-128,127]
0
B
short
[-32768,32767]
0
S
char
[0,65535]
‘\u0000’
C
int
[-2^31,2^31-1]
0
I
long
[-2^63,2^63-1]
0L
J
float
~[-3.4E38,3.4E38]
+0.0F
F
double
~[-1.8E308,1.8E308]
+0.0D
D
Java的基本类型都有对应的值域和默认值,byte、short、int、long、float、do ...
深入拆解Java虚拟机学习笔记1
深入拆解Java虚拟机学习笔记1为什么Java需要在Java虚拟机里面运行?Java 作为一门高级程序语言,它的语法非常复杂,抽象程度也很高。因此,想要像汇编语言一样直接在硬件上运行这种复杂的程序并不现实。所以呢,在运行 Java 程序之前,我们需要对其进行一番转换,转换成为机器可以理解的语言。当前主流的转换思路是这样子的,设计一个面向 Java 语言特性的虚拟机,并通过编译器将 Java 程序转换成该虚拟机所能识别的指令序列,也称 Java 字节码。
Java 虚拟机可以由硬件实现,但更为常见的是在各个现有平台(如 Windows_x64、Linux_aarch64)上提供软件实现。这么做的意义在于,一旦一个程序被转换成 Java 字节码,那么它便可以在不同平台上的虚拟机实现里运行。这也就是我们经常说的“一次编写,到处运行”。虚拟机的另外一个好处是它带来了一个托管环境(Managed Runtime)。这个托管环境能够代替我们处理一些代码中冗长而且容易出错的部分。其中最广为人知的当属自动内存管理与垃圾回收机制。除此之外,托管环境还提供了诸如数组越界、动态类型、安全权限等等的动态检测, ...
Flutter探索之路之Widget(Container篇)
Flutter组件之Container简介
A convenience widget that combines common painting, positioning, and sizing widgets.
一般我们会在将这个组件用于设置widget的背景样式,限制尺寸或者形状。Container可以帮助我们组合、装饰和定位子widget。
如果将widget包装在无参的container中,其外观不会发生任何变化
如果没有其他内容,container将根据其子容器自行调整大小
属性Container({ Key key, //唯一标识符 this.alignment, //child的对齐方式 this.padding, //padding(容器内间隔,属于decoration作用区域) Color color, //container背景色 Decoration decoration, //背景装饰 this.foregroundDecoration, //前景装饰 double width, //容器宽度 d ...
Kotlin高级函数--顶层函数
Kotlin高级函数–顶层函数、扩展函数、中缀调用顶层函数在我们的日常的开发过程中我们或多或少的会创建一些Util类,一般我们的写法是这样的:
package com.example;import android.content.Context;import android.widget.Toast;public class ToastUtil { private static Toast mToast; private static void showToast(Context context, String toastContent) { if (mToast != null) { mToast.cancel(); } mToast = Toast.makeText(context, toastContent, Toast.LENGTH_SHORT); mToast.show(); } private static void sho ...
Flutter探索之路--Dart语法
Dart语法注释和Java一样,基础的注释没什么不同的(//、/* */)
Dart中可以使用文档注释符号:///或者/**开头,之后通过dartdoc命令进行文档导出,导出的文档存放于工程根目录/doc/api/中,点击index.html之后就可以看到文档了
变量和常量变量声明:var,Object,dynamic
var name = '张三' ;//如果对象不限于单一类型(没有明确的类型),请使用Object或dynamic关键字Object name = '张三';dynamic name = '李四';
在Dart中,一切皆为对象,所以如果我们没有对变量做初始化,默认值为null
常量常量声明:final、const
一个final变量只能被设置一次,const变量是一个编译时的常量,也可以看作为隐式的final
flnal 或者 const 不能和 var 同时使用
如果常量是类级别的,我们需要使用static const,例如:
static const speed = 100;
const关 ...