java程序员编程面试基础部分

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

给你java学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

2.1.1 简单讲一下java的跨平台原理

由于各操作系统(windows,linux)支持的指令集,不是完全一致的,就会让我们的程序在不同的操作系统上要执行不同程序代码,java开发了适用不同操作系统及位数的java虚拟机来屏蔽系统之间的差异,提供了统一的接口,对于我们java开发者而言,你只需要在不同的系统上安装对应的不同java虚拟机,这时你的java程序只要遵循java规范就可以在所有的操作系统上面运行java程序。

java通过不同的系统,不同版本,不同位数的java虚拟机(jvm),来屏蔽不同系统指令集差异而对外体现统一的接口(java API),对于我们普通java开发者而言,只需要按照接口开发即可,如果我系统需要部署不同的环境时,只需要在系统上按照对应版本虚拟机即可。

2.1.2 搭建一个java开发环境的步骤

java开发环境需要些什么?

1. 适用我们开发环境的jdk

2. 对应开发环境eclipse

3. 需要web服务器(tomcat)

1)、下载对应组件

2)、安装

jdk,安装正常流程即可,配置我们的JAVA_HOME,因为后面的eclipse和tomcat会依赖这个变量。

Eclipse正常解压就OK,设置workspace的默认编码

Tomcat正常解压就ok,把tomcat集成到eclipse中,安装插件就OK,

....

svn/git

2.1.3 讲一下java中int数据占几个字节

java中有几种基本数据类型?

8种

2.1.4. 面向对象的特征有哪些方面

有四大基本特征:封装、抽象、继承、多态

1)封装,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。

张三这个人,他的姓名等属性,要有自己提供的获取和改变的方法来操作,(getter,setter)

2)抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。

就是把现实生活中的对象,抽象为类。

3)在定义一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承

4)多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

靠的是父类或者接口的引用变量可以指向子类或者具体实现类的实例对象,而程序调用的方法在运行期间才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型定义的方法。

原则:围着比较抽象问题的时候,要举例说明

2.1.5 有了基本数据类型,为什么还要包装类型?

基本数据类型,java中提供了8中基本数据类型,boolean int float等

包装类型:每一个基本数据类型都会一一对应一个包装类型,

boolean—Boolean

int—Integer

装箱和拆箱

把基本的数据类型转换成对应的包装类型,

Integer i = 1;自动装箱,实际上在编译时会调用Integer.valueOf方法来装箱

拆箱:就是把包装类型转换为基本数据类型, 基本数据类型 名称 = 对应的包装类型。

int j = i 自动拆箱

int j = i.intValue()手动拆箱

自动拆箱:实际上会在编译调用intValue

java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性。

Null Integer-->null int-->0 用Integer和int分别表示Person这个类的id

max 最大值

min 最小值

缓存值:对象缓存,Integer i = 1; Integer j = 1;--> i == j;

缓存-128~127

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

2.1.6 说一下“==”和equals方法究竟有什么区别

非常经典的一个面试题?先说清楚一个,再说另外一个?

==用来判断两个变量之间的值是否相等,变量就可以分为基本数据类型变量,引用类型,如果是基本数据类型的变量直接比较值而引用类型要比较对应的引用的内存的首地址。

equals:用来比较两个对象长得是否一样,判断两个对象的某些特征是否一样。实际上就是调用对象的equals方法进行比较。

2.1.7 讲一下String和StringBuilder的区别,StringBuffer和StringBuilder的区别?

1)在java中提供三个类String、StringBuilder、StringBuffer来表示和操作字符串,字符串就是多个字符的集合。

String是内容不可变的字符串,Stirng底层使用了一个不可变的字符数组(final char[]),

String str = new String(“bbb”); ----private final char value[]

而StringBuilder和StringBuffer是内容可以改变的字符串,StringBuilder和StringBuffer底层使用的是可变数组(没有使用final来修饰)----char value[]

2)最经典就是拼接字符串

1.String进行拼接String c = “a”+”b”;

2.StringBuilder或StringBuffer

StriingBuilder sb = new StringBuilder();sb.append(“a”).append(“b”);

拼接字符串不能使用String进行拼接,要使用StirngBuilder或者StringBudder

3)Stringbuilder是线程不安全的,效率较高,而StringBuffer是线程安全的,效率较低。

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

2.1.8 将一下java集合

java中的集合为value,key-value(Map)两种

存值的又分为List和Set

List是有序的,可重复的。

Set是无序的,不可重复的。根据equals和hashcode判断,也就是如果一个对象要存储在Set中,必须重写hashcode方法。

存key-value的为Map

2.1.9 ArrayList和LinketSet的区别

List常用的ArrayList和LinkedList。区别和使用场景

ArrayList底层使用的是数组,LinkedList使用的是链表。

数组查询具有索引查询特定元素比较快,而插入和删除和修改比较慢(数组在内存中是一块连续的内存,如果删除插入需要移动内存)

链表不要求内存是连续的,在当前元素中存放下一个或者上一个的地址,查询时需要从头部开始,一个个的找,所以效率低,插入时不需要移动内存,只需改变指向即可,所以插入效率或者删除效率高。

ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList使用在查询比较少而插入和删除比较多的情况

2.1.10 讲一下HashMap和HashTable的区别?HashMap和ConcurrentHashMap的却别

1)HashMap和HashTable都可以使用来存储key-value的数据。

2)HashMap是可以把null作为key或者value的,而hashTable是不可以的

3)HashMap是线程不安全的,效率高。HashTable是线程安全的,效率较低。

通过把整个Map分为N个segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。

2.1.11 实现一个拷贝文件的工具类使用字节流还是字符流。

我们拷贝的文件不确定是只包含字符流,有可能有字节流(图片、声音、图像等)。为了考虑通用性,要使用字节流。

2.1.12 讲一下线程的几种实现方式?

1.实现方式:

1)通过继承Thread类实现一个线程。

2)通过实现Runable接口一个线程

继承扩展性不强,java只支持单继承,如果一个类继承Thread就不能继承其他的类了。

2.启动方式:

Thread t = new Thread();继承了Thread的对象/实现Runable的对象。

t.setName()设置一个线程名称。

t.start();

启动线程使用start方法,而启动了以后执行的是run方法。

3.怎么区分线程,在一个系统中有很多线程,每个线程都会打印日志,我区分哪个线程打印的怎么办。

t.setName()”设置一个线程名称”;这是一种规范,在创建线程完成后,都需要设置名称。

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

2.1.13 有没有使用过线程并发库?

简单了解过。创建线程池。

java通过Excute提供四个静态方法创建四种线程池,分别为:

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,灵活回收空闲线程,无可回收,则新建线程。

newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

线程池的作用:

1)限定线程的个数,不会导致由于线程过多导致系统运行缓慢或者崩溃。

2)线程池不需要每次创建或者销毁,节约资源。

3)线程池不需要每次创建,响应时间快。

连接池也是一样

2.1.14 讲一下什么是设计模式?常用的设计模式有哪些?

设计模式就是经过前人无数次的实践总结的,设计过程中可以反复使用的,可以解决特定问题设计方法。

单例模式:懒汉模式、 饿汉模式

1)构造方法私有化,让除了自己类能创建外其他地方都不能创建

2)在自己的类中创建一个单实例(饿汉模式是一出来就创建单实例,而懒汉模式需要的时候才创建)

3)提供一个方法获取该实例对象(创建需要进行方法同步)

工厂模式:Spring IOC 就是使用了工厂模式

对象的创建交给一个工厂去创建

代理模式:Spring AOP 就是使用的动态代理

包装模式:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,112评论 0 62
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,652评论 18 399
  • 今天中午吃饭,好友跟我诉说了许多她入职后的辛苦,比如给老板跑腿像个打杂的,感受到好像永远触及不到核心领域的失望,难...
    洁warm阅读 769评论 2 2
  • 为什么我们不能在第一次选择的时候就可以知道这个选择是对的,避免了以后反复的选择和尝试,但是仔细想想如果第一次选择时...
    Tweetyzhang阅读 164评论 0 0
  • 最近看见有个APP的图片浏览页面的每个pageControl小圆点就是当前的scrollerview的一张图片,觉...
    徐老茂阅读 6,730评论 3 10