手机随时阅读
新人专享大礼包¥24
简介GridView是一个网格化的布局,如果在填充的过程中子组件超出了展示的范围的时候,那么GridView会自动滚动。因为这个滚动的特性,所以GridView是一个非常好用的Widget。今天我们一起来探索一下GridView这个layout组件的秘密。GridView详解GridView是一个可滚动的view,也就是ScrollView,事实上GridView继承自BoxScrollView:
简介在上一篇文章中,我们列举了flutter中的所有layout类,并且详细介绍了两个非常常用的layout:Row和Column。掌握了上面两个基本的layout还是不够的,如果需要应付日常的layout使用,我们还需要掌握多一些layout组件。今天我们会介绍一个功能强大的layout:Containerlayout。Container的使用Container是一个空白的容器,通常可以用Con
简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是widget,对于layout来说也不例外。也就是说在flutter中layout也是用代码来完成的,这和其他的用配置文件来描述layout的语言有所不同。你可以把layout看做是一种看不见的widge
简介为了简化大家的使用,虽然flutter推荐所有的widget都有自己来进行搭建,但是在大框架上面,flutter提供了Material和Cupertino两种主题风格的Widgets集合,大家可以在这两种风格的继承上进行个性化定制和开发。这两种风格翻译成中文就是:材料和库比蒂诺?什么鬼....我们还是使用默认的英文名来称呼它们吧。本文我们将会深入讲解Material主题的基础MaterialA
简介移动的和PC端有什么不同呢?同样的H5可以运行在APP端,也可以运行在PC端。两者最大的区别就是移动端可以用手势。手势可以做到一些比如左滑右滑,上滑下滑,缩放等操作。原生的andorid和IOS当然可以做到这些事情,作为一个移动的的开发框架flutter,自然也能够支持手势。flutter中的手势支持叫做GestureDetector,一起来看看flutter中的手势基础吧。Pointers和
toc简介我们知道Flutter中有两种Widget,分别是StatelessWidget和StatefulWidget,StatelessWidget中有一个build方法来创建对应的Widget,虽然StatefulWidget中没有对应的build方法,但是和StatefulWidget对应的State中也有同样的build方法。这个build方法就是用来创建Widget的核心方法。我们来看
简介Flutter的基础是widget,根据是否需要跟用户进行交互,widget则可以分为StatelessWidget和StatefulWidget。StatelessWidget只能根据传入的状态进行简单的初始化widget,如果要实现跟用户交互这种复杂的功能,则需要用到StatefulWidget。但是对于StatefulWidget本身来说,它并不存储任何状态,所有的状态都是存放在和Sta
简介flutter中所有的组件都是由widgets组成的,flutter中有各种各样的widgets,这些widgets构成了flutter这个大厦。那么flutter中的widget有什么特点呢?我们应该怎么学习widget呢?一起来看看吧。StatelessWidget和StatefulWidget实时上,flutter中的widgets是受到React的启发来实现的。flutter中的wid
简介Flutter是google开发的一个跨平台的UI构建工具,flutter目前最新的版本是3.0.1。使用flutter你可以使用一套代码搭建android,IOS,web和desktop等不同平台的应用。做到一次编写到处运行的目的。说到一次编写处处运行,大家可能会想到java。那么flutter跟java是不是类似呢?对于JAVA来说,在编写完JAVA代码之后,将其编译成为class字节码,
简介PEM是一种常见的保存key或者证书的格式,PEM格式的文件一般来说后缀是以.pem结尾的。那么PEM到底是什么呢?它和常用的证书格式PKCS7和PKCS12有什么关系呢?一起来看看吧。PEMPEM虽然使用来存储证书或者密钥的,但是PEM原本是和email相关联的,因为PEM的全称是PrivacyEnhancedMail,最初是为邮件的隐私增强而创建的,是在1993年由IETF制定的标准。虽然
简介之前我们讲到了优秀的数据描述语言ASN.1,很多协议标准都是使用ASN.1来进行描述的。对于ASN.1来说,只定义了数据的描述是不够的,它还规定了消息是如何被编码的,从而可以在不同的机器中进行通讯。ASN.1支持一系列的编码规则,比如BER,DER,CER等。而X.690就是一个ITUT的标准,它里面包含了一些对ASN.1进行编码的规则。有人要问了,那么什么是ITUT呢?ITUT的全称是Int
简介ASN.1是一种跨平台的数据序列化的接口描述语言。可能很多人没有听说过ASN.1,但是相信有过跨平台编程经验的同学可能都听过protocolbuffers和ApacheThrift,虽然ASN.1和上面两个语言相比不是那么出名,但是ASN.1的出现要比他们早的多,早在1984年ASN.1就出现了。和他们相比ASN.1并没有提供单一的开源实现,而是作为一种规范来供第三方供应商实现的。ASN.1主
简介之前我们讲到了如何在netty中构建client向DNS服务器进行域名解析请求。使用的是最常见的TCP协议,也叫做Do53/TCP。事实上除了TCP协议之外,DNS服务器还接收UDP协议。这个协议叫做DNSoverUDP/53,简称("Do53")。本文将会一步一步带领大家在netty中搭建使用UDP的DNS客户端。搭建netty客户端因为这里使用的UDP协议,netty为UDP协议提供了专门
简介一般情况下我们使用的证书都是由第三方权威机构来颁发的,如果我们有一个新的网站,我们需要申请一个世界范围内都获得认可的证书,这样我们的网站才能被无障碍的访问。如果在某些情况下,我们的网站或者系统并不是公开的,但是也需要使用tls协议的话,那么就需要自己搭建一个CA服务器。这样的CA服务器就叫做privateCA。熟悉证书的朋友可能会说了,为什么不使用自签名证书呢?也可以达到安全通信的目
简介DNS的全称domainnamesystem,既然是一个系统就有客户端和服务器之分。一般情况来说我们并不需要感知这个DNS客户端的存在,因为我们在浏览器访问某个域名的时候,浏览器作为客户端已经实现了这个工作。但是有时候我们没有使用浏览器,比如在netty环境中,如何构建一个DNS请求呢?DNS传输协议简介在RFC的规范中,DNS传输协议有很多种,如下所示:DNSoverUDP/53简称"Do5
简介在前面的章节中,我们讲解了kqueue的使用和原理,接下来我们再看一下epoll的使用。两者都是更加高级的IO方式,都需要借助native的方法实现,不同的是Kqueue用在mac系统中,而epoll用在liunx系统中。epoll的详细使用epoll的使用也很简单,我们还是以常用的聊天室为例来讲解epoll的使用。对于server端来说需要创建bossGroup和workerGroup,在N
简介OCSP在线证书状态协议是为了替换CRL而提出来的。对于现代web服务器来说一般都是支持OCSP的,OCSP也是现代web服务器的标配。但是OCSPstapling却不是所有的web服务器都支持。但是现实工作中我们可能需要知道具体某个网站对OCSP的支持程度。支持OCSPstapling的网站怎么判断一个web站点是否支持OCSPstapling呢?最简单的方法就是去第三方网站查看网站的证书信
简介我们在进行网页访问的时候会跟各种各样的证书打交道,比如在访问https网页的时候,需要检测https网站的证书有效性。OCSP就是一种校验协议,用于获取X.509数字证书的撤销状态。它是为了替换CRL而出现的。本文将会详细介绍OCSP的实现和优点。PKI中的CRL我们知道在PKI架构中,CA证书是非常重要的组件,客户端通过CA证书来验证服务的可靠性。对于CA证书本身来说在创建的时候是可以指定过
简介在前面的章节中,我们介绍了在netty中可以使用kequeue或者epoll来实现更为高效的native传输方式。那么kequeue和epoll和NIO传输协议有什么不同呢?本章将会以kequeue为例进行深入探讨。在上面我们介绍的native的例子中,关于kqueue的类有这样几个,分别是KQueueEventLoopGroup,KQueueServerSocketChannel和KQueu
简介对于IO来说,除了传统的blockIO,使用最多的就是NIO了,通常我们在netty程序中最常用到的就是NIO,比如NioEventLoopGroup,NioServerSocketChannel等。我们也知道在IO中有比NIO更快的IO方式,比如kqueue和epoll,但是这两种方式需要native方法的支持,也就是说需要在操作系统层面提供服务。如果我们在支持Kqueue或者epoll的服
简介之前我们介绍了一个非常优秀的细粒度控制JAVA线程的库:javathreadaffinity。使用这个库你可以将线程绑定到特定的CPU或者CPU核上,通过减少线程在CPU之间的切换,从而提升线程执行的效率。虽然netty已经够优秀了,但是谁不想更加优秀一点呢?于是一个想法产生了,那就是能不能把affinity库用在netty中呢?答案是肯定的,一起来看看吧。引入affinityaffinity
简介在PKI(publickeyinfrastructure)公钥设施基础体系中,所有的一切操作都是围绕着证书和密钥的,它提供了创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的一组角色、策略、硬件、软件和程序。有了密钥,就可以根据密钥制作证书了。要想证书可以被广泛的使用,一个通用的标准肯定是少不了的,在PKI体系中,这个证书的标准就叫做X.509。X.509标准定义了公钥证书最常用
简介定时器是一种在实际的应用中非常常见和有效的一种工具,其原理就是把要执行的任务按照执行时间的顺序进行排序,然后在特定的时间进行执行。JAVA提供了java.util.Timer和java.util.concurrent.ScheduledThreadPoolExecutor等多种Timer工具,但是这些工具在执行效率上面还是有些缺陷,于是netty提供了HashedWheelTimer,一个优化
简介SpringBoot提供了HATEOAS的便捷使用方式,前面一篇文章我们也讲了如何在SpringBoot中使用HATEOAS。本文将会对这些内容进行扩展深入,详细讲解SpringBoot提供的这些基本方法。链接LinksHATEOAS的一个非常重要的特征就是在resources资源中包含超媒体,而超媒体最简单的表示就是链接。SpringHATEOAS为我们简化了封装Links的功能。我们看一个
简介HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题。作为java最流行的框架Spring当然也会不缺席HATEOAS的集成。本文将会通过一个具体的例子来讲解如何在SpringBoot中使用HATEOAS。我们的目标HATEOAS规则中,返回的数据会带有链接。我们以熟悉的Book为例,来展示这次的HATEOAS,首先创建一个Bookent
简介前面讲到了memcached的文本协议,虽然文本协议看起来非常简单,但是对于客户端来说一般还是会选择效率更高的二进制协议。二进制协议的本质和文本协议是一样的,只是他们的表现方式不同而已。本文将会详细介绍memcached中二进制协议的实现细节。memcached的协议包对于memcached的请求包和响应包来说,除了请求头有所区别之外,其他的格式都是一样的。所以对memcached的请求和响应
简介我们已经介绍了haproxy提出的proxyprotocol协议,通过proxyprotocol协议,服务器端可以获得客户端的真实IP地址和端口,从而可以进行一些非常有意义的操作。为什么获得客户端的真实IP地址会非常有意义呢?考虑一个藏在proxy背后的数据库,如果有多个客户端通过proxy进行数据库的连接,事实上因为都是通过代理进行连接,所以数据库中的所有的操作都是proxy服务器的IP地址
简介很多人都用过java中的枚举,枚举是JAVA1.5中引用的一个新的类型,用来表示可以列举的范围,但是可能很少有人知道java中的enum到底是怎么工作的,enum和Enum有什么关系?Enum可不可以扩展?一起来看看吧。enum和EnumJAVA1.5中引入了枚举类,我们通常使用enum关键字来定义一个枚举类:publicenumStatusEnum{START(1,"start"),INPR
简介JDK中的ThreadLocal可以通过get方法来获得跟当前线程绑定的值。而这些值是存储在ThreadLocal.ThreadLocalMap中的。而在ThreadLocalMap中底层的数据存储是一个Entry数组中的。那么从ThreadLocalMap中获取数据的速度如何呢?速度有没有可以优化的空间呢?一起来看看。从ThreadLocalMap中获取数据ThreadLocalMap作为一
简介用过缓存系统的肯定都听过memcached的大名,memcached是一个非常优秀的分布式内存缓存系统,应用非常的广泛。Memcached不仅仅是Web缓存,它更是一个通用的数据缓存,基本上你可以将任何东西存入memcached中,它的分布式设计具有很好的可扩展性和灵活性。Memcached是一个客户端服务器端的架构模式。一般来说,在服务器上搭建好Memcached的服务器端,接下来就可以使用
Copyright © 2005-2022 51CTO.COM 版权所有 京ICP证060544号