精华内容
下载资源
问答
  • 历久而新,我的新书《二行代码》已出版!

    万次阅读 多人点赞 2016-11-23 09:49:08
    二行代码》中的内容我相信很多人都会非常感兴趣,因为里面确实加入了很多很新的知识。略粗概括一下的话,新增内容就包括有Android Studio、Gradle、Material Design、运行时权限、多窗口模式、RecyclerView、...

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/52032038

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。

    回顾

    《第一行代码》从出版到现在已经有两年多的时间了。当然,如果是从我开始写书的那天算起的话,时隔已经三年半之久了。回顾这三年半的时光,不得不感慨,Android 技术的发展真是日新月异。

    记得在2013年我刚开始动笔写《第一行代码》的时候,Google正好推出了新的开发工具Android Studio,不过那个时候还只是 v0.1 版本。当时我还和我的编辑陈冰老师讨论过,书中到底是使用Eclipse来开发还是使用Android Studio来开发。最后讨论下来,由于Android Studio还太过于早期,不够成熟和稳定,因此《第一行代码》中还是使用Eclipse来作为开发工具的。而如今,三年多的时光,Android Studio已经从0.1版本升级到2.2版本了,并且早已替代了Eclipse,成为当前最主流的Android开发工具。

    《第一行代码》全书的完稿时间大概是在2014年的3月份,而就在5月份的一天早上,陈冰老师急匆匆地打我电话,说出大新闻了!我疑惑地问:“什么大新闻啊?”他说:“啊?你不知道啊,Android出5.0系统了!(那个时候还叫Android L)”我当时听了之后脑子是有点懵逼的,要知道,《第一行代码》是基于4.x系统来编写的,谷歌从2011年发布4.0系统以来,一直是以4.1、4.2、4.3、4.4这样的小版本系统来升级的,怎么偏偏就在《第一行代码》快要发售的时候推出了这个号称是“历史上版本改动最大”的系统升级呢!

    当时我和陈冰老师还是紧急商讨了一下,由于《第一行代码》计划是8月份上市,如果非要强行加入5.0系统的内容,一是我学习需要时间,二是写作也需要时间,这样书的发售就必然要推迟了。后来我们觉得,新系统刚刚出来,普及恐怕还要很久,就不赶这波热潮了。于是,《第一行代码》中的内容最终仍然是基于Android 4.x来编写的。

    后来这两件事让我始终觉得遗憾,由于时间的原因,《第一行代码》完美地和Android Studio以及Android 5.0错过了。

    成绩

    虽说缺少了一些最新的知识点,包括后来还出现了盗版泛滥的事件,不过这些都没能影响《第一行代码》火爆的销售。其实并不是因为我推广做得有多好,大家可能觉得我的博客访问量比较高,在上面挂个推广链接什么的就能让书畅销了,并没有那么简单。

    《第一行代码》在2014年的销量其实很一般,是在2015年才攀升上去的。那个时候很多第一批《第一行代码》的读者已经把书读完了,产生了良好的口碑,他们又将这本书推荐给了更多想学习Android开发的人。这种人传人的方式,比我单纯在博客上面挂个购买链接以及出版社的各种宣传要远远有效得多。如果真是一本大烂书,相信不管我怎么推广,也不会有多好的销量的,反而还会被大家骂。只有真正内容过硬,才能得到大家的认可。

    现在,只要你去大一点的书店或图书馆逛一逛,在里面都能找到《第一行代码》的身影。京东或者亚马逊的畅销排行榜,《第一行代码》在Android图书分类里大多数的时候销量都是排第一的。良好的口碑让很多人将《第一行代码》作为学习Android的首选书籍,现在将它称之为国内的“Android学习第一书”应该并不为过。

    那么《第一行代码》到底卖了多少本呢?之前我还从来没有公布过具体的数字,那么由于要出版升级版了,可以向大家汇报一下成绩了。很多没接触过图书行业的人,对于书的销量可能没什么概念,这里我先向大家普及一些知识。首先中国的图书行业并不是很发达,因为喜欢买书的人确实不多,而计算机图书又由于受众面很窄的原因,买的人就更少了。现在的不少计算机图书甚至是连首印都卖不完,能卖到一万本以上的计算机图书就可以算得上是畅销书了,能卖到三万本的话那已经是凤毛麟角了。陈冰老师当时拍胸脯跟我保证说,《第一行代码》至少能卖两万本,我笑笑说,能卖到一万本我就心满意足了。而现在,《第一行代码》出版两年半的时间,一共卖出了八万一千本,这个成绩是当初谁都无法预料到的。在图灵出版的所有原创书中,《第一行代码》是卖得最好的。

    新的开始

    《第一行代码》虽然没有赶上Android Studio和Android 5.0的热潮,但同时这几年Android技术发展得实在是太快了。2015年Google推出了Android 6.0系统,2016年又推出了Android 7.0系统。其实每推出一个新的系统,也就意味着《第一行代码》中的内容更加过时。因此在今年年初的时候,我终于下定决心,将书中的内容全面升级,开始编写《第一行代码——Android 第2版》。当然这个名字感觉有点长,因此我更喜欢直接叫它《第二行代码》

    新书的首要目标是要将《第一行代码》中已经过时的内容进行更新,以及加入这几年出现的各种新技术的讲解。包括Android Studio的使用,以及Android 5.0、6.0、7.0系统中引入的各种新的功能。

    由于书的整体内容结构没有改变,因此一开始我以为只是小修小补而已,但事实上远没有我想象得那么轻松。除了介绍新知识点之外,书中之前的所有项目都需要重新编写和测试,以保证代码在新老系统上的兼容性。另外,由于Android从5.0系统开始,UI风格变化很大,因此《第二行代码》中所有的截图都需要重新截取,没有一张图是可以直接使用《第一行代码》中的。毫不夸张地说,我几乎重写了整本书。

    这次的新书我大概是在今年2月份的时候开始动笔的,基本保持着每个月写3章的进度,到9月份的时候书中绝大部分的内容都已经写完了,然后我就开始等,等Android 7.0以及Android Studio 2.2正式版的发布。因为我不想重蹈覆辙,再留上次的遗憾,我不想书中的内容都是基于Android 6.0来编写的,而书还没来得及上市,Android 7.0系统就推出了。既然是要更新,那么就索性一次性更到最新。

    Android 7.0其实还好,大概是在9月初的时候就推出正式版了,但当时Android Studio 2.2的正式版真的等得我好焦急,每天我都要到官网上去刷一下看看有没有发布。终于在9月下旬的时候把Android Studio 2.2给盼来了,于是我迅速对全书的所有内容进行了一遍修订,并将所有的代码都在Android 7.0和Android Studio 2.2中进行了重新的适配。10月份的时候全书顺利完稿并且进入出版流程,11月初送厂印刷,11月底开始预售,这个速度恐怕已经是史无前例了。

    因此,《第二行代码》也是国内第一本基于Android 7.0系统的书籍。

    内容

    《第二行代码》中的内容我相信很多人都会非常感兴趣,因为里面确实加入了很多很新的知识。略粗概括一下的话,新增内容就包括有Android StudioGradleMaterial Design运行时权限多窗口模式RecyclerView百分比布局Lambda表达式OkHttpDoze模式等等,几乎囊括了Google近几年推出的所有热点技术。除此之外,还加入了几个比较完整的项目,不仅单个知识点的内容更加丰富,对各知识点之间的综合运用讲解也比《第一行代码》要好上很多。总而言之,这真的是我写得非常用心的一本书。

    下面我就挑几个《第二行代码》中比较有特色的章节来给大家详细介绍一下吧。

    第1章中搭建开发环境不再是使用Eclipse了,而是改用了Android Studio。书中除了对Android Studio的基本用法进行了讲解之外,还介绍了一些小技巧,比如说下面的这种Log打印技巧我相信很多人是不知道的:

    第3章中,新增了RecyclerView百分比布局的讲解,其中对ReyclerView的多种方法都进行了细致的介绍,包括会带着大家实现纵向列表、横向列表、以及瀑布流列表的效果,下面是瀑布流效果的截图:

    另外,第3章中还将最佳实践环节的聊天界面使用RecyclerView进行了重写,最终效果如下:

    第7章中增加了Android 6.0运行时权限的讲解,第8章中对系统通知的各种用法进行了更新,第9章中增加了OkHttp的讲解,第10章中结合前面所学过的运行时权限、通知、OkHttp等知识,实现了一个综合度非常高下载服务程序,并且应我的QQ群中群友们的要求,这个下载服务还支持了断点续传功能。效果如下图所示:

    第11章中讲的是地理位置服务(LBS),其实在《第一行代码》中,LBS方面的内容已经写得比较详细了,只是由于近几年Google的服务在中国全面无法访问,因此《第一行代码》中的这些内容也都失效了。那么为了保证这次《第二行代码》中的内容大家都可以正常运行,我将所有使用Google LBS服务的部分都替换成了百度LBS,现在不管是定位也好,地图也罢,大家都可以放心运行而不用担心程序一直跑不通了。

    第12章是本书变动最大的一个地方,因为整章内容全部重写了。原来《第一行代码》中的第12章讲的是传感器的使用,我觉得这部分内容比较鸡肋,于是直接将这一章删掉了。现在《第二行代码》的第12章使用一整章的篇幅介绍了Material Design方方面面的知识,包括讲解了Toolbar滑动菜单NavigationView悬浮按钮SnackbarCoordinatorLayout卡片式布局下拉刷新折叠式标题栏等等控件的用法和特效的实现。整章内容学习完之后,最终大家都能实现一个具有高度Material Design效果的程序,如下图所示:
    (由于CSDN最大只能上传2M的图片,因此画质被压缩得有点渣。你也可以点击 这里 查看高清版的视频效果)

    第13章中也加入了不少新的内容,因为第13章是最后项目实战之前的一个总结性章节,里面有很多你必须要掌握的高级技巧。新增内容包括有Android 6.0 Doze模式讲解Android 7.0多窗口功能讲解、以及Lambda表达式讲解等,也都是满满的干货。

    第14章仍然是项目实战部分,仍然开发的是酷欧天气,只不过这次开发的是酷欧天气2.0,比《第一行代码》中的酷欧天气可要牛逼得多了。之前很多朋友在学习《第一行代码》中的酷欧天气时,时不时就会有人跟我反馈,获取省市县数据的接口访问不了了,或者是获取天气信息的接口访问不了了。对于这种情况我也无可奈何,毕竟用的是第三方服务的接口,人家接口关闭了我也没有办法。而《第二行代码》中,为了保证接口的稳定性,我专门在京东云上购买了一台服务器,用于给大家提供长期可靠的接口支持,保证不会再让大家遇到学着学着接口就失效了的问题。

    另外,如果你也有使用云服务的需求,可以点击 这里 注册京东云账号,免费体验京东云服务。

    说了这么多,那《第二行代码》中的酷欧天气到底比《第一行代码》中的酷欧天气牛逼在哪里呢?我们直接来看下效果对比就知道了。先来看一下《第一行代码》中的酷欧天气效果,如下所示:

    然后我们再来看一下《第二行代码》中的酷欧天气效果,如下所示:

    相信不需要我多说,大家也一眼就能看出来,这两个版本的酷欧天气明显不是在一个档次上的。另外,新版酷欧天气的背景并不是一成不变的,而是每天都会有不同的背景,那么是如何实现的呢?等你学到这一章的时候就知道了。

    第15章仍然还是教大家如何打包APK文件,以及如何上架应用程序,但是这次将会使用Gradle来打包APK,并且讲解了如何使用Gradle来打包多渠道APK文件。至于上架部分,《第一行代码》中讲的是如何上架Google Play,而现在Google Play已经无法访问了,因此《第二行代码》中改成了教大家如何将APP上架到360应用商店。总之,《第二行代码》的宗旨就是一定保证书中的所有例子都可以跑得通。

    当然,除了上述内容之外,其他章节也都有很多的改动。尤其是在程序兼容性调整方面,几乎对每一章的代码都进行了优化和升级,以保证书中所有的程序在Android 7.0系统上都能完美兼容。不过这里我就不展开来细讲了,更多内容等待你自己去发现。

    封面

    《第二行代码》的封面设计可以说是下足了功夫。因为要和《第一行代码》有传承关系,但又要和《第一行代码》有明显的区分。因此,我当时给设计师提了两点要求:

    1. 让人一眼看上去就知道这是《第一行代码》
    2. 让人一眼看上去就知道这不是《第一行代码》

    设计师当然也是做得很用心,给我提供了好几个版本让我选择,然后我又从中选出了3个我个人比较满意的版本,最后在公众号上搞了一个投票让大家来做最终筛选:

    最终,绿色版本以接近50%的得票率当选,《第二行代码》的封面也最终定版,由大家共同选出来的一定是最好的,我们来一起欣赏下吧。

    再来看一张霸气的宣传海报吧:

    书签

    《第二行代码》中还会赠送大家一个非常非常精致的小礼物,我个人认为这个小礼物也是这本书的特色之一。

    其实我从小就是一个特别爱惜书的人,我是从来不舍得给书折角来记录看到哪里的。每当看到有些人将一本书的书角折得伤痕累累时,我都会觉得很心疼。因此,当我听出版社说,可以在《第二行代码》中赠送书签时,我高兴得要命。

    既然是要赠送书签,那么书签也得好好设计一下。我仔细想了想,书签的主题一定要和书的主题相关才行,而《第二行代码》中最主要的特色就是涵盖了Android 5.0、6.0、以及7.0中的知识,那么就干脆以这三个系统为主题,设计三种不同风格的书签吧。

    设计师当然也是很给力,设计的三种书签都非常好看,我们来一起欣赏一下吧:

                 

    这三种书签会随机放在每一本书里面,你将会拿到哪一种书签就全看运气了。

    当然,书签这种小东西并不值什么钱,但是我还是花了很大心思去做这件事情,因为我对这本书的一点一滴真的都很用心。

    定价

    《第二行代码》的定价我只能用“很良心”来形容。《第一行代码》一共有500多页,却只定了79元,出版社的成本负担已经比较高了。而这次《第二行代码》不仅全面升级了内容,页数也增加了几十页,还赠送书签等等,因此出版社强烈建议将书价定为89元。虽说书价越高意味着我拿到的稿费也越多,但是高的书价同时也会在一定程度上影响销量。我咨询过QQ群里的群友们,其实很多人还是很在意书价的,尤其是还没工作的学生。因此,为了给大家争取权益,我也是尽了我最大的努力和出版社各种沟通、协商,最终出版社终于同意让《第二行代码》仍然保持79元!全面升级了内容,价格还一分钱不涨,这已经是我所能做的全部了。感谢出版社在价格方面做出的妥协,毕竟纸张、印刷、物料等各种成本都在飞涨。

    不过仍然要提醒大家一点,79元只是书的标价而已,而通常我们在网上买书都是有折扣的。折扣的多少由各网店自己来定,我参与不了,但一般也就是五六十块钱就能买到了。

    购买

    了解了这么多,不知道你有没有下定决心要买一本呢?目前《第二行代码》这本书已经在京东、当当、亚马逊等网上书店上架了,也上架了PDF、Kindle等电子版,有需要的小伙伴们请猛戳下面的地址:

    京东购买地址

    当当购买地址

    亚马逊购买地址

    天猫购买地址

    PDF版购买地址

    Kindle版购买地址

    豆瓣版购买地址

    多看版购买地址

    勘误

    新书出版,里面难免会存在一些勘误,大家可以点击 这里 查看所有已知的勘误,在阅读的时候避过这些坑,每一个确认的勘误都会在下一次印刷的时候修正。当然,如果你有发现任何勘误,也可以在这个网站上进行提交,一旦勘误被确认还能领到图灵的银子,银子可以用来免费兑换图灵的图书呦。


    关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。

    微信扫一扫下方二维码即可关注:

            

    展开全文
  • 因为简单!我的第一本算法,就被女友抢走了...

    万次阅读 多人点赞 2019-06-17 16:55:28
    可是算法好难啊~~看两页书就想睡觉……所以就不学了吗?就一直当普通程序员吗? 如果有本算法,看着很轻松……又有代码示例……又有讲解…… 怎么会有那样的呢?哎呀,最好学了算法人还能变得很萌…… 这个...

    在这里插入图片描述
    普通程序员,不学算法,也可以成为大神吗?对不起,这个,绝对不可以。

    可是算法好难啊~~看两页书就想睡觉……所以就不学了吗?就一直当普通程序员吗?

    如果有一本算法书,看着很轻松……又有代码示例……又有讲解……

    怎么会有那样的书呢?哎呀,最好学了算法人还能变得很萌……

    这个……要求是不是太高了呀?哈哈,有的书真的能满足所有这些要求哦!

    来,看看这本书有多可爱——

    二分查找

    假设要在电话簿中找一个名字以K打头的人,(现在谁还用电话簿!)可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间。

    在这里插入图片描述
    又假设要在字典中找一个以O打头的单词,你也将从中间附近开始。

    现在假设你登录Facebook。当你这样做时,Facebook必须核实你是否有其网站的账户,因此必须在其数据库中查找你的用户名。如果你的用户名为karlmageddon,Facebook可从以A打头的部分开始查找,但更合乎逻辑的做法是从中间开始查找。

    这是一个查找问题,在前述所有情况下,都可使用同一种算法来解决问题,这种算法就是二分查找。

    在这里插入图片描述

    二分查找是一种算法,其输入是一个有序的元素列表(必须有序的原因稍后解释)。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。

    下图是一个例子。

    在这里插入图片描述

    下面的示例说明了二分查找的工作原理。我随便想一个1~100的数字。

    在这里插入图片描述

    你的目标是以最少的次数猜到这个数字。你每次猜测后,我会说小了、大了或对了。

    假设你从1开始依次往上猜,猜测过程会是这样。

    在这里插入图片描述
    这是简单查找,更准确的说法是傻找。每次猜测都只能排除一个数字。如果我想的数字是99,你得猜99次才能猜到!

    更佳的查找方式
    下面是一种更佳的猜法。从50开始。

    在这里插入图片描述

    小了,但排除了一半的数字!至此,你知道1~50都小了。接下来,你猜75。

    在这里插入图片描述

    大了,那余下的数字又排除了一半!使用二分查找时,你猜测的是中间的数字,从而每次都将余下的数字排除一半。接下来,你猜63(50和75中间的数字)。

    在这里插入图片描述

    这就是二分查找,你学习了第一种算法!每次猜测排除的数字个数如下。

    在这里插入图片描述

    不管我心里想的是哪个数字,你在7次之内都能猜到,因为每次猜测都将排除很多数字!

    假设你要在字典中查找一个单词,而该字典包含240 000个单词,你认为每种查找最多需要多少步?

    在这里插入图片描述

    如果要查找的单词位于字典末尾,使用简单查找将需要240 000步。使用二分查找时,每次排除一半单词,直到最后只剩下一个单词。

    在这里插入图片描述

    因此,使用二分查找只需18步——少多了!一般而言,对于包含n个元素的列表,用二分查找最多需要log2n步,而简单查找最多需要n步。

    对数

    你可能不记得什么是对数了,但很可能记得什么是幂。log10100相当于问“将多少个10相乘的结果为100”。答案是两个:10 × 10 =
    100。因此,log10100 = 2。对数运算是幂运算的逆运算。

    在这里插入图片描述
    对数是幂运算的逆运算

    本书使用大O表示法(稍后介绍)讨论运行时间时,log指的都是log2。使用简单查找法查找元素时,在最糟情况下需要查看每个元素。因此,如果列表包含8个数字,你最多需要检查8个数字。而使用二分查找时,最多需要检查log
    n个元素。如果列表包含8个元素,你最多需要检查3个元素,因为log 8 = 3(23 =
    8)。如果列表包含1024个元素,你最多需要检查10个元素,因为log 1024 = 10(210 =1024)。

    下面来看看如何编写执行二分查找的Python代码。这里的代码示例使用了数组。如果你不熟悉数组,也不用担心,下一章就会介绍。你只需知道,可将一系列元素存储在一系列相邻的桶(bucket),即数组中。这些桶从0开始编号:第一个桶的位置为#0,第二个桶为#1,第三个桶为#2,以此类推。

    函数binary_search接受一个有序数组和一个元素。如果指定的元素包含在数组中,这个函数将返回其位置。你将跟踪要在其中查找的数组部分——开始时为整个数组。

    low = 0
    high = len(list) - 1
    

    在这里插入图片描述

    你每次都检查中间的元素。

    mid = (low + high) / 2  ←---如果(low + high)不是偶数,Python自动将mid向下取整。
    guess = list[mid]
    

    如果猜的数字小了,就相应地修改low。

    if guess < item:
      low = mid + 1
    

    在这里插入图片描述

    如果猜的数字大了,就修改high。完整的代码如下。

    def binary_search(list, item):
      low = 0    (以下2行)low和high用于跟踪要在其中查找的列表部分
      high = len(list)—1
    
      while low <= high:  ←-------------只要范围没有缩小到只包含一个元素,
        mid = (low + high) / 2  ←-------------就检查中间的元素
        guess = list[mid]
        if guess == item:  ←-------------找到了元素
          return mid
        if guess > item:  ←-------------猜的数字大了
          high = mid - 1
        else:  ←---------------------------猜的数字小了
          low = mid + 1
      return None  ←--------------------没有指定的元素
    
    my_list = [1, 3, 5, 7, 9]  ←------------来测试一下!print binary_search(my_list, 3) # => 1  ←--------------------别忘了索引从0开始,第二个位置的索引为1print binary_search(my_list, -1) # => None  ←--------------------在Python中,None表示空,它意味着没有找到指定的元素
    

    运行时间

    每次介绍算法时,我都将讨论其运行时间。一般而言,应选择效率最高的算法,以最大限度地减少运行时间或占用空间。

    在这里插入图片描述

    回到前面的二分查找。使用它可节省多少时间呢?简单查找逐个地检查数字,如果列表包含100个数字,最多需要猜100次。如果列表包含40亿个数字,最多需要猜40亿次。换言之,最多需要猜测的次数与列表长度相同,这被称为线性时间(linear time)。

    二分查找则不同。如果列表包含100个元素,最多要猜7次;如果列表包含40亿个数字,最多需猜32次。厉害吧?二分查找的运行时间为对数时间(或log时间)。下表总结了我们发现的情况。

    在这里插入图片描述

    大O表示法

    大O表示法是一种特殊的表示法,指出了算法的速度有多快。谁在乎呢?实际上,你经常要使用别人编写的算法,在这种情况下,知道这些算法的速度大有裨益。本节将介绍大O表示法是什么,并使用它列出一些最常见的算法运行时间。

    算法的运行时间以不同的速度增加

    Bob要为NASA编写一个查找算法,这个算法在火箭即将登陆月球前开始执行,帮助计算着陆地点。
    在这里插入图片描述
    这个示例表明,两种算法的运行时间呈现不同的增速。Bob需要做出决定,是使用简单查找还是二分查找。使用的算法必须快速而准确。一方面,二分查找的速度更快。Bob必须在10秒钟内找出着陆地点,否则火箭将偏离方向。另一方面,简单查找算法编写起来更容易,因此出现bug的可能性更小。Bob可不希望引导火箭着陆的代码中有bug!为确保万无一失,Bob决定计算两种算法在列表包含100个元素的情况下需要的时间。

    假设检查一个元素需要1毫秒。使用简单查找时,Bob必须检查100个元素,因此需要100毫秒才能查找完毕。而使用二分查找时,只需检查7个元素(log2100大约为7),因此需要7毫秒就能查找完毕。然而,实际要查找的列表可能包含10亿个元素,在这种情况下,简单查找需要多长时间呢?二分查找又需要多长时间呢?请务必找出这两个问题的答案,再接着往下读。

    在这里插入图片描述

    Bob使用包含10亿个元素的列表运行二分查找,运行时间为30毫秒(log21 000 000 000大约为30)。他心里想,二分查找的速度大约为简单查找的15倍,因为列表包含100个元素时,简单查找需要100毫秒,而二分查找需要7毫秒。因此,列表包含10亿个元素时,简单查找需要30 × 15 = 450毫秒,完全符合在10秒内查找完毕的要求。Bob决定使用简单查找。这是正确的选择吗?

    不是。实际上,Bob错了,而且错得离谱。列表包含10亿个元素时,简单查找需要10亿毫秒,相当于11天!为什么会这样呢?因为二分查找和简单查找的运行时间的增速不同。

    在这里插入图片描述

    也就是说,随着元素数量的增加,二分查找需要的额外时间并不多,而简单查找需要的额外时间却很多。因此,随着列表的增长,二分查找的速度比简单查找快得多。Bob以为二分查找速度为简单查找的15倍,这不对:列表包含10亿个元素时,为3300万倍。有鉴于此,仅知道算法需要多长时间才能运行完毕还不够,还需知道运行时间如何随列表增长而增加。这正是大O表示法的用武之地。

    在这里插入图片描述

    大O表示法指出了算法有多快。例如,假设列表包含n 个元素。简单查找需要检查每个元素,因此需要执行n 次操作。使用大O表示法,这个运行时间为O(n)。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。大O表示法让你能够比较操作数,它指出了算法运行时间的增速。

    再来看一个例子。为检查长度为n 的列表,二分查找需要执行log n 次操作。使用大O表示法,这个运行时间怎么表示呢?O(log n)。一般而言,大O表示法像下面这样。

    在这里插入图片描述

    这指出了算法需要执行的操作数。之所以称为大O表示法,是因为操作数前有个大O。这听起来像笑话,但事实如此!

    下面来看一些例子,看看你能否确定这些算法的运行时间。

    理解不同的大O运行时间
    下面的示例,你在家里使用纸和笔就能完成。假设你要画一个网格,它包含16个格子。

    在这里插入图片描述
    算法1

    一种方法是以每次画一个的方式画16个格子。记住,大O表示法计算的是操作数。在这个示例中,画一个格子是一次操作,需要画16个格子。如果每次画一个格子,需要执行多少次操作呢?

    在这里插入图片描述

    画16个格子需要16步。这种算法的运行时间是多少?

    算法2

    请尝试这种算法——将纸折起来。

    在这里插入图片描述
    在这个示例中,将纸对折一次就是一次操作。第一次对折相当于画了两个格子!

    再折,再折,再折。

    在这里插入图片描述
    折4次后再打开,便得到了漂亮的网格!每折一次,格子数就翻倍,折4次就能得到16个格子!

    在这里插入图片描述

    你每折一次,绘制出的格子数都翻倍,因此4步就能“绘制”出16个格子。这种算法的运行时间是多少呢?请搞清楚这两种算法的运行时间之后,再接着往下读。

    答案如下:算法1的运行时间为O(n),算法2的运行时间为O(log n)。

    大O表示法指出了最糟情况下的运行时间

    假设你使用简单查找在电话簿中找人。你知道,简单查找的运行时间为O(n),这意味着在最糟情况下,必须查看电话簿中的每个条目。如果要查找的是Adit——电话簿中的第一个人,一次就能找到,无需查看每个条目。考虑到一次就找到了Adit,请问这种算法的运行时间是O(n)还是O(1)呢?

    简单查找的运行时间总是为O(n)。查找Adit时,一次就找到了,这是最佳的情形,但大O表示法说的是最糟的情形。因此,你可以说,在最糟情况下,必须查看电话簿中的每个条目,对应的运行时间为O(n)。这是一个保证——你知道简单查找的运行时间不可能超过O(n)。

    说明

    除最糟情况下的运行时间外,还应考虑平均情况的运行时间,这很重要。最糟情况和平均情况将在第4章讨论。

    一些常见的大O运行时间

    下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。

    • O(log n),也叫对数时间,这样的算法包括二分查找。
    • O(n),也叫线性时间,这样的算法包括简单查找。
    • O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
    • O(n2),这样的算法包括第2章将介绍的选择排序——一种速度较慢的排序算法。
    • O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法。

    假设你要绘制一个包含16格的网格,且有5种不同的算法可供选择,这些算法的运行时间如上所示。如果你选择第一种算法,绘制该网格所需的操作数将为4(log 16 = 4)。假设你每秒可执行10次操作,那么绘制该网格需要0.4秒。如果要绘制一个包含1024格的网格呢?这需要执行10(log 1024 = 10)次操作,换言之,绘制这样的网格需要1秒。这是使用第一种算法的情况。

    第二种算法更慢,其运行时间为O(n)。即要绘制16个格子,需要执行16次操作;要绘制1024个格子,需要执行1024次操作。执行这些操作需要多少秒呢?

    下面按从快到慢的顺序列出了使用这些算法绘制网格所需的时间:

    在这里插入图片描述

    还有其他的运行时间,但这5种是最常见的。

    这里做了简化,实际上,并不能如此干净利索地将大O运行时间转换为操作数,但就目前而言,这种准确度足够了。等你学习其他一些算法后,第4章将回过头来再次讨论大O表示法。当前,我们获得的主要启示如下。

    • 算法的速度指的并非时间,而是操作数的增速。
    • 谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
    • 算法的运行时间用大O表示法表示。
    • O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多。

    以上内容来自《算法图解》

    在这里插入图片描述

    《算法图解》

    购买链接:https://h5.youzan.com/v2/goods/3eo3wj3awryvz

    编辑推荐:

    本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;K最近邻算法。

    扫码或者点击阅读原文购买

    在这里插入图片描述

    作为码书商店的运营人员,诚邀你们进入我们的“CSDN码书福利群”,群里会不定时的给大家赠书书籍、优惠券等,有书籍推荐或者物流方面信息也可群里咨询目前群已满100人,需要加群的请扫下方二维码添加微信,拉你入群哦对此次活动不了解的也可咨询~
    在这里插入图片描述

    展开全文
  • 其实我当初决定开始写博客的想法挺简单的,觉得自己搞技术这么多年...更令我没想到的事,在我开始写博客不久之后,人民邮电出版社图灵公司的副总编辑陈冰老师就联系上了我,希望我可以写本关于Android开发技术的书籍

    书中源码下载地址:http://download.csdn.net/detail/sinyu890807/7747691


    前言


    其实我当初决定开始写博客的想法挺简单的,觉得自己搞技术这么多年了,总应该要留下点什么。既然没能写出什么出色的应用,那至少也要留下点文字分享给大家,以指引在我后面的开发者们,毕竟我也从前辈们的博客那里受惠了很多。


    受邀


    下定决心之后我就开始了我的博客之旅,令我没想到的是,我写的文章竟然非常受大家的欢迎,短时间内就聚集了大量的人气。更令我没想到的事,在我开始写博客不久之后,人民邮电出版社图灵公司的副总编辑陈冰老师就联系上了我,希望我可以写一本关于Android开发技术的书籍!


    陈冰,第一次听到这个名字的时候相信大家和我一样都不会感到熟悉,但是当他告诉我,他之前一手策划过《大话设计模式》这本书时,我立刻冲向了我的书柜并找到它,翻开扉页后赫然就在责任编辑那一栏看到了陈冰的名字,往后翻还可以看到他为《大话设计模式》写的序。这时我的心里只有一个念头,他邀请我写的这本书我是无论如何都拒绝不了了!


    创作


    接下来我就开始构思如何去完成这本书了。创作的过程注定是艰辛的,虽然我已经有了一些写博客的经验,但写书着实还是头一回,而写书又和写博客有着很大的差距。博客的内容可以比较散乱,想到哪里写到哪里,但书的内容一定要系统化,讲究循序渐进,基本上在写第1章的时候就应该把全书的内容都确定下来了。


    正所谓万事开头难,因此我首先是花了大约两个星期的时间制定了这本书的目录,这也就成为了我后面的写作大纲。陈冰告诉我,如果可以把目录制定出来,那么基本上就已经完成80%的工作了,然而事实证明,即使制定出了目录,事情也远远没有想象中的那么简单。我毕竟无法全身心地投入到写书当中,因为每天还要上班工作,有时还要加班,我只能在下班了之后再开始整理自己的思绪,然后动笔。另外,我之前对写书这件事算是严格保密的,并没有在博客上进行过任何透漏,因此我无法因为这个原因而停止更新博客,仍然坚持着每周或两周一篇的节奏。


    就这样在工作、博客和写书之间制衡着,虽然很辛苦,但我并没有落下任何一项。工作依旧相当出色,博客的质量大家有目共睹,而书怎么样大家拿到手之后就知道了。我创作的那段时间大概是保持着每月两章的进度,包括春节假期的那段时间也写个不停,最终在今年的3月份完全终稿,刚好赶上了截稿日期。到这里我的工作就已经基本完成了,后面的任务开始由出版社接手,他们审核、校对、排版、设计封面、印刷,终于在7月份的下旬开始预售了,一年的辛苦即将可以看到成果,我也表示非常期待。


    比较


    叙述完了创作的过程,接下来我们还是看一看这本书吧。这本书叫作《第一行代码——Android》,从名字上就可以看出来,这是一本非常适合初学者的书籍,我特别想写这样的一本书,因为它可以和我的博客相辅相成。由于我写博客的时间比较晚,13年才开始写的,当时很多Android技术相关的内容都已经被人写过了,重复再写一遍别人写过的东西显然太没创意,因此我给自己的博客定了一个主题,那就是只写比较高级的应用技术。可是博客的主题虽然非常鲜明,却明显不太适合初学者的朋友们阅读,从众多的评论当中我也能看出,有不少朋友的基本功还是不够扎实的,如果能结合一本介绍基础的书来巩固基本功,那你就真的变得无懈可击了,因此《第一行代码——Android》应运而生。


    下面我来对博客和书中的内容做个简要的对比吧,让大家心里有个数。

    • 博客更加倾向于介绍Android高级技巧,而书中则是基础、进阶、实用技巧都有。
    • 阅读博客时你需要有相当不错的Android基础,而阅读书时你不需要有任何的Android基础。
    • 博客中的内容相对比较散乱,而书中的内容更加系统化、科学化(这个是必然现象,一个是想到哪儿写到哪儿,一个是精心策划出来的)。
    • 出于对读者的尊重,我不会简单地将博客里的内容复制到书里,而出于对版权的保护,我也不会把书里的内容在博客上发表。因此,书和博客的内容基本不会有交集,这样买书的朋友们不会有种买了本纸质版博客的感觉。


    特色


    当然了,这本书还是有很多独有特色的,不然的话就和市场上的其它书没什么区别了。你不需要有任何Android基础就可以阅读它,但它会带领你一步步深入了解Android的各项功能。其中有不少章节我认为是非常出彩的,比如说第二章对Activity启动模式的讲解非常细致,市场上多数同类书中都没有这部分内容的,第七章对ContentProvider的讲解也相当到位,相信可以满足不少朋友的求知欲望。再比如说大部分章节的最后都会附有一个最佳实践部分,其中很多的技巧都是我日常工作中总结出来的,对你来说一定也很适用。再比如说,书中会对Git的用法进行穿插讲解,并教你如何将代码托管到GitHub,如何将软件上架到Google Play,如何在软件中嵌入广告盈利等等等等,我就不一一举出了,等待你自己去发现。


    另外,为了让这本书读起来不会枯燥,我努力让自己的语言变得幽默,可毕竟在这方面不怎么擅长,做得不够好。但本书中引入的经验值、升级、宝物系统则很好地弥补了这一点,通过不断地阅读,你将会获得经验值、升级,并赢得匪夷所思的宝物,让你在阅读过程体会到更多的乐趣。这个系统是由陈冰写的,如果大家阅读之后对这个系统有什么反馈或建议,可以发送邮件给他(neosaga@126.com)。


    很多朋友私下里有问过我,应该怎样去学习Android才能有所提高,那么今天我可以给出答案了。书和博客结合在一起学习,建议先看书打牢基础,然后再看博客进行进阶,当你把书和博客中的内容都吃透了的时候,那么我会的东西你也就都会了。


    封面


    看到了这里,相信有些朋友已经迫不及待想要购买一本了吧?别着急,我们再来看一下这本书的封面。封面的设计不是由我负责的,但诞生的过程也算是经历了各种曲折。陈冰对封面的要求非常苛刻,既要有深度有含义,又要能吸引眼球,还要给人一种想要翻开的冲动。经过了两个月左右的设计,所谓的“本年度最佳封面终于出炉了”,我们来欣赏一下:




    红色作为亮色系的代表色,使得它可以在众多图书当中脱颖而出,让人一眼就能看见它。


    再来看一下宣传海报的样子:




    怎么样,有没有一种视觉震撼的感觉?!虽然最终的封面夺人眼球,但任何东西都不会是凭空出现的,创作的过程必然有它的艰辛和曲折,《第一行代码——Android》封面诞生记这篇文章中专门讲述了本书封面的诞生过程,感兴趣的朋友可以像看故事一样去了解了解。


    定价


    79元,看到这个价格时我相信很多朋友觉得并不便宜,但实际上这已经是我尽最大可能争取到的价格了。由于书的价格是由出版社根据页数来制定的,我并不能做过多干预。通常情况下五百多页的书都可以定价到八十几、九十几元,最低也不能低于79元,于是我果断申请了最低的价格。


    其实换一种思路来想,79元也不算贵,因为这只是书的原售价,而我们在网上买书的话通常都会打折,基本上也就只需要五十多块钱就可以买到了。另外我觉得买书不用太在意价格,而是应该更在意里面的内容,书的内容只要能够真正给你带来帮助,那么它的价值就是远远大于这几十块钱的(就我自己而言,我大学期间总共大概花了两千多块的生活费用于买书,这些书一直都珍藏在我的书架上,是我永久的财富)。


    购买


    了解了这么多,不知道你有没有下定决心要买一本呢?目前《第一行代码——Android》这本书已经在当当、京东、亚马逊、互动这几个网上书店上架了,有需要的小伙伴们请猛戳下面的地址:


    当当网购买地址

    京东购买地址

    亚马逊购买地址

    互动出版购买地址

    天猫购买地址


    然后


    书的出版算是我的程序之路上一个新的里程碑吧,然而人生的路还很长,未来仍然需要努力向前。因此,我后面还是会一如既往地坚持更新博客,自我提升的同时也分享给大家。因为博客的原因,我结识了很多天南海北的新朋友,感谢众多朋友以及亲人的一路陪伴,愿未来大家都能天天向上。


    书中源码下载地址:http://download.csdn.net/detail/sinyu890807/7747691


    关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。

    微信扫一扫下方二维码即可关注:

            

    展开全文
  • 第一行代码——Android》封面诞生记

    万次阅读 多人点赞 2014-08-28 09:04:28
    第一行代码——Android》已经上市快一个月了,目前销售情况还算良好,也是特别感谢众多朋友的支持。其实一本如果想要卖的好,除了内容必须要给力之外,封面的设计也是至关重要的,而本书的封面无疑是在充实的...

    《第一行代码——Android》已经上市快一个月了,目前销售情况还算良好,也是特别感谢众多朋友的支持。其实一本书如果想要卖的好,除了内容必须要给力之外,封面的设计也是至关重要的,而本书的封面无疑是在充实的内容之外又披上了一层华丽的外衣。作为作者,其实我的任务就是将内容写好而已,其它所有相关工作都不是由我负责的。本书封面设计的所有细节都是由陈冰老师一手抓起的,之后他在图灵社区上记录了本书封面的诞生过程。在经过他同意的情况下,我将这篇文章转到我的博客上,也是让感兴趣的朋友们了解一些不为人知的小故事。


    以下所有的第一人称 “我” 都指的是 “陈冰” 。


    每一本好书的封面的诞生都不是轻松的事情。不仅不是轻松的事情,事实上正相反,几乎无一例外都是艰难的过程。但如果最终得偿所愿,一本书找到了它的封面,那这个艰难的过程就会有一个愉快的结果。


    什么叫一本书找到了它的封面?就是当你拿到这个封面时,你大脑中有一个强烈的意识,不会有任何一个其他封面更适合这本书了。


    这本书,我最初给它这个书名时,我就意识到这是个好书名,但对于给这个书名设计一个好封面而言,却是个极难的课题。“第一行代码”是我策划的一个给编程初学者看的系列,本书是这个系列的第一本书。


    在策划这本书(这个系列)时,我就想好要有一个独一无二的形式上的突破,要给读者以新意和独特的阅读体验。为此,我决定给它引入一个经验值、升级与宝物系统,这是在此前的任何计算机图书(据我所知也包括其他所有类别的图书上)上都没有过的事情。


    基于这些考虑,这本书的封面必须同时满足以下四个特点:
    一, 应该庄重、可信、能让读者感到有一股内在的力量,让读者感到这本书所讲述的知识是可信赖的。
    二, 有一种神秘感、带有一些魔幻现实主义的色彩,让读者感到这本书与其它书明显不同;
    三, 让初学者有亲切感,IT感也必须在其中体现,让读者感到这一场景他非常熟悉,有认同感。
    四, 要有绝对的视觉冲击力,在网店上销书,都是邮票大小的展示区,不可能让你捧到手里仔细端详,如果封面不能在邮票大小的面积上给你造成视觉吸引力,但这个封面无论设计得多么绝妙都是失败的。 设计一个封面不难,但要设计一个好看的封面就相当不易,而要设计一个既好看又能卖的封面则是极难的事情。


    为了达到这个效果,我开始构思这个封面。在“第一行代码”这几个字的字体上做文章的念头曾在我脑海中一闪而过,但立马就被我否定了,那样出来的效果会过于张扬,同时又不免落入俗套,而且弄不好就会搞得像本财经类图书。


    我告诉自己,既然是本给初学者看的书,那首先就要让初学者有亲切感,要设计一个典型的元素,让初学者一看到它亲切感和熟悉感就立马油然而生。八年前,我在清华时曾策划过一个“第一步”系列,当时我设计的封面元素就是在画面中央有一个“Hello,World”字样,很醒目。




    Hello,World对于初学者而言无疑是最熟悉的元素,但我不喜欢重复自己,对于这个“第一行代码”系列,我要重新琢磨一个元素。我想到了我当年刚刚学习编程时,在深夜灯下电脑前工作的情景,也想起来以前深夜写计算机书时的情景,不管是写代码,还是写计算机书,深夜电脑前工作的情形是每个程序员,无论新手还是老手都非常熟悉有亲切感的画面,甚至此时此刻的你就是这样。所以我决定就用这个画面这个场景来做这个封面关键识别元素。


    那么这个识别元素具体要有哪些物件组成呢?我开始进一步构思这个场景具体要包含哪些元素。我凭着直觉,让脑海中自发产生的图像带我前行,我看到一个小程序员坐在书桌前,他背对着我,面前是一台ThinkPad笔记本电脑,左手侧有一台iPad,右手侧有一台三星Note大屏手机,还有一碗刚泡好正待吃的方便面,一杯果汁,一摞书,因为正在从事Android开发,所以书上还有一个Android小机器人的手办,还有一盆绿植(我又在脑海中仔细看了看,原来是盆仙人掌)。我把这些元素在纸上画出来。为了让画面更丰富,我瞅了瞅我自己的书桌,然后又在画面中加了一个水杯,几张纸和一支笔。为了让画面更生动和富有趣味,我在桌旁的地面上加了一只小猫,它正好奇的望向桌底某个方向,似乎发现了什么异次元的东西。


    这是当时我画的草图:




    当时我在主画面周围还画了一些家具、一个窗户,以及窗前的天文望远镜(望远镜的出现有两种含义,这是这个小程序员的爱好,同时也意味着梦想),后来我意识到,整个画面很像我房间的样子。


    我让与我合作多年的插画师巫俊武来画这个插画。这是插画的第一个版本:




    不萌,而且过于写实,欠缺一些魔幻感,于是继续修改,得到下面这个版本:




    有点萌了,有点味道了。于是,我让俊武先进行一下着色,看看效果。我当时给了俊武一幅插画效果(这是《梦想还是要有的,万一实现了呢》一书中的一幅插画),让他就按照这幅插画的效果来进行着色。因为我当时希望这本书的画面要温暖、明亮、色彩丰富,看着让人心生喜悦,带给人阳光向上的感觉,同时时间是晚上,所以这幅插画非常符合我要求。




    结果,俊武一番神勇发挥后,得到下面这个让我大跌眼镜的效果:




    当时又进行了一些着色的调整,但始终离我要的效果相去甚远(俊武不太擅长我要的那种着色风格),于是我果断放弃着色,决定就用黑白色来实现这幅插画。


    我开始思考怎样才能让黑白的插画产生足够的力度,那就必须有足够的细节,同时笔触要加粗,粗笔触本身就会带来细节感和质感。笔触太细,必然会有单薄感、缺乏力度。因为缺少细节而导致缺少力度,所以我给插画师找了一些素描风格的插画,让他往那种效果上靠拢,几经修改,得到下面这个版本。




    画面开始有一些厚重感和力量感了,但人物的脑袋有问题,不够大不够圆,继续修改。几经修改,得到满意的版本(我当时以为的最终版本)。




    然后,我又让俊武照着我的另一副草图画好了封底用的插画。




    这个封底的插画是和封面插画相呼应的,封面插画是在家里(屋内)看到的情景,而封底插画是同一时间在屋外(小区里)看到的这家的情景,整栋楼的灯光都熄灭了,所有人都入睡了,只有这个小程序员的房间还亮着灯,正在认真地努力地写着代码。他的梦想是成为优秀的程序员。


    因此,我在封底写下了这样一句宣传语:
    我挥舞着键盘和本子,
    发誓要把世界写个明明白白。
    两行字下面的那个小灰块代表正在闪烁的光标。


    然后,我把全套封面设计资料(包括插画、封面宣传语、目录、样章等等)交给我的设计师绿豆(真名潘建永),并电话中跟他沟通了这个封面的设计要求。一周后,我拿到了下面的版本,我在已经坐在椅子里的状态下又进一步跌坐在了椅子里。




    简直乱成一锅渣了,而且画面很单调,毫无让人去翻阅的念头。绿豆跟我说,他感到这幅黑白的插画限制了他的设计发挥,因为为了配合一幅黑白的画,封面的底色几乎只能是黑白的(至少我和他当时异脑同思都是这么认为的)。于是,事情几乎又回到了起点,还是必须搞出一幅着色的插画才行,才好后续设计的发挥。我安慰了一下绿豆受伤的心,决定继续去寻找合适的插画师。我在chuangyiren.cn网站上翻阅了几百页,找到了多位优秀的插画师,然后我从中选了一位插画师,和他电话沟通后,请他开始画这幅插画。


    我这时对这幅插画的画风应该是怎样的,已经有了一些想法上的变化,我感到如果画面和上面提到的《梦想》那本书的画风一样的话,会显得过于卡通,有些低幼,而且缺少神秘感,与这本书中所包含的这套令人耳目一新、匪夷所思的升级与宝物系统的感觉不是很搭,同时,这种画面缺乏厚重感和力度,由于颜色过多,在网店小图上展示时也很难形成视觉冲击力。因此,我决定放弃这种画风,转而寻求一种能满足神秘、厚重、且具有强力的视觉冲击力的画风。


    这时,我突然想到了我以前看过的一部动画片电影《凯尔经的秘密》。这部动画片的风格正适合这本书。




    但最终拿到的插画效果和我想要的仍相去较大。




    我这时感觉多少有点崩溃,我觉得我最初制定的设计方案或许很不错,但实现难度较大,而且即使完全按照我的设想实现了,画面冲击力很可能仍然不够大。


    在寻找新的插画师,以及让新的插画师试画的期间,我也同时在让俊武把原来的素描版插画进行完善,因为此时我猛然想到,我不能仅仅只在封面上写上一句“第一本引入经验值、升级与宝物系统的计算机书!”就想当然的认为读者会信了,并且会感受到这句话意味着什么。我必须要在封面上直接就以画面的形式把这本书所加入的这套独一无二的经验值和升级系统体现出来,所以只画出小程序员显然是不够的,还要有这套系统中所营造的那个Android神界的人物、角色、物品。


    所以,我让俊武在画面上增添了这样七个元素:


    一, Android前辈遗失的修行卡
    二, 外围守护者
    三, 信心增强大力丸
    四, 上古奇书
    五, 神树
    六, 粗布Android战袍
    七, 界面砖家(法师造型)


    我画了草图,并跟俊武说明了这些元素各自的形象。


    第二天,我得到了一个身材矮小的牛魔王(俊武想象中的外围守护者),以及忘记从哪个软件里跑出来的Wizard(俊武想象出的巫师)。




    我平静了一下心情,调整好思路,继续与俊武沟通。我从网上找到了这七个元素中每一个我满意的造型,然后让俊武参考它们进行绘画,果然,这次的接近了不少。




    但守护者的神态不够威武,而且身高不够,感觉不到是神界的人物,更像是个脾气和善的在自由市场卖猪肉的胖商贩,巫师的身高也不够,感觉像西游记里的土地或是小矮人之类的角色。我让俊武想象希腊、埃及那些神庙中的顶天立地的神像,感受他们的体积和庞大,体会他们的威严,经过数次修改后,我拿到了满意的版本。




    插画很完美了,但封面的总体设计方案的问题依然没有解决。我集中精力只想一个问题,怎样让画面有视觉冲击力,显然必须保持单色色块尽可能的大,因为一旦画面被多种颜色和色块分散后,在网店上邮票大小的面积上就更形不成什么视觉面积了,所以我想到必须采用整个封面用单一色调的方案,可选的颜色有红色、黄色、金色、蓝色、绿色,充分琢磨和体会后,我选了红色,蓝色也很有冲击力,但不管是读过本书内容还是这套升级系统,你都不会在脑海中产生蓝色这个颜色。你的脑海中会产生绿色这个颜色,但绿色在网页上的视觉冲击力太弱,在催人向上的力度上也较差。红色最合适,但不能是大红,大红太刺眼,而且略显俗气,所以我用了暗一些的红色,绿豆说他是往红色中加了20的黑,出来的这个效果非常棒。


    为了尽量让红色占有更大的视觉面积,我想了一个方案,在画面前景色中只保留小程序员和那只小猫是白色的,而把其他元素(守护者、神树、古书、巫师等)都放入背景的红色中,作为底纹呈现出来,这样就不会喧宾夺主,而且有一种那些神界的人物是这个小程序员的脑海中的想象或者说回忆的韵味。此外,单独的红色,即使加上这些神界的元素做底纹还是略显缺乏一点层次,我又让绿豆在底纹中加入了一些植物的叶子。我选了恐龙时代就存在的蕨类植物的叶子,因为这些叶子有一种与生俱来的神秘感和沧桑感,若隐若现间,烘托出本书应有的神秘和庄重的味道。




    此前,由于封面上宣传语太多,不方便设计,所以我让绿豆把其中一部分宣传语设计到了腰封上。腰封对这些重要的宣传语能起到更好的宣传作用,同时封面本身也干净了很多。


    至此,整个封面设计完成。




    完整的展开封面:




    关注我的技术公众号,每天都有优质技术文章推送。关注我的娱乐公众号,工作、学习累了的时候放松一下自己。

    微信扫一扫下方二维码即可关注:

            

    展开全文
  • 这一年,这些:2020年读书笔记

    万次阅读 2021-01-29 08:06:08
    抵御高危病原体的第一道防线就是胶带,因为它能封死缝隙。简而言之,要是没有胶带,也就没有生物防护这回事了。 他们没有使用锐利的刀具,因为刀具在高危区域是致命武器。手术刀有可能划破手套,割破手指,在你感觉...
  • 本文是我最近读书笔记的一篇文章,主要是阅读《淘宝技术这十年》的第一部分,主要包括淘宝网的技术流程和基础介绍,希望文章对大家有所帮助,同时记录自己最近学习的内容。我似乎是2007年初中看《赢在中国》的时候...
  • Java编程思想读书笔记(1~13、16章

    万次阅读 多人点赞 2017-11-26 18:54:06
    Java编程思想(1~13、16章 Java编程思想(二)14章-类型信息 Java编程思想(三)15章-泛型 Java编程思想(四)17章-容器深入研究 Java编程思想(五)18章-Java IO系统 Java编程思想(六)19章-...
  • 0x00401001 ,表示为二进制是 0000000001 0000000001 000000000001 ,对应上面三个名词,那么目录值、页表值和内偏移值都是1,也就说要想找到真正的物理地址,首先应该到目录(拥有1024个目录项)的第一项中...
  • 第一课:什么是树莓派

    千次阅读 多人点赞 2020-03-31 13:00:39
    这是《树莓派系统专栏》 的第一课,叫什么是树莓派(这也是我教学视频的第一课),希望给第一次接触树莓派的人有一个感性认识。 树莓派长什么样 我们要搞清楚一个刚接触的东西,最直观的是看它的实物,下面我就先上...
  • 书签备份

    万次阅读 2017-09-15 18:18:00
    第一步就是实现股票历史数据的获取,这个有安装包TuShare可以用。首先是安装TuShare,直接在cmd中pip installtushare。如果想确认安装成功,可以新建个python文件,输入import tushare as tsprint ts.__version__ ...
  • 自学编程,看书还是视频?

    千次阅读 多人点赞 2020-10-18 07:26:58
    不管是看书还是看视频,还有环必须加上,就是——实战
  • 虽然现在网上都有PDF之类的电子版本书籍,但我还是适应不过来,我还是比较喜欢把拿在手里一页一页去翻、边看边做笔记的那种。 借用著名作家冰心的一句话“读书好,多读书,读好书”,今天我来分享一下我觉得比较...
  • 那么有两个问题:第一,我通过什么字段来选中这条记录呢?第二,我能修改哪些字段? 如果我都能修改我选择的字段,那就不修改了。那是新建啊! 所以我必须要用一个字段来锁定他能修改的内容,不能随便篡改。...
  • 学编程看些什么书

    万次阅读 2014-07-17 16:46:38
    虽然一直想写点什么,但是感觉自己怎么写肯定都不如上写的好,所以到最后感觉还是推荐点比较好。 下面列举一些自己感觉还不错的,可能会和以前的有重复,就当做总集篇吧。一般好书都有些难度,而且
  • 工作十年,分享看过的优质 Java 书籍

    万次阅读 多人点赞 2019-12-13 10:38:32
    万事都有好坏,也一样。有的是精神粮食,有的纯粹是浪费时间。这里就分享一些我精挑细选后的优质书籍,希望能帮大家少走点弯路。 在读这些的过程中,我还写下了不少博文,这些文章也帮助过不少年轻人,他们经常...
  • 学习c/c++ 推荐学习什么书籍?

    万次阅读 2019-05-13 20:11:19
    为了学习一门语言,通常我们可以找到《X语言编程》的。这也形成了个潜规则:当你创建一门严肃的语言的时候,你需要编写这样。学习语言有点像学习作文,但这并不意味着你能够突然变成个著名散文作家! ...
  • ,让我走上编程之路

    千次阅读 热门讨论 2013-08-31 12:46:48
    但唯一让我真正用心读过的,是大学期间本普通的c++程序。也是它,让我开始编程。  曾经作为名大学计算机专业的学生,在未分专业之前我们信电院就开始学习c++。当时对程序确实没有多大兴趣,加上自己天生懒惰...
  • 声明: 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。...4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
  • 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧  Heinrich,生娃学工打折...傅里叶分析不仅仅是个数学工具,更是种可以彻底颠覆个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式
  • 个普通专科生,拿什么拯救你的未来?(精简版)

    万次阅读 多人点赞 2021-03-09 17:05:00
    个普通专科生,拿什么拯救你的未来?(精简版) 总有人要赢,为什么不能是我!————— 科比-布莱恩特 ...大家好,我是名普通的专科生,来自云南大理,大家都喜欢我小Du。可能很多人看到我的博客...
  • 《程序员修炼之道:从小工到专家》是本带领程序员从小工成为行业专家的著作。这本书里有70个Tip,这些Tip都...因此不管什么时候看这本书,也不管你翻到,总会发现这样的Tip,而它们也会让你有醍醐灌顶的感觉。
  • 推荐本写给IT项目经理的好书

    万次阅读 2018-03-21 11:46:34
    原文地址:http://www.cnblogs.com/cbook/archive/2011/01/19/1939060.html(防止原文作者删除、只能拷贝份了)推荐本写给IT项目经理的好书...内容简介这个世界上写给项目经理的很多,写给IT项目经理的也不...
  • 前言 工作三年有余,年纪大了专业技能到没长进,有时候闲的时候总想写点东西出来,由于自己的懒惰一直拖拖拉拉...emmm,参考的是小红编辑的标签效果, 拿在手里玩了一会,标签可以跟随手指移动,当前拖动的标签...
  • 世界上最简单的会计—读书笔记

    千次阅读 2017-12-31 22:39:07
    世界上最简单的会计 美 Darrell Mullis, Judith Orloff前言本书以个柠檬汁摊的前世今生,讲述了经营个企业的过程中会遇到的各种各样与会计相关的知识。正如本书页面文字那样: 摆个果汁摊,钱从何处来?怎么...
  • 人工智能:种现代的方法 书本课后习题解答

    万次阅读 多人点赞 2018-07-08 21:57:42
    摘要 本文旨在呈现《人工智能:一种现代的...1.第一章 1.1 用自己的语言定义(1)智能,(2)人工智能,(3)Agent,(4)理性,(5)逻辑推理。 答:1)Intelligence:the ability to apply knowledge...
  • Java核心技术·卷 I(原书第10版)| Core Java Volume 讲的很全面,书中的代码示例都很好,很适合Java入门。 但是作者不太厚道的是把现在没人用的GUI编程放在了第一卷,基本上10~13章是可以不用读的。 ...
  • 篇文章详细讲解了无监督学习Autoencoder的原理知识,然后用MNIST手写数字案例进行对比实验及聚类分析。本篇文章将分享《人工智能狂潮》书籍内容,包括人工智能的应用和什么是人工智能,结合作者的理解分享人工...
  • 《如何阅读

    千次阅读 2006-09-10 13:15:00
    除了写作《如何阅读》外,以主编《西方世界德经典》,并担任1974年十五版《大英百科全书》的编辑指导而闻名于世。 查尔斯·范多伦(1926- ) 先曾任美国哥伦比亚大学教授。后因故离任,和艾德勒一起工作。...
  • 什么叫大数据 大数据的概念

    万次阅读 多人点赞 2017-05-31 20:23:06
    1、大数据定义  对于“大数据”(Big data)研究机构Gartner给出了定义,“大数据”是需要新处理模式才能具有更强的...换言之,如果把大数据比作种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,711
精华内容 34,284
关键字:

一般书的第一页叫什么