自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员光剑

AI 天才研究院和光剑读书创始人兼 CEO

  • 博客(69)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 从 AbstractPointcutAdvisor 开始: Spring AOP 之 Advisor、PointcutAdvisor 介绍

从 AbstractPointcutAdvisor 开始: Spring AOP 之 Advisor、PointcutAdvisor 介绍从AOP开始说起为了能够更好地将系统级别的代码抽离出来,去掉与对象的耦合,就产生了面向AOP(面向切面)。AOP全称 Aspect-Oriented Programming , 即面向切面编程。OOP属于一种横向扩展,AOP是一种纵向扩展。AOP依托于O...

2021-03-31 22:22:54 13374 1

原创 分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例

什么是幂等?简单讲,幂等性是指相同的参数调用同一个 API,执行一次或多次效果一样。在函数式编程里面,这叫“无副作用”,Pure Function。用业务的语言将,就是:对于同一笔业务操作...

2021-03-31 19:59:07 8530 1

原创 分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例

分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例什么是幂等?简单讲,幂等性是指相同的参数调用同一个 API,执行一次或多次效果一样。在函数式编程里面,这叫“无副作用”,Pure Function。用业务的语言将,就是:对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。问题场景假如你有个服务提供一个接口,结果这个服务部署...

2021-03-31 19:46:17 8536

原创 Spring Boot 自定义注解支持EL表达式(基于 MethodBasedEvaluationContext 实现)

自定义注解自定义 DistributeExceptionHandler 注解,该注解接收一个参数 attachmentId 。该注解用在方法上,使用该注解作为切点,实现标注该注解的方法抛异常后的统一处理。@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface DistributeExc...

2021-03-31 17:42:40 12083

原创 【不读唐诗,不足以知盛世】盛唐诗坛的璀璨明星们

盛唐诗坛的璀璨明星们“歌者的歌、舞者的舞、剑客的剑、诗人的诗、英雄的壮志,都是这样子。只要是不死,就不能放弃。”但,谁又都知道——浮华万千,终不过大梦一场。这篇文章,将带领读者进入曾经的盛世大唐的璀璨文曲星们的烟火人间。宝剑赠英雄,红粉送佳人。那么,诗人心中最好的礼物是什么呢?当然是“赋诗一首”!诗人间的相遇照亮了彼此,而他们当时写下的诗篇,不仅记录了难忘的友情岁月...

2021-03-31 01:19:41 10798

原创 【不读唐诗,不足以知盛世】杜甫《饮中八仙歌》

《饮中八仙歌》唐代:杜甫知章骑马似乘船,眼花落井水底眠。汝阳三斗始朝天,道逢麴车口流涎,恨不移封向酒泉。左相日兴费万钱,饮如长鲸吸百川,衔杯乐圣称避贤。宗之潇洒美少年,举觞白眼望青天,皎如玉树临风前。苏晋长斋绣佛前,醉中往往爱逃禅。李白斗酒诗百篇,长安市上酒家眠,天子呼来不上船,自称臣是酒中仙。张旭三杯草圣传,脱帽露顶王公前,挥毫落纸如云烟。焦遂五斗方卓然,高谈雄辩惊四筵。译文...

2021-03-31 01:03:34 8528 1

原创 为什么成年人总是有抹不去的故乡情结?

心累的人,总是很佛系。贺知章平静地看待周围的一切,内心不再起半点波澜,却又对新生命给于热烈的赞美,就像缅怀年轻时的自己。对柳树如此,对李白也是如此。在外人看来,他是岁月好,可内心的酸甜苦辣,只有他自己清楚。公元744年,八十六岁的贺知章大病一场。他每天上班时恍恍惚惚,好像随时都会倒下,这位风烛残年的老人有一种预感,人生可能要到此为止了。罢了,罢了,归去吧。“游子归故乡”,贺知章想回家了。多少次午夜...

2021-03-30 00:46:16 8545

原创 解决方案架构师技巧-5种架构图

Solutions Architect Tips — The 5 Types of Architecture DiagramsThe flow, service, persona, inf...

2021-03-26 12:05:47 9718

原创 【图文详解】 epoll 原理:Redis,Netty,Nginx实现高性能IO的核心原理

输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。I/O 多路复用(m...

2021-03-26 12:05:47 9033

原创 Sublime Text 3 的 Markdown 实时预览全面总结

Sublime Text 3 简介http://www.sublimetext.com/Sublime Text 3 : A sophisticated text editor forcode, markup and proseDownload:http://www.sublimetext.com/3Sublime 是一款非常好用且流行的轻量级编辑器,除了代码高亮、语法提示等标配外,...

2021-03-26 01:51:42 10252

原创 浅析 Linux 文件 IO 读写

浅析 Linux 文件 IO 读写Linux的文件IO子系统是Linux中最复杂的一个子系统(没有之一)。读者可以参考以下这个图:https://www.thomas-krenn.com/de/wikiDE/images/2/2d/Linux-storage-stack-diagram_v4.0.pdfBlock Layer的运行调度模型数据从 Page Cache 同步到磁盘上...

2021-03-26 00:34:45 8815

原创 一切皆是映射:浅谈操作系统内核的缺页异常(Page Fault)

浅谈操作系统内核的缺页异常(Page Fault)缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。在这个时候,被内存映射的文件实际上成了一个分页交换文件。页缺失(英语:Page fault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等),指的是当软件试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的...

2021-03-25 23:53:21 10897 1

原创 Kafka配置文件详解

Kafka配置文件详解(1) producer.properties:生产端的配置文件#指定kafka节点列表,用于获取metadata,不必全部指定#需要kafka的服务器地址,来获取每一个topic的分片数等元数据信息。metadata.broker.list=kafka01:9092,kafka02:9092,kafka03:9092 #生产者生产的消息被发送到哪个block,需...

2021-03-25 23:43:13 10451

原创 Page Cache 与 Kafka 那些事儿

Kafka 整体架构Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。Kafka为什么速度快、吞吐量大?Kafka是将消息记录持久化到本地磁盘中的,一般人会认为磁盘读写性能差,可能会对Kafka性能如何保证提...

2021-03-25 23:42:50 9248 1

原创 编程为什么有趣?浅谈编程的快乐。

首先,这种快乐是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到快乐一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈现在每片独特的、崭新的树叶和雪花上的喜悦。其次,这种快乐来自于开发对他人有用的东西。内心深处,我们期望我们的劳动成果能够被他人使用,并能对他们有所帮助。从这一角度而言,这同小孩用粘土为“爸爸的办公室”捏制铅笔盒没有任何本质的区别。第三,快乐来自于整...

2021-03-24 01:39:06 95598 137

原创 间隙锁 gap lock

锁们什么是间隙锁?间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。当我们用范围条件而不是相等条件索引数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项枷锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”。InnoDB也会对这个“间隙”枷锁,这种锁机制就是所谓的间隙锁...

2021-03-24 01:12:52 8794 1

原创 20句“八字真经”

1.未知全貌,不予置评。——《魔道祖师》2..布衣饭菜,可乐终身。——沈复《浮生六记》3.花看半开、酒饮微醺。——《菜根谭》4.等风来,不如追风去。——一禅小和尚5.来如风雨,去似微尘。——《增广贤文》6.凡是过往,皆为序章。——莎士比亚7.得之我幸,不得我命。——徐志摩8.道阻且长,行则将至。——《诗经》9..夕阳已去,皓月方来。——朱自清《桨声灯影里的秦淮河》10..雾失楼台,月迷津渡。——秦...

2021-03-24 00:43:39 9149 1

原创 【详解文件IO系列】讲讲 MQ 消息中间件 (Kafka,RocketMQ等)与 MMAP、PageCache 的故事...

一般的IO调用首先来看一下一般的IO调用。在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。如下图所示。...

2021-03-23 01:29:14 8551

原创 浅析“分布式锁”的实现方式

前言我们在开发应用时,如果需要对一个共享变量进行多线程同步访问的时候,我们可以使用Java多线程的各个技能点来处理,保证完美运行无BUG。但是这里的都只是单机应用,即在同一个JVM中;然后随着业务发展、微服务化,一个应用需要部署到多台服务器上然后做负载均衡,大概的架构图如下:在上图可以看到,变量A在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成...

2021-03-23 00:52:48 8650

原创 图文详解 epoll 原理【Redis,Netty,Nginx实现高性能IO的核心原理】epoll 详解

【Redis,Netty,Nginx 等实现高性能IO的核心原理】I/O输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。I/O 多路复用(multiplexing)I/O 多路复用的本质,是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个...

2021-03-23 00:19:40 9750 1

原创 我这才发现,原来我根本看不懂Java的正则表达式!

正则表达式 (\w)((?=\1\1\1)(\1))+(\w)((?=\1\1\1)(\1))+表达式说明:(\w) 表示匹配并捕获一个单词字符,将匹配内容作为第一个捕获组(?=\1\1\1) 这是一个零宽断言+反向引用,表示之后应该紧接着连续出现三次第一个捕获组匹配到的字符串,但这三次匹配不占位置,不会吃掉匹配到的字符,所以叫零宽;(\1) 反向引用,表示接下来应该匹配到第一个捕获...

2021-03-22 23:43:37 8594

原创 LRU 缓存机制实现:哈希表 + 双向链表

算法详解LRU 缓存机制可以通过哈希表辅以双向链表实现,我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。这样以来,我们首先使用哈希表进行定位,找出缓存项在双向链表中的位置,随后将其移动到双向链表的头...

2021-03-21 18:15:55 8781 1

原创 什么是循环队列?

对于队列最好的方法是使用链表实现,因为对于数组来说,队列可能会出现下面这种情况:如图所示,不可以继续添加元素,否则会造成数组越界而遭致程序出错。然而此时又不应该扩充数组,因为还有大量实际空间未被占用。   此时我们应该如何解决这个问题呢?我们将其实现为循环队列。理解循环队列何谓循环队列?首先我们要说明的是循环队列仍然是基于数组实现的。但是为了形象化的说明问题,我们如下图所示 1.图...

2021-03-21 14:04:09 10632 1

原创 Scott Page  斯科特佩奇《模型思维》读书笔记

《穷查理宝典》中提到了查理芒格所推崇的多元思维模型,查理·芒格是这么说的, 要想成为一个有智慧的人,你必须拥有多个模型。而且,你必须将你的经验,无论是间接的,还是直接的,都放到构成这些模型的网格上。他还有一段话是这么说的,你必须知道重要学科的重要理论,并经常使用它们——要全部都用上,而不是只用几种。大多数人都只使用学过的一个学科的思维模型,比如说经济学,试图用一种方法来解决所有问题。你知...

2021-03-21 04:32:20 9051

原创 kafka怎么保证数据消费一次且仅消费一次?使用消息队列如何保证幂等性?

精确一次处理语义(exactly onece semantic–EOS),Kafka的EOS主要体现在3个方面:1)幂等producer 保证单个分区的只会发送一次,不会出现重复消息2)事务(transation):保证原子性的写入多个分区,即写入到多个分区的消息要么全部成功,要么全部回滚3)流式EOS:流处理本质上可看成是“读取-处理-写入管道”。整个过程的操作是原子性。幂等produc...

2021-03-21 02:38:24 12459

原创 Optimistic Lock: 乐观锁以及乐观锁的实现

什么是乐观锁乐观锁( Optimistic Lock ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。应用场景:为什么需要乐观锁?并发冲突在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:1...

2021-03-20 15:12:31 9340

原创 AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?

AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?AVL树AVL树: 最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。LL 旋转:红黑树红黑树: 平衡二叉树,广泛用在C++的STL中。如map和set都是用红黑树实现的。B/B+树B/B+树: 用在磁盘文件组织 数据索引和数据库索引。...

2021-03-20 15:00:28 8822

原创 Redis之父Antirez谈副业与主业

http://redis.io/Redis 之父 Salvatore Sanfilippo,一名意大利程序员,大家更习惯称呼他 Antirez。以下内容为 Antirez 在 Redis 诞生六周年之际,特意撰写的一篇博文 - 分享了他如何看待个人副业项目(side project)与主业项目(main project)之间的关系,以及他在 Redis 项目上的成功实践...

2021-03-20 14:44:42 13289 3

原创 为啥 redis 使用 跳表 (skiplist) 而不是使用 red-black?

基本结论1、实现简单。2、区间查找快。跳表可以做到O(logn) 的时间复杂度定位区间的起点,然后在原始链表中顺序往后遍历就可以了。3、并发环境优势。红黑树在插入和删除的时候可能需要做一些rebalance的操作,这样的操作可能会涉及到整个树的其他部分,而skiplist的操作显然更加局部性一些,需要锁住的节点更少,因此在这样的情况下性能好一些。I was looking at Redi...

2021-03-20 14:37:57 8906

原创 Redis为什么是单线程?高并发响应快?

一、Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快(纯内存); 数据存在内存中,数据结构用HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。2.redis是单线程的,省去了很多上下文切换线程的时间(避免线程切换和竞态消耗)。3.redis使用IO多路复用技术(IO multiplexing, 解决对多个I/O监听时,一个I/O阻塞影响其...

2021-03-19 18:03:33 8915 1

原创 浅析 HTTPS 和 SSL/TLS 协议

名词说明1.ssl协议:通过认证、数字签名确保完整性;使用加密确保私密性;确保客户端和服务器之间的通讯安全2.tls协议:在SSL的基础上新增了诸多的功能,它们之间协议工作方式一样3.https协议:https over tls,tls协议是https协议的核心4.CA:Certificate Authority,也称为电子商务认证中心,是负责发放和管理数字证书的权威机构对称加...

2021-03-19 14:44:52 8866

原创 图文详解 Java线程池

1、线程池的优势(1)降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场...

2021-03-18 23:56:38 8604

原创 JVM 核心知识点

想要提高程序员自身的内功心法无非就是: 数据结构跟算法 + 操作系统 + 网络 ,而所有的Java代码都是在JVM上运行的,了解了JVM好处就是:写出更好更健壮的代码。提高Java的性能,排除问题。面试必问 ,要对知识有一定的深度 。1、简述JVM 内存模型从宏观上来说JVM 内存区域 分为三部分 线程共享区域 、 线程私有区域 、 直接内存区域 。1.1、线程共享区域1....

2021-03-18 20:44:04 8669

原创 创建链表:头插法与尾插法

两种方法的区别无非是插入的位置:头插法:新插入结点始终未当前的第一个结点尾插法:新插入结点始终为当前的最后一个结点头插法建表实现代码://头插法建链表 void HeadCreateList(LinkList L,int n){ int i; srand(time(0)); //初始化随机数种子 L = (LinkList)malloc(...

2021-03-18 18:48:40 12125

原创 Kotlin 高级编程语言特性代码实例

定义接口package com.lightsword.biz/** * @author: Jack * 2021/3/18 上午1:01 */interface IUserAbility { fun getUser(biz:String): String}使用注解package com.lightsword.bizimport com.lightsword.da.m...

2021-03-18 16:17:06 8437

原创 黄峥2021年致股东信原文:

今年的股东信提前了一点,是为了及时和大家同步一个消息。刚刚开完的董事会上,董事们批准了我辞去拼多多董事长职位的请求,陈磊将从即日起接任董事长,并继续担任CEO一职。在不再担任董事长和拼多多管理职位后,我的1:10的超级投票权也将失效。我名下股份的投票权将委托拼多多董事会以投票的方式来进行决策,同时我个人承诺个人名下的股票在未来3年内继续锁定,不出售。去年7月1日我卸任了CEO,原本计划在一年整的时...

2021-03-17 20:32:26 8647

原创 浅析 Kotlin 中的 synchronized

首先,在 Java 中 synchronized 是一个关键字,在Kotlin 中是一个函数。这个函数如下:/* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0...

2021-03-17 20:03:25 15944

原创 中国最伟大的现实主义诗人:杜甫的一生

杜甫(712年2月12日~770年),字子美,自号少陵野老,唐代诗人,与李白合称“李杜”。生于河南巩县,原籍湖北襄阳。家世背景杜甫出身于京兆杜氏,乃北方的大士族。其远祖为汉武帝有名的酷吏杜周(?—前95年,字长孺,西汉南阳郡杜衍县(今河南南阳市卧龙区)人。西汉大臣,杜延年的父亲。),祖父杜审言(约645年—约708年,字必简,襄州襄阳(今湖北襄阳)人,晋征南将军杜预的远裔,“诗圣”杜甫的...

2021-03-17 02:26:45 13056 3

原创 Java 8 中的 java.util.Map#computeIfAbsent

Java8之前,从map中根据key获取value操作可能会有下面的操作Object key = map.get("key");if (key == null) { key = new Object(); map.put("key", key);}Java8之后,上面的操作可以简化为一行,若key对应的value为空,会将第二个参数的返回值存入并返回。computeIfAbsent()...

2021-03-16 23:22:04 8415

原创 交易系统TMF2.0技术揭秘:跳开 DDD 和中台概念看阿里巴巴交易平台的问题及解决思路...

总体介绍2017年双11,交易峰值达到了32.5万笔/秒,这给整个交易系统带来了非常大的挑战。一方面,系统需要支撑全集团几十个事业部的所有交易类需求:要考虑如何能更快响应需求、加快发布周期;如何能为新小业务提供快速支撑、降低准入门槛;是否足够开放使得业务方能做到自助式扩展;新需求是否已经在其他事业部有可复用资产等问题。互联网的特点决定了业务系统是按领域服务建设的分布式架构。而电商业务的特点...

2021-03-16 17:52:35 14463 2

ClickHouse 高性能、可扩展和低成本的OLAP数据库 陈光剑 20230912

ClickHouse 设计哲学 具体问题具体分析 use good algorithms in a good context; 深入细节 dig into details; 度量指标 measure everything; 贴近生产环境 be close to production; 基准测试 do benchmarks, more of them; 不断试验、实践never stop experimenting; 大规模测试 test at scale; 大胆创新 do weird stuff; have fun! It is a database: A database has both a storage engine and a query engine. ClickHouse can efficiently ingest data from various sources and its query engine provides low-latency query responses. It is an OLAP database: An On-Line Analytic

2023-09-14

Will AI Fix Work? 工作节奏超过了我们的跟上能力 人工智能有望创造一种全新的工作方式

The pace of work is outpacing our ability to keep up. AI is poised to create a whole new way of working. 工作节奏超过了我们的跟上能力。人工智能有望创造一种全新的工作方式。 微软工作趋势指数年度报告( Work Trend Index Annual Report ) Key findings: The data points to three urgent insights business leaders must know now as they look to quickly and responsibly adopt AI. 1. Digital debt is costing us innovation: 64% of people have struggled with finding time and energy to get their work done, and those workers are 3.5x more likely to say they

2023-05-17

THE AI INDEX REPORT 人工智能指数报告 Measuring trends in Artificial Inte

THE AI INDEX REPORT 人工智能指数报告 Measuring trends in Artificial Intelligence 衡量人工智能的趋势 TOP TAKEAWAYS 最重要的要点 Industry races ahead of academia. 工业界领先于学术界。 Until 2014, most significant machine learning models were released by academia. Since then, industry has taken over. In 2022, there were 32 significant industry-produced machine learning models compared to just three produced by academia. Building state-of-the-art AI systems increasingly requires large amounts of data, compute, and money, resources

2023-04-06

四大常用限流算法原理详解:计数器固定窗口、计数器滑动窗口、漏桶、令牌桶算法.pdf

四大常用限流算法原理详解:计数器固定窗口、计数器滑动窗口、漏桶、令牌桶算法.pdf

2021-05-28

Kotlin Coroutines by Tutorials (1st Edition)

Kotlin Coroutines by Tutorials (1st Edition)

2021-04-28

Principles of programming languages by Gilles Dowek (auth.) (z-lib.org).pdf

Principles of programming languages by Gilles Dowek (auth.) (z-lib.org).pdf

2021-04-28

A Brief History of Artificial Intelligence

A Brief History of Artificial Intelligence What It Is, Where We Are, and Where We Are Going by Michael Wooldridge (z-lib.org).pdf

2021-04-28

An introduction to functional programming through lambda calculus.PDF.zip

Author: Michaelson, Greg Functional programming is rooted in lambda calculus, which constitutes the world's smallest programming language. This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, and it assumes no prior knowledge of mathematics or functional programming. Cogent examples illuminate the central ideas, and numerous exercises appear throughout the text, offering reinforcement of key concepts. All problems feature complete solutions.

2019-09-22

《Kotlin项目实战开发》第3章+类型系统与可空类型

《Kotlin项目实战开发》 第3章 类型系统与可空类型 跟Java、C和C ++ 一样, Kotlin也是“静态类型编程语言”。 通常,编程语言中的类型系统中定义了  如何将数值和表达式归为不同的类型  如何操作这些类型  这些类型之间如何互相作用 我们在编程语言中使用类型的目的是为了让编译器能够确定类型所关联的对象需要分配多少空间。 在每一个编程语言中,都有一个特定的类型系统。静态类型在编译时期时,就能可靠地发现类型错误。因此通常能增进最终程序的可靠性。 类型系统在各种语言之间有非常大的不同,主要的差异存在于编译时期的语法,以及运行时期的操作实现方式。 本章我们简单介绍一下Kotlin的类型系统。

2017-09-30

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除