大树

大树 查看完整档案

北京编辑黑龙江科技大学  |  计算机 编辑中商惠民(北京)电子商务有限公司  |  Java工程师 编辑 wandour.top 编辑
编辑

努力吧!少年

个人动态

大树 赞了文章 · 2020-11-26

前端页面实现分享

最近在做小程序项目,选用的京东的taro框架,一套代码可编译多个环境,不需要一个环境写一套代码,用着还不错。现在分享已经成为一个日常操作,下面就来简单说下我最近调研的分享功能。

首先,taro有自己的配置,可以直接调起右上角的自带分享,onShareAppMessage(object),转成微信或手百小程序都可用。

其次,如果页面内想通过按钮调用分享功能的话,taro的组件button可以将open-type='share',这个type值转为微信小程序和手百小程序都适用。

再次,如果想在h5页面上调起分享,有一款成熟的插件——nativeshare,但是适用该插件时一定要注意,⚠️只有h5环境下可用,所以引入之前要先判断下运行环境,否则在小程序直接报错。

最后,手百小程序提供了自己支持分享的API,swan.openShare(), 可以直接调起分享面板。

好了,暂时就到这里了,大家如果有更好的方法,可以互相交流学习~

demo源码链接:https://github.com/Dliling/ta...

查看原文

赞 1 收藏 0 评论 0

大树 发布了文章 · 2020-11-23

解决微信小程序图片太大问题-上传到网络云存储生成外链引用来(微信自带、七牛云等)

在小程序个人开发中,今天在项目里添加了几个图片,但上传代码时提示代码包过大(不可超过2M)。一阵纠结。现在介绍一个方式,把图片上传至网络,可在小程序中引用。重点是免费,适合个人开发练习。

方式 1 开发者工具自带云开发(免费)

在微信开发者工具左上方有个【云开发】图标,点击。弹出窗云开发控制台,点击开通,会要求输入环境名称,无特殊要求。后选择版本基础版是免费的。

image

云开发有4个功能:运营分析、数据库、存储、云函数。这里主要用到存储。

image

然后点击上传文件,上传后会生成File ID,将File ID复制到image标签src下即可引用云端图片。

本人亲测 ok

官方文档: https://developers.weixin.qq....

方式 2 七牛云存储(免费)

链接:https://portal.qiniu.com/signup

点击进入正常注册即可,注意,需要实名后才可领取免费空间,10GB。

具体步骤

1 登录后选择产品 - 对象存储 如下图:

image

2 然后创建空间,在内容管理中上传文件

image

区别

  • 访问速度:七牛快
  • 方便程度:微信开发者工具更方便

七牛云主机

七牛云主机

插播:腾讯云服务器

1核2G 88

查看原文

赞 1 收藏 1 评论 0

大树 赞了文章 · 2020-11-20

ES+Kibana+filebeat日志收集

filebeat安装
日志由应用程序产生,应用程序会将日志打印输出到指定的目录下。如果要我们能够在Kibana上查看日志,必须将日志保存到ES上。故安装ES+Kibana是前提,ES+kibana的安装网上有很多教程,这里就不一一介绍。
使用YUM在部署应用程序的服务器上安装filebeat

1.设置仓库

1.1

sudo rpm --import [https://packages.elastic.co/GPG-KEY-elasticsearch](https://packages.elastic.co/GPG-KEY-elasticsearch)`

1.2
在/etc/yum.repos.d/目录新建一个文档elastic.repo并在文档中输入以下内容

[elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=[https://artifacts.elastic.co/packages/oss-7.x/yum](https://artifacts.elastic.co/packages/oss-7.x/yum)
gpgcheck=1
gpgkey=[https://artifacts.elastic.co/GPG-KEY-elasticsearch](https://artifacts.elastic.co/GPG-KEY-elasticsearch)
enabled=1
autorefresh=1
type=rpm-md

1.3

sudo yum install filebeat

1.4配置
image.png
image.png
image.png

1.5启动服务

sudo service filebeat start
查看原文

赞 1 收藏 0 评论 0

大树 关注了用户 · 2020-11-20

linyelai @linyelai

真正的大师,永远怀着一颗学徒的心

关注 5

大树 发布了文章 · 2020-11-19

JVM GC 垃圾收集算法总结

jvm的垃圾收集算法总结起来有4种,严格来说应该是3种,下面一一详细介绍。由于垃圾收集算法涉及程序细节,而且各个平台的虚拟机操作内存的方法不同,因此这里不过多介绍算法的实现,注重几种算法的思想及发展过程。

1. 标记 - 清除算法

最基础的算法“标记-清除”(Mark-Sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有要回收的对象,在标记完成后同一回收掉。之所以说它是最基础的收集算法,是因为后续的算法都是基于这种思路并对其不足进行改进得到的。
主要不足:

  1. 一个是效率问题,标记和清除两个效率都不高。
  2. 另一个是空间问题,标记清除后产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次GC。

标记-清除算法执行过程如图所示。

image

从图中可以看出,有很多不连续的内存空间碎片。

2. 复制算法

为了解决效率问题,一种称为“复制”的收集算法出现了,它将可用的内存空间分为大小相等的两块,每次只使用其中一块。当一块内存用完了,就将还存活的对象都复制到另一块上,然后再把自己使用的空间一次清理掉。这样使的每次都对整个半区进行内存回收,内存分配是不用考虑空间碎片问题,只要一动堆顶指针,按顺序分配内存即可,实现简单,运行高效。
不足:
将内存缩小为原来的一半,每次只有一半的内存空间可用,代价高了一点。
复制算法的执行过程如下图:

image

现在的商业虚拟机都采用这种算法回收新生代,IBM公司的专门研究表明,新生代中的对象98%是“朝生夕死”的,所以不需要按照 1: 1 的比例来划分内存空间,而是将内存分为一块较大的 Eden 空间和两块较小的 Survivor 空间,每次使用 Eden 和其中的一个Survivor。当回收时,将 Eden 和 Survivor 中还存活的对象一次性地复制到另一块 Survivor 空间上,最后清理掉 Eden 和刚才用过的 Survivor 空间。HotSpot 虚拟机默认 Eden 和 Survivor 的大小比例是 8: 1 ,也就是每次新生代可用内存空间为整个新生代容量的 90%(80%+10%),只有10%的内存会被浪费。当然,98%的对象可回收只是一般场景下的数据,我们没有办法每次回收都只有不大于10%的对象存活,当 Survivor 空间不够用时,需要依赖其他内存(这里指老年代)进行分配担保(Handle Promotion)。
分配担保的通俗讲法:比如我们去银行借款,如果我们信誉很好,在98%的情况下能按时偿还,银行可能也会默认我们能按时还款,只需要有个担保人能保证我们不能按时还款,可以从他的账户扣钱,那银行就认为没风险了。内存分配担保也一样,如果另一块 Survivor 空间没有足够空间来存放上次收集后还存活的对象,这些对象将直接通过分配担保机制进入老年代。

3. “标记-整理”算法

复制算法在对象存活率高的情况下要进行较多的复制操作,效率会变低。更关键的是,如果不想浪费50%的空间,就需要有额外的内存空间分配担保,以应对被使用内存中所有对象都100%存活的极端情况,所以老年代一般不直接选用这种算法。
根据老年代的特点,有人提出了另外一种“标记-整理”(Mark-Compact)算法,标记过程与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉端边界以外的内存。
回收过程如下图所示:

image

4. 分代收集算法

当前商业虚拟机垃圾收集都采用分代收集(Generational Collection)算法,这种算法没有什么新的思想,只是根据对象存活周期不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样可以根据各个年代的特点采用最合适的算法。在新生代,每次垃圾收集时发现都有大批的对象死去,只有少量存活,那就选用复制算法,只需要付出少量的存活对象复制成本即可完成收集。而老年代中对象因为存活率高、没有额外的空间对它分配担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收♻️。

最后

贴上一张 JVM 内存分区示意图,加深一下各个分区的印象,有助理解分代收集的思路。

image

查看原文

赞 0 收藏 0 评论 0

大树 发布了文章 · 2020-11-17

github个人项目添加合作者(collaborator)

github个人项目添加合作者(collaborator)

如果你想和朋友合作开发个项目,想在同一个仓库中开发,可以添加这个朋友为合作者(collaborator),这样他登录自己的账号也可以在你的仓库push,提交代码都很方便。

步骤:项目 - Settings - Mange access - Invite a collaborator

image

image

查看原文

赞 0 收藏 0 评论 0

大树 收藏了文章 · 2020-11-16

程序员的电子书整合资源

作为一名程序员,一直想整理一份编程相关的电子书资源,收集了几百份pdf技术类资源,时时刻刻做好学习的准备,技术更新太快,不学就会被淘汰。

关于书籍的资源,大致分一下几类:

  • 下载PDF书籍或者在线看书
  • 程序员大佬推荐的书籍文章
  • Awesome系列
  • 整理的PDF书籍

一、下载或者看书

  1. 图灵社区
  2. allitebooks - 英文图书
  3. itEbooks - 下载电子书
  4. Gitbook
  5. 经典编程书籍大全(github图书列表)
  6. 中文编程图书索引

二、程序员大佬推荐的书籍文章

下面是广大网友总结的或者翻译的一些推荐阅读书籍,可以选择自己需要或者感兴趣的进行阅读。

  1. 11本Java程序员必读的书
  2. 关于Linux,你该读哪些书
  3. 一个有良好计算机专业素养的Java程序员要读哪些书?
  4. 我的后端开发书架
  5. 成为一名优秀的Developer的书单
  6. 知名程序员的书架
  7. 互联网大佬推荐的34本必读书

三、Awesome系列

Awesome系列,里面都推荐了很多资源或者书籍,可以看看。不过我整理的都是英文版的,当然也可以找到相应的中文版,这个就自己去找咯~

  1. awesome

四、整理的PDF书籍

目前整理的PDF主要分一下几类:
Java、kafka、面试、数据结构、Java实战、spring、中间件、缓存服务、Linux、web框架、大数据、设计模式、jvm、数据库、计算机网络、其他

------ 下载地址见文章结尾 -------

Java

  • Effective Java中文版(第2版).pdf
  • Effective.Java.pdf
  • JAVA语言导学.pdf
  • JAVA并发编程实践.pdf
  • JAVA并发编程核心方法与框架.pdf
  • JAVA多线程设计模式(带完整书签清晰扫描版).pdf
  • Java 8实战.pdf
  • Java 并发编程实战.pdf
  • Java+Web整合开发王者归来.pdf
  • Java_Web开发实战1200例.pdf
  • Java核心技术 卷1 基础知识 原书第9版.pdf
  • Java编程思想(第4版).pdf
  • Java开发手册-华山版.pdf
  • Java网络编程.pdf
  • Java核心技术卷 2 高级特性 原书第8版.pdf
  • Java编程的逻辑.pdf
  • Java常用算法手册.pdf
  • Java技术手册(第6版).pdf
  • Java工程师修炼之道.pdf
  • Java并发编程的艺术.pdf
  • Java程序员修炼之道.pdf
  • Java高并发编程详解.pdf
  • Java程序员面试笔试宝典.pdf
  • Java多线程编程核心技术_完整版.pdf
  • Java程序员面试笔试真题与解析+.pdf
  • java特种兵.pdf
  • 《java并发编程的艺术》迷你书.pdf
  • 图解Java多线程设计模式.pdf

Java实战

  • Java多线程编程实战指南++核心篇.pdf
  • Java多线程编程实战指南+设计模式篇.pdf

Linux

  • 深入Linux内核架构.pdf
  • 深入理解LINUX内核(中文版).pdf

jvm

  • JVM 实用参数系列 - v1.0.pdf
  • JVM+实用参数系列+-+v1.0.pdf
  • 垃圾回收的算法与实现.pdf

kafka

  • Apache+Kafka实战.pdf
  • Kafka权威指.pdf
  • Kafka源码解析与实战.pdf
  • Kafka技术内幕:图文详解Kafka源码设计与实现.pdf

spring

  • SPRING技术内幕:深入解析SPRING架构与设计原理(第2版).pdf
  • Spring.Batch批处理框架.pdf
  • Spring5高级编程pdf.pdf
  • Spring实战(第4版).pdf
  • Spring揭秘.pdf
  • Spring源码深度解析(第2版).pdf
  • spring-framework.pdf
  • 精通Spring+4.x++企业应用开发实战.pdf

web框架

  • Web性能权威指南.pdf
  • Web应用安全权威指南.pdf
  • 架构探险 从零开始写javaweb框架.pdf

面试

  • 115个Java面试题和答案——终极(上).pdf
  • 115个Java面试题和答案——终极(下)_尚硅谷_宋红康.pdf
  • 2019java面试题汇总.pdf
  • JAVA面试题解惑系列.pdf
  • Java面试笔试全集.pdf
  • 最新-黑马月入12000的面试宝典.pdf
  • 最新-尚学堂月入15000的面试宝典.pdf
  • 面试宝典(java).pdf
  • 阿里巴巴Java开发手册(终极版).pdf
  • 程序员面试金典.pdf
  • 技术面试必备基础知识.pdf
  • 程序员面试宝典第四版.pdf

中间件

  • Docker从入门到实践 - v1.0.pdf
  • RocketMQ实战与原理解析.pdf
  • ZooKeeper-分布式过程协同技术详解.pdf

大数据

  • Elasticsearch服务器开发.pdf
  • Elasticsearch权威指南(中文版).pdf
  • Hadoop权威指南.pdf
  • 深入理解ElasticSearch++原书第2版.pdf
  • 深入理解ElasticSearch.pdf

数据库

  • mysql5.6从零开始学.pdf
  • MyBatis技术原理与实战.pdf
  • 高性能MySQL.pdf

数据结构

  • Java数据结构和算法.(第二版).pdf
  • Java数据结构和算法中文版(第二版).pdf
  • 图解数据结构.pdf
  • 数据结构与算法-清华大学.pdf
  • 数据结构与算法.pdf

缓存服务

  • MongoDB权威指南中文版.pdf
  • Redis开发与运维(完整版).pdf

设计模式

  • 24种设计模式介绍与6大设计原则.pdf
  • Head First Java.第二版.中文完整高清版.pdf
  • 大话设计模式.pdf
  • HeadFirst设计模式.png

计算机网络

  • HTTP权威指南.pdf
  • Neo4j实战 (数据库技术丛书).pdf
  • Neo4j全栈开发.pdf
  • Netty实战.pdf
  • TCP-IP详解(卷一、二、三).pdf
  • 图解HTTP.pdf
  • 网络IO模型.pdf

其他

  • IntelliJ IDEA 简体中文专题教程(电子版-2015).CHM
  • Maven实战.pdf
  • 从PAXOS到ZOOKEEPER分布式一致性原理与实践.pdf
  • 疯狂XML讲义.pdf
  • 人人都是架构师+分布式系统架构落地与瓶颈突破.pdf

下载方式

整体书籍占用磁盘较大,保存在云服务端

后台回复【book】关键字获取下载链接
关注公众号【zhaopinyanjiushe
研究社微信公众号二维码.jpg

本文由博客群发一文多发等运营工具平台 OpenWrite 发布
查看原文

大树 收藏了文章 · 2020-11-16

BATJTMD,大厂招聘,都招什么样Java程序员?

作者:小傅哥
博客:https://bugstack.cn
Github:https://github.com/fuzhengwei/CodeGuide/wiki

沉淀、分享、成长,让自己和他人都能有所收获!😄

一、前言

Java学到什么程度可以找工作?

最近总看到类似这样的问题,也有一些工作3年左右的小伙伴问小傅哥,该怎么进大厂。其实你说 Java 学多少可以找到工作,主要看你想在哪个城市找、找什么样的公司、找什么样的待遇。因你的要求高低不同,你遇到的面试要求也会随之改变。

因此,为了让大家更清楚的看到学多少Java能找工作,我抽取了北京头部互联网公司的大量职位招聘要求,分析出一份可以让你明卷面试的考点。看过都说😁学习有方向、面试也不慌!

二、互联网公司都分布在哪里

知己知彼,百战不殆,先看看有哪些互联网公司,都分布在北京的哪些地方,也能方便你,面试不迷路、跳槽不辛苦。筛选了部分公司,还有很多不一一列举了!

1. 常见大厂

图 11-1 常见互联网大厂,筛选20家

  • 没有排名,随机筛选,随机排序
  • 公司包括:华为、联想、新浪、百度、小米、58同城、搜狗、爱奇艺、腾讯、去哪网、美团、饿了吗、汽车之家、字节跳动、当当网、CSDN、亚马逊、京东、360、滴滴

2. 地理位置

图 11-2 互联网大厂地理位置分布

  • 从图上可以看到大部分互联网公司都分布在北边,😁让人怪不好意思的,集中在一块挺好,下楼吃个饭就跳槽了。
  • 就我自己而言更喜欢靠边一点的公司,因为租房便宜、不用挤地铁、不用把时间浪费在路上、不用听马路的嘈杂。

三、什么样的技术能进入大厂

1. 你的简历

可能很大一部分1~3年找工作的小伙伴,只是按照模板填写好简历就完事了,很少考虑公司都需要什么、自己的职位是否匹配。

但你可能忽略了,你的这份简历才更多的决定了你会遇到一个什么样的公司、什么样的面试官、什么样的考题。最终决定你与这家公司的匹配的程度。

在与很多小伙伴沟通中发现,其实很大一部分程序员都不会写简历的,或者说写不好简历。好像是有话说不出来,或者是不知道该把这些话说在哪。一份简历主要得体现出你个人的信息、技术栈广度和深度、项目经验以及最后一块拓展内容。

而这份简历想达到最终的效果,也就是拿Offer。那么一定要给面试官挖坑,当然这个坑不是真坑。而是你要在简历中突出自己的优势项、技术亮点、优秀经历,也同时在这些点中留出技术话题,让面试官可以和你有的

但如果说你胡乱写简历,说自己懂HashMap。那面试官来劲了,问你:Hash为什么用31计算扰动函数的作用是什么,以及它可以被应用在哪些地方负载因子嘎哈的HashMap是开放寻址还是拉链寻址链表什么时候树化以及迁移数据算法是什么2-3树和红黑树有什么关系等等,你不晕才怪,也不能给面试官留下好印象。如果你还不会这些技术,赶快看小傅哥的面经手册 • 拿大厂Offer 吧!

2. 大厂考题

以下这部分考题分析数据是通过抽样的方式,从Boss直聘中选取六个互联公司,每个公司找3~5个,工作1~3年岗位应聘要求,从中分析各面试考点综合汇总。

样例数据

2.1 阿里、百度、腾讯

图 11-3 阿里、百度、腾讯,1~3年招聘要求梳理

每个公司的每个职位要求会略有不同,所以不能一概而论,某一行没有写某项技术点也不能代表什么。以上更多的是参考以及自己在面试求职时可以按照这个方式进行梳理。

  • 阿里,在技术上会更加希望你有深度和广度,也善于把技术能应用到项目中,并有一定的学习能力。同时在工作中,要有责任心、沟通能力和解决问题的落地的能力。
  • 百度,同样希望可以精通一些框架的深层次内容,有一定的技术经验,更偏向于落地技能。同时也希望你是爱学习的面试者,最好有Github相关内容。工作中积极、主动、抗压,认真,善于沟通。
  • 腾讯,除了基础语言学习外,要有一些扩展,同时要深入理解语言特性。这可能和腾讯本身是用C、C++有关,要知其然,知其所以然。同时希望在数据结构和算法上有一定的了解和认知,也可以在工作中有责任心、抗压能力以及问题分析和解决能力。

2.2 字节、美团、京东

图 11-4 字节、美团、京东,1~3年招聘要求梳理

分析完上面三家公司,再看看这三家互联网对应聘者的要求。注意数据依旧是抽样,所以面试者在投递简历时,一定要自己拆解分析

  • 字节,更注重Java基础、算法、数据结构,同时对于常用的技术要有一定的了解深度。对代码方面要有良好的设计和代码品味追求,同时希望你关注业界最新技术,有好奇心和进取心。工作中,有产品意识。对于研发来说,产品意识很重要
  • 美团,美团的技术科目属于比较面的比较广和深的,尤其是字节码编程技术,在其他一些招聘中是没有看到的。除此之外更希望你有一定的学习能力,参与过Github开源项目,有技术钻研精神。在工作中,有较强的思维逻辑,难点攻克,复杂问题推进落地,责任感等。这可能也和美团的技术氛围有关,他们的技术博客做的也不错。百度搜美团技术,https://tech.meituan.com/
  • 京东,各家公司都非常注重Java基本功,这些面试题可能不难但也很难。另外在常用框架和相应的技术深度上要有一定了解,尤其是各个框架的原理和实现机制,如果你能自己动手写一个,那么会更好。另外在技术经验上,可以有分布式、高并发等经验,也可以非常用的运用设计模式,编写出不错的代码。同时希望你有一定的学习能力,博客、开源代码、Github、Gitee等。工作中,有过程控制意识、风险意识以及良好的沟通和解决问题的能力。

3. 考点总结

图 11-5 面试官考点总结

综上,各家公司的招聘要求,梳理出七个方向的考点,包括:基本功底、常用技术、技术深度、技术经验、学习能力、工作能力、项目经验。

  • 基本功底,是一个程序员的主科目语言的学习程度的一个基本考察,这部分内容需要平时大量积累和总结。否则一本简单的Java书很难全部给你讲透彻,因为Java中包括了太多的内容,远不止API使用。
  • 常用技术,这个聊的是你的技术广度,和岗位技术匹配度。比如需要用到过RPC,那你用过Dubbo。如果你的公司暂时用的技术不多,或者还是处于单体服务,那么需要自己补充。
  • 技术深入,除了技术广度接下来就是技术深入,在你常用的技术栈中,你有多了解他们,了解源码吗、了解运行机制吗、了解设计原理吗。这部分内容常被人说是造火箭,但这部分内容非常重要,可以承上启下的贯穿个人修为和薪资待遇。
  • 技术经验,什么是技术经验呢?这是落地能力,除了你可能认为上面一些是纸上谈兵,是造火箭。那么接下来这部分内容就是你是否真造过一个火箭,真完成过一个难题。所以这部分是从结果证明,不是你会什么,而是你做过什么。
  • 学习能力,作为程序员你是否保持热情,是否依旧在积极努力的关注技术,是否为自己的成长不断添砖加瓦、是否还有好奇心和较强的求知欲。一般会从这里看你是不是一个真正的Coder!
  • 工作能力,以上的种种能力,最终要体现到工作上,要能看出你的交付能力。否则即使你再优秀,也不能把你当成一个吉祥物。工作能力的体现,才是真的为团队、为部门、为公司,贡献价值的。
  • 项目经验,这项内容会根据不同公司的不同业务线而不同,就像你懂交易、支付,那么面试花呗、借呗、白条等工作岗位就会很吃香。

四、突破成长瓶颈的技术书籍

根据以上大厂岗位要求,总结了可以破敌的技术书籍!

技术成长的每一个阶段都会遇到一个与之匹配的、难以跨越的,技术瓶颈期!这个阶段没有一次能解决的神药,只有自己不断的积累、沉淀、破局,到最后的爆发。而这些知识可能最开始都是枯燥的,就像看了大A不会小a,看了小a又牵扯出小b,没办法只能一层层的扒,一层层的学。

书籍下载:扫码关注公众号:bugstack虫洞栈,回复:电子书

1. 推荐

- 小傅哥的《重学 Java 设计模式》 ⭐⭐⭐⭐

本书是作者小傅哥,投入50天时间,从互联网实际业务开发中抽离出,交易、营销、秒杀、中间件、源码等22个真实业务场景,编写了18万字271页的实战型Java编程资料。如果书中含有不易理解的内容,一定是作者在编写的过程中缺少必要的描述和严格的校准,感谢把你的意见或者疑问提交给我,也欢迎与我多一些交互,互相进步共同成长。

- 小傅哥的《字节码编程》 ⭐⭐⭐

让人怪不好意思的,说是出书有点膨胀,毕竟这不是走出版社的流程,选题、组稿、编著、审读、加工到出版发行。但全书共计107页,11万7千字,20个章节涵盖三个字节码框架(ASM、Javassist、Byte-budy)和JavaAgent使用并附带整套案例源码!

- 《JAVA核心知识点整理》 ⭐⭐⭐⭐

一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

- 计算机是怎样跑起来的(日)矢泽久雄 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

矢泽久雄,曾在Software House做过程序员,电脑作家之友会会长。工作之余笔耕不辍,从电路到编程语言均有涉及。代表作有《程序是怎样跑起来的》等。本书以图配文,以计算机的三大原则为开端、相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络、数据加密、XML、计算机系统开发以及SE 的相关知识。

2. Java

1. 《Java虚拟机规范(Java SE 7)》 ⭐⭐⭐⭐ - 点击购买(支持作者)

如果不太熟悉jvm,这个读起来非常乏味(只有规范,没有多余解释),但如果阅读过相关深入java虚拟机,再读这个,会非常有亲切感。

2. 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》⭐⭐⭐⭐ - 点击购买(支持作者)

这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典,繁体版在台湾也颇受欢迎。作者周志明,是资深Java技术、机器学习和企业级开发技术专家,现任远光软件研究院院长,人工智能博士在读。

3. 《JAVA核心知识点整理》⭐⭐⭐⭐

一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

4. 《On Java 8 编程思想》⭐⭐⭐⭐

本书原作者为 [美] Bruce Eckel,即《Java 编程思想》的作者。译者在翻译中同时参考了谷歌、百度、有道翻译的译文以及《Java编程思想》第四版中文版的部分内容(对其翻译死板,生造名词,语言精炼度差问题进行规避和改正)。最后结合译者自己的理解进行本地化,尽量做到专业和言简意赅,方便大家更好的理解学习。

5. 深入浅出+Java+多线程 ⭐⭐⭐⭐

笔者在读完市⾯上关于Java并发编程的资料后,感觉有些知识点不是很清晰,于是
在RedSpider社区内展开了对Java并发编程原理的讨论。鉴于开源精神,我们决定
将我们讨论之后的Java并发编程原理整理成书籍,分享给⼤家。
如果您或者您的单位愿意赞助本书或本社区,请发送邮件到RedSpider社区邮件组redspider@qun.mail.163.com或加微信redspider-worker进⾏洽谈。

6. 《Java核心技术 I》 ⭐⭐⭐⭐ - 点击购买(支持作者)

不同于一般的 Java入门书,此书对api的讲解非常详细,细节部门颇多。举个例子,java对象序列化时会写入什么内容,本书都有详细的介绍

7. 《effective java 3》 ⭐⭐⭐⭐ - 点击购买(支持作者)

全书以一种比较松散的方式将这些条目组织成11章,每一章都涉及软件设计的一个主要方面。因此,本书并不一定需要按部就班地从头读到尾,因为每个条目都有一定程度的独立性。这些条目相互之间经常交叉引用,因此可以很容易地在书中找到自己需要的内容。

8. 《Java解惑》 ⭐⭐⭐

挺有意思的一本书,它列举了许多平常不太注意的细节问题,可能大部分时候我们都不会碰到此类问题,但如果读过,一旦碰到,就会留意此类问题。

9. 《Thinking In Java 4》⭐⭐⭐⭐⭐ - 点击购买(支持作者)

值得用2年深入抚摸的书籍,对于学习java技术除了最开始的入门书籍后,这是一本非常值得阅读的书籍。

10. 《Java内存模型》 ⭐⭐⭐⭐

Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

11. 《Java并发编程实践(全)》 ⭐⭐⭐⭐ - 点击购买(支持作者)

随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在《JAVA并发编程实践》中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用,还阐释了创造它们的原因,及其背后的设计模式。

12. 《Spring揭秘》 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

本书内容全面,论述深刻入理,必将成为每个Java专业开发人员必备的Spring图书。

难得的国产良心技术书籍,既没有大量堆砌Spring源码,也没有原封不动地翻译官方文档。作者以自己的深厚功力和独特视角一步一步地把Spring框架抽丝剥茧地展现在读者面前,从谋篇布局和字里行间都能看出作者的用心之处。如果你想深入了解Spring的方方面面,这本书非读不可,而且读一遍都不够,要每隔一段时间反复阅读,尤其第二部分IOC和第三部分AOP,它们是Spring的基础,也是这本书的精华所在。这里不妨给个建议,以这本书为蓝本把Spring框架用到的设计模式和原则认真梳理一遍,结合源码认真理解为何要这样设计。如若这样,假以时日,功力必有小成啊。最后感谢作者,感谢我能遇到这本书

13. 《Spring源码深度解析》 ⭐⭐⭐ - 点击购买(支持作者)

由浅入深、由易到难地对Spring源码展开了系统的讲解,包括Spring的设计理念和整体架构、容器的基本实现、默认标签的解析、自定义标签的解析、bean的加载、容器的功能扩展、AOP、数据库连接JDBC、整合MyBatis、事务、SpringMVC、远程服务、Spring消息服务等内容。

14. 《深入理解SpringCloud与微服务构建》⭐⭐⭐⭐ - 点击购买(支持作者)

本书以微服务的基本概念介绍性开篇,逐步引出Java平台下打造微服务的利器SpringBoot微框架。书中从SpringBoot微框架的“出身”开始,循序渐进,为大家剖析SpringBoot微框架的设计理念和原理,并对框架的重点功能和模块进行了逐一讲解。

15. 《美团技术后台篇》 ⭐⭐⭐⭐

2019年美团点评高级技术汇总,深入且清晰设计到Java核心技术。包括;字节码编程、全链路监控、美团分布式 ID 生成服务开源等。

16. Java Concurrency in Practice ⭐⭐⭐⭐⭐

This book covers:
Basic concepts of concurrency and thread safety
Techniques for building and composing thread-safe classes
Using the concurrency building blocks in java.util.concurrent
Performance optimization dos and don'ts
Testing concurrent programs
Advanced topics such as atomic variables, nonblocking algorithms, and the Java Memory Model

3. DB

1. 《MySQL王者晋级之路》 ⭐⭐⭐⭐ - 点击购买(支持作者)

十年磨一剑,汇集作者多年MySQL数据库领域的一线实战与教学经验,由浅入深剖析MySQL的体系结构、备份恢复、复制、高可用集群架构、优化、故障排查、新版本特性、监控、升级及技术面试宝典等知识点。

2. 《数据库索引设计与优化》⭐⭐⭐⭐ - 点击购买(支持作者)

作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL 运行的CPU 时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。此书适用于已经具备了SQL 这一关系型语言相关知识,希望通过理解SQL 性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。

3. MYSQL技术内幕:INNODB存储引擎 - ⭐⭐⭐⭐ - 点击购买(支持作者)

这本书更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,帮助用户真正了解一个数据库存储引擎的开发。

4. Redis

1. 《Redis设计与实现》⭐⭐⭐⭐ - 点击购买(支持作者)

黄健宏 软件开发者,他喜欢函数式编程,热爱开源软件。出于对数据库的强烈兴趣,他开始阅读和分析 Redis 源代码,并对 Redis 2.6 和 Redis 3.0 的源代码进行了详细注释。

2. 《Redis 深度历险:核心原理与应用实践》⭐⭐⭐⭐ - 点击购买(支持作者)

作者:钱文品,老钱。可以说这是一本深挖到redis骨头的技术书籍,整个内容涵盖;基础和应用篇、原理篇、集群篇、拓展篇、源码篇共 5 大块内容,值得学习。

3. 《Redis开发与运维》 ⭐⭐⭐⭐- 点击购买(支持作者)

付磊,张益军 | 搜狐视频高级研发工程师,都拥有多年Redis开发运维经验,为公司多个核心业务提供Redis服务。两人共同编写了本书,在本书中全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发与管理的场景、应用案例与开发技巧,为高效开发运维提供了大量实际经验和建议。

5. 架构&设计

1. 《代码整洁之道》 ⭐⭐⭐⭐ - 点击购买(支持作者)

本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。

2. 《Head_First设计模式(中文版)》⭐⭐⭐⭐ - 点击购买(支持作者)

Head First陆续的介绍了策略模式、观察者模式、装饰者模式、工厂方法模式、抽象工厂模式、单件模式、命令模式、适配器模式、外观模式、模板方法模式、迭代器模式、组合模式、状态模式、代理模式,在介绍各种模式的期间,用简单的应用场景、通俗的语言引导读者去思考这些模式是如何利用和遵循相应OO原则的,然后再清晰的总结出每种模式的定义。

3. 《编写可读代码的艺术》 ⭐⭐⭐ - 点击购买(支持作者)

细节决定成败,思路清晰、言简意赅的代码让程序员一目了然;而格式凌乱、拖沓冗长的代码让程序员一头雾水。除了可以正确运行以外,优秀的代码必须具备良好的可读性,编写的代码要使其他人能在最短的时间内理解才行。本书旨在强调代码对人的友好性和可读性。

4. 《重构 改善既有代码的设计》 ⭐⭐⭐⭐ - 点击购买(支持作者)

“不要容忍破窗户” 如果两个或更多的地方实现同一职责,则改变时会带来麻烦。所以要遵循DRY原则,单一职责。这本书的每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。向你讲述如何有效的重构以及是否进行重构。

5. 《设计数据密集型应用 Designing Data Intensive Applications》 ⭐⭐⭐⭐ - 点击购买(支持作者)

作者是英国剑桥大学的一名分布式系统研究员,在此之前他曾是软件工程师和企业家,在 Linkedin 和 Rapportive 工作过,从事大规模数据基础设施相关的工作。书中包含:深入分析你已经在使用的系统,并学习如何更高效地使用和运维这些系统、理解分布式系统研究,这些研究是现代数据库构建的基石、了解一致性、可伸缩性、容错性和复杂度之间的权衡。推荐人:BK

6. 《企业应用架构模式》 ⭐⭐⭐⭐ - 点击购买(支持作者)

作者是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。

6. 其他系列

1. 《阿里工程师的自我修养》 ⭐⭐⭐⭐

从入门到进阶,从普通员工到主管,从知识到落地,从量的积累到质的飞跃,在不确定性的世界中,你遇到的种种难题,阿里工程师正在探索着最优解。3大思维、10个技巧、10年感悟……每经过一次大的战役,阿里工程师都会复盘、沉淀,这些经验值得细品。

2. Java开发手册(嵩山版) ⭐⭐⭐⭐

《阿里巴巴 Java 开发手册》主要提炼了阿里巴巴集团技术团队的集体编程经验和软件设计智慧,可全面、立体地帮助开发者的成长和团队代码文化形成。嵩山版首次新增前后端规约等内容,可帮助开发者码出规范,码出质量。

3. 《Http权威指南》⭐⭐⭐⭐ - 点击购买(支持作者)

如果以前没有深入了解http,读了此书,会觉得以前了解的关于http的内容都弱爆了。经典书籍,中文版2012年发版,翻译的还不错,值得阅读。

4. Elasticsearch 权威指南 中文版 ⭐⭐⭐⭐ - 点击购买(支持作者)

这本指南都会帮助你了解其中最基本的概念,从最基本的操作开始学习 Elasticsearch。同时将向你介绍讲解结构化搜索、统计、查询过滤、地理定位、自动完成以及你是不是要查找的提示。并且探讨如何给数据建模能提升 Elasticsearch 的性能,以及在生产环境中如何配置、监视你的集群。

5. 计算机是怎样跑起来的(日)矢泽久雄 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

矢泽久雄,曾在Software House做过程序员,电脑作家之友会会长。工作之余笔耕不辍,从电路到编程语言均有涉及。代表作有《程序是怎样跑起来的》等。本书以图配文,以计算机的三大原则为开端、相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络、数据加密、XML、计算机系统开发以及SE 的相关知识。

6. 编码:隐匿在计算机软硬件背后的语言 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似烦杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此更加深刻地理解计算机的工作原理。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。

7. 计算机程序的构造和解释(原书第2版) ⭐⭐⭐⭐⭐

《计算机程序的构造和解释(原书第2版)》1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,《计算机程序的构造和解释(原书第2版)》对于计算机科学的教育计划产生了深刻的影响。第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。

8. 代码大全(第2版) ⭐⭐⭐⭐⭐

第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。

9. 编程匠艺 ⭐⭐⭐⭐

如果你可以编写出合格的代码,但是想更进一步、创作出组织良好而且易于理解的代码,并希望成为一名真正的编程专家或提高现有的职业技能,那么Pete Goodliffe编写的这本本书都会为你给出答案。本书的内容涵盖编程的各个要素,如代码风格、变量命名、错误处理和安全性等。此外,本书还对一些更广泛的编程问题进行了探讨,如有效的团队合作、开发过程和文档编写,等等。

10. Zookeeper 分布式过程 ⭐⭐⭐⭐ - 点击购买(支持作者)

作者介绍Flavio Junqueira 是微软研究院在英国剑桥大学的研究人员之一。他拥有美国加州大学圣地亚哥分校计算机科学博士学位。他的研究范围涉及分布式系统的各个方面,包括分布式算法、并发性和可扩展性。他是Apache项目如Apache ZooKeeper(PMC主席和提交者)和Apache BookKeeper(提交者)的积极贡献者。他一有空就喜欢睡觉。

11. 黑客与画家 ⭐⭐⭐⭐ - 点击购买(支持作者)

本书是硅谷创业之父Paul Graham 的文集,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。书中的内容不但有助于了解计算机编程的本质、互联网行业的规则,还会帮助读者了解我们这个时代,迫使读者独立思考。

五、总结

  • 面试也是一场有准备的战斗,知己知彼才能游刃有余。面试怎么面主要是看简历怎么写,最终是你来主导面试,还是被主导,更多也是依赖于你的技术身家。
  • 任何时候都需要主动学习、有技术眼光和魄力,既能吹得了造火箭的牛、也能落地出实际的产物、技能帮公司实现价值,也能让自己有一定的收入。才是你应该永久追求的目标,和突破瓶颈的价值。
  • 少一些躁动、少一些不安,多一些沉稳、多一些沉淀,只要你愿意积累就一定会突破瓶颈,都是这条路上的打工人,不要总让自己的大脑被别人牵着走,也不要活在别人嘴里。奥利给😎阅读原文,进入知识宝藏!

六、系列推荐

查看原文

大树 赞了文章 · 2020-11-16

BATJTMD,大厂招聘,都招什么样Java程序员?

作者:小傅哥
博客:https://bugstack.cn
Github:https://github.com/fuzhengwei/CodeGuide/wiki

沉淀、分享、成长,让自己和他人都能有所收获!😄

一、前言

Java学到什么程度可以找工作?

最近总看到类似这样的问题,也有一些工作3年左右的小伙伴问小傅哥,该怎么进大厂。其实你说 Java 学多少可以找到工作,主要看你想在哪个城市找、找什么样的公司、找什么样的待遇。因你的要求高低不同,你遇到的面试要求也会随之改变。

因此,为了让大家更清楚的看到学多少Java能找工作,我抽取了北京头部互联网公司的大量职位招聘要求,分析出一份可以让你明卷面试的考点。看过都说😁学习有方向、面试也不慌!

二、互联网公司都分布在哪里

知己知彼,百战不殆,先看看有哪些互联网公司,都分布在北京的哪些地方,也能方便你,面试不迷路、跳槽不辛苦。筛选了部分公司,还有很多不一一列举了!

1. 常见大厂

图 11-1 常见互联网大厂,筛选20家

  • 没有排名,随机筛选,随机排序
  • 公司包括:华为、联想、新浪、百度、小米、58同城、搜狗、爱奇艺、腾讯、去哪网、美团、饿了吗、汽车之家、字节跳动、当当网、CSDN、亚马逊、京东、360、滴滴

2. 地理位置

图 11-2 互联网大厂地理位置分布

  • 从图上可以看到大部分互联网公司都分布在北边,😁让人怪不好意思的,集中在一块挺好,下楼吃个饭就跳槽了。
  • 就我自己而言更喜欢靠边一点的公司,因为租房便宜、不用挤地铁、不用把时间浪费在路上、不用听马路的嘈杂。

三、什么样的技术能进入大厂

1. 你的简历

可能很大一部分1~3年找工作的小伙伴,只是按照模板填写好简历就完事了,很少考虑公司都需要什么、自己的职位是否匹配。

但你可能忽略了,你的这份简历才更多的决定了你会遇到一个什么样的公司、什么样的面试官、什么样的考题。最终决定你与这家公司的匹配的程度。

在与很多小伙伴沟通中发现,其实很大一部分程序员都不会写简历的,或者说写不好简历。好像是有话说不出来,或者是不知道该把这些话说在哪。一份简历主要得体现出你个人的信息、技术栈广度和深度、项目经验以及最后一块拓展内容。

而这份简历想达到最终的效果,也就是拿Offer。那么一定要给面试官挖坑,当然这个坑不是真坑。而是你要在简历中突出自己的优势项、技术亮点、优秀经历,也同时在这些点中留出技术话题,让面试官可以和你有的

但如果说你胡乱写简历,说自己懂HashMap。那面试官来劲了,问你:Hash为什么用31计算扰动函数的作用是什么,以及它可以被应用在哪些地方负载因子嘎哈的HashMap是开放寻址还是拉链寻址链表什么时候树化以及迁移数据算法是什么2-3树和红黑树有什么关系等等,你不晕才怪,也不能给面试官留下好印象。如果你还不会这些技术,赶快看小傅哥的面经手册 • 拿大厂Offer 吧!

2. 大厂考题

以下这部分考题分析数据是通过抽样的方式,从Boss直聘中选取六个互联公司,每个公司找3~5个,工作1~3年岗位应聘要求,从中分析各面试考点综合汇总。

样例数据

2.1 阿里、百度、腾讯

图 11-3 阿里、百度、腾讯,1~3年招聘要求梳理

每个公司的每个职位要求会略有不同,所以不能一概而论,某一行没有写某项技术点也不能代表什么。以上更多的是参考以及自己在面试求职时可以按照这个方式进行梳理。

  • 阿里,在技术上会更加希望你有深度和广度,也善于把技术能应用到项目中,并有一定的学习能力。同时在工作中,要有责任心、沟通能力和解决问题的落地的能力。
  • 百度,同样希望可以精通一些框架的深层次内容,有一定的技术经验,更偏向于落地技能。同时也希望你是爱学习的面试者,最好有Github相关内容。工作中积极、主动、抗压,认真,善于沟通。
  • 腾讯,除了基础语言学习外,要有一些扩展,同时要深入理解语言特性。这可能和腾讯本身是用C、C++有关,要知其然,知其所以然。同时希望在数据结构和算法上有一定的了解和认知,也可以在工作中有责任心、抗压能力以及问题分析和解决能力。

2.2 字节、美团、京东

图 11-4 字节、美团、京东,1~3年招聘要求梳理

分析完上面三家公司,再看看这三家互联网对应聘者的要求。注意数据依旧是抽样,所以面试者在投递简历时,一定要自己拆解分析

  • 字节,更注重Java基础、算法、数据结构,同时对于常用的技术要有一定的了解深度。对代码方面要有良好的设计和代码品味追求,同时希望你关注业界最新技术,有好奇心和进取心。工作中,有产品意识。对于研发来说,产品意识很重要
  • 美团,美团的技术科目属于比较面的比较广和深的,尤其是字节码编程技术,在其他一些招聘中是没有看到的。除此之外更希望你有一定的学习能力,参与过Github开源项目,有技术钻研精神。在工作中,有较强的思维逻辑,难点攻克,复杂问题推进落地,责任感等。这可能也和美团的技术氛围有关,他们的技术博客做的也不错。百度搜美团技术,https://tech.meituan.com/
  • 京东,各家公司都非常注重Java基本功,这些面试题可能不难但也很难。另外在常用框架和相应的技术深度上要有一定了解,尤其是各个框架的原理和实现机制,如果你能自己动手写一个,那么会更好。另外在技术经验上,可以有分布式、高并发等经验,也可以非常用的运用设计模式,编写出不错的代码。同时希望你有一定的学习能力,博客、开源代码、Github、Gitee等。工作中,有过程控制意识、风险意识以及良好的沟通和解决问题的能力。

3. 考点总结

图 11-5 面试官考点总结

综上,各家公司的招聘要求,梳理出七个方向的考点,包括:基本功底、常用技术、技术深度、技术经验、学习能力、工作能力、项目经验。

  • 基本功底,是一个程序员的主科目语言的学习程度的一个基本考察,这部分内容需要平时大量积累和总结。否则一本简单的Java书很难全部给你讲透彻,因为Java中包括了太多的内容,远不止API使用。
  • 常用技术,这个聊的是你的技术广度,和岗位技术匹配度。比如需要用到过RPC,那你用过Dubbo。如果你的公司暂时用的技术不多,或者还是处于单体服务,那么需要自己补充。
  • 技术深入,除了技术广度接下来就是技术深入,在你常用的技术栈中,你有多了解他们,了解源码吗、了解运行机制吗、了解设计原理吗。这部分内容常被人说是造火箭,但这部分内容非常重要,可以承上启下的贯穿个人修为和薪资待遇。
  • 技术经验,什么是技术经验呢?这是落地能力,除了你可能认为上面一些是纸上谈兵,是造火箭。那么接下来这部分内容就是你是否真造过一个火箭,真完成过一个难题。所以这部分是从结果证明,不是你会什么,而是你做过什么。
  • 学习能力,作为程序员你是否保持热情,是否依旧在积极努力的关注技术,是否为自己的成长不断添砖加瓦、是否还有好奇心和较强的求知欲。一般会从这里看你是不是一个真正的Coder!
  • 工作能力,以上的种种能力,最终要体现到工作上,要能看出你的交付能力。否则即使你再优秀,也不能把你当成一个吉祥物。工作能力的体现,才是真的为团队、为部门、为公司,贡献价值的。
  • 项目经验,这项内容会根据不同公司的不同业务线而不同,就像你懂交易、支付,那么面试花呗、借呗、白条等工作岗位就会很吃香。

四、突破成长瓶颈的技术书籍

根据以上大厂岗位要求,总结了可以破敌的技术书籍!

技术成长的每一个阶段都会遇到一个与之匹配的、难以跨越的,技术瓶颈期!这个阶段没有一次能解决的神药,只有自己不断的积累、沉淀、破局,到最后的爆发。而这些知识可能最开始都是枯燥的,就像看了大A不会小a,看了小a又牵扯出小b,没办法只能一层层的扒,一层层的学。

书籍下载:扫码关注公众号:bugstack虫洞栈,回复:电子书

1. 推荐

- 小傅哥的《重学 Java 设计模式》 ⭐⭐⭐⭐

本书是作者小傅哥,投入50天时间,从互联网实际业务开发中抽离出,交易、营销、秒杀、中间件、源码等22个真实业务场景,编写了18万字271页的实战型Java编程资料。如果书中含有不易理解的内容,一定是作者在编写的过程中缺少必要的描述和严格的校准,感谢把你的意见或者疑问提交给我,也欢迎与我多一些交互,互相进步共同成长。

- 小傅哥的《字节码编程》 ⭐⭐⭐

让人怪不好意思的,说是出书有点膨胀,毕竟这不是走出版社的流程,选题、组稿、编著、审读、加工到出版发行。但全书共计107页,11万7千字,20个章节涵盖三个字节码框架(ASM、Javassist、Byte-budy)和JavaAgent使用并附带整套案例源码!

- 《JAVA核心知识点整理》 ⭐⭐⭐⭐

一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

- 计算机是怎样跑起来的(日)矢泽久雄 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

矢泽久雄,曾在Software House做过程序员,电脑作家之友会会长。工作之余笔耕不辍,从电路到编程语言均有涉及。代表作有《程序是怎样跑起来的》等。本书以图配文,以计算机的三大原则为开端、相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络、数据加密、XML、计算机系统开发以及SE 的相关知识。

2. Java

1. 《Java虚拟机规范(Java SE 7)》 ⭐⭐⭐⭐ - 点击购买(支持作者)

如果不太熟悉jvm,这个读起来非常乏味(只有规范,没有多余解释),但如果阅读过相关深入java虚拟机,再读这个,会非常有亲切感。

2. 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》⭐⭐⭐⭐ - 点击购买(支持作者)

这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典,繁体版在台湾也颇受欢迎。作者周志明,是资深Java技术、机器学习和企业级开发技术专家,现任远光软件研究院院长,人工智能博士在读。

3. 《JAVA核心知识点整理》⭐⭐⭐⭐

一份整理的蛮不错的Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

4. 《On Java 8 编程思想》⭐⭐⭐⭐

本书原作者为 [美] Bruce Eckel,即《Java 编程思想》的作者。译者在翻译中同时参考了谷歌、百度、有道翻译的译文以及《Java编程思想》第四版中文版的部分内容(对其翻译死板,生造名词,语言精炼度差问题进行规避和改正)。最后结合译者自己的理解进行本地化,尽量做到专业和言简意赅,方便大家更好的理解学习。

5. 深入浅出+Java+多线程 ⭐⭐⭐⭐

笔者在读完市⾯上关于Java并发编程的资料后,感觉有些知识点不是很清晰,于是
在RedSpider社区内展开了对Java并发编程原理的讨论。鉴于开源精神,我们决定
将我们讨论之后的Java并发编程原理整理成书籍,分享给⼤家。
如果您或者您的单位愿意赞助本书或本社区,请发送邮件到RedSpider社区邮件组redspider@qun.mail.163.com或加微信redspider-worker进⾏洽谈。

6. 《Java核心技术 I》 ⭐⭐⭐⭐ - 点击购买(支持作者)

不同于一般的 Java入门书,此书对api的讲解非常详细,细节部门颇多。举个例子,java对象序列化时会写入什么内容,本书都有详细的介绍

7. 《effective java 3》 ⭐⭐⭐⭐ - 点击购买(支持作者)

全书以一种比较松散的方式将这些条目组织成11章,每一章都涉及软件设计的一个主要方面。因此,本书并不一定需要按部就班地从头读到尾,因为每个条目都有一定程度的独立性。这些条目相互之间经常交叉引用,因此可以很容易地在书中找到自己需要的内容。

8. 《Java解惑》 ⭐⭐⭐

挺有意思的一本书,它列举了许多平常不太注意的细节问题,可能大部分时候我们都不会碰到此类问题,但如果读过,一旦碰到,就会留意此类问题。

9. 《Thinking In Java 4》⭐⭐⭐⭐⭐ - 点击购买(支持作者)

值得用2年深入抚摸的书籍,对于学习java技术除了最开始的入门书籍后,这是一本非常值得阅读的书籍。

10. 《Java内存模型》 ⭐⭐⭐⭐

Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

11. 《Java并发编程实践(全)》 ⭐⭐⭐⭐ - 点击购买(支持作者)

随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在《JAVA并发编程实践》中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用,还阐释了创造它们的原因,及其背后的设计模式。

12. 《Spring揭秘》 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

本书内容全面,论述深刻入理,必将成为每个Java专业开发人员必备的Spring图书。

难得的国产良心技术书籍,既没有大量堆砌Spring源码,也没有原封不动地翻译官方文档。作者以自己的深厚功力和独特视角一步一步地把Spring框架抽丝剥茧地展现在读者面前,从谋篇布局和字里行间都能看出作者的用心之处。如果你想深入了解Spring的方方面面,这本书非读不可,而且读一遍都不够,要每隔一段时间反复阅读,尤其第二部分IOC和第三部分AOP,它们是Spring的基础,也是这本书的精华所在。这里不妨给个建议,以这本书为蓝本把Spring框架用到的设计模式和原则认真梳理一遍,结合源码认真理解为何要这样设计。如若这样,假以时日,功力必有小成啊。最后感谢作者,感谢我能遇到这本书

13. 《Spring源码深度解析》 ⭐⭐⭐ - 点击购买(支持作者)

由浅入深、由易到难地对Spring源码展开了系统的讲解,包括Spring的设计理念和整体架构、容器的基本实现、默认标签的解析、自定义标签的解析、bean的加载、容器的功能扩展、AOP、数据库连接JDBC、整合MyBatis、事务、SpringMVC、远程服务、Spring消息服务等内容。

14. 《深入理解SpringCloud与微服务构建》⭐⭐⭐⭐ - 点击购买(支持作者)

本书以微服务的基本概念介绍性开篇,逐步引出Java平台下打造微服务的利器SpringBoot微框架。书中从SpringBoot微框架的“出身”开始,循序渐进,为大家剖析SpringBoot微框架的设计理念和原理,并对框架的重点功能和模块进行了逐一讲解。

15. 《美团技术后台篇》 ⭐⭐⭐⭐

2019年美团点评高级技术汇总,深入且清晰设计到Java核心技术。包括;字节码编程、全链路监控、美团分布式 ID 生成服务开源等。

16. Java Concurrency in Practice ⭐⭐⭐⭐⭐

This book covers:
Basic concepts of concurrency and thread safety
Techniques for building and composing thread-safe classes
Using the concurrency building blocks in java.util.concurrent
Performance optimization dos and don'ts
Testing concurrent programs
Advanced topics such as atomic variables, nonblocking algorithms, and the Java Memory Model

3. DB

1. 《MySQL王者晋级之路》 ⭐⭐⭐⭐ - 点击购买(支持作者)

十年磨一剑,汇集作者多年MySQL数据库领域的一线实战与教学经验,由浅入深剖析MySQL的体系结构、备份恢复、复制、高可用集群架构、优化、故障排查、新版本特性、监控、升级及技术面试宝典等知识点。

2. 《数据库索引设计与优化》⭐⭐⭐⭐ - 点击购买(支持作者)

作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL 运行的CPU 时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。此书适用于已经具备了SQL 这一关系型语言相关知识,希望通过理解SQL 性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。

3. MYSQL技术内幕:INNODB存储引擎 - ⭐⭐⭐⭐ - 点击购买(支持作者)

这本书更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,帮助用户真正了解一个数据库存储引擎的开发。

4. Redis

1. 《Redis设计与实现》⭐⭐⭐⭐ - 点击购买(支持作者)

黄健宏 软件开发者,他喜欢函数式编程,热爱开源软件。出于对数据库的强烈兴趣,他开始阅读和分析 Redis 源代码,并对 Redis 2.6 和 Redis 3.0 的源代码进行了详细注释。

2. 《Redis 深度历险:核心原理与应用实践》⭐⭐⭐⭐ - 点击购买(支持作者)

作者:钱文品,老钱。可以说这是一本深挖到redis骨头的技术书籍,整个内容涵盖;基础和应用篇、原理篇、集群篇、拓展篇、源码篇共 5 大块内容,值得学习。

3. 《Redis开发与运维》 ⭐⭐⭐⭐- 点击购买(支持作者)

付磊,张益军 | 搜狐视频高级研发工程师,都拥有多年Redis开发运维经验,为公司多个核心业务提供Redis服务。两人共同编写了本书,在本书中全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发与管理的场景、应用案例与开发技巧,为高效开发运维提供了大量实际经验和建议。

5. 架构&设计

1. 《代码整洁之道》 ⭐⭐⭐⭐ - 点击购买(支持作者)

本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。

2. 《Head_First设计模式(中文版)》⭐⭐⭐⭐ - 点击购买(支持作者)

Head First陆续的介绍了策略模式、观察者模式、装饰者模式、工厂方法模式、抽象工厂模式、单件模式、命令模式、适配器模式、外观模式、模板方法模式、迭代器模式、组合模式、状态模式、代理模式,在介绍各种模式的期间,用简单的应用场景、通俗的语言引导读者去思考这些模式是如何利用和遵循相应OO原则的,然后再清晰的总结出每种模式的定义。

3. 《编写可读代码的艺术》 ⭐⭐⭐ - 点击购买(支持作者)

细节决定成败,思路清晰、言简意赅的代码让程序员一目了然;而格式凌乱、拖沓冗长的代码让程序员一头雾水。除了可以正确运行以外,优秀的代码必须具备良好的可读性,编写的代码要使其他人能在最短的时间内理解才行。本书旨在强调代码对人的友好性和可读性。

4. 《重构 改善既有代码的设计》 ⭐⭐⭐⭐ - 点击购买(支持作者)

“不要容忍破窗户” 如果两个或更多的地方实现同一职责,则改变时会带来麻烦。所以要遵循DRY原则,单一职责。这本书的每一项都介绍一种经过实证的代码变换手法(code transformation)的动机和技术。向你讲述如何有效的重构以及是否进行重构。

5. 《设计数据密集型应用 Designing Data Intensive Applications》 ⭐⭐⭐⭐ - 点击购买(支持作者)

作者是英国剑桥大学的一名分布式系统研究员,在此之前他曾是软件工程师和企业家,在 Linkedin 和 Rapportive 工作过,从事大规模数据基础设施相关的工作。书中包含:深入分析你已经在使用的系统,并学习如何更高效地使用和运维这些系统、理解分布式系统研究,这些研究是现代数据库构建的基石、了解一致性、可伸缩性、容错性和复杂度之间的权衡。推荐人:BK

6. 《企业应用架构模式》 ⭐⭐⭐⭐ - 点击购买(支持作者)

作者是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。

6. 其他系列

1. 《阿里工程师的自我修养》 ⭐⭐⭐⭐

从入门到进阶,从普通员工到主管,从知识到落地,从量的积累到质的飞跃,在不确定性的世界中,你遇到的种种难题,阿里工程师正在探索着最优解。3大思维、10个技巧、10年感悟……每经过一次大的战役,阿里工程师都会复盘、沉淀,这些经验值得细品。

2. Java开发手册(嵩山版) ⭐⭐⭐⭐

《阿里巴巴 Java 开发手册》主要提炼了阿里巴巴集团技术团队的集体编程经验和软件设计智慧,可全面、立体地帮助开发者的成长和团队代码文化形成。嵩山版首次新增前后端规约等内容,可帮助开发者码出规范,码出质量。

3. 《Http权威指南》⭐⭐⭐⭐ - 点击购买(支持作者)

如果以前没有深入了解http,读了此书,会觉得以前了解的关于http的内容都弱爆了。经典书籍,中文版2012年发版,翻译的还不错,值得阅读。

4. Elasticsearch 权威指南 中文版 ⭐⭐⭐⭐ - 点击购买(支持作者)

这本指南都会帮助你了解其中最基本的概念,从最基本的操作开始学习 Elasticsearch。同时将向你介绍讲解结构化搜索、统计、查询过滤、地理定位、自动完成以及你是不是要查找的提示。并且探讨如何给数据建模能提升 Elasticsearch 的性能,以及在生产环境中如何配置、监视你的集群。

5. 计算机是怎样跑起来的(日)矢泽久雄 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

矢泽久雄,曾在Software House做过程序员,电脑作家之友会会长。工作之余笔耕不辍,从电路到编程语言均有涉及。代表作有《程序是怎样跑起来的》等。本书以图配文,以计算机的三大原则为开端、相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络、数据加密、XML、计算机系统开发以及SE 的相关知识。

6. 编码:隐匿在计算机软硬件背后的语言 ⭐⭐⭐⭐⭐ - 点击购买(支持作者)

是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似烦杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此更加深刻地理解计算机的工作原理。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。

7. 计算机程序的构造和解释(原书第2版) ⭐⭐⭐⭐⭐

《计算机程序的构造和解释(原书第2版)》1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,《计算机程序的构造和解释(原书第2版)》对于计算机科学的教育计划产生了深刻的影响。第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。

8. 代码大全(第2版) ⭐⭐⭐⭐⭐

第2版的《代码大全》是著名IT畅销书作者史蒂夫·迈克康奈尔11年前的经典著作的全新演绎:第2版不是第一版的简单修订增补,而是完全进行了重写;增加了很多与时俱进的内容。这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。它从软件质量和编程思想等方面论述了软件构建的各个问题,并详细论述了紧跟潮流的新技术、高屋建瓴的观点、通用的概念,还含有丰富而典型的程序示例。

9. 编程匠艺 ⭐⭐⭐⭐

如果你可以编写出合格的代码,但是想更进一步、创作出组织良好而且易于理解的代码,并希望成为一名真正的编程专家或提高现有的职业技能,那么Pete Goodliffe编写的这本本书都会为你给出答案。本书的内容涵盖编程的各个要素,如代码风格、变量命名、错误处理和安全性等。此外,本书还对一些更广泛的编程问题进行了探讨,如有效的团队合作、开发过程和文档编写,等等。

10. Zookeeper 分布式过程 ⭐⭐⭐⭐ - 点击购买(支持作者)

作者介绍Flavio Junqueira 是微软研究院在英国剑桥大学的研究人员之一。他拥有美国加州大学圣地亚哥分校计算机科学博士学位。他的研究范围涉及分布式系统的各个方面,包括分布式算法、并发性和可扩展性。他是Apache项目如Apache ZooKeeper(PMC主席和提交者)和Apache BookKeeper(提交者)的积极贡献者。他一有空就喜欢睡觉。

11. 黑客与画家 ⭐⭐⭐⭐ - 点击购买(支持作者)

本书是硅谷创业之父Paul Graham 的文集,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。书中的内容不但有助于了解计算机编程的本质、互联网行业的规则,还会帮助读者了解我们这个时代,迫使读者独立思考。

五、总结

  • 面试也是一场有准备的战斗,知己知彼才能游刃有余。面试怎么面主要是看简历怎么写,最终是你来主导面试,还是被主导,更多也是依赖于你的技术身家。
  • 任何时候都需要主动学习、有技术眼光和魄力,既能吹得了造火箭的牛、也能落地出实际的产物、技能帮公司实现价值,也能让自己有一定的收入。才是你应该永久追求的目标,和突破瓶颈的价值。
  • 少一些躁动、少一些不安,多一些沉稳、多一些沉淀,只要你愿意积累就一定会突破瓶颈,都是这条路上的打工人,不要总让自己的大脑被别人牵着走,也不要活在别人嘴里。奥利给😎阅读原文,进入知识宝藏!

六、系列推荐

查看原文

赞 10 收藏 6 评论 0

大树 发布了文章 · 2020-11-15

海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)

image

在工作中我们常遇到此类问题,从一个大量甚至海量的数据中取出前几个大的数。必须在海量的文章中取出点击量最大的10篇文章。
此类问题其实就是Top K问题。
给定一个数据(数据量海量 N),想找到前 K 个最大的或最小的元素。

eg:有10亿个Long型整数,存储在文件中,如果找出其中最大的10个?
最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序。每个Long类型占8个字节,10亿个数就要占用7GB+的存储空间,对于一些可用内存小于7GB的计算机而言,很显然是不能一次将全部数据读入内存进行排序的。其实即使内存能够满足要求(我机器内存都是8GB),该方法也并不高效,因为题目的目的是寻找出最大的10个数即可,而排序却是将所有的元素都排序了,做了很多的无用功。

第二种方法采用最小堆。首先读入前10个数来创建大小为10的最小堆,然后遍历后续的数字,并于堆顶(最小)数字进行比较。如果比最小的数小,则继续读取后续数字;如果比堆顶数字大,则替换堆顶元素并重新调整堆为最小堆。整个过程直至10亿个数全部遍历完为止。然后按照中序遍历的方式输出当前堆中的所有10个数字。这个方法使用的内存是可控的,只有10个数字所需的内存即可。
这种方法Java中有现成的数据结构优先级队列可以使用:java.util.PriorityQueue
代码如下:

import org.junit.Test;

import java.io.*;
import java.util.PriorityQueue;
import java.util.Random;

/**
 * @author liming
 * @date 2020/9/3
 * @description
 */
public class TopKDemo {

    //模拟海量数据的文件
    private final File file = new File("file" + File.separator + "topkdata.txt");
    private final Random random = new Random();
    private final PriorityQueue<Long> priorityQueue = new PriorityQueue<>(10);

    @Test
    public void computeTopK() {
        FileReader fileReader = null;
        BufferedReader bufferedReader = null;
        try {
            fileReader = new FileReader(file);
            bufferedReader = new BufferedReader(fileReader);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                addToTopKQueue(Long.valueOf(line));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("Long.MAX_VALUE = " + Long.MAX_VALUE);
            Long target;
            while ((target = priorityQueue.poll()) != null) {
                System.out.println("target = " + target);
            }
        }
    }

    /**
     * init方法仅运行一次即可,是为准备模拟数据
     */
    @Test
    public void init() {
        long start = System.currentTimeMillis();
        System.out.println("init");
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter(file, true);
            //先用100万数据,多了电脑可能受不了
            for (int i = 0; i < 1000000; i++) {
                fileWriter.write(String.valueOf(random.nextLong()) + System.lineSeparator());
            }
            //写入10个接近long的最大值的数,便于取出是验证正确结果
            for (int i = 0; i < 10; i++) {
                fileWriter.write(String.valueOf(Long.MAX_VALUE - i) + System.lineSeparator());
            }
            fileWriter.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileWriter != null) {
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("用时:" + (System.currentTimeMillis() - start));
        }
    }

    public void addToTopKQueue(Long target) {
        if (priorityQueue.size() < 10) {
            priorityQueue.add(target);
        } else {
            Long head = priorityQueue.peek();
            if (target > head) {
                priorityQueue.poll();
                priorityQueue.add(target);
            }
        }
    }

}

实际运行: 实际上,最优的解决方案应该是最符合实际设计需求的方案,在实际应用中,可能有足够大的内存,那么直接将数据扔到内存中一次性处理即可。也可能机器有多个核,这样可以采用多线程处理整个数据集。多线程处理时,上述方法需要做线程安全保证。

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 2 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2020-08-28
个人主页被 976 人浏览