- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 2017漫长又坎坷的校招之路
2017艰难的求职之路在生日这天终于接近尾声······互联网校招(计算机专业)简单总结如下:1、内推-----准备充分,胜算很大,早早摆脱心理压力,后面才能找到更好的!学校优势+丰富简历==面试机会【内推要有渠道,1.已在公司入职的师兄师姐或朋友推荐;2.各个平台或个人推荐有奖会建立各种微信QQ群,要会自己找(命名一般为:2017“阿里”校招内推)】【内推一般不用笔试,免过一
2016-10-26 10:11:00
717
转载 Java路线--如何学习&&面试
看到比较好的,Java学习及找工作路线,以留备用。。。引言其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来。LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的。但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆
2016-08-14 09:55:43
1295
2
原创 阿里 2017校招内推 电话面试
(小伙伴刚刚经历的阿里一面。。。。。)接电话。。。。。。登邮箱。。。。。。在线编程!!!!!1、将一个单链表排序。直接循环不断比较选择排序 O(n2)归并排序电话那头:用快速排序吧。。。。。。。2、求两个数组的交集。用hashmap存第一个数组,遍历第二个数组的时候求出交集山的那头:你没问我数组是不是排序的啊。
2016-08-13 16:04:20
2052
1
转载 进程间通信方式
进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET. 管道包括三种: 1)普通管道PIPE, 一是半双工,只能单向传输;二是只能在父子进程间使用. 2)流管道s_pipe: 去除了第一种限制,可以双向传输. 3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯. 系统IPC的三种方式类同,都是
2016-08-12 16:16:09
429
转载 Spring框架Bean作用域
Spring框架现有的Bean作用域( 1 ) singleton :默认的作用域,仅为每个 Bean 对象创建一个实例。( 2 ) prototype :可以根据需要为每个 Bean 对象创建多个实例。( 3 ) request :为每个 HTTP 请求创建它自有的一个 Bean 实例,仅在 Web 相关的 ApplicationContext 中生效。( 4 )
2016-08-12 13:49:51
706
原创 equals()重写规则
为什么equals()方法要重写?判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象。这样我们往往需要重写equals()方法。我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法。
2016-08-11 19:47:48
797
转载 Java IO讲解
Java 的 I/O 操作类在包 java.io 下,大概有将近 80 个类,但是这些类大概可以分成四组,分别是:基于字节操作的 I/O 接口:InputStream 和 OutputStream基于字符操作的 I/O 接口:Writer 和 Reader基于磁盘操作的 I/O 接口:File基于网络操作的 I/O 接口:Socket前两组主要是根据传输数据的数据格
2016-08-10 20:18:17
328
转载 用生动故事讲解动态规划
----第一节----初识动态规划--------经典的01背包问题是这样的:有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做01背包,0表示不取,1表示取]为了用一种生动又更形象的方式来讲解此题,我把此题用另一
2016-07-22 09:58:23
453
原创 Spring主要核心
Spring主要核心是:1.控制反转(IOC):(1)传统java开发,使用new或者getInstance等调用构造方法创建一个对象;Spring开发时,Spring容器使用了工厂模式创建了所需要的对象,使用时直接调用Spring提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,使用spring时不需要关心通过何
2016-07-21 20:27:46
741
转载 ConcurrentHashMap深入分析
ConcurrentHashMap的锁分段技术 HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据
2016-07-19 15:03:59
504
转载 HashTable和HashMap分析
1、Map体系参考:http://java.chinaitlab.com/line/914247.htmlHashtable是JDK 5之前Map唯一线程安全的内置实现(Collections.synchronizedMap不算)。Hashtable继承的是Dictionary(Hashtable是其唯一公开的子类),并不继承AbstractMap或者HashMap.尽管Hashtable
2016-07-19 14:26:35
399
原创 java 位运算常用技巧
(1) m数乘2n:相当于数左移n位;注意,除操作慎用右移,注意负数情况。(2) m>>n:右移—最右边n位丢弃,最左边0补位(无符号)/符号位补最左边。**利用右移对最右边的位进行与运算,判断数为0还是1://判断奇数、偶数** 0:(c&1)==0 c >>= 1;** 1: (c&1)==1) c >>= 1;(3) 常见
2016-07-14 15:23:52
1460
原创 java线程基础
(1) 创建:继承Thread类与实现Runnable接口(2) stop()不安全,会解除由线程获取的所有锁定(3) suspend()易发生死锁,目标线程会停止,却仍持有在这之前获得的锁定。不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢
2016-07-14 15:22:24
365
原创 String 及 StringBuffer常用方法总结
String类:(不可变类)创建:new String(); String(StringBuffer sb); “ ”;字符串长度:str.length();获取子串:str.substring(start,end);----[0,N)字符串包含:boolean = str.contains(s);不区分大小写判断:str.equalsIgnoreCase(“hello”);
2016-07-14 15:20:31
2184
原创 【剑指offer】字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。分析:先不考虑字母顺序输出,要求所有排列,可将第一个字母与其后所有字符依次交换,再固定第一个字符,其后字符相互交换----引用递归思路。排序使用两种方式实现,见代码。
2016-07-13 16:36:21
322
原创 网络协议详解
1、详细介绍了分层基础及思想,看完后突然感觉思路条理了,内容清晰易懂,网络协议入门及梳理必看!http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html2、第1部分的续集,更加深入的介绍,大致反映了互联网协议的整个通信过程。http://www.ruanyifeng.com/blog/
2016-07-12 18:53:12
672
原创 【剑指offer】二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析: 树本身为二叉搜索树,具有一定的排序规律,要调整成为排序双向链表,需要知道,原本树的根节点右指针指向的元素比根节点大,左指针需要调整指向比根节点小的元素。且整棵树中,最小的节点是最左的节点,最大的节点是最右的节点。二叉树左右节点调整可以采用递
2016-07-11 11:24:34
318
原创 【TCP/IP协议】java SOCKET网络编程
以下内容收集自优快云博客专家[兰亭风雨]:1、TCP简介及TCP SOCKET编程要点http://blog.youkuaiyun.com/ns_code/article/details/14105457补充:2、UDP简介及UDP SOCKET编程要点http://blog.youkuaiyun.com/ns_code/article/details/14128987补充:
2016-07-08 10:39:34
672
原创 【深入学习java集合框架】LinkedList源码学习
1、LinkedList底层通过双向链表实现,双向链表的每个节点用内部类Node表示。2、LinkedList通过first和last引用分别指向链表的第一个和最后一个元素,当链表为空的时候first和last都指向null。3、LinkedList的实现方式决定了所有跟下标相关的操作都是线性时间,而在首段或者末尾删除元素只需要常数时间。4、LinkedList没有实现同步(synch
2016-07-07 10:47:15
1013
原创 【深入学习java集合框架】ArrayList源码学习
1、ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素。2、ArrayList基于数组实现,改善数组固定长度的弊端,ArrayList是一个动态数组,其容量能自动增长。3、ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以用Collections.synchronizedList(List l)返回一个线程安
2016-07-07 09:37:48
728
原创 【深入学习java集合框架】总篇章
Java容器里只能放对象,对于基本类型(int, long, float, double等),需要将其包装成对象类型后(Integer, Long, Float, Double等)才能放到容器里。很多时候拆包装和解包装能够自动完成。Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。Java集合框架大致可以分为:List列表、Set集
2016-07-06 11:11:16
1302
原创 牛客网-直通BAT面试算法精品课购买优惠码
已看部分视频,讲解详细,对互联网校招面试笔试算法复习很有帮助。专属优惠码为: AigxZ1N 专属优惠购课链接:http://www.nowcoder.com/courses/1?coupon=AigxZ1N 购买时选择使用优惠码,即可优惠10元。
2016-06-27 16:51:07
4425
原创 【剑指offer】复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),实现链表的复制。分析:首先想到的是先将链表的下一个节点链路复制出一条链表,再从头开始将链表的任意节点指针复制,问题在于任意节点的指针可以指向任意位置,每个节点都要从头查找。由于链表的顺序性,可以将复制链表复制在原链表内部,最后拆分为两个单独的复杂链表即可。这样
2016-06-23 10:04:25
609
原创 【剑指offer】二叉树中和为某一值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。分析:深度优先遍历,将节点的值加入路径中,没有达到预定值,继续深入,超出预定值后退到上一节点。需要注意有可能有多条路径符合条件,要将多条路径都返回。实现:public ArrayList> FindPath(Tre
2016-06-22 14:21:26
299
原创 【剑指offer】二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析:后序遍历的最后一个值为二叉树的根节点值,判断是否为二叉搜索树,递归判断是否左子树节点都小于根,右子树节点都大于根。因此,可以先从序列中找到比根小的值,判定为左子树,后续的值应该为右子树,如果比根大,直接返回false。
2016-06-22 13:59:32
267
原创 【剑指offer】从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析:层序遍历需借助队列,将节点入队出队进行遍历。实现://import java.util.LinkedList;//import java.util.Queue; public ArrayList PrintFromTopToBottom(TreeNode root) { Queue qu
2016-06-22 13:45:56
233
原创 【剑指offer】栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。分析:可借助一个栈,根据压入顺序将数据压入栈中,每次压入,要判断栈顶元素是否为弹出顺序组的元素,决定是继续
2016-06-22 11:09:17
256
原创 【剑指offer】包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。分析:定义一个的栈用于保存最小值,每次进栈一个元素就与当前最小值比较,判断是进栈最小值还是当前值,用以保证栈中每个位置对应的都是数据栈数据对应的最小值;出栈时,数据栈与最小值栈都出栈一个元素,用以保证数据栈与最小值栈最小值的统一。实现:import java.util.Sta
2016-06-22 11:03:17
288
原创 【剑指offer】顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.分析:
2016-06-21 21:19:31
249
原创 【剑指offer】二叉树的镜像(递归+非递归)
题目:操作给定的二叉树,将其变换为源二叉树的镜像。 分析:求二叉树镜像,即将二叉树的左右子树交换,直至叶子结点。实现:(递归)public void Mirror(TreeNode root) { if (root == null) { return; } if (root.left == null && root.right == null) {
2016-06-21 20:32:19
262
原创 【剑指offer】树的子结构
题目:输入两颗二叉树A,B,判断B是不是A的子结构。分析:判断两棵树是否相包含,可以从头结点开始比较,如果比较得到相同的结点,递归比较左右是否相同。实现:public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean
2016-06-20 21:46:51
221
原创 【剑指offer】合并两个排序的链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。分析:两个链表已是递增,只需要从头遍历,将较小的结点插入新链表,移动指针,继续比较即可。简单程序要注意鲁棒性。实现:public ListNode Merge(ListNode list1, ListNode list2) { if (list1 == nul
2016-06-20 21:23:11
273
原创 【剑指offer】反转链表(递归+非递归)
题目:输入一个链表,反转链表后,输出链表的所有元素。分析:反转链表只需改变链接方向,改变方向时需要将原本指向后一个结点的链接方向指向前一个结点,因此需要记录下三个结点。实现:public ListNode ReverseList(ListNode head) { ListNode cur = head; ListNode next = null; Li
2016-06-20 21:04:47
2325
原创 【剑指offer】(扩展)求链表中间结点
题目:求链表中间结点,如果链表结点数为奇数,返回中间结点;如果链表结点为偶数,返回中间两个结点中的任意一个。分析:首先想到的方式还是遍历一次求出节点个数,第二次遍历走一半个数得到中间结点。灵活应用快慢指针,快指针每次走2步,慢指针每次走1步,快指针走到链表尾部时,慢指针走到中间。实现:public static ListNode find(ListNode
2016-06-20 20:34:04
420
原创 【剑指offer】链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。分析:链表只能从链表头结点向后一个个访问,要求倒数第K个,需要知道一共有多少个,进而知道倒数第K个是正数多少个。求个数需要先遍历一遍。最先想到的方式往往不是最优的,可以进一步改进。链表的题目要结合两个指针快慢走操作,两个指针一次遍历可以找到倒数第K个,可以先让一个走K-1步,一个不动,此时两个相差K步,之后两个指针同时
2016-06-20 20:13:33
284
原创 【深入理解java虚拟机 JVM】Java内存结构
方法区和堆是由所有线程共享的数据区。Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。(1).程序计数器:一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。程序的分支、循环、跳转、异常处理以及线程恢复等基础功能都是依赖程序计数器来完成。Java虚拟机的多线程是通过线程轮流切换并分配处理器执
2016-06-20 13:21:47
421
原创 【深入理解Java虚拟机JVM】java如何实现跨平台
把CPU处理器与操作系统的整体叫平台,每种CPU都有其特定的指令集,不同的操作系统支持不同CPU的指令集。语言跨平台是编译后的文件跨平台,而不是源程序跨平台。.java经过编译器(与平台无关)编译为.class文件,再根据解释器(与平台相关)解释执行。Java是解释执行的,编译为中间码的编译器与平台无关,编译生成的中间码也与平台无关(一次编译,到处运行),中间码再由解释器解释执行,解释器是
2016-06-20 11:24:17
3846
原创 【剑指offer】调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。分析:数组的题目,调整位置需要移动元素,时间复杂度为O(n^2),因此通常需要另辟蹊径。设定两个指针指向数组头尾,移动指针,达到判断条件时交换两个元素,直至两个指针相遇或交错。小技巧:判断奇数偶数使用位与操作。实现:pub
2016-06-19 20:34:59
269
原创 【剑指offer】O(1)时间删除链表结点
题目:给定单向链表的头结点和一个结点,定义一个函数在O(1)时间内删除该结点。分析:删除链表结点常规做法为:按照链表特点从头结点找到该节点前一个结点,通过移动指针将指定结点从链表摘除,时间为O(n);更简单方式为:通过已知的要删除结点,将下一个结点的值复制到该结点,再移动指针从链表摘除下一个结点,模拟删除该阶段操作,时间为O(1);链表操作要注意链表节点的定义方式;头结
2016-06-19 20:12:00
300
原创 【剑指offer】(扩展)大数相加
问题:实现一个加法,将两个大数相加,不使用BigInteger。分析:使用字符串或者数组,实现每位相加进位,要注意两个数对齐及最终进位的情况。首先将两个字符串倒置,方便补0将位数对齐及逐位相加。并且使用StringBuffer方便字符串修改。注意:字符实现逐位相加,要将字符转为为数值或求出字符表示的数值大小。实现:public String bigAdd
2016-06-19 15:39:31
911
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人