精华内容
下载资源
问答
  • Grace Hopper为Remington Rand工作,是在第一个著 名的编译器——A-o.上开始设计工作。当Rand在1957年发布这个语言时,它被称为MATH-MATIC。 1952 AUTOCODE Alick E. Glennie ,他利用自己在曼彻斯特大学课余时间...

    1951 Grace Hopper

    Grace Hopper为Remington Rand工作,是在第一个著 名的编译器——A-o.上开始设计工作。当Rand在1957年发布这个语言时,它被称为MATH-MATIC。

    1952 AUTOCODE

    Alick E. Glennie ,他利用自己在曼彻斯特大学的课余时间,发明了一个名为AUT0CODE的编程系统,一个未能成型的编译器。

    1954 Fortran

    F0RTRAN (F0Rmula TRANslator的缩写)意为“公式翻译器”,是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。F0RTRAN 语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。

    1958 LISP
    LISP语言(全名LISt Processor, 即链表处理语言)由约翰.麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言。

    1959 Cobol

    COBOL (Common Business Oriented Language)是数据处理领域最为广泛的程序设计语言,是第一个广泛使用的高级编程语言。主要应用于数值计算并不复杂,但数据处理信息量却很大的商业领域。

    1962 Simula

    Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。

    1964 Basic

    BASIC(Beginners’Al1- purpose Symbolic InstructionCode)的意思就是“初学者的全方位符号指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一一种解释语言,在完成编写后不须经过编译及连结即可执行,但如果要单独执行仍然需要编译成可执行文件。

    1968 Pascal

    Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。Pascal 的取名是为了纪念十七世纪法国著名哲学家和数学家Blaise Pascal,它由瑞士Niklaus Wirth 教授于六十年代末设计并创立。

    1969 C

    C语言既具有高级语言的特点,又具有汇编语言的特点,由美国贝尔研究所的D. M. Ritchie于1972年推出。1978后, C语言已先后被移植到大、中、小及微型机上。

    1975 SQL

    SQL (Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

     1983  C++C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。


    1987  Perl
    Perl象C-样强大,象awk、sed等脚本描述语言- -样方便。Perl借取了C、sed、awk、 shell scripting以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。Perl最初的设计者是拉里.沃尔(Larry Wall), 发表于1987年12月18日。

     

    1991 Python

    Python是-种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明,第-一个公开发行版发行于1991年。Python 是一种代表简单主义思想的语言。阅读-一个良好的Python程序就感觉像是在读英语-样。它使你能够专注于解决问题而不是去搞明白语言本身。

     

    1995 Java

    Java是一种简单的,面向对象的,分布式的,解释的,健壮的,安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。

    Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME) 的总称。在Java出现以前。Internet.上的信息内容都是一些乏味死板的HTML文档。

     这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力,而SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将0AK技术应用于WEB.上, 并且开发出了HotJava的第一一个版本。 

    1995 JavaScript

    JavaScript是一一种 能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言。


    2001 C#
    C# (C Sharp)是微软为. NET框架量身订做的程序语言,C#拥有C/C++的强大功能以及Visual Basic简易使用的特性,是第一个组件导向的程序语言,与C++和Java同样是面向对象程序设计语言
     
    2002. Net

    , NET是Microsoft XML Web服务平台。XML Web服务允许应用程序通过Internet进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。



    2005 Ruby On Rails

    Ruby on Rails 是一一个可以使你开发、部署、维护web应用程序变得简单的框架, Ruby以7月的诞生石ruby (红宝石)命名。

    2009 Node. JS

    Node是-一个服务器端JavaScript 解释器,它改变了服务器应该如何工作的概念。它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一台物理机的连接代码。当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。




    转载于:https://www.cnblogs.com/sky2737/p/9906740.html

    展开全文
  • 开发文档 ... Go语言核心开发团队 Ken Thompson (肯·汤普森) :1983年图灵奖获得者... Robert Griesemer :曾协助制作Java HotSpot编译器,和Chrome浏览器JavaScript引擎V8 Google为什么创建Go 计算机硬件技术...

    开发文档

    https://studygolang.com/pkgdoc


    Go语言核心开发团队

    1. Ken Thompson (肯·汤普森)  : 1983年图灵奖获得者,Unix原创者之一,C语言主要发明人
    2. Rob Pike (罗布·派克)  : 贝尔实验室Unix、Plan 9操作系统成员,创出广泛使用的 UTF-8 编码
    3. Robert Griesemer :曾协助制作Java HotSpot编译器,和Chrome浏览器的JavaScript引擎V8

    image-20200718103112309


    Google为什么创建Go

    1. 计算机硬件技术更新频繁,性能提高很快,目前主流的编程语言发展明显落后,不能合理利用多核多线程的优势提升软件性能
    2. 软件复杂度越来越高,维护成本越来越高,缺乏一个足够简洁高效的编程语言(风格不统一,计算能力不够,高并发处理不好)
    3. 企业运行维护很多c/c++/java,虽然他们运行速度很快,但编译速度很慢,还存在内存泄漏,并发处理不够的问题解决

    Go语言的发展历史

    • 2007年 谷歌工程师开始设计一门全新的语言,这就是Go语言最初的原型
    • 2009年11月10日,Google将Go语言以开放源代码的方式向全球发布
    • 2015年8月19号,Go1.5版本发布,本地更新移除了最后参与的C代码
    • 2017年2月17号,Go1.8版本发布
    • 2017年8月24号,Go1.9版本发布
    • 2018年2月16号,Go1.10版本发布

    Go语言的特点

    Go语言保证了既能达到静态编译语言的安全和性能,又达到了动态语言开发维护的高效率可以形容:Go = C + Python

    • 从C语言中继承了很多理念,包括表达式语法,控制结构,数据类型,指针等,也保留了C语言一样的编译执行方式
    • 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,不能单独存在
    • 垃圾回收机制,内存自动回收,不需要开发人员管理【稍微不注意就会出现内存泄漏】
    • 天然并发支持【重要特点】
      • 从语言层面支持并发,实现简单
      • goroutine,轻量级线程,可实现大并发处理,高效利用多核
      • 基于CPS并发模型(Communicating Sequential Processes)实现
    • 吸收了管道通信机制,形成go语言特有的管道channel,通过管道channel,可以实现不同的goroute之间的相互通信
    • 函数返回多个值
    • 新的创新,比如切片slice,延时执行defer等

    Golang执行流程分析

    image-20200718161111596

    执行流程分析

    • 如果我们先编译生成了可执行文件,那么我们可以将可执行文件拷贝到没有go开发环境的机器上直接运行
    • 如果我们直接go run 源代码,那么如果要在另外一个机器上这么运行,也需要go 开发环境,否则无法执行
    • 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件变大了很多

    什么是编译

    • 有了.go结尾的源文件,通过编译器将其变异成奇迹可以识别的为二进制码文件
    • 在该源文件目录下,通过go build对其进行编译。可以执行生成的可执行文件名,在windows下必须是.exe后缀
    • 如果程序没有错误,没有任何提示,会在当前目录下出现一个可执行文件,该文件是二进制码文件,也是可以执行的程序
    • 如果程序有问题,编译时,会在错误的哪行进行报错

    Go语言开发注意事项

    • Go源文件以“go”为扩展名
    • Go应用程序的入口是main()方法
    • Go语言严格区分大小写
    • Go语言有一条条语句构成,每个语句后不需要分号,这也体现了Golang的简洁性
    • Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一行,否则编译报错
    • Go语言定义的变量或者import包如果没有使用到,代码不能编译通过

     

     

     

     

     

     

     

    展开全文
  • 在引入 ECMAScript 2015(又称 ES6)之前,JavaScript 发展的非常缓慢。但自 2015 年起,每年都有新特性添加进来。需要注意是,不是所有特性都被现代浏览器支持,但是由于 JavaScript 编译器 Babel 存在,我们...

    在引入 ECMAScript 2015(又称 ES6)之前,JavaScript 发展的非常缓慢。但自 2015 年起,每年都有新特性添加进来。需要注意的是,不是所有特性都被现代浏览器支持,但是由于 JavaScript 编译器 Babel 的存在,我们已经可以使用新特性了。本文将介绍 ECMAScript 2020(ES11)的一些最新特性。

    (不要被吓到,真的是ES11说ES6啥的都low了。今天搬砖不努力,明天回家掰苞米,加油学习)

    01 Optional Chaining 可选链式调用

    在以前的语法中,想要获得深层次的属性或方法,如果不做前置校验的话,那么就很容易出现这种错误↓ 这可能会导致你整个应用奔溃…

    出现这样的错误,你会怎么解决呢?

    TypeError: Cannot read property ‘x’ of undefined
    

    此错误基本上意味着我们试图访问非对象上的属性。

    
    const boy = {
        character: {
            outgoing: true
        }
    }
    
    console.log(boy.character.outgoing) // this will work
    
    console.log(boy.talent.singing()) // TypeError: Cannot read property 'singing' of undefined
    
    
    const coolBoy = boy && boy.character &&  boy.character.outging && boy.talent.singing()
    console.log(coolBoy);
    

    这样…

    const coolBoy = boy ? (boy.talent ? (boy.talent.singing ? (boy.talent.singing() : '') : '') : ''
    console.log(coolBoy);
    

    还是这样…

    这样写显然都是比较笨重的写法,不优雅可读性也很差。
    总知道怎么写的简洁优雅?往下看

    可选链式调用操作符(?.)登场

    当我们使用了可选链操作符,之前的代码就可以写成这样了:

    const coolBoy = boy?.boy.talent?.singsing?.()
    console.log(coolBoy);
    

    瞬间高大上了有没有?当然数组函数也都可以使用

    
    let flowers =  ['lily', 'daisy', 'rose']
    
    console.log(flowers[1]) // 输出:daisy
    
    flowers = null
    
    console.log(flowers[1]) // 抛出错误:TypeError: Cannot read property '1' of null
    console.log(flowers?.[1]) // 输出:undefined
    
    let plantFlowers = () => {
      return 'orchids'
    }
    
    console.log(plantFlowers()) // 输出:orchids
    
    plantFlowers = null
    
    console.log(plantFlowers()) // 抛出错误:TypeError: plantFlowers is not a function
    
    console.log(plantFlowers?.()) // 输出:undefined
    

    Nullish Coalescing 空值合并

    目前,对于回退值,还是需要使用逻辑操作符 || 。它的适用情况很多,但有一些特殊的场景就不怎么适用了。比如,初始值是布尔值false或数字0的情况。如下,我们要把数字赋值给一个变量,在变量不是数字0时候,赋值为 7 :

    let number = 1
    let myNumber = number || 7 // 输出:1
    
    

    变量 myNumber等于 1,因为1是真值。但是,当变量 number 不是 1 而是 0 或者布尔值为false的时候呢?

    let number = 0
    let myNumber = number || 7 // 输出:7
    
    

    因为数字0为值,所以 myNumber 被赋值为右边的值。但是这个结果并不是我们想要的。这就是空值合并(??)的作用,这个合并操作符就可以检查变量 number 是否是一个数字或者布尔值,这样就比较省事不需要做其他操作。对于js中false == 0是成立的,所以这个操作符的重要就由此可见了。

    let number = 0
    let myNumber = number ?? 7  // 输出:0
    let flag = false
    let newFlag = flag ?? true  // 输出:false
    

    合并操作符右边的值仅在左边的值等于 nullundefined时有效,因此就能获取到自己想要的效果了。

    03Private Fields 私有字段

    大多数编程语言的 classes 都允许定义类作为公共的,受保护的或私有的属性(包括TypeScript也都有这些)。Public关键字可以声明类内部和外部都可以访问,且子类可以继承的属性; protected 关键字可以声明只允许内部访问和子类继承的属性;private关键字只能声明被内部使用的属性。在JavaScript 从 ES6 开始支持类语法开始,直到现在才引入了私有字段。定义私有属性的关键字为,在属性其前面加上散列符号:#。如下:

    
    class Flower {
      #leaf_color = "green";
      constructor(name) {
        this.name = name;
      }
    
      get_color() {
        return this.#leaf_color;
      }
    }
    
    const orchid = new Flower("orchid");
    
    console.log(orchid.get_color()); // 输出:green
    console.log(orchid.#leaf_color) // 报错:SyntaxError: Private field '#leaf_color' must be declared in an enclosing class
    

    因此,在类的外部访问私有属性,则会报错;同样这个作为私有属性,子类也是无法继承的。

    04 Static Fields 静态字段

    作为ES6开始引入的类的概念,如果想调用类中的属性或方法,需要先对类进行实例化,如下所示:

    class Flower {
      add_leaves() {
        console.log("Adding leaves");
      }
    }
    
    const rose = new Flower();
    rose.add_leaves();
    
    Flower.add_leaves() // 抛出错误:TypeError: Flower.add_leaves is not a function
    
    

    如果想直接从类中调用方法或获取属性,就会跑错。但是由static关键字声明的属性或方法,可以直接用类在外部调用。(但是用static声明的,在类的实例中是访问不到的)

    class Flower {
      constructor(type) {
        this.type = type;
      }
      static create_flower(type) {
        return new Flower(type);
      }
    }
    
    const rose = Flower.create_flower("rose"); // 正常运行
    
    

    05 Top Level Await 顶级 Await

    在此之前,如果想用await 获取 promise函数的结果或者其他的,那在使用await 的函数的时候必须和async关键字一同使用才可以。

    const func = async () => {
        const response = await fetch(url)
    }
    

    但是在一些情况不需要async,比如在全局作用域中去等待某些结果基本上是不可能的。除非是立即调用的函数表达式(IIFE)。

    (async () => {
        const response = await fetch(url)
    })();
    

    于是在这里有了顶级Await 后,就不需要再把代码包裹在一个 async 函数中了,如下即可:

    const response = await fetch(url)
    

    这个特性对于解决模块依赖或当初始源无法使用而需要备用源的时候是非常有用的。

    let Vue
    try {
        Vue = await import('url_1_to_vue')
    } catch {
        Vue = await import('url_2_to_vue)
    } ;
    

    看着似乎是await功能更强大,使用起来更方便了

    06 Promise.allSettled 方法

    等待多个 promise 返回结果时,我们可以用 Promise.all([promise_1, promise_2])。但问题是,如果其中一个请求失败了,就会抛出错误。然而,有时候我们希望某个请求失败后,其他请求的结果能够正常返回。针对这种情况ES11 引入了 Promise.allSettled

    promise_1 = Promise.resolve('hello')
    promise_2 = new Promise((resolve, reject) => setTimeout(reject, 200, 'problem'))
    
    Promise.allSettled([promise_1, promise_2])
        .then(([promise_1_result, promise_2_result]) => {
            console.log(promise_1_result) // 输出:{status: 'fulfilled', value: 'hello'}
            console.log(promise_2_result) // 输出:{status: 'rejected', reason: 'problem'}
        })
    
    

    成功的 promise 将返回一个包含 status 和 value 的对象,失败的 promise 将返回一个包含 status 和 reason 的对象。

    07 Dynamic Import 动态引入

    你也许在 webpack 的模块绑定中已经使用过动态引入。但对于该特性的原生支持已经到来:

    // Alert.js
    export default {
        show() {
            // 代码
        }
    }
    
    // 使用 Alert.js 的文件
    import('/components/Alert.js')
        .then(Alert => {
            Alert.show()
        })
    

    考虑到许多应用程序使用诸如 webpack 之类的模块打包器来进行代码的转译和优化,这个特性现在还没什么大作用。

    08 MatchAll 匹配所有项

    如果你想要查找字符串中所有正则表达式的匹配项和它们的位置,MatchAll 非常有用。

    const regex = /\b(apple)+\b/;
    const fruits = "pear, apple, banana, apple, orange, apple";
    
    
    for (const match of fruits.match(regex)) {
      console.log(match); 
    }
    // 输出 
    // 
    // 'apple' 
    // 'apple'
    

    相比之下,matchAll 返回更多的信息,包括找到匹配项的索引

    for (const match of fruits.matchAll(regex)) {
      console.log(match);
    }
    
    // 输出
    // 
    // [
    //   'apple',
    //   'apple',
    //   index: 6,
    //   input: 'pear, apple, banana, apple, orange, apple',
    //   groups: undefined
    // ],
    // [
    //   'apple',
    //   'apple',
    //   index: 21,
    //   input: 'pear, apple, banana, apple, orange, apple',
    //   groups: undefined
    // ],
    // [
    //   'apple',
    //   'apple',
    //   index: 36,
    //   input: 'pear, apple, banana, apple, orange, apple',
    //   groups: undefined
    // ]
    

    09 globalThis 全局对象

    JavaScript 可以在不同环境中运行,比如浏览器或者 Node.js。浏览器中可用的全局对象是变量 window,但在 Node.js 中是一个叫做 global 的对象。为了在不同环境中都使用统一的全局对象,引入了 globalThis

    // 浏览器
    window == globalThis // true
    
    // node.js
    global == globalThis // true
    
    

    10 BigInt

    JavaScript 中能够精确表达的最大数字是 2^53 - 1。而 BigInt 可以用来创建更大的数字。(JavaScript也向着BigInt动手了)

    
    const theBiggerNumber = 9007199254740991n
    const evenBiggerNumber = BigInt(9007199254740991)
    
    

    本文章首发自 JoyNop.com https://www.joynop.com/p/357.html

    展开全文
  • 2020年度复盘

    2021-01-04 22:03:38
    本文聊一下2020年这一年Android的发展,以及自己这一年做了什么,技术的成长,浅谈一下移动端的未来的趋势。 移动端技术 kotlin 1.4.0 版本发布 新的编译器 新的前端加速 统一后端和可扩展性 支持SAM转换 混用命名...

    2020年度复盘

    前言

    无复盘,不成长。本文聊一下2020年这一年Android的发展,以及自己这一年做了什么,技术的成长,浅谈一下移动端的未来的趋势。

    移动端技术

    kotlin 1.4.0 版本发布

    • 新的编译器
    • 新的前端加速
    • 统一后端和可扩展性
    • 支持SAM转换
    • 混用命名参数和位置参数
    • 尾后逗号
    • 属性代理优化
    • 等等

    kotlin:http://www.kotlincn.net/docs/reference/whatsnew14.html

    jetpack

    • DataStore(Alpha 版)
      • 用于替代SharePreferences的数据存储库
    • Hilt
      • 基于Dagger开发专门用于Android 开发的依赖注入框架。与Dagger相比,更加易于使用和学习
    • Navigation
      • 用户管理界面跳转,尤其是多Fragment之间跳转
    • JetPack Compose(1.0.0-alpha03),个人觉得这是一种UI趋势比xml好多了,虽然现在只是alpha,不过建议有时间的同学可以学习下。
      • 基于Kotlin的声明式UI框架
    • Room
      • sqlite框架用于操作Android端数据存储
    • LiveData,Lifecycle,ViewModel
      • 管理生命周期,可以用来实现 MVVM + Databinding
    • Paging 3.0
      • 与Paging 2相比,使用了Kotlin进行重写。用于分页加载来自本地数据库或网络的数据。
    • WorkManger 2.3.0
      • 满足您的后台调度需求的
    • Startup
      • 用于为App提供初始化回调能力。体系化得将各种App内的功能模块、所引入的SDK的初始化联合起来,不各自为战。一方面能够将所有的初始化方式进行统一,在代码学习层面便于进入。另一方面,在初始化方式收敛后也能够有效的做性能数据监控。

    jetpack:https://developer.android.google.cn/jetpack

    Arouter

    组件化或者模块化开发模式,可以让我们程序更容易的扩展、更方便的维护、
    更快捷的同步开发与更简单的单独调试,ARouter解决组件间、模块间的 界面跳转问题。主要出现就是让组件间、模块间是实现完全的独立。

    ARouter:https://github.com/alibaba/ARouter

    Android Studio 4.1.1

    • Design
      升级 Material Design 组件
    • Develop
      数据库检查器 (Database Inspector)
      支持在 Android Studio 中直接运行 Android Emulator
      支持 Dagger 导航
      使用 TensorFlow Lite 模型
    • Build & Test
      Android Emulator 支持可折叠设备
      升级 Apply Changes
      从 AAR 导出 C/C++ 依赖项
      优化原生崩溃报告的可读性
    • Optimize
      改进 System Trace UI
      独立分析器
      原生内存分析工具
    • 升级 Material Design 组件 (Material Design Component)
      “创建新项目”对话框中的 Android Studio 模板现使用了 Material Design 组件 (MDC),符合默认主题和样式的更新指南。这些变化让 AS 更容易使用推荐的 Material 风格样式,并支持深色主题等现代 UI。
    • 在 Android Studio 中直接运行 Android Emulator
      此功能可节省屏幕空间,使用快捷键即可在模拟器和编辑器窗口之间快速切换。开发者可在 AS 中进行常见的模拟器操作,例如旋转和获取屏幕截图。当然如果希望访问全部选项,仍需要运行稳定的模拟器。访问路径 File →Settings→ Tools → Emulator → Launch in Tool Window。
    • 数据库检查器 (Database Inspector)
      Database Inspector 用于简化检查、查询和修改应用程序数据库的过程。无论应用程序直接使用 Jetpack Room 库还是直接使用 Android 平台版本的 SQLite,都可以方便地检查正在运行的应用程序中的数据库和表或运行自定义查询。
      由于AS 在检查应用程序时会保持实时连接,因此还可以使用 Database Inspector 修改值,并在运行的应用程序中查看更改。
    • 支持 Dagger 导航
      Dagger 是流行的依赖注入库。Android Studio 4.1 带来了一个新的 “间距图标” (在编辑器和代码行号之间的图标,如下图所示),点击这个图标即可轻松地在 Dagger 的关联代码间进行导航,包括依赖项的生产者、消费者、组件、子组件以及模块。此外同样可在 Find usages 中获取相同的信息。
    • 使用 TensorFlow Lite 模型
      TensorFlow Lite 是一个用于编写移动机器学习模型的流行库,新版的 AS 支持将这些模型更容易导入到 Android 应用中。与视图绑定类似,AS 生成了易于使用的类,因此开发者可以用更少的代码和更好的类型安全来运行模型。
    • Android emulator 支持可折叠设备
      除了最近新增的 5G 蜂窝测试支持外,新版本还为 Android 模拟器增加了对可折叠设备的支持。使用 Android emulator 30.0.26 及更高版本,即可配置具有多种折叠设计和配置的可折叠设备。详情点此查看。
    • 原生内存分析工具 (Native Memory Profiler)
      Android Studio 内存分析器现在引入了一个用于分析 APP 的原生内存分析工具 (Native Memory Profiler),适用于部署在运行 Android 10 或更高版本的物理设备。

    Android studio:https://developer.android.google.cn/studio/

    Android 11 发布

    • 以人为本,更具表现力
      • 更人性的通知跟气泡提示
    • 更强大的隐私保护
    • 优化折叠设备支持
      • 一些折叠设备的显示
    • 控制中心的优化,更方便的一键启动
    • 优化 5G 体验
    • 录像时关闭通知音
    • 位置信息访问权限
      • 更改了位置信息访问权限,如果应用中的某项功能,从后台访问位置信息,会请用户验证此类访问是否有必要
    • 强制应用调用内置相机
      • 取消了应用调用第三方相机的功能
    • 系统无缝更新,几乎可以在后台更新
    • 等等

    Android 11:https://developer.android.google.cn/android11

    Flutter

    目前市面上最强的跨平台方案:https://flutterchina.club/

    我做了什么?

    2020年个人博客(YuriyPikachu.githu.io)总共写了九篇文章,一篇kotlin;两篇跨平台方案实现,一个是用Taro实现外卖平台,一个是Flutter实现疫情平台;JVM内存模型一篇;Gradle插件一篇;全埋点一篇;一篇是快速实现灰白效果;一篇屏幕适配;还有一篇反编译。用户属性如下:





    我的成长

    业务方向:从电商跑到了支付,学到了一些新的东西。

    技术方向:在电商公司个人负责无痕埋点方案时候,让我对于Javassist操控字节码,gradle插件化有了更加深入的理解。后来去了新公司我又用ASM做了一些工具,让我对于字节码,jvm内存原型,java的GC机制,都有了不同程度的提升。

    浅谈移动端的发展

    移动互联网发展到现在,大型的app已经占据了所有你能想到的方向,覆盖了用户生活,工作,学习,出行的方方面面。所以再出现一个app的超级巨头几乎很困难。那是不是没有机会了?也不完全是,可以做一些细分领域。不过真正的大头估计要等5G的普及,以及真正的5G应用出现。

    5G通讯,人工智能等的普及,物联网会跟着发展,所以IoT对于移动端开发同学也是一个不错的入口。比如智能家居:像小米,天猫精灵,华为,ViVO,格力等;智慧物流:菜鸟,京东等;智能支付:蚂蚁金服;还有一些车企,吉利等等这些其实都离不开IoT。

    学习建议

    1、掌握一门跨应用的语言(Flutter),因为之后你面对的终端不仅仅是Android,IOS,Windows,Linux,有可能会鸿蒙,Funchsia OS等等。

    2、深入系统底层源码,我一直都觉得客户端跟前端开发同学最大的区别是客户端同学是学习一个操作系统的过程。你不了解一个系统源码,你就很难写出一个高质量的应用,很难适配各种版本的系统。

    3、如果你在小厂,一定要紧跟 Google 的客户端架构框架,Kotlin + jetpack + MVVM 就是最佳实践,更大一点的项目加个组件化就好了,所以你重点花时间了解Google架构工具的底层原理,没必要自己研发一套框架。我曾经弄过一套框架,现在想来真的是蠢。因为一方面成本很高,另一方面如果你只是几个人,要做的比Google客户端框架好也很困难。大厂之所以要自研框架,也是因为Google的框架没法满足他们的需求。

    4、如果你在大厂,我也是初入江湖,只能给些思想上的建议。保持热情,了解团队业务,不要只把自己定位成接需求干活的个体,要积极寻找切入点,让自己用过去的经历帮助到团队。

    个人总结

    今年完成最重要的两件事,一个是买房,另一个是进大厂。工作至今,一开始在初创企业,后来去了C轮公司,这是我第一次来一线大厂,本来有一些机会可以更早的来大厂,但都各种原因错过了。关于大厂有很多正面,负面的评论。但建议还是自己来看看,即使是同一家公司,因为部门不同,风格也是差蛮多的。

    总结一下外面经常听到的几点:

    关于螺丝钉,你入职进来的岗位是固定的,不可能让你天马行空,想弄啥弄啥,但是可以在你的岗位职能权限下,你可以寻找切入点,找你主管沟通,去做一些你想弄的东西。

    关于压力,说大厂各种压力,会猝死,因为我之前呆的公司压力也都蛮大的。大厂压力肯定是有的,毕竟用户量都是用亿做单位,所有的小bug都有可能变成一个p级故障,但目前还没到无法承受;

    关于说主管会pua,个人暂时没碰到,是会有观点不同的时候,个人觉得首先不要玻璃心,本着对事不对人,大家都讨论的是这件事,你可以提出你的观点,主管肯定也一样可以提出他的观点,观点不同是很正常的。其实我之前在C轮公司,跟我当时Android开发主管辩论才叫激烈,但我们关系其实挺好的,因为我们都是想把东西弄好而已,我离职了他送我下楼,他来我现在公司附近,还特地找我喝酒。

    展开全文
  • ECMAScript 2020 新特性

    2020-09-26 14:12:27
    JavaScript 是最流行编程...需要注意是,不是所有特性都被现代浏览器支持,但是由于 JavaScript 编译器 Babel 存在,我们已经可以使用新特性了。本文将介绍 ECMAScript 2020(ES11)一些最新特性。 Optional
  • ECMAScript 2020 新特性 JavaScript 是最流行编程语言之一...需要注意是,不是所有特性都被现代浏览器支持,但是由于 JavaScript 编译器 Babel 存在,我们已经可以使用新特性了。本文将介绍 ECMAScript 2020(ES
  • 2020-04-15

    2020-04-15 18:56:08
    c语言是一种程序设计语言,通过和编译器的结合是计算机可以更加高效的利用,而c语言有着高效,灵活,表达能力强等特点,而语言是计算机的灵魂,c语言通过给计算机翻译语言可以用来系统软件和应用软件的开发,并且它...
  • 2020-11-07

    2020-11-07 18:04:47
    一开始感觉程序很神奇,现代化智能的发展和计算机的发展息息相关,有点不知所措,有点兴奋,起初只知道c++对我来说又是一件新奇的事物,厚厚的课本和顽童般的老师就这样进入了我的大学生活,老师开始先给我们打了...
  • 2020.3.16作业

    2020-03-17 11:34:03
    Vim是从 vi 发展出来一个文本编辑器。代码补全、编译及错误跳转等方便编程功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢文本编辑器。 gcc GCC(GNU Compiler Collection,GNU...
  • 峰会以“贡献∙开源”为主题,意为共同贡献,旨在促进开源社区和技术的发展。本次峰会包括1个主论坛、7个分论坛(开源专题论坛,涉及操作系统&编译器、虚拟化&云原生、分布式系统、人工智能、大数据、开源&...
  • 计算机语言的发展经历了非常大的变革其发展具体包括 A 机器语言 B. 汇编 语言 C. 高级语言 2. java 源程序经过编译器编辑后形成的字节码文件是格式的 B. .class 3.Java 语言的特点包括 A. 面向对象 B. 平台无关性 C...
  • 计算机语言的发展经历了非常大的变革其发展具体包括A机器语言 B. 汇编 语言C. 高级语言 2.java源程序经过编译器编辑后形成的字节码文件是格式的 B. .class 3.Java语言的特点包括 A. 面向对象 B. 平台无关性 C. 解释...
  • 此次大会时值ISO C++20新标准发布之际,业界相信C++ 20作为C++发展的重要里程碑,必将为系统级软件开发、构建、设计带来深远影响。 此次大会由C++之父, 美国工程院、ACM、IEEE 院士Bjarne Stroustrup担任主席,...
  • 她,是现代计算机编译器领域最杰出女科学家。 她,是图灵奖历史上第一位女性获奖者,叫Frances E. Allen。 2020年8月4日,Frances E. Allen去世了,那天刚好是她88岁生日。 #“她研究几乎影响了计算机科学...
  • 7、龙芯 2020 年之后生产 CPU 都不再原生支持 MIPS,但因为可以 100% 翻译执行 MIPS,所以以前 MIPS 生态仍然完全兼容,但以后会以发展 LoongArch 原生生态为主。 8、将会成功组建自主指令系统联盟,联盟成员...
  • 请画出编译器的功能结构图(简述典型编译器的构成以及各个部分的功能和作用)【2】 典型编译程序在逻辑功能上由哪几部分组成【3】 简述DFA和NFA有哪些主要区别? a/NFA有多个初始状态 b/NFA的输入可以是null c/NFA同...
  • 汇编学习

    2020-12-27 22:10:45
    2.伪指令:没有对应机器码,由编译器执行,计算机并不执行。 3.其他符号:如+、-、*、/等,由编译器识别,没有对应机器码。 MOV AX,[3]:传送3号单元内容如AX 寄存器 运算器进行信息处理 寄存器进行信息存储 ...
  • 同样的,面向对象编程设计也是近几年LabVIEW软件版本升级的主要方向,比如LabVIEW2020版本就新增了接口类和多继承的支持,相信基于面向对象的LabVIEW编程是未来的发展趋势。 相比C#等文本语言由于LabVIEW工程师的...
  • 1991年,一个python编译器诞生,他是用C语言实现,并能够调用C语言库文件。2008年python推出2.6和3.0版本,由于2.6版本已经违背了龟叔创造python,简洁,优美,清晰,简单想法,龟叔推出了自己修改2.6和新...
  • python从入门到放弃QAQ

    2018-09-03 20:59:00
    1991年,一个python编译器诞生,他是用C语言实现,并能够调用C语言库文件。 2008年python推出2.6和3.0版本,由于2.6版本已经违背了龟叔创造python,简洁,优美,清晰,简单想法,龟叔推出了自己修改2.6...
  • Vim是从 vi 发展出来一个文本编辑器。代码补完、编译及错误跳转等方便编程功能特别丰富,在程序员中被广泛使用。 简单来说, vi 是老式字处理器,不过功能已经很齐全了,但是还是有可以进步地方。 vi
  • 00-python概述。

    2019-03-28 15:46:00
    -发展历史:  - 1989年,由Guido van Rossum开始开发,  - 1991年,发布第一个公开发行版,第一个Python编译器(同时也是解释器)诞生。  - 2004年,Python使用率呈指数倍增长。  - 2008年:python3.0诞生 ...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

编译器的发展2020