自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(168)
  • 资源 (4)
  • 收藏
  • 关注

原创 编程五年,原来我还只是一个高级新手

如果生效并有时间,我会认真理解这段代码,确保没有副作用;如果没时间,就直接过了,反正,能跑就行……

2022-09-17 01:20:22 131

原创 android 根据颜色值修改背景图的背景色 最简单方法

轻松与后端一起修改背景图颜色

2022-09-15 11:25:04 241

原创 IDEA leetcode插件无法登陆,需要cookie操作的解决方法

解决leetcode插件无法登陆的问题

2022-06-12 20:19:00 1017 1

原创 新年第一篇,androidHAL层知多少?

最近和同事交流,多次听到HAL层,由于小松以前主要负责应用软件,所以几乎没听说过这一层,搜了一下图片,发现他全名为Hardware Abstraction Laye(硬件抽象层),位于Linux Kernel和FramWork之间,是抽象底层接口传递给上层的,但是我转念一想,如果是控制硬件的话其实这个HAL层完全可以归入Linux Kernel中嘛,难道他还有别的作用?所以今天呢,小松就来好好研究研究这个层的作用与原理存在的意义Hardware Abstraction Layer 为硬件抽象层,我们

2022-02-17 16:30:37 1022

原创 5道题,教你参破滑动窗口的解法

前言所谓窗口,就是一个连续的封闭集合,一般是用left与right指针来表示,但是也会根据题意变化,比如下面这道题187. 重复的DNA序列所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。简单说就是字符串中找到长度为10的,多次出现过的子串class Sol

2022-01-17 19:50:39 240

原创 【视频】30分钟掌握前缀和,你能做到吗?

视频指路https://www.bilibili.com/video/BV1iq4y117xZ?spm_id_from=333.999.0.0 算法专题精进 掌握前缀和 刚好30分钟,这个视频主要讲了小松在过去一周对前缀和的梳理,是用34寸屏幕录的,所以看起来有点窄,另外不知道为什么感觉有时不时的破音,下次用笔记本录吧~下文是这期视频的源代码和一些总结,不过需要先看完视频后才能看懂哦

2022-01-02 21:08:08 202

原创 当我们说“嘿,siri”时,会发生什么?

前言今天小松由于工作需要,研究了一下思必驰的一个语音识别模型,这块之前没有接触过,主要看了语音唤醒这一块内容。本地语音唤醒,在做完配置后,只需要实现唤醒回调接口,实例化唤醒引擎,这个唤醒引擎我理解为启动唤醒功能的容器,你可以实现很多接口,比如唤醒引擎检测到说话声,会有对应的回调方法,开发人员可以实现这些回调方法,自定义自己的app的效果部分回调方法会带来约定好的返回值,比如检测到声音变化或者错误码等等,下图表示整个流程,蓝框外面为应用开发来做,框里面除了实现接口回调,其他的都是sdk的工作话说这个

2021-12-17 17:36:18 3018

原创 一个客户端开发眼中的spring

周六的时候在b站搞了一波模拟面试,三个大学生,属实心态有点崩因为我看他们都是后端开发,而我是android开发,对Spring不太熟悉,怕出丑,于是周六一天都在恶补spring知识结果第一个问题 IOC都没人答出来……后面我都不知道怎么问了最后的视频发出来,又因为同学说隐私啥的不想发出来,没办法,我只能给删了,因为视频很大,如果重新打码,剪辑再导出上传,至少又要两小时起步,我实在是不想在这种事情上浪费时间了以后模拟面试还是需要设置一下门槛吧好,今天我们来说说我学习spring的收获,以下所有知识点

2021-12-05 20:10:04 1119 3

原创 客户端开发 小松 对于dubbo的简单了解

dubbo是阿里开源的高可用服务端架构,只要用于后端服务器的调度,今天小松心血来潮,在b站搜了一个课程来学一学,不过我并没有实操,毕竟没有那么多时间,算是“云学习”哈哈,这篇文章就当是我学过dubbo的证据了文章最后会附上视频地址,有兴趣的小伙伴可以去看看,因为我对dubbo算是初学,下面的总结都是来自视频,可能有过时或者错误的地方,欢迎探讨基础知识Dubbo架构使用方法:将服务提供者注册到zookeeper注册中心导入dubbo依赖,操作zookeeper的客户端配置provider

2021-11-27 14:55:37 210

原创 synchonized只能回答加锁?深入解析,关于锁升级流程的各项细节

目录锁升级线程获取锁流程轻量级锁升级为重量级锁偏向锁策略案例最后关于synchronized,我相信你一定不会陌生,但是在java 6之后,jdk大幅修改了锁的量级,从原来的重量级锁变成可升级的轻量级锁,今天,我们就来看看吧首先我们需要介绍一下synchronized的获取锁的本质是什么,看如下代码和字节码public class Demo { private static int count; public static void main(String[] args) { .

2021-11-12 13:44:54 476

原创 深入理解android 包体积优化,给apk瘦身全部技巧

前言随着iphone13p最大内存放大到了1T,大内存手机的时代悄然降临,在android里面,三星也有,罗老师几年前说:如果我告诉你们我们在做1T的手机,你们可能以为我疯了。看看现在,估计未来会有更多手机有1T版,大家开始真香了。但是,如果现在有人说:要做一个1T大小的app,那他可能是真疯了,至少未来十年不可能。因为手机内存是越大越好,你一个app当然是能小就小呀Android app的文件格式为apk,本文就是探讨对于一个android apk,有哪些方法可以减小体积Apk组成要想减小体.

2021-10-23 21:27:40 1531

原创 翻车了,字节一道 Fragment面试题

一道面试题前段时间面试,面试官先问了一下fragment的生命周期,我一看这简单呀,直接按照下图回答面试官点点头,然后问,如果Activity里面有一个fragment,那么启动他们时,他们的生命周期加载顺序是什么?所以今天,我们好好了解了解这个用得非常多,但是对底层不是很理解的fragment吧首先回答面试官的问题,Fragment 的 start与activity 的start 的调用时机调用顺序:D/MainActivity: MainActivity:D/MainActivity

2021-10-21 13:45:23 1194

原创 面试官:说说为什么自定义view的wrap_content会失效?

如果你不了解View,那就说明你没有真正入门android无论是TextView小控件,还是LineLayout这种大容器,都是View演化而来,TextView也继承自Viewpublic class TextView extends View implements ViewTreeObserver.OnPreDrawListener {}LineLayout这类布局控件特殊一点,来自ViewGroup,而ViewGroup继承自Viewpublic class RelativeLayout e

2021-09-09 19:33:36 348

原创 关于栈,你不可不知道的骚操作

栈这个数据结构大家应该很了解了,简单说就是先进后出,就像桶一样,只有一个口,先放进去的东西在下面,后来的东西在上面说来惭愧,我一直觉得比起多种多样的队列,栈就这点东西了,今天给大家介绍一种栈,叫做【单调栈】,本文会分为两个部分,第一部分直接使用单调栈解题。第二部分会用一个较难的题,需要用到单调栈思想。单调栈结构题目如下:​ 给定一个不含有重复值的输入a,找到每一个i位置左边和右边离i位置最近,且值比arr[i]小的位置,返回所有位置的信息举例:arr = {3,4,1,5,6,2,7}返回结果

2021-07-09 10:29:06 79 3

原创 毕业一年有感——人活着的意义是什么?

小松是2020届某末流985的毕业生,最近毕业季了,仔细想想,自己毕业已经将近一年,虽然因为自己曾经犯的错直接导致了晚一个月拿证。但是总觉得,应该写点什么。在我中学的时候,我一直认为自己是个学习能力很强的人,成绩总是名列前茅,同时我也不执著于名次,能到前10我就不会继续努力,而是去看看书,玩玩游戏之类的。然而,到了大学后,我一直感到自卑,很多课程设计,老师讲完一点,很多同学当场就能解答,但是我怎么就是不会,大一就陷入了严重的自我怀疑。我印象深刻的是,第一节C语言课,老师布置了几个题,我不会,于是去问我们

2021-06-27 16:06:56 151

原创 关于android 的crash,不知道这个,只能说你还在入门阶段

最近学习了一下BreakPad获取native crash的系统信息和堆栈信息,这是极客时间的一个作业。做android开发的都知道,crash是非常致命的问题,有两种crash,java本地Crash和native crash,第一种比较好解,因为java堆栈已经帮你定位到问题,而第二种,主要指的是C/C++代码,在android中以动态链接的形式存在,由于是跨语言的,所以往往很难定位。因此很多公司都开发了很多工具来进行,比如腾讯的bugly,阿里的啄木鸟。要想做一个可用的崩溃日志收集系统,需要做到

2021-06-27 15:31:38 529 1

原创 flutter初步入门介绍

flutter1.x简介Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Native引擎渲染视图,这无疑能为用户提供良好的体验。特点跨平台自绘引擎不使用 webview,不使用操作系统原生空间,自己的高性能渲染引擎来绘制widgetS

2021-05-24 11:29:29 476 2

原创 管中窥 Tinker, 一览热修复

关于热修复,这个曾经让小松觉得超级厉害的技术,一直都没敢的接触,最近因为一些事情,注销了王者账号后,时间多了一些,现在来研究下吧本文仅讲述自己的学习进程,涉及到部分源代码和思想,但是不会过于深入,适合了解是什么首先,所谓的热修复,也就是 hotfix,顾名思义,也就是不需要重新写代码发 apk,而是用户不需要更新手机里面的 app 就可以把代码修复,尤其是一些严重影响体验的问题,比如 crash 之类的,如果等新版本发布再改那不得被用户喷死因此,hotfix 就尤为重要,对于开发来说,一般不需要

2021-04-16 20:49:40 149

原创 【视频】硬核5 分钟主方法推导过程

在归并排序或者和二叉树相关的算法中,我们需要将处理的数据,分割成两部分,然后再组合,此时关于时间复杂度,就成为了这样T(N) = 2T(N/2) + O(N)我们知道,归并排序的时间复杂度是 O(NlogN),那么这是怎么推导出来的呢?或者说更抽象一点,类似于这种分治手段的时间复杂度怎么计算呢?在《算法导论》中提出了主方法的概念,如下正如图中所示,由于a,b的不同关系,T(n)有三种可能性,接下来就来详细推导这个过程。首先我们先得做一个假定,T(1)=1,因为如果数据只有一个的话,我们根本不需要

2021-02-24 16:59:38 102

原创 别用Android 4.1 ,bug 满满,总有一款适合你

前几天,我怀着忐忑的心情升级了android studio,android 4.1稳定版其实早几个月就出来了,但是按照他的尿性,一般第一批吃螃蟹的都是一大堆bug,所以等了几个月,然而升级后,才发现bug一点也没少首先就是,打不开,直接给你报错Internal error. Please refer to https://code.google.com/p/android/issuesjava.lang.NoSuchMethodError: com.intellij.ide.plugins.Plug

2021-01-21 11:08:32 381 1

原创 android 升级 4.1后出现java.lang.NoSuchMethodError解决办法【mac 版】

今天尝试升级一下android studio,结果出现Internal error. Please refer to https://code.google.com/p/android/issuesjava.lang.NoSuchMethodError: com.intellij.ide.plugins.PluginManagerCore.loadDescriptors()[Lcom/intellij/ide/plugins/IdeaPluginDescriptorImpl; at com.

2021-01-18 17:44:18 2333 3

原创 2020写给未来 100w 粉丝的年终总结

前言2020年即将结束,这一年有许许多多的史无前例,注定将和 1776,1917 这些年份一样成为历史标志。人们的观念和生活习惯在这一年的变化,任何一个强大的政权都要花几十年才能做到。我们有幸成为了当事人,不过,对于我来说,更重要的不是这些宏观的东西,而是我个人的成长与收获,这篇就是小松今年大部分时间所经历和收获的,下面,就从生活,技术,思维,遗憾四个方面去总结小松的 2020,希望对读者有所启发。生活听书上班时,睡觉前,吃饭时,小松常常听一听书,认识了很多有趣的人,比如维特根斯坦,卡洛罗韦利,

2020-12-28 21:43:03 1296 9

原创 在腾讯,如何4个小时干出8个小时的工作量?

最近一个月都在搞需求,12点下班家常便饭,周末更是随时onCall,作为项目组里面最菜,最新的小松,一开始的时候总是半天搞不清楚需求,经过这段时间大佬的各种指导,加上自己的思考,现在的小松,工作效率可谓翻倍!首先,如何提高大脑的效率,我们需要明确这一概念每个人提升大脑的效率方式多种,比如睡觉,运动,喝咖啡,但是妨碍大脑效率的方式一定只有一个——切换这个切换,包含外界的打断,这是不可抗力,没办法但是还有自己的无谓切换,大脑的功能有思考,记忆,和比对正如电脑的功能,有cpu处理,IO和值比较外设准备

2020-12-08 00:54:57 260 1

原创 git 在未保存,add,commit,push下撤销的方法?收藏后再也不用找了

你可以先试着git statusgit会提示你怎么做,如果不确定的话,请往下看假设你写了代码,但是还没有做任何提交,此时代码在工作区(就是你的ide里面)git checkout -- <file>可将工作区的内容回退和暂存区一致,就是最近的修改全丢注意:上面的是已经不推荐使用,因为checkout还可以切换分支,所以2.23版后的git使用git restore <file>如果已经git add .表示已经提交到暂存区,使用git reset He

2020-11-30 00:07:06 233

原创 redis 最全知识总结,核心内容全在里面了

过去的两周,小松陆陆续续看完了一门长达十几个小时的课程 redis入门与精通。当然,仅仅课程是不足以精通redis的,不过用来入门和窥见redis的全貌大有帮助,今天,小松就记录一下过去两周在redis上的学习心得。目录基础五大基本类型进阶持久化发布订阅主从复制哨兵模式缓存雪崩穿透击穿基础五大基本类型key这是最基础的,Redis是典型的键值对数据库,key可以通过runoobkey设置,如果设置成功就会返回OK,删除返回1。redis 127.0.0.1:6379> SET run

2020-11-11 20:13:51 204 2

原创 【红黑树】背了又忘?深入本质,他也不过是一棵二叉树

目录前言二叉树二三树查找插入二三树生长过程红黑树小结前言小松最近好久没有更新文章了,是小松懒了吗?是的自从小松拿到了公司的测试机,近5000的小米10 Pro,还有因为内推几十个人得到的airpods pro奖品,还有公司每月发的Q币和点券,于是我的周末变成了这样。早上10点来公司,信心满满准备好好学一天,看到小米10,心想,要不玩一把王者?公司的网还贼好,下载近5~6m/s,开局全程50延迟以下,然后打开mac,上爱奇艺播放4k杜比漫威大片,在28寸大屏下当背景音,带上airpods,世界只剩

2020-10-14 20:04:59 340

原创 通过女朋友来通俗易懂讲解“接口回调”,一不小心就被绿

背景最近要接一个数据,小松不知道怎么弄,导师说:你可以定义一个接口回调啊然后我就吭哧吭哧的写,写到一半,发现有点不对劲,但是又不知道怎么办。顿时发现自己的接口回调用少了,只能对付常用的几个场景,一般在网上搜一搜都能发现很多一样的代码。但是一旦在几百万代码的产品中,很多接口回调都是自定义或者用别人的自定义,不熟悉,不习惯是理所当然的。所以今天,我们就好好的来剖析一下什么是接口回调回调假设,现在小松有一个女朋友,小鹿,我们在一起生活,要生活呢就要洗碗,如果我和她都学会洗碗,显然,我们内部的代码是重复的

2020-09-26 01:13:01 1785 2

原创 代码成诗之路,你需要了解的——命名,函数与注释规范

前言在我们平时刷题的时候,你可能会写过很多诸如int a,b,cint [] arrays=new int arrays[10];if((numbers > 10 && flag == 'true') || flag =='false')这种代码,对于我们自己练习编程或者解决一个算法题,当然没有问题。但是如果是在一个工程中,尤其是几十上百人维护了几年的工程中,还使用这种写法,倾泻自己天马行空的才华,保证leader不打死你哦。所以,对于代码的整洁性,可读性,自古以来就有很

2020-07-19 16:25:44 685

原创 2019.8.22腾讯android一面面经

100分钟的硬刚一面,之前发在其他平台上,现在转到这里记录一下android1、先谈谈自己的项目远程数据库传输图片到app端,我们当时将图片转换成base64存在数据库中,然后传到app端,app解析base64获得bitmap,直接显示然后面试官疯狂diss 为什么要将图片转成base64再传(二面也diss这个,问是否可以直接传图片地址)2、讲一下http连接的框架okhttp,retrofit2.1、retrofit原理注解+设计模式,包含代理模式2.2、什么是动态代理举了经济人和

2020-07-18 14:20:47 244

原创 【互联网大厂研究】让千千万万底层人民脱贫致富的【快手】,他有何等魔力?

天下**千千万,快手抖音占一半。这是我在大一时第一次听说【快手】这个词时的场景,忘了是谁说的,但是这个场景,我一直记忆犹新。虽然我对快手没有任何偏见,但是通过各种渠道多多少少的接触,对他并没有太多好感,最近打算研究下中国知名互联网公司的产品与商业逻辑,快手,就是第一个对象。原因很简单,快手出了一本书叫做《被看见的力量》,这书名起得很合我意,所以,本文将会依托这本书,以及我自己下快手来玩一玩,好好了解下这家公司。目录前言小故事快手有什么一切平等底层人民的上升通道重回熟人社会写在最后:前言小故事不知道

2020-07-13 21:16:22 1088

原创 【源码】app是如何启动的?深入解析android应用程序的启动过程(中)

前言由上文可知,在启动了应用程序的进程后,接下来,就该启动应用程序本身了,你已经知道AMS(Activity Manager Service)是专门管理Activity的服务,而启动应用程序,本质上来说,就是启动应用程序的第一个Activity,这个Activity被称为根Activity,所以AMS在本文中依然是主角。本文将分为三个部分介绍,Launcher请求AMS,AMS到Application Thread的调用和Activity Thread 启动 Activity。Launcher请求AM

2020-07-08 17:06:36 397

原创 【源码】app是如何启动的?深入解析android应用程序的启动过程(上)

应用程序的进程启动简介当我们打开android手机的时候,不知道你是否想过app是如何启动的呢?接下来,我将从源码角度进行解析,当然,本文作为上篇,是介绍应用程序的进程启动过程,而不是应用程序的启动过程,他们的区别就是煮饭前要准备锅具,没有锅具就无法煮饭,本文就是准备锅具的,但是也不简单哦。文章将从两个方面介绍,一个AMS发送请求,一个是Zygote接受请求。AMS就是Activity Manager System,管理Activity的,而Zygote就是创建进程的一个进程,所以AMS要想创建进

2020-07-05 13:03:17 483

原创 【Git可视化】马上入职腾讯的我瑟瑟发抖,恶补git知识就靠这个技巧!

git自linux之父发明以来,一直是很多互联网企业组织团队协作写代码的利器,所以,只要入职公司,无一不要求学会git,做为刚毕业的小松,已经脱离了毕业生身份,虽然做过一些项目,但是git用得很少,马上入职了,对于git心里没底,碰巧看到一位知乎老哥推荐,点进去一看,立马打开了新世界的大门!学得那叫一个酣畅淋漓,一起来学学吧进入这个网站,会看到以下目录可以看到这是一个闯关模式,分为基础,高级,移动提交记录和杂项四个部分,我自己感觉学完基础和高级的一部分就已经能够解决工作中大部分需求了。基础篇git

2020-07-04 16:02:57 385

原创 离散数学【关系】习题解析(二)自反对称传递,闭包,warshall

1.求三大闭包R的关系矩阵如下MR=[1010000101001000000110000]M_R=\begin{bmatrix}1&0&1&0&0\\0&0&1&0&1\\0&0&1&0&0\\0&0&0&0&1\\1&0&0&0&0\end{bmatrix}MR​=⎣⎢⎢⎢⎢⎡​10001​00000​11100​00000​

2020-06-24 17:26:15 6931 1

原创 离散数学【关系】习题解析 序偶,直积,关系图,关系矩阵,哈斯图

下面是习题与解析第一题 序偶与类型(1) 解:R={<1,2>,<1,4>,<1,6>,<2,1>,<2,2>,<2,4>,<2,6>,<4,1>,<4,2>,<4,4>,<4,6>,<6,1>,<6,2>,<6,4>,<6,6>}因为 1+1=2所以<1,1> ∉\notin∈/​ R ,<2,2

2020-06-19 10:05:38 7636 2

原创 flutter学习(七)Drawer实现侧边栏抽屉

在主页面上,

2020-06-17 03:58:33 1159

原创 flutter学习(六)DefaultTabController设计顶部滑动栏目

DefaultTabController可以设计类似于今日头条顶部的滑动栏。效果注:闪屏是因为夜神模拟器的bug代码解析return DefaultTabController( length: 2, child:Scaffold( appBar: AppBar( title:Row( mainAxisSize: MainAxisSize.max, children: <Widget>[ Expanded(

2020-06-17 02:27:08 908 2

原创 flutter学习(五)Swiper左右滑动图片

本文将要学习的组件是Swiper组件效果滑动效果如下代码解析要想左右滑动出现这么多图片,图片网址要准备好List<Map> imgList=[ { "url":"https://pic2.zhimg.com/v2-848ed6d4e1c845b128d2ec719a39b275_b.jpg" }, { "url":"https://pic2.zhimg.com/80/v2-40c024ce464642fcab3bbf1b0a233174

2020-06-17 02:19:03 2090 2

原创 如何在Clion里面添加子文件夹,并且新建cpp文件运行

Clion来自于大名鼎鼎的JetBrain系列,但是他的配置和使用在网上的资料比较少,本文假定你已经配好了设置,但是不知道如何在子文件夹中运行其他的cpp文件在图中,main是可以直接运行的,那么first.cpp和位于子文件夹的practice1.cpp如何运行自己的代码呢?点击CmakeLists.txt在里面添加add_executable(first first.cpp )ADD_SUBDIRECTORY(stlTest)此时他会提醒你进行reload之后,表示将first.c

2020-06-15 15:47:24 4941 2

原创 Flutter学习(四)实例解析State的生命周期

import 'package:flutter/material.dart';void main()=>runApp(MyApp());class MyApp extends StatelessWidget{ @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( home: Scaffold( appBar: AppB

2020-06-14 15:12:50 253

java设计模式.pdf(清晰带书签,文字可复制)

Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对 象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学习,现将 所有文章的进行了整理,方便大家下载阅读,希望能给各位带来帮助!

2019-06-11

中国互联网发展研究.pptx

页数不多,大概10页,但是内容个人认为比较丰富,不是满篇字的那种,基本所有内容都做了图和动画,每个图都可以包含很多可讲的内容,大概讲15分钟史没问题的,当然,也可以在这上面扩展

2019-05-13

java 8实战 清晰带书签

关于本书 简单地说,Java 8中的新增功能是自Java 1.0发布18年以来,Java发生的最大变化。没有去掉 任何东西,因此你现有的Java代码都能工作,但新功能提供了强大的新语汇和新设计模式,能帮 助你编写更清楚、更简洁的代码。就像遇到所有新功能时那样,你一开始可能会想:“为什么又 要去改我的语言呢?”但稍加练习之后,你就会发觉自己只用预期的一半时间,就用新功能写出 了更短、更清晰的代码,这时你会意识到自己永远无法返回到“旧Java”了。 本书会帮助你跨过“原理听起来不错,但还是有点儿新,不太适应”的门槛,从而熟练地进 行编程。 “也许吧,”你可能会想,“可是Lambda、函数式编程,这些不是那些留着胡子、穿着凉鞋的 学究们在象牙塔里面琢磨的东西吗?”或许是的,但Java 8中加入的新想法的分量刚刚好,它们 带来的好处也可以被普通的Java程序员所理解。本书会从普通程序员的角度来叙述,偶尔谈谈“这 是怎么来的”。 “Lambda,听起来跟天书一样!”是的,也许是这样,但它是一个很好的想法,让你可以编 写简明的Java程序。许多人都熟悉事件处理器和回调函数,即注册一个对象,它包含会在事件发 生时使用的一个方法。Lambda使人更容易在Java中广泛应用这种思想。简单来说,Lambda和它 的朋友“方法引用”让你在做其他事情的过程中,可以简明地将代码或方法作为参数传递进去执 行。在本书中,你会看到这种思想出现得比预想的还要频繁:从加入作比较的代码来简单地参数 化一个排序方法,到利用新的Stream API在一组数据上表达复杂的查询指令。 “流(stream)是什么?”这是Java 8的一个新功能。它们的特点和集合(collection)差不 多,但有几个明显的优点,让我们可以使用新的编程风格。首先,如果你使用过SQL等数据库 查询语言,就会发现用几行代码写出的查询语句要是换成Java要写好长。Java 8的流支持这种简 明的数据库查询式编程——但用的是Java语法,而无需了解数据库!其次,流被设计成无需同 时将所有的数据调入内存(甚至根本无需计算),这样就可以处理无法装入计算机内存的流数据 了。但Java 8可以对流做一些集合所不能的优化操作,例如,它可以将对同一个流的若干操作组 合起来,从而只遍历一次数据,而不是花很大代价去多次遍历它。更妙的是,Java可以自动将 流操作并行化(集合可不行)。 “还有函数式编程,这又是什么?”就像面向对象编程一样,它是另一种编程风格,其核心 是把函数作为值,前面在讨论Lambda的时候提到过。 Java 8的好处在于,它把函数式编程中一些最好的想法融入到了大家熟悉的Java语法中。有 了这个优秀的设计选择,你可以把函数式编程看作Java 8中一个额外的设计模式和语汇,让你可 以用更少的时间,编写更清楚、更简洁的代码。想想你的编程兵器库中的利器又多了一样。 当然,除了这些在概念上对Java有很大扩充的功能,我们也会解释很多其他有用的Java 8功 能和更新,如默认方法、新的Optional类、CompletableFuture,以及新的日期和时间API。 别急,这只是一个概览,现在该让你自己去看看本书了

2019-02-11

数据库系统 设计实现与管理 基础篇第6版 清晰带书签

第6版更新之处 扩展了第3章“数据库结构与Web”,增加了云计算 修改了21章“数据管理中的职业,法律与道德问题” 增加了“数据仓库与师太数据库” 每章后增加了新的思考题和习题 修改了雨SQL相关的章节,全面反映2011年公布的新标准SQL 修订了第26章“复制与移动数据库” 修改了关于Web-DBMS集成与XML的章节 与Oracle相关的内容一律修改为针对Oracle 11g

2018-12-20

空空如也

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

TA关注的人

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