Java面试题——基础篇

超详细的Java面试题汇总(基础篇+框架篇) Java面试题汇总-基础篇 1.面向对象是什么? 答:面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发、基于类和面向对象的计算机编程语言,面向对象软件开发的优点:代码开发模块化,更易维护和修改;代码复用性强;增强代码的可靠性和灵活性;增加代码的可读性。 2、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:by... 阅读详情

1.JDK,JRE,JVM

JDK:java开发工具包,偏向程序员

JRE:java运行环境,偏向用户

JVM:java虚拟机,用于编译解释

2.equals与“==”

equals本质上就是==,因为java.lang.String类重写了equals方法,所以如果两个字符串对象包含有相同的内容它就返回true,但是==只有他们的引用地址相同时才返回true。

3.hashcode相同,equals也不一定相同

1.hashcode用来储存地址,他的存在用于查找的快捷,如hashMap

2.如果两个对象相同,就是适用于equals方法,那么两个对象的hashcode一定要相同

3.如果equals方法被重写,那么hascode也尽量重写,并且产生hashcode使用的对象,一定要和equals方法中使用的一致,否则就会违反第二点。重写hashcode和equals可保证hashMap键唯一性

4.两个对象的hashcode相同,并不一定代表对象就相同,也就不一定适用于equals方法,只能够说明这两个对象再散列存储结构中,如hashtable,他们“存放在同一个篮子里”

4.String,StringBuffer,StringBuilder的区别

String声明的是不可变对象,其他两个是可变的(String源码可知用final修饰)

StringBuffer:同步,线程安全,性能低,建议多线程使用

StringBuilder:异步,线程不安全,性能高,建议单线程使用

常见的字符串拼接应选择StringBuilder,比String快千百倍。

5.String str = “i” 与 String str = new String(“i”)

String str = “i” Java虚拟机将其分配到常量池中

String str = new String(“i”)会被分配到堆内存中,创建了两个对象,但如果再执行一遍就是创建一个对象,因为常量池中已经有了。

6.接口与抽象类的区别

1.抽象类可以有默认的方法实现,接口不能有默认的方法实现

2.抽象类可以有构造函数,接口不能有构造函数

3.抽象类可以有main(),接口不能有

4.抽象类中的方法可以是任意访问修饰符,接口默认是pubilc

5.可以多实现,不能多继承(假设A类和B类都有t方法,且具体实现不一样。C类继承A类和B类,当C类调用t方法时,会出现歧义。因为,A类和B类都有t方法,但具体实现不一样。可以多实现是因为,接口中的方法没有具体实现。继承多个接口,就算两个接口中有相同的方法,也不会出现矛盾。)

7.IO流的分类

按类型(传输单位)来分:字节流和字符流

按功能(流向)来分:输入流和输出流

字节流: 它处理单元为1个字节(byte),操作字节和字节数组,存储的是二进制文件,如果是音频文件、图片、歌曲,就用字节流好点(1byte = 8位);

字符流: 它处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,如果是关系到中文(文本)的,用字符流好点(1Unicode = 2字节 = 16位);

最简单的区分字节流和字符流

万物皆文件,那就将文件在记事本里面打开,如果打开后能看的懂的就是字符流,如果看不懂那就是字节流

8.BIO,NIO,AIO有什么区别

BIO:Block IO 同步阻塞式IO,就是平常我们使用的传统IO。他的特点是模式简单使用方便,并发处理能力低

NIO:NEW IO 同步非阻塞式IO,是传统IO的升级,客户端和服务器端通过了Channel(通道)通讯,实现了多路复用

AIO:Asynchronous IO 是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制

9. HashMap和TreeMap的区别


1、HashMap是通过hashcode()对其内容进行快速查找的;HashMap中的元素是没有顺序的;

TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap;

2、HashMap和TreeMap都不是线程安全的;

3、HashMap继承AbstractMap类;覆盖了hashcode() 和equals() 方法,以确保两个相等的映射返回相同的哈希值;

TreeMap继承SortedMap类;他保持键的有序顺序;

4、HashMap:基于hash表实现的;使用HashMap要求添加的键类明确定义了hashcode() 和equals() (可以重写该方法);为了优化HashMap的空间使用,可以调优初始容量和负载因子;

TreeMap:基于红黑树实现的;TreeMap就没有调优选项,因为红黑树总是处于平衡的状态;

5、HashMap:适用于Map插入,删除,定位元素;

TreeMap:适用于按自然顺序或自定义顺序遍历键(key);

10.ArrayList和LinkList的区别

ArrayList的实现是基于数组来实现的,LinkedList的基于双向链表来实现。这两个数据结构的逻辑关系是不一样,当然物理存储的方式也会是不一样。

LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。

对于随机访问,ArrayList要优于LinkedList。

对于插入和删除操作,LinkedList优于ArrayList。

在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

11.hashMap实现原理

通过put(key,value)存储,get(key)来获取,当传入key时,HashMap会根据key.hashCode()计算Hash值,当计算出相同的哈希值时(也叫hash冲突),个数较少,使用数组+链表存储相同的hash值,个数较多,使用数组+红黑树存储相同的hash值,如果hash值和equals都相同,表示完全一样,就不存,就去重

12.队列(Queue)的用法

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作

LinkedList类实现了Queue接口,因此可以把LinkedList当成Queue来使用

13.HashMap与HashTable的区别

相同点:都是双列集合且键不能重复,值可以重复

不同点:HashMap线程不安全,线程不同步,效率高,可以存储null键null值

HashTable线程安全,线程同步,效率低,不可以存储null键null值

双列集合优先使用HashMap集合

如果是在多线程的场景下,也无需使用HashTable集合,可以用ConcurrentHashMap集合,该集合是线程同步的

14.Map集合遍历的四种方式

1.根据键找值,首先使用keyset()获取所有的键集合,然后for循环遍历键集合,通过get(key)方法根据键找到所有值

2.获取键值对对象,通过迭代器取值,首先使用entrySet()获取键值对entry类型对象,然后通过迭代器Iterator获取键值对对象,通过entry.getkey(),entry.getvalue()方法获取值

3.获取键值对对象,通过增强for取值,与2一样,遍历的方式改为增强for

4.通过Map的values方法,缺点是只能拿到所有的值Map.values(),返回结果是String类型的单列集合

15.异常

什么是异常:程序所发生的错误叫做异常,异常分为编译时异常和运行时异常,编译时异常是指编译期间编译器检测到某段代码可能会发生某些问题,需要程序员提前给代码做出错误的解决方案,否则则编译不通过,运行时异常指的是代码运行期间出现的错误

体系结构:Throwable(祖宗)-----  Error(严重性错误),例如递归没有出口 -----  Exception:RuntimeException(运行时异常),!RuntimeException(编译时异常)

java对异常的默认处理方式:如果出现了问题,java会将问题所描述的异常类创建一个对象(实例),然后将该对象抛出给上一级

异常的手动处理方式

1.问题可以自己处理掉的,try抓捕可能会出现异常的代码,catch为出现异常的处理方式,finally无论有无异常都执行的代码,优点是不影响后续代码的执行

2.问题自己处理不掉,就将问题抛给调用者,适用于自己写的代码别人传的参数控制不了

throws对方法进行声明,告知调用者此方法存在异常

throw将异常对象抛给调用者

throw和throws的区别:
1、
throw代表动作,表示抛出一个异常的动作;
throws代表一种状态,代表方法可能有异常抛出

throw用在方法实现中,而throws用在方法声明中;
throw只能用于抛出一种异常,而throws可以抛出多个异常

2、
throw关键字用来在程序中明确的抛出异常,相反 throws语句用来表明方法不能处理的异常。
每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

3、
throw是在代码块内的,即在捕获方法内的异常并抛出时用的
throws是针对方法的,即将方法的异常信息抛出去
可以理解为throw是主动(在方法内容里我们是主动捕获并throw的),而throws是被动(在方法上是没有捕获异常进行处理,直接throws的)

如果抛出的异常对象是runtimeException则不需throws,因为runtimeException是运行时异常

16.创建线程的方式

1.继承Thread类,重写run()方法,优点是实现多线程简单,缺点是该类无法继承别的类,因为Java没有多继承

2.实现Runnable接口,优点是继承其他类,统一实现接口的实例可以共享资源,缺点是代码复杂

3.实现Callable接口,与Runnable差不多但是有返回值

17.线程池

就是一个容纳多个线程的容器,其中的线程可以重复使用,省去了频繁创建线程对象的操作,优点:实现自动装配,易于管理,循环利用资源

线程池的处理流程

1.首先判断核心线程是否已满,未满则创建核心线程执行

2.如果核心线程已满,判断任务队列是否已满,未满则将任务放到队列当中,等待别的线程执行完毕

3.如果任务队列已满,判断最大线程数是否已经达到,未达到则创建临时线程执行,已经达到则根据拒绝策略处理任务

18.乐观锁 VS 悲观锁

乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。

先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。

而乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动重试)。

19.公平锁 VS 非公平锁

公平锁是指多个线程按照申请锁的顺序来获取锁,线程直接进入队列中排队,队列中的第一个线程才能获得锁。公平锁的优点是等待锁的线程不会饿死。缺点是整体吞吐效率相对非公平锁要低,等待队列中除第一个线程以外的所有线程都会阻塞,CPU唤醒阻塞线程的开销比非公平锁大。

非公平锁是多个线程加锁时直接尝试获取锁,获取不到才会到等待队列的队尾等待。但如果此时锁刚好可用,那么这个线程可以无需阻塞直接获取到锁,所以非公平锁有可能出现后申请锁的线程先获取锁的场景。非公平锁的优点是可以减少唤起线程的开销,整体的吞吐效率高,因为线程有几率不阻塞直接获得锁,CPU不必唤醒所有线程。缺点是处于等待队列中的线程可能会饿死,或者等很久才会获得锁。

20.Lock接口与synchronized的区别

synchronized是关键字,Lock是接口;

synchronized是隐式的加锁,lock是显式的加锁;

synchronized可以作用于方法上,lock只能作用于方法块;

synchronized底层采用的是objectMonitor,lock采用的AQS;

synchronized是阻塞式加锁,lock是非阻塞式加锁支持可中断式加锁,支持超时时间的加锁;

synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列;

synchronized只支持非公平锁,lock支持非公平锁和公平锁;

21.为什么要使用多线程

1.吞吐量,多请求一个线程只能处理一个用户的请求

2.伸缩性,通过增加CPU的核数来提升性能

22.JVM类的加载机制

描述:当程序要使用某个类时,如果该类还没有被加载到内存中,则会通过类的加载,类的链接,类的初始化这三个步骤来对类进行初始化,如果不出意外情况,JVM将会连接完成这三个步骤,所以有时候也把这三个步骤统称为类初始化

类的加载:指将class文件读入内存,并为之创建一个java.lang.class对象,任何类被使用时,系统都会为之创建一个.class对象

类的链接:链接包含三个部分:验证,准备,解析

验证(Verification):确保被加载类的正确性。这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证阶段主要包括四个检验过程:文件格式验证、元数据验证、字节码验证和符号引用验证。
准备(Preparation):准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。这时候进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在堆中。(如果 static 变量是 final 的基本类型,以及字符串常量,那么编译阶段值就确定了,赋值在准备阶段完成;如果 static 变量是 final 的,但属于引用类型,那么赋值也会在初始化阶段完成)
解析(Resolution):把类中的符号引用转化为直接引用(比如说方法的符号引用,是有方法名和相关描述符组成,在解析阶段,JVM把符号引用替换成一个指针,这个指针就是直接引用,它指向该类的该方法在方法区中的内存位置)。解析包含:类或接口的解析、字段解析、类方法解析、接口方法解析。

类的初始化:在链接的准备阶段,类的静态变量已赋过一次初始值(默认值),而在初始化阶段,则是为静态变量赋指定值。

 何时触发初始化?

为一个类型创建一个新的对象实例时(比如new、反射、序列化)
调用一个类型的静态方法时(即在字节码中执行invokestatic指令)
调用一个类型或接口的静态字段,或者对这些静态字段执行赋值操作时(即在字节码中,执行getstatic或者putstatic指令),不过用final修饰的静态字段除外,它被初始化为一个编译时常量表达式
调用JavaAPI中的反射方法时(比如调用java.lang.Class中的方法,或者java.lang.reflect包中其他类的方法)
初始化一个类的派生类时(Java虚拟机规范明确要求初始化一个类时,它的超类必须提前完成初始化操作,接口例外)
JVM启动包含main方法的启动类时。

23.并发、并行、串行

并发:允许两个任务彼此干扰,同一时间点,只有一个任务运行,交替执行

并行:在时间上是重叠的,两个任务在同一时刻互不干扰同时执行

串行:在时间上不可能发生重叠,前一个任务没搞定,下一个任务只能继续等

24.线程之间是如何进行通讯的

线程之间可以通过共享内存或基于网络来进行通信

1.如果是通过共享内存来进行通信,则需要考虑并发问题,什么时候阻塞,什么时候唤醒,Java中阻塞和唤醒是wait()、notify()

2.通过网络连接是将通信数据发送给对方,当然也要考虑到并发问题,处理方式是加锁等

25.线程安全

可以理解为内存安全,堆是共享内存,栈是安全的

当多个线程访问同一个对象时,如果不能进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得预期正确的结果(跟单线程的结果一样),我们就说这个对象是线程安全的

26.反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.


反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。
     (其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)
如图是类的正常加载过程:反射的原理在与class对象。
熟悉一下加载的时候:Class对象的由来是将class文件读入内存,并为之创建一个Class对象。

java基础面试题汇总A篇 java基础面试题汇总 先写出基本常见的大厂面试题,后面会持续更新面试的题 1.求6&3,-6&-3的值 解析: Java使用 补 码 来 表 示 二 进 制 数 ,在补 码 表 示 中 ,最高 位 为 符号 位 ,正数 的 符 号 位 为 0,负数 为 1。补 码 的 规 定 如 下 : 对 正 数 来 说 ,最高位为 0,其余 各 位 代 表 数 值 本 身 (以二 进制 表 示 ),如 +42的补码 为 00101010。 对 负 数 而 言 ,把该 数 绝 对 值 的 补 码 按 阅读详情

相关推荐

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1120

抽象类与接口

🐤当子类继承了父类,就自动拥有了父类的功能。 🐤当子类需要拓展功能,就可以通过实现接口的方式来拓展。 🐤相当于实现接口是对Java单继承机制的补充。 接口和继承解决问问题不同 🐤 继承的价值主要在于:解决代码的复用性和可维护性。 🐤 接口的价值主要在于:设计。设计好各个规范(方法),来让其他类去实现,使之更灵活。

weixin_67807492的博客 3379

ZYNQ烧写程序到flash

1.打开SDK创建FBSl项目 点击finish 2.创建BootImage 导入fsbl.elf、.bin、.elf三个文件,Create Image 生成BOOT.bin文件 3.将BOOT文件烧录到FLASH image File选择2中生成的BOOT.bin文件,FSBL File选择fsbl.elf文件,连接好ZYNQ的Jtag,点击Program,即可烧录。 4.烧录程序到FLASH失败 如果是第一次烧录,需更改创建的fsbl工程下的main函数,在如下代码处加入BootModeRegi

qq_40603614的博客 8323

抽象类与接口(Java)

抽象类与接口

Ning862217083的博客 1204

SVPWM原理与MCU/FPGA实现:从数学推导到工程实战

空间矢量调制(SVPWM)是实现高性能电机驱动控制的核心算法之一,其通过六个基本电压矢量与零矢量的伏秒平衡,在一个PWM周期内合成任意方向的旋转电压圆,相比传统SPWM可提升约15%的直流电压利用率。该技术不仅涉及扇区判断、作用时间计算、过调制限幅等数学原理,还在MCU与FPGA两种硬件平台上有不同的工程实现路径,包括中心对齐PWM配置、死区插入、定点数流水线设计等。在电动工具、无人机、机器人及车载执行器等电池供电场景中,SVPWM直接决定续航与扭矩表现。本文从数学原理出发,详细拆解MCU和FPGA实现细节

weixin_34265814的博客 301

NWD 格式转换 STL 全流程:专业方案与迪威模型网在线转换详解

在3D模型处理中,将NWD文件转换为STL格式是常见的需求,特别是在3D打印和计算机辅助制造等领域。NWD文件由Autodesk开发,主要用于建筑、工程和施工行业,包含丰富的几何图形和材质信息,但因其专有格式和大文件大小,限制了其应用范围。相比之下,STL格式广泛应用于3D打印,仅包含表面几何信息。转换NWD到STL的原因包括拓展模型应用场景和便于模型编辑。转换方法包括使用专业软件如Autodesk Navisworks配合Blender或3ds Max,或使用专门的转换工具如CADExchanger。

技术说明博主 2540

java知识点(一)

java

weixin_47556194的博客 1403

告别手动脚本!用TSMaster Python小程序5分钟搞定CAN报文自动发送

本文介绍了如何使用TSMaster的Python小程序功能快速实现CAN报文自动发送,大幅提升汽车电子测试效率。通过简洁的Python代码示例,展示了如何替代传统手动操作和复杂C脚本,实现周期性发送、动态修改报文内容等常见需求,帮助工程师5分钟内完成自动化配置。

weixin_30292843的博客 511

接口和抽象类的区别

抽象类 1.默认方法:抽象类可以有默认的方法实现 2.实现方式:子类使用extends关键字来继承抽象类.如果子类不是抽象类,子类要提供抽象类中所声明方法的实现 3.构造器:抽象类中可以有构造器 4.和正常类区别:抽象类不能被实例化 5.访问修饰符:抽象方法可以有public,protected和default等修饰 6.多继承:—个子类只能存在一个父类 7.添加新方法:抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码 接口 1.默认方法:java 8之前,接口中不存在方法的实现 2.实

春花秋月冬雪风,留得残荷听雨声。 580

信捷 XDH Ethercat 正负极限配置详解与实战技巧

本文详细解析了信捷XDH系列PLC通过EtherCAT总线配置伺服电机正负硬极限的完整流程与实战技巧。内容涵盖硬件开关选型安装、EtherCAT IO信号映射、软件参数设置(包括关键的极性配置)、调试验证方法,以及硬极限与软极限的协同策略。重点阐述了如何避免常见配置错误,确保运动控制系统的最后一道物理安全防线可靠有效,为工程师提供从理论到实践的全面指导。

wdx012345的博客 601

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

java——《面试题——基础篇》

1、Java语言有哪些特点1、简单易学、有丰富的类库2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)3、与平台无关性(JVM是Java跨平台使用的根本)4、可靠安全5、支持多线程。

行秋的博客 9852

自定义模型训练——打造专属OpenClaw模型(2026AI版)

本文介绍了OpenClaw自定义模型训练的核心流程,包括框架选择(PyTorch、TensorFlow、HuggingFace和原生OpenClaw框架)、训练环境搭建脚本、以及数据收集系统的设计。数据收集器支持从数据库、API、文件和网络等多种来源获取训练数据,并提供灵活的过滤机制确保数据质量。通过这套系统,开发者可以高效准备训练数据,为后续模型训练打下坚实基础。

博客 877

【Java基础篇】Java面试题总结

Java面试题总结

wang_qiu_hao的博客 1157

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Java面试题系列】基础篇

Java开发工程师面试题,基础篇

低调做人,低调编码,神码都是浮云 1503

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java基础篇面试题 2024

Java基础篇面试题 2024 每日持续更新中,文中包含Java全技术栈面试题合集地址并可直接跳转

qq_58353992的博客 1872

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java面试题之Java基础篇

本系列是有关Java开发的面试题,结合本人实际面试经历以及网上面试经验总结而来。这是第一篇。以下内容均为本人参考别人的文章(https://Javaguide.cn以及搜索到的一些博客),用自己的话总结出来,适合直接背题。

qq_63274189的博客 1370

面试题分享之Java基础篇(三)

哈喽,小伙伴们,昨天我们学习了==和equals的区别以及hashcode等等,我们今天继续来分享几道Java基础的面试题。🌈

小杰不秃头的博客 1204

Java面试题之基础篇

方法重载就是指在同一个类中定义多个方法,它们方法名相同但参数列表不同。那么如果方法名相同参数列表不同,但返回值不同还算不算是重载?// 方法体// 方法体JVM 调用方法是通过方法签名来判断到底要选择调用哪个方法,而方法签名 = 方法名称 + 参数类型 + 参数个数这样组成的一个唯一值,这个唯一值就是方法签名。所以可以看出返回类型不是方法签名的组成部分。HashMap 的负载因子是 HashMap 在扩容时的第一个阈值,当 HashMap 中的元素个数超过了容量乘以负载因子时,就会扩容。

m0_58761900的博客 1203

java 基础篇面试题

当然,在平时的编程中,反射基本用不到,但是在编写框架的时候,反射用的就多了,比如咱们要使用某一个类进行操作,但是这个类是用户通过配置文件配置进来的,你需要先读配置文件,然后拿到这个类的全类名。如果知道一个类的名称或者它的一个实例对象,就能把这个类的所有方法和变量的信息。的泛型是伪泛型呢,他只是在咱们编译的时候进行检测,那么咱们就可以借助反射 动态的去获取操作方法,实现泛型擦除。比较高,因为他是节点存储,链式实现,每个节点都记录了上一个节点和下一个节点的地址,三个属性,分别是前驱节点,本节点的值,后继节点。

hero212的博客 3111

JAVA面试题之基础篇

title: JAVA面试题之基础篇date: 2017-03-01tags: 面试题 九种基本数据类型的大小,以及他们的封装类。各自占多少字节 boolean, byte, char, short,  int, long, float, double, void 还有一种引用类型 Boolean, Byte, Character, Short, Integer, Long, Floa

一年e度的夏天的专栏 5588

java面试题基础篇

基础部分

老汤姆的博客 539

Java高频面试题——基础篇

这是Java面试题,基础篇的内容。

weixin_43635067的博客 1130

Java面试题———基础篇

深拷贝:深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。用于基本类型的变量比较时: ==比较的是值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。不一样的是&&有短路的功能,即当符号前面的表达式为false时,后面的表达式将不再执行,而&没有这个功能。

w13114的博客 1064
下一篇: Java面试题——数据库
璞小玉
博客等级 码龄5年 2粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值