![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试问题
囧囧有神璐璐
天道酬勤
展开
-
面试
先来看下自己记录的面试材料:一、阿里巴巴面试第一个:阿里面试都问什么? :(55分钟)1、开发中Java用了比较多的数据结构有哪些?2、谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?这些数据结构中是线程安全的吗?假如你回答HashMap是线程安全的,接着问你有没有线程安全的map,接下来问了conurren包。3、对JVM熟不熟悉?简单说说类加载过程,里面执行...原创 2018-03-05 15:12:42 · 461 阅读 · 0 评论 -
Java_观察者模式(Observable和Observer)
一、观察者模式介绍在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。如果画面A是显示数据库里面的数据,而画面B修改了数据库里面的数据,那么这时候画面A就要重新Load。这时候就可以用到观察转载 2017-08-11 10:11:41 · 157 阅读 · 0 评论 -
面试小结之综合篇
介绍一下你熟悉的几种排序算法以及它们的时间复杂度。冒泡排序它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换。算法的平均时间复杂度为O(n^2)。但是若在某趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,即为正序。则冒泡排序过程可在此趟扫描后就终止,基于这种考虑,提出转载 2017-08-03 19:20:14 · 301 阅读 · 0 评论 -
面试小结之IO篇
谈谈对Java IO的认识。对于I/O操作来说, 其根本的作用在于传输数据。输入和输出指的仅是数据的流向,实际传输是通过某些具体的媒介来完成的,其中最主要的是文件系统和网络连接;早期的java.io包把I/O操作抽象成数据的流动,进而有了流的概念;在Java NIO中,则把I/O操作抽象成端到端的一个数据连接,这就有了通道(channel)的概念;Java中最基本的流是在字节这个层次上进行转载 2017-08-03 19:15:11 · 772 阅读 · 0 评论 -
面试小结之Elasticsearch篇
Elasticsearch是如何实现Master选举的?Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分;对所有可以成为master的节点(node.master: true)根据nodeId字典排序,每次选举每个节点都把自己所知道节点排转载 2017-08-03 18:51:56 · 2372 阅读 · 0 评论 -
Oracle 中 union与union all
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。Union:对两个结果集进行并集操作,不包括重复行,同时进行转载 2017-08-03 18:48:10 · 282 阅读 · 0 评论 -
详细解析oracle中left join,right join,inner join用法
[/color][color=green]表A记录如下: aID aNum 1 a11 2 a22 3 a33 4 a44 5 a55表B记录如下: bID bName 1 b11 2 b22 3 b33 4 b44 8 b88创建这两个表SQL语句如下: CREATE TABLE a aID转载 2017-08-03 18:45:55 · 1077 阅读 · 0 评论 -
Oracle中distinct的用法实例以及Oracle distince 用法和删除重复数据
Oracle中distinct的用法实例摘要:此外,distinct 会对返回的结果集进行排序 所以会大大影响查询效率,大数据集时比较明显 。所以,最好和order by 结合使用,可以提高效率 。select distinct a,b,c from t;表t里列的顺序为c,a,b ,则distinct 排序时是按前者还是后者来呢? distinc转载 2017-08-03 18:26:07 · 489 阅读 · 0 评论 -
spring ioc原理(看完后大家可以自己写一个spring)
版权声明:本文为博主原创文章,未经博主允许不得转载。控制反转/依赖注入 最近,买了本spring入门书:spring In Action 。大致浏览了下感觉还不错。就是入门了点。Manning的书还是不错的,我虽然不像哪些只看Manning书的人那样专注于Manning,但怀着崇敬的心情和激情通览了一遍。又一次接受了IOC 、DI、AOP等Spring核心概念。 先就IOC转载 2017-08-03 16:01:53 · 158 阅读 · 0 评论 -
Oracle Cursor的使用
When Oracle Database executes a SQL statement, it stores the result set and processing information in an unnamedprivate SQL area. A pointer to this unnamed area, called acursor, lets youretrieve t转载 2017-08-03 16:00:33 · 393 阅读 · 0 评论 -
java笔记--关于线程同步(5种同步方式)
何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。 1.同步方法 即有synchronized关键字修饰的方法。 由于j转载 2017-08-09 21:06:24 · 176 阅读 · 0 评论 -
Java设计模式之模板方法模式(Template Method)
本文继续介绍23种设计模式系列之模板方法模式。概述模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结转载 2017-08-09 20:40:19 · 165 阅读 · 0 评论 -
JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。 JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。 1、for循环遍历listfor(int原创 2017-08-09 20:35:24 · 207 阅读 · 0 评论 -
Java中关于内存泄漏出现的原因汇总及如何避免内存泄漏(超详细版)
来先看看下面的例子,为什么会发生内存泄漏。下面这个例子中,A对象引用B对象,A对象的生命周期(t1-t4)比B对象的生命周期(t2-t3)长的多。当B对象没有被应用程序使用之后,A对象仍然在引用着B对象。这样,垃圾回收器就没办法将B对象从内存中移除,从而导致内存问题,因为如果A引用更多这样的对象,那将有更多的未被引用对象存在,并消耗内存空间。B对象也可能会持有许多其他的对象,那这些对象同样转载 2017-08-09 20:05:07 · 28115 阅读 · 9 评论 -
白话经典算法系列之六 快速排序 快速搞定
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序转载 2017-08-09 20:00:05 · 165 阅读 · 0 评论 -
java创建线程的三种方式及其对比
Java中创建线程主要有三种方式:一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。[java] view plain copy转载 2017-08-09 19:18:01 · 139 阅读 · 0 评论 -
JAVA运行时异常及常见的5中RuntimeExecption
总结常见:ClassCastException(类转换异常)IndexOutOfBoundsException(数组越界)NullPointerException(空指针)ArrayStoreException(数据存储异常,操作数组时类型不一致)还有IO操作的BufferOverflowException异常java运行时异常是可能在java虚拟机转载 2017-08-09 19:14:40 · 307 阅读 · 0 评论 -
java运行时异常与一般异常有何异同?
转自:http://blog.sina.com.cn/s/blog_6aefe425010187xq.htmlThrowable是所有Java程序中错误处理的父类,有两种资类:Error和Exception。 Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的转载 2017-08-11 12:11:01 · 551 阅读 · 0 评论 -
zookeeper常见面试题
zookeeper是如何保证事务的顺序一致性的zookeeper采用了递增的事务Id来标识,所有的proposal都在被提出的时候加上了zxid,zxid实际上是一个64位的数字,高32位是epoch用来标识leader是否发生改变,如果有新的leader产生出来,epoch会自增,低32位用来递增计数。当新产生proposal的时候,会依据数据库的两阶段过程,首先会向其他的server发出事转载 2017-07-27 12:51:20 · 1676 阅读 · 0 评论 -
spring 事务-使用@Transactional 注解(事务隔离级别)
先看下@Transactional可以配制那些参数及以其所代表的意义。isolation枚举org.springframework.transaction.annotation.Isolation的值事务隔离级别noRollbackForClass[]一组异常类,遇到转载 2017-07-27 12:52:01 · 459 阅读 · 0 评论 -
Java编程:String 类中 hashCode() 方法详解
hash 的定义Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。转载 2018-01-31 14:46:28 · 402 阅读 · 0 评论 -
133个Java常见面试题
经典的Java面试题,准备求职Java岗位的应届生可以看看https://github.com/it-interview/easy-java/blob/master/133%E4%B8%AAJava%E5%B8%B8%E8%A7%81%E9%9D%A2%E8%AF%95%E9%A2%98.md原创 2017-10-19 16:11:15 · 546 阅读 · 0 评论 -
软件架构师面试题
软件架构师插件的实现原理插件有几部分组成如何实现插件安装,卸载,启用,禁用?安装,卸载,启用,禁用怎样实现不停机,不关闭服务的情况进行?口述如何设计一个MVC框架怎样实现 URL 路由怎样实现控制器怎样实现视图怎样实现模型口述如何设计一个SOA框架框架分为几个部分?采用什么协议与框架原创 2017-09-01 10:02:04 · 5248 阅读 · 0 评论 -
[算法]找出单链表中的倒数第k个元素
解题思路:为了求出链表中的倒数第k个元素,最容易想到的方法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下去遍历一次就可以得到结果。不过这种方法需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二次遍历用于查找正数第n-k个元素。 如果沿从头至尾的方向从链表中的某个元素开始,遍历k个元素刚好到达链表尾,那么元素就是要找的倒数第k个元转载 2017-09-01 09:41:42 · 581 阅读 · 0 评论 -
面试总结
Java相关Java GC机制(重要程度:★★★★★)主要从三个方面回答:GC是针对什么对象进行回收(可达性分析法),什么时候开始GC(当新生代满了会进行Minor GC,升到老年代的对象大于老年代剩余空间时会进行Major GC),GC做什么(新生代采用复制算法,老年代采用标记-清除或标记-整理算法),感觉回答这些就差不多了,也可以补充一下可以调优的参数(-XX:newRatio转载 2017-08-06 20:42:15 · 189 阅读 · 0 评论 -
JVM调优总结(这个总结得比较全面)
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355转载 2017-08-06 13:17:53 · 274 阅读 · 0 评论 -
SimpleDateFormat 的线程安全问题与解决方案
SimpleDateFormat 的线程安全问题SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 (text -> date)和标准化。但是 SimpleDateFormat 并不是一个线程安全的类,在多线程并发访问下会出现问题。通过以下代码进行检验,[java]转载 2017-08-06 13:10:17 · 618 阅读 · 0 评论 -
Java中Synchronized的用法
原文:http://blog.csdn.net/luoweifu/article/details/46613015 作者:luoweifu 转载请标名出处《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念synchronized.转载 2017-08-06 13:04:00 · 131 阅读 · 0 评论 -
java中ThreadLocal类的使用
ThreadLocal是解决线程安全问题一个很好的思路,ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,由于Key值不可重复,每一个“线程对象”对应线程的“变量副本”,而到达了线程安全。我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复转载 2017-08-06 12:37:02 · 247 阅读 · 0 评论 -
查看jvm内存使用命令
jmap (linux下特有,也是很常用的一个命令)观察运行中的jvm物理内存的占用情况。参数如下:-heap :打印jvm heap的情况-histo: 打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。-histo:live : 同上,但是只答应存活对象的情况-permstat: 打印permanent generation heap原创 2017-08-06 12:19:02 · 35264 阅读 · 0 评论 -
图解JAVA对象的创建过程
关于对象的创建过程一般是从new指令(我说的是JVM的层面)开始的(具体请看图1),JVM首先对符号引用进行解析,如果找不到对应的符号引用,那么这个类还没有被加载,因此JVM便会进行类加载过程(具体加载过程可参见我的另一篇博文)。符号引用解析完毕之后,JVM会为对象在堆中分配内存,HotSpot虚拟机实现的JAVA对象包括三个部分:对象头、实例字段和对齐填充字段(具体内容请看图2),其中要注意的是转载 2017-08-06 12:08:41 · 806 阅读 · 0 评论 -
Java中创建对象的几种方式
作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字、使用Class类的newInstance方法、使用Constructor类的newInstance方法、使用Clone方法、使用反序列化。使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的转载 2017-08-06 12:00:13 · 492 阅读 · 0 评论 -
阿里二面准备(Java 研发)
感觉有机会进行二面(原谅我没来由的自信,~~),准备一下。参考了牛客网上 30 多个面经帖,这是目前我能找到的几乎所有的问题。私以为如果能全部掌握,基本就能收割 offer 了。时间有限的话,针对自己的情况优先选最有可能被问到的问题来准备。有少部分内容我直接忽略了,可以参考 interview/ 目录下之前做的总结。注意:因为我并没有系统的学习多线程编程,所以并发相关的问题我只是大转载 2017-07-27 13:16:20 · 11455 阅读 · 4 评论 -
集群/分布式环境下5种session处理策略
转载自:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread前言在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器转载 2017-07-27 13:00:18 · 203 阅读 · 0 评论 -
集群间Session共享问题解决方案
两个基本概念的生命周期session:当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会保存在服务端.此时session对象处天NEW STATE状态,如果调用 session.isNew()则返回true.当服务器处理完后,会将sessionID同reponse 一起传回客转载 2017-07-27 12:54:04 · 691 阅读 · 0 评论 -
Java HashMap工作原理及实现
1. 概述从本文你可以学习到:什么时候会使用HashMap?他有什么特点?你知道HashMap的工作原理吗?你知道get和put的原理吗?equals()和hashCode()的都有什么作用?你知道hash的实现吗?为什么要这样实现?如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?当我们执行下面的操作时:123转载 2017-07-27 12:52:26 · 165 阅读 · 0 评论 -
throwable的子类
有error和exception原创 2017-08-09 19:13:12 · 670 阅读 · 0 评论 -
Java中的equals和hashCode方法详解
Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用。equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复。这里我们首先要明白一个问题:转载 2017-08-02 18:50:47 · 153 阅读 · 0 评论 -
Java创建对象的过程
Java创建对象的过程简单记录一下Java创建对象的过程,就是new一个对象的时候发生了哪些事情。Java程序执行的过程在此不作说明,对象的创建过程只是程序执行过程的一部分。有关整个程序执行的过程,等熟悉了虚拟机之后在作说明。对象创建过程简述Java中对象的创建就是在堆上分配内存空间的过程,此处说的对象创建仅限于new关键字创建的普通Java对象,不包括数组对象的创建。转载 2017-07-24 16:59:59 · 250 阅读 · 0 评论 -
java数据库连接(一)--从最简单地jdbc连接说起
JDBCJDBC全称"Java DataBase Connectivity",它是一套面向对象的应用程序接口(API),并且制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准的接口实现。通过使用JDBC技术,开发人员可以用纯Java语言和标准的SQL语句编写完整的数据库应用程序,真正地实现软件的跨平台。 本文地址:http://blog转载 2017-07-24 16:56:56 · 692 阅读 · 0 评论