铁锤的Blog 
  • Home
  • Archives
  • Categories
  • Tags
  • About
  •     

菜鸟面试记录

菜鸟面试记录一面 Java内存模型说一下(当时说错了,说的是JVM内存模型,但是面试官还是顺着往下问了) Java怎么样算内存泄漏 垃圾回收算法 垃圾回收器 CMS的垃圾回收过程 mysql的索引 mysql的锁,行锁,表锁怎么加 CAS原理 如何解决CAS的ABA问题 Java中的锁机制 线程池,详细说明其中参数 Spring容器启动过程 记不清了。。 二面 项目的介绍 HashMap,HashTable的区别,哪个用的多 ConcurrentHashMap效率高的原因,分段锁是分多少段 Mysql索引 JDK源码是否了解 开源项目是否有了解 一个智力题,分布不均匀的香两根,每根燃烧完需要1小时,如何测出15分钟的时间 三面 hash表的概念,作用 Hashmap的两个默认参数作用,initCapcity,loadFactor 为什么initCapcity默认是2的倍数,如果初始化时是奇数会怎么样 LoadFactor的作用,为什么默认是0.75,设置成别的有什么影响 HashMap,Hashtable区别 Hashtable是加了对象锁保证线程安全,那么加了对象锁一定线程安全吗
 2018-08-25   面试    面试 

Https原理

Https 原理https://www.cnblogs.com/zhangshitong/p/6478721.html https://www.jianshu.com/p/55e402bcbc18 概括 https的通信主要是两段加密的过程,客户端和服务端的通信要保证安全则需要使用密钥对传输内容进行加密。因为非对称加密算法的效率低所以采取对称加密算法。 问题提出1. 那么就出现了第一个问题:数据密钥怎么给客户端?肯定是要加密的,那么用什么方法,对称加密算法吗,那么问题就来了,解密数据密钥的密钥怎么传给客户端?再设计一层嘛?所以行不通。那么就用非对称加密,服务端用私钥加密数据密钥,而客户端用自己的服务端发给他的公钥进行解密拿出数据密钥。 2. 那么如果有个中间人是不是整个计划也就泡汤了?怎么防止这种情况?就是怎么保证我拿到的公钥是我想访问的服务器的公钥?把公钥放到一个第三方权威机构,也就是CA中心。CA中心给服务器颁发权威证书,也就是CA中心把服务端需要获取数据密钥的公钥用自己的公钥加密后的东西(很绕。。)。CA中心的公钥就在操作系统或浏览器中可查。 3. 那么即便证书是合法的也不能证
 2018-08-16   编程  网络    http 

equals()与hashCode()关联总结

1. equals()1.1含义 默认代表两个对象的引用是否相等,等同于 ==。但是一般的覆盖行为是为了使两个对象逻辑相等。 Point point1 = new Point(0,0); Point point2 = new Point(0,0); point1.equals(point2); //我们希望这个结果是相等的,因为他们在同一点上,尽管他们的对象引用不同。 1.2 性质 自反性 :非null情况下x.equals(x)永远返回true。 对称性 : x.equals(y) 和 y.equals(x)的值相同 传递性:x.equals(y) 为true y.equals(z) 为true 那么 z.equals(x) 为true 一致性:对于一个信息未变的对象调用equals()方法返回的结果一致。 2. hashCode()2.1含义 用于散列集合的使用。 2.2 约定 在应用程序的执行期间,只要equals()操作所用到的信息未发生变化,那么hashCode()的值应当一致。 如果两个对象是equals()的,那么他们的hashCode()方法值一定相同。
 2018-08-14   Java  编程    Java 

LeetCode-Median of Two Sorted Arrays

LeetCode:Median of Two Sorted Arrays题目: 给两个排过序的数组,找出两个数组所有元素的中位数,要求时间复杂度为O(log(m+n))。 例子: Example 1: nums1 = [1, 3] nums2 = [2] The median is 2.0 Example 2: nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5 思路: 其实这个题要是没有时间复杂度的限制很简单,但是有了这个时间复杂度的限制,那么可以看到遍历都是无法解决这个问题的,既然是排过序那么首先想到二分查找,但是怎么找到中位数呢。 这里就要说下中位数的概念了,一个数组arr的中位数代表什么?代表了 1. len(0~i-1) == len(i~arr.length-1) 2. arr[i-1] <= arr[i] 因此转换成两个数组这个性质也是不变的,下面讨论两个有序数组A,B A[0]...A[i-1] | A[i]...A[m-1] B[0]...B[j-1] | B[j]...B[n-1
 2018-08-10   编程  算法    算法  Leetcode 

LeetCode-Maximum Product Subarray

LeetCode: Maximum Product Subarray题目: 给一个数组,找出这个数组的最大子数组的乘积 例子: Example 1: Input: [2,3,-2,4] Output: 6 Explanation: [2,3] has the largest product 6. Example 2: Input: [-2,0,-1] Output: 0 Explanation: The result cannot be 2, because [-2,-1] is not a subarray. 思路: 其实可以明显感觉出这个题和最大子数组和有很大关系,但是区别在于乘积的话如果有偶数个负数,之前最小的乘积也可能是最大的。因此这个题就需要多保存一个值,那就是最小值。 代码:class Solution { public int maxProduct(int[] A) { if (A.length == 0) { return 0; } int maxherepre = A[0];
 2018-08-10   编程  算法    算法  Leetcode 

LeetCode-House Robber

LeetCode:House Robber题目: 给你一个数组,从中取值,不能连续取相邻的值,求这个数组可取的最大值。 例子: Example 1: Input: [1,2,3,1] Output: 4 Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3). Total amount you can rob = 1 + 3 = 4. Example 2: Input: [2,7,9,3,1] Output: 12 Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1). Total amount you can rob = 2 + 9 + 1 = 12. 思路: 这个题若想暴力求解情况是很复杂的,因为要考虑要当前的值,就不能要左右的值。若用DP的思维,这个题就很简单了,就考虑当前的值拿不拿,而拿与不拿取决于之前不拿的最
 2018-08-10   编程  算法    算法  Leetcode 

LeetCode-Delete and Earn

LeetCode: Delete and Earn题目: 给一个数组,可以有这样的操作,如果你拿了nums[i]的值,则你现在有nums[i]的积分,但是你要把数组中值为nums[i]-1或nums[i]+1的值都删掉。返回一个该数组拿值得到最大积分的方式。 例子: Example 1: Input: nums = [3, 4, 2] Output: 6 Explanation: 拿4所以3被删掉了,而还剩2,所以最终为6 Example 2: Input: nums = [2, 2, 3, 3, 3, 4] Output: 9 Explanation: 如果拿所有的2的话,因为要删掉所有的3,拿4同理,整个数组最大值为8;拿所有的三个话,2,4被删,整个数组最大的值为9,所以是9 思路: 这个题乍一看很花,但是隐隐觉得和HouseRobber有一些关系,想来想去感觉把相同的值加起来不能取相邻的不就是HouseRobber嘛。但是这里少考虑了数组中不止存在相邻的值。所以这个做法行不通。但是换个思路想,因为限制了nums[i]的最大值,所以我们可以结合一个桶,将所有相同的值归类
 2018-08-10   编程  算法    算法  Leetcode 

LeetCode-Remove Duplicates from Sorted Array II

LeetCode:Remove Duplicates from Sorted Array II题目: 给一个排好序的数组,其中有重复元素,要求用O(1)的空间复杂度修改输入的数组。并返回数组最后有效长度。 例子: Example 1: Given nums = [1,1,1,2,2,3], Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively. It doesn't matter what you leave beyond the returned length. Example 2: Given nums = [0,0,1,1,1,1,2,3,3], Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respe
 2018-08-09   编程  算法    算法  Leetcode 

CentOS下自动清理超过10天的日志文件

CentOS下自动清理超过10天的日志文件前言 通常来讲一个线上服务都会在服务端生成按日期滚动的日志文件,但是这里有个隐患,因为服务是不停运转的,所以总有一天日志文件可能把服务器硬盘撑满。所以就有了自动清理达到某些条件的日志文件自动清理掉。 find命令 首先我们肯定需要定位到需要清除的文件,这里就需要一个很有用的命令find。正好学习下。 #语法: find(选项)(参数) #选项: -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算; -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; -atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算; -cmin<分钟>:查找在指定时间之时被更改过的文件或目录; -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算; -daystart:
 2018-08-08   编程  linux    linux 

ThreadLocal线程安全问题

前言 ThreadLocal大家可能或多或少接触过,多线程编程中也都把它作为实现线程安全的一种方式,至于实现细节不过多在这里讨论,主要是通过一个线程id和一个Map做对应,用空间换取线程安全的一种方式。所以在传统后端开发使用的过程中一般都用它来存储用户的一些信息,比如认证成功后就把用户的信息存入到ThreadLocal中,在后面的业务逻辑中可以取到对应的用户信息做相关操作。那么这样使用一定能保证线程安全吗? 问题发现 在一次项目的service中使用了@Async这样一个异步方法,方法中使用了ThreadLocal获取用户的信息,然而却出现了与预期不一致的结果。Spring的@Async的本质也是使用线程池管理这样的请求,从而达到异步的目的。 问题根源 到这儿其实对线程池比较了解的已经明白了应该,对于一个使用ThreadPoolExecutor类创建的线程池来讲,有线程闲置这样一个概念,新请求来了后不是为每一个请求创建一个新的线程,而是若当前池中有闲置的线程,则使用该闲置的线程。Web容器其实类似Jetty也是一样的会复用线程以提高效率。但是这个效率的提高和ThreadLocal的
 2018-08-06   Java  Thread    Thread 
1234567

Search

Hexo Fluid
 总访问量 次   总访客数 人