首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

超详细的Java面试题总结(一)之Java基础知识

原文在我的博客上:原文博客地址 最近在备战面试的过程中,整理一下面试题。大多数题目都是自己手敲的,网上也有很多这样的总结。自己感觉总是很乱,所以花了很久把自己觉得重要的东西总结了一下。 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象: 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:性能比面向过程低 Java语言有哪些特点? 1,简单易学;2,面向对象(封装,继承,多态);3,平台无关性(Java虚拟机实现平台无关性);4,可靠性;5,安全性;6,支持多线程(C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程支持);7,支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的,因此Java语言不仅支持网络编程而且很方便);8,编译与解释并存; 什么是字节码?采用字节码的最大好处是什么?什么Java是虚拟机? 先看下java中的编译器和解释器: Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。 Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。 采用字节码的好处: Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。 什么是Java虚拟机 任何一种可以运行Java字节码的软件均可看成是Java的虚拟机(JVM) 什么是Java程序的主类?应用程序和小程序的主类有何不同? 一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。 什么是JDK?什么是JRE? JDK:顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。 JRE:普通用户而只需要安装JRE(Java Runtime Environment)来 来运行Java程序。而程序开发者必须安装JDK来编译、调试程序。 环境变量Path和ClassPath的作用是什么?如何设置这两个环境变量? Java环境变量PATH和CLASSPATH - 简书 http://www.jianshu.com/p/d63b099cf283 Java应用程序与小程序之间有那些差别? 简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。 字符型常量和字符串常量的区别 1) 形式上:字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符2) 含义上:字符常量相当于一个整形值(ASCII值),可以参加表达式运算字符串常量代表一个地址值(该字符串在内存中存放位置)3) 占内存大小字符常量只占一个字节字符串常量占若干个字节(至少一个字符结束标志) Java语言采用何种编码方案?有何特点? Java语言采用Unicode编码标准,Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。 构造器Constructor是否可被override 在讲继承的时候我们就知道父类的私有属性和构造方法并不能被继承,所以Constructor也就不能被override,但是可以overload,所以你可以看到一个类中有多个构造函数的情况。 重载和重写的区别 重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍,访问控制符public,protected,private,以及默认的区别 https://www.2cto.com/kf/201605/509637.html java中equals方法的用法以及==的用法 http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html> String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? 可变性 String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[]value,这两种对象都是可变的。线程安全性 String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。性能 每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。对于三者使用的总结: 如果要操作少量的数据用 = String单线程操作字符串缓冲区 下操作大量数据 = StringBuilder多线程操作字符串缓冲区 下操作大量数据 = StringBuffer 自动装箱与拆箱 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。 类、方法、成员变量和局部变量的可用修饰符 - http://blog.csdn.net/yttcjj/article/details/6939239 在一个静态方法内调用一个非静态成员为什么是非法的? 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。 在Java中定义一个不做事且没有参数的构造方法的作用 Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。 import java和javax有什么区别 http://www.cnblogs.com/EasonJim/p/6993139.html 接口和抽象类的区别是什么? 1.接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象的方法2.接口中的实例变量默认是final类型的,而抽象类中则不一定3.一个类可以实现多个接口,但最多只能实现一个抽象类4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定5.接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。 成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰; 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。 创建一个对象用什么运算符?对象实体与对象引用有何不同? new运算符,new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球) 什么是方法的返回值?返回值在类的方法里的作用是什么? 方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用:接收出结果,使得它可以用于其他的操作! 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么? 主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。 构造方法有哪些特性? 1,名字与类名相同;2,没有返回值,但不能用void声明构造函数;3,生成类的对象时自动执行,无需调用。 静态方法和实例方法有何不同? 静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制 对象的相等与指向他们的引用相等,两者有什么不同? 对象的相等 比的是内存中存放的内容是否相等而 引用相等 比较的是他们指向的内存地址是否相等。 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作。 什么是多态机制?Java语言是如何实现多态的?

优秀的个人博客,低调大师

java基础之自定义异常类及throw和throws的区别

一、异常的架构: Throwable类:所以异常类都是Throwable的子类,它派生两个子类 Error和Exception。 Error类:表示仅靠程序本身无法恢复的的严重错误,比如内存溢出,虚拟机错误等,这些异常除了尽力使程序安全退出外,我们并没有办法去解决,所以开发的时候我们更应该关注的是Exception Exception类:由java应用程序抛出和处理的非严重错误,如文件找不到,网络连接中断,数组下标越界等,它的不同的子类分别对应不同类型的异常 运行时异常:包括RuntimeException类及其子类,不要求程序员必须对它们做出处理,如果程序发生运行时异常,而我们并没有处理,会输出异常的堆栈信息,并终止程序运行 Checked异常(非运行时异常):除了运行时异常外的其他由Exception继承来的异常类,程序必须捕获或者声明抛出这种异常。否则程序无法编译通过,如如IOException、SQLException等异常 二、自定义异常的步骤: 当JDK提供的异常类型不能满足程序的需求时,我们可以自定义异常 1.定义一个普通类,并继承exception或RuntimeExceprion,继承Exceprtion的自定义异常为Checked异常(必须抛出或者try cacth),继承自RuntimeExceprion的自定义异常类为运行时异常 2.编写异常类的构造方法,并继承父类实现,常见的如下: /** * 自定义异常类 */ public class MyException extends Exception { public MyException() { } public MyException(String message) { super(message); } /** * * @param message 需要显示的异常信息 * @param cause 为Throwable或其子类的实例 */ public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } } 继承自Exception的自定义异常类 @Test public void getMessage() throws Exception { try { int a= 10/0; } catch (Exception e) { throw new MyException("10不能除以0"); } } 继承自Exception的异常类的测试 除了继承自Exception还可以继承RuntimeException,具体例子就不往下写了 三、throw和throws的区别 主要区别有以下三点: 1、作用不同:throw用于在程序中抛出异常;throws用于在该方法内抛出了异常; 2、使用的位置不同:throw位于方法体内,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用; 3、内容不容:throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类

优秀的个人博客,低调大师

Android基础:通过Intent实现进程间通信(两个应用之间)

两个应用之间进程间通信,主要通过Intent的隐式意图来实现,主要包括:action、catagory、DataAndType action可以理解为就是一个字符串匹配; catagory范畴,Android不允许android.intent.action.MAIN的activity通过隐式意图启动,所以一般设置为android.intent.category.DEFAULT catagory一般不要随便写,用系统的。 DataAndType:数据和MIME类型, 如果没有数据Data可以设置为Uri.EMPTY, TYPE可以随便写:<data android:mimeType="tom/HuoDongActivity" /> 但是如果要用内容提供者的话有特殊要求 <application android:icon= "@drawable/ic_launcher" android:label= "@string/app_name" android:theme= "@style/AppTheme" > <activity android:name= ".TestView" > <intent-filter> <action android:name= "android.intent.action.PICK" /> <category android:name= "android.intent.category.DEFAULT" /> <data android:mimeType= "tom/HuoDongActivity" /> </intent-filter> </activity> </application> Intent intent = new Intent( "android.intent.action.PICK" ); intent.setDataAndType(Uri.EMPTY, "tom/HuoDongActivity" ); intent.addCategory( "tom" ); startActivity(intent); 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/archive/2012/11/01/2750244.html如需转载请自行联系原作者 demoblog

优秀的个人博客,低调大师

汉王云,想将模式识别变成“水电”一样的基础服务

提起汉王,大家的第一印象应该是OCR(光学字符识别)。这家中国最早一代的IT公司,在上个世纪九十年代就已经推出独立的OCR产品,并成为该领域的领军公司。 如今,汉王的产品早已不限于OCR。它有基于OCR的文本仪、手写笔;有扩充到图像识别领域的人脸通、身份认证系统;还有更广泛定义的模式识别产品:语音识别技术。 在今年,汉王推出了一项新的服务:汉王云。不要误解,这不是又一个云储存服务,而是汉王将自家多年的模式识别技术开放共享出来,提供接口给开放者调用的“云接口”服务。 作为一家比较“老气”的IT公司,汉王向来不太“触”网。它推出的这项云服务有什么特色呢?就此雷锋网特别采访了汉王云的技术负责人、汉王互联网事业部首席架构师虞文明。 虞工表示,“汉王云是汉王在模式识别技术上积累的多年丰富经验和互联网云服务相结合的一个产品,它主要提供OCR云识别、人

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册