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

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

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

Java开发环境需要些什么?

1、适用于我们开发环境的jdk

2、对应开发环境eclipse、idea

3、还需要web服务器(tomcat)

一、下载对应组件

二、安装

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

idea(Eclipse)正常解压就ok,设置(eclipse)workspace的默认编码

Tomcat 正常解压就ok,把tomcat集成到(idea)eclispe中,安装插件就OK。

.......

Svn/git

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

java中有 8 种数据类型(byte、int、long、short、char、float、double、Boolean)

Int占 4个字节,32位

Boolean 1位

1.14、面向对象的特征有哪些方面

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

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

抽象:抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,

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

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

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

Object obj = new xxx();

UserDao userDao = new UserDaoJdbcImpl();

UserDao userDao = new UserDaoHibernateImpl();

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

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

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

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

boolean ----->Boolean

Int -------->Integer

装箱和拆箱

装箱:把基本的数据类型转换成对应的包装类型.

Integer .valueOf(1)

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

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

Integer i = 1;

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

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

==用来判断两个变量之间的的是否相等。变量就可以分为基本数据类型变量,引用类型。

如果是基本数据类型的变量直接比较值,引用类型要比较对应的引用的内存的首地址

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

 1.17、讲一下String和StringBuilder的区别(final)?StringBuffer和StringBuilder的区别?

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

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

String str =new String(“bbbb”);

而StringBuillder StringBuffer,是内容可以改变的字符串。StringBuillder StringBuffer底层使用的可变的字符数组(没有使用final来修饰)

1.2.最经典就是拼接字符串。

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

1.2.2、StringBuilder或者StringBuffer

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

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

1.3、StringBuilder是线程不安全的,效率较高.而StringBuffer是线程安全的,效率较低

1.18、讲一下java中的集合

一、Java中的集合分为value,key--vale(Conllection Map)两种。

存储值有分为ListSet.

List是有序的,可以重复的。

Set是无序的,不可以重复的。根据equals和hashcode判断,也就是如果

一个对象要存储在Set中,必须重写equals和hashCode方法。

存储key-value的为map.

二、ArrayList和LinkedList的区别?

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

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

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

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

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

1.19、讲一下HashMap哈HashTable的区别?HashTable和ConcurrentHashMap的区别

相同点:HashMap和HasheTalbe都可以使用来存储key--value的数据。

区别:

1、HashMap是可以把null作为key或者value的,而HashTable是不可以的。

2、HashMap是线程不安全的,效率较高。而HashTalbe是线程安全的,效率较低。

?我想线程安全但是我又想效率高?

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

 

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

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

1.21、讲一下线程的几种实现方式?启动方式?区分方式?

①实现方式

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

2、通过实现Runnable接口实现一个线程

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

②怎么启动?

Thread thread = new Thread(继承了Thread的对象/实现了Runnable的对象)

thread.setName(“设置一个线程名称”);

thread.start();

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

③怎么区分线程?在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个线程打印的怎么办?

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

 1.22、有没有使用过线程并发库?

简单了解过?

JDK5中增加了Doug Lea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性。 java.util.current包中提供了对线程优化、管理的各项操作,使得线程的使用变得的心应手。该包提供了线程的运行,线程池的创建,线程生命周期的控制.

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

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

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

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

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

1.23、线程池的作用

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

2、线程池不需要每次都去创建或销毁,节约了资源、

3、线程池不需要每次都去创建,响应时间更快。(连接池也是一样)

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

 

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

单例(饱汉模式、饥汉模式)

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

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

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

工厂模式:Spring IOC就是使用了工厂模式.  对象的创建交给一个工厂去创建。

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

java(一) 基础部分的更多相关文章

  1. Java以基础类库

    Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...

  2. Java SE 基础:注释

    Java SE 基础:注释 一.注释定义 用于解释说明程序的文字. 二.注释的作用 1.解释说明程序,提高程序的可读性 2.可以帮助我们调试程序:通过注释代码块,检测错误位置 三.格式 1.单行注释 ...

  3. Java SE 基础:标识(zhì)符

    Java SE 基础:标识(zhì)符 一.标识符定义 标识符,就是给类.接口.方法.变量等起名字时的字符序列 二.组成规则与注意事项 1.组成规则 英文大小写字母 数组 $ 和 _ 2.注意事项 不 ...

  4. Java SE 基础:常用关键字

    Java SE 基础:常用关键字 常用关键字表

  5. java IO基础操作

    java IO基础,通熟易懂,好久没复习java 基础了.这里是传送门... http://www.cnblogs.com/nerxious/archive/2012/12/15/2818848.ht ...

  6. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

  7. [转]Java多线程干货系列—(一)Java多线程基础

    Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...

  8. Java 入门基础

    第零章 开始学习Java 1.Java基础最重要 Java学习中,Java的基础.Java面向对象是最关键的,而一些像框架技术等都是建立在基础之上东西. 多多处理问题,积累处理问题的能力. Java框 ...

  9. Java多线程基础:进程和线程之由来

    转载: Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够 ...

  10. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

随机推荐

  1. jmeter入门简介(一)

    简介 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试CS/BS的软件.它可以用来测试静态和动态资源的性能,可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析 ...

  2. string转可空类型

    string类型转可空类型 string.IsNullOrEmpty(str) ? (int?)null : int.Parse(str) 此处要注意将null转为可空的类型才可以,不然会报错

  3. 反射调用DLL

    public static type GetClassType(string ClassName,string dllname) { Type ClassType =null; foreach(Ass ...

  4. contains用法

    判断List<UserInfoDto>里是否有重复的UserInfoDto,不能使用contains 例: List<UserInfoDto> list = new Array ...

  5. 初次见面,C++(的博客作业)

    懵懂无知.编程是什么?要是你在两个月前问我这个问题,你可能只会得到一个回答“天知道”.依稀记得在初中,上电脑课的老师曾经触及过编程的皮毛(那时候也没有编程的概念,听的似懂非懂),旁边一个同学却在十分熟 ...

  6. 从零开始学spring cloud(十) -------- hystrix简单代码示例

    一.官网文档阅读 较低级别的服务中的服务故障可能导致级联故障一直到用户. 当对特定服务的调用超过circuitBreaker.requestVolumeThreshold(默认值:20个请求)且失败百 ...

  7. 如何通过SSH工具(SecureCRT、XShell)连接Vmware虚拟机中的Linux(CentOS7)

    本文主要解决的问题:如何通过SSH工具连接到VMWare中改的Linux系统(CentOS7) 核心内容:Linux中需要安装openssh-server,并且启动了openssh-server服务. ...

  8. XA-分布式事物

    1.什么是分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成 ...

  9. 修改Tomcat控制台标题

    1.在tomcat的bin目录下新建文件setenv.bat 2.重启tomcat即可

  10. 进程哪一个cpu

    问题:我有个 Linux 进程运行在多核处理器系统上.怎样才能找出哪个 CPU 内核正在运行该进程? 当你在 多核 NUMA 处理器上运行需要较高性能的 HPC(高性能计算)程序或非常消耗网络资源的程 ...