books
核心基础知识
《图解HTTP》(推荐,豆瓣评分 8.1 , 1.6K+人评价): 讲漫画一样的讲HTTP,很有意思,不会觉得枯燥,大概也涵盖也HTTP常见的知识点。因为篇幅问题,内容可能不太全面。不过,如果不是专门做网络方向研究的小伙伴想研究HTTP相关知识的话,读这本书的话应该来说就差不多了。
《大话数据结构》(推荐,豆瓣评分 7.9 , 1K+人评价):入门类型的书籍,读起来比较浅显易懂,适合没有数据结构基础或者说数据结构没学好的小伙伴用来入门数据结构。
《数据结构与算法分析:C语言描述》(推荐,豆瓣评分 8.9,1.6K+人评价):本书是《Data Structures and Algorithm Analysis in C》一书第2版的简体中译本。原书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好评.已被世界500余所大学用作教材。
《算法图解》(推荐,豆瓣评分 8.4,0.6K+人评价):入门类型的书籍,读起来比较浅显易懂,适合没有算法基础或者说算法没学好的小 ...
interviewPrepare
这是【备战春招/秋招系列】的第二篇文章,主要是简单地介绍如何去准备面试。
不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为,非常反对!我觉得这种方法特别极端,而且在稍有一点经验的面试官面前是根本没有用的。建议大家还是一步一个脚印踏踏实实地走。
1 如何获取大厂面试机会?在讲如何获取大厂面试机会之前,先来给大家科普/对比一下两个校招非常常见的概念——春招和秋招。
招聘人数 :秋招多于春招 ;
招聘时间 : 秋招一般7月左右开始,大概一直持续到10月底。但是大厂(如BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为3月,次佳时间为4月,进入5月基本就不会再有春招了(金三银四)。
应聘难度 :秋招略大于春招;
招聘公司: 秋招数量多,而春招数量较少,一般为秋招的补充。
综上,一般来说,秋招的含金量明显是高于春招的。
下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方 ...
手把手教你用Markdown写一份高质量的简历
Markdown 简历模板样式一览可以看到我把联系方式放在第一位,因为公司一般会与你联系,所以把联系方式放在第一位也是为了方便联系考虑。
为什么要用 Markdown 写简历?Markdown 语法简单,易于上手。使用正确的 Markdown 语言写出来的简历不论是在排版还是格式上都比较干净,易于阅读。另外,使用 Markdown 写简历也会给面试官一种你比较专业的感觉。
除了这些,我觉得使用 Markdown 写简历可以很方便将其与PDF、HTML、PNG格式之间转换。后面我会介绍到转换方法,只需要一条命令你就可以实现 Markdown 到 PDF、HTML 与 PNG之间的无缝切换。
下面的一些内容我在之前的一篇文章中已经提到过,这里再说一遍,最后会分享如何实现Markdown 到 PDF、HTML、PNG格式之间转换。
为什么说简历很重要?假如你是网申,你的简历必然会经过HR的筛选,一张简历HR可能也就花费10秒钟看一下,然后HR就会决定你这一关是Fail还是Pass。
假如你是内推,如果你的简历没有什么优势的话,就算是内推你的人再用心,也无能为力。
另外,就算你通过了筛选, ...
程序员的简历之道
程序员的简历就该这样写1 前言一份好的简历可以在整个申请面试以及面试过程中起到非常好的作用。 在不夸大自己能力的情况下,写出一份好的简历也是一项很棒的能力。
2 为什么说简历很重要?2.1 先从面试前来说假如你是网申,你的简历必然会经过HR的筛选,一张简历HR可能也就花费10秒钟看一下,然后HR就会决定你这一关是Fail还是Pass。
假如你是内推,如果你的简历没有什么优势的话,就算是内推你的人再用心,也无能为力。
另外,就算你通过了筛选,后面的面试中,面试官也会根据你的简历来判断你究竟是否值得他花费很多时间去面试。
所以,简历就像是我们的一个门面一样,它在很大程度上决定了你能否进入到下一轮的面试中。
2.2 再从面试中来说我发现大家比较喜欢看面经 ,这点无可厚非,但是大部分面经都没告诉你很多问题都是在特定条件下才问的。举个简单的例子:一般情况下你的简历上注明你会的东西才会被问到(Java、数据结构、网络、算法这些基础是每个人必问的),比如写了你会 redis,那面试官就很大概率会问你 redis 的一些问题。比如:redis的常见数据类型及应用场景、redis是单线程为什么还这么快、 ...
简历模板
联系方式
手机:
Email:
微信:
个人信息
姓名/性别/出生日期
本科/xxx计算机系xxx专业/英语六级
技术博客:http://snailclimb.top/
荣誉奖励:获得了什么奖(获奖时间)
Github:https://github.com/Snailclimb
Github Resume: http://resume.github.io/?Snailclimb
期望职位:Java 研发程序员/大数据工程师(Java后台开发为首选)
期望城市:xxx城市
项目经历xxx项目项目描述介绍该项目是做什么的、使用到了什么技术以及你对项目整体设计的一个感受
责任描述主要可以从下面三点来写:
在这个项目中你负责了什么、做了什么、担任了什么角色
从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的。
开源项目和技术文章开源项目
Java-Guide :一份涵盖大部分Java程序员所需要掌握的核心知识。Star:3.9K; F ...
网易2018校招编程题1-3
下面三道编程题来自网易2018校招编程题,这三道应该来说是非常简单的编程题了,这些题目大家稍微有点编程和数学基础的话应该没什么问题。看答案之前一定要自己先想一下如果是自己做的话会怎么去做,然后再对照这我的答案看看,和你自己想的有什么区别?那一种方法更好?
问题
一 获得特定数量硬币问题小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需要你帮他设计一个投入方案使他最后恰好拥有n个魔法币。
输入描述: 输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
输出描述: 输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符’1’和’2’。
输入例子1: 10
输出例子1: 122
二 求“相反数”问 ...
美团-基础篇
1. System.out.println(3 | 9);输出什么?
2. 说一下转发(Forward)和重定向(Redirect)的区别
3. 在浏览器中输入url地址到显示主页的过程,整个过程会使用哪些协议
4. TCP 三次握手和四次挥手
为什么要三次握手
为什么要传回 SYN
传了 SYN,为啥还要传 ACK
为什么要四次挥手
5. IP地址与MAC地址的区别
6. HTTP请求、响应报文格式
7. 为什么要使用索引?索引这么多优点,为什么不对表中的每一个列创建一个索引呢?索引是如何提高查询速度的?说一下使用索引的注意事项?Mysql索引主要使用的两种数据结构?什么是覆盖索引?
8. 进程与线程的区别是什么?进程间的几种通信方式说一下?线程间的几种通信方式知道不?
9. 为什么要用单例模式?手写几种线程安全的单例模式?
10. 简单介绍一下bean。知道Spring的bean的作用域与生命周期吗?
11. Spring 中的事务传播行为了解吗?TransactionDefinition 接口中哪五个表示隔离级别的常量?
事务传播行为
隔离级别
12. Sp ...
美团-终结篇
一. Object类有哪些方法?
1.1 Object类的常见方法总结
1.2 hashCode与equals
1.2.1 hashCode()介绍
1.2.2 为什么要有hashCode
1.2.3 hashCode()与equals()的相关规定
1.2.4 为什么两个对象有相同的hashcode值,它们也不一定是相等的?
1.3 ==与equals
二 ConcurrentHashMap 相关问题
2.1 ConcurrentHashMap 和 Hashtable 的区别
2.2 ConcurrentHashMap线程安全的具体实现方式/底层具体实现
JDK1.7(上面有示意图)
JDK1.8 (上面有示意图)
三 谈谈 synchronized 和 ReenTrantLock 的区别
四 线程池了解吗?
4.1 为什么要用线程池?
4.2 Java 提供了哪几种线程池?他们各自的使用场景是什么?
Java 主要提供了下面4种线程池
各种线程池的适用场景介绍
4.3 创建的线程池的方式
五 Nginx
5.1 简单介绍一下Nginx
反向代理
负 ...
美团-进阶篇
一 消息队列MQ的套路
1.1 介绍一下消息队列MQ的应用场景/使用消息队列的好处
①.通过异步处理提高系统性能
②.降低系统耦合性
1.2 那么使用消息队列会带来什么问题?考虑过这个问题吗?
1.3 介绍一下你知道哪几种消息队列,该如何选择呢?
1.4 关于消息队列其他一些常见的问题展望
二 谈谈 InnoDB 和 MyIsam 两者的区别
2.1 两者的对比
2.2 关于两者的总结
三 聊聊 Java 中的集合吧!
3.1 Arraylist 与 LinkedList 有什么不同?(注意加上从数据结构分析的内容)
3.2 HashMap的底层实现
① JDK1.8之前
② JDK1.8之后
3.3 既然谈到了红黑树,你给我手绘一个出来吧,然后简单讲一下自己对于红黑树的理解
3.4 红黑树这么优秀,为何不直接使用红黑树得了?
3.5 HashMap 和 Hashtable 的区别/HashSet 和 HashMap 区别
该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://gith ...
面试必备之乐观锁与悲观锁
何谓悲观锁与乐观锁
乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。
悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。
乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁 ...
(1)斐波那契数列问题和跳台阶问题
一 斐波那契数列题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
问题分析:可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有一个很大的问题,那就是递归大量的重复计算会导致内存溢出。另外可以使用迭代法,用fn1和fn2保存计算过程中的结果,并复用起来。下面我会把两个方法示例代码都给出来并给出两个方法的运行时间对比。
示例代码:采用迭代法:
int Fibonacci(int number) { if (number <= 0) { return 0; } if (number == 1 || number == 2) { return 1; } int first = 1, second = 1, third = 0; for (int i = 3; i <= number; i++) { third = first + second; first = second; second = third; } return third; ...
(2)二维数组查找和替换空格问题
一 二维数组查找题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
问题解析:这一道题还是比较简单的,我们需要考虑的是如何做,效率最快。这里有一种很好理解的思路:
矩阵是有序的,从左下角来看,向上数字递减,向右数字递增, 因此从左下角开始查找,当要查找数字比左下角数字大时。右移 要查找数字比左下角数字小时,上移。这样找的速度最快。
示例代码:public boolean Find(int target, int [][] array) { //基本思路从左下角开始找,这样速度最快 int row = array.length-1;//行 int column = 0;//列 //当行数大于0,当前列数小于总列数时循环条件成立 while((row >= 0)&& (column< array[0].length)){ if(array[row][column ...
(3)数值的整数次方和调整数组元素顺序
一 数值的整数次方题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
问题解析:这道题算是比较麻烦和难一点的一个了。我这里采用的是二分幂思想,当然也可以采用快速幂。更具剑指offer书中细节,该题的解题思路如下:1.当底数为0且指数<0时,会出现对0求倒数的情况,需进行错误处理,设置一个全局变量;2.判断底数是否等于0,由于base为double型,所以不能直接用==判断3.优化求幂函数(二分幂)。当n为偶数,a^n =(a^n/2)*(a^n/2);当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a。时间复杂度O(logn)
时间复杂度:O(logn)
示例代码:public class Solution { boolean invalidInput=false; public double Power(double base, int exponent) { //如果底数等于0并且指数小于0 ...
(4)链表相关编程题
一 链表中倒数第k个节点题目描述:输入一个链表,输出该链表中倒数第k个结点
问题分析:一句话概括:两个指针一个指针p1先开始跑,指针p1跑到k-1个节点后,另一个节点p2开始跑,当p1跑到最后时,p2所指的指针就是倒数第k个节点。
思想的简单理解:前提假设:链表的结点个数(长度)为n。规律一:要找到倒数第k个结点,需要向前走多少步呢?比如倒数第一个结点,需要走n步,那倒数第二个结点呢?很明显是向前走了n-1步,所以可以找到规律是找到倒数第k个结点,需要向前走n-k+1步。算法开始:
设两个都指向head的指针p1和p2,当p1走了k-1步的时候,停下来。p2之前一直不动。
p1的下一步是走第k步,这个时候,p2开始一起动了。至于为什么p2这个时候动呢?看下面的分析。
当p1走到链表的尾部时,即p1走了n步。由于我们知道p2是在p1走了k-1步才开始动的,也就是说p1和p2永远差k-1步。所以当p1走了n步时,p2走的应该是在n-(k-1)步。即p2走了n-k+1步,此时巧妙的是p2正好指向的是规律一的倒数第k个结点处。这样是不是很好理解了呢?考察内容:链表+代码的鲁棒性示例代码:/* ...