Java程序员注意:这21个核心技术,你掌握了吗?

java开发工作三年你应该掌握的知识(持续更新) 1、java中常用的类有哪些? Scanner、system、String、Integer、Arrays、Boolean、Math、Double、Character、Calendar、Random、BigIngteger、arraylist、hashMap、Thread、Date、Iterator 2、java中常用的包有哪些? Lang、IO、sql、util、awt、net、 3、Object... 阅读详情

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!!

前言


周末闲来无事,一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘复盘。而写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java。

这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Java中各个框架相关的内容。

经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。

21个核心技术


1. JVM相关

对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。

不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。

JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。

我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。

当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。

在JVM这个大类中,我认为需要掌握的知识有:

  • JVM内存模型和结构
  • GC原理,性能调优
  • 调优:Thread Dump, 分析内存结构
  • class 二进制字节码结构, class loader 体系 , class加载过程 , 实例创建过程
  • 方法执行过程
  • Java各个大版本更新提供的新特性(需要简单了解)

2. Java的运行

这条可能出看很简单,java程序的运行谁不会呢?

不过很多时候, 我们只是单纯通过IDE去执行java程序,底层IDE又是如何执行java程序呢?很多人并不了解。

这个知识点是最最基本的java开发者需要掌握的,第一个肯定是教你如何在命令行中执行java程序,但是很多人一旦把java学完了,IDE用上了,就把这个都忘了。

为什么强调要知道这个呢,知道了java最纯粹的启动方式之后,你才能在启动出问题的时候,去分析当时启动的目录多少,执行命名如何,参数如何,是否有缺失等。

这样有利于你真正开发中去解决那些奇奇怪怪的可能和环境相关的问题。

在这里需要掌握的知识有:

  • javac 编译java文件为 class 文件
  • java 命令的使用, 带package的java类如何在命令行中启动
  • java程序涉及到的各个路径(classpath, java。library。path, java运行的主目录等)

3. 数据类型

这条没有什么好多说的,无非就是Java中的基本类型和对象类型的掌握。

可以再了解一些JDK如何自动转换方面的知识,包括装箱拆箱等,还要注意避免装箱之后的类型相等的判断。

主要知识点:

  • 基本类型: int, long, float, double, boolean 。。。
  • 对应的对象类型: Integer 等类型到基本类型的转换, 装箱和拆箱
  • Object类型: equals, hashcode
  • String 类型的特点

4. 对象和实例

在这方面,开发者需要了解class和instance的概念以及之间的差别, 这是java面向对象特性的一个基础。

主要知识点有:

Class和 Instance 的概念

Instance 创建的过程:

  • 无继承:分配内存空间, 初始化变量, 调用构造函数

  • 有继承:处理静态动作, 分配内存空间, 变量定义为初始值 , 从基类->子类, 处理定义处的初始化, 执行构造方法

需要注意的点:

  • 静态属性等从基类->子类进行初始化
  • 默认无参构造方法相关的特性

5. 访问控制

这也是java封装特性的一个基础,需要掌握的有:public protected default private 对于class, method, field 的修饰作用。

6. 流程控制

Java 流程控制的基础, 虽然有些语法不一定很常用,但是都需要了解,并且在合适的地方使用它们。

需要掌握的有:if, switch, loop, for, while 等流程控制的语法。

7. 面向对象编程的概念

这是一个java的核心概念,对于任何java开发者都需要熟练掌握。

Java中很多特性或者说知识点都是和java面向对象编程概念相关的。

在我的理解,一个好的开发者不仅仅需要了解这些特性(知识点)本身。

也更需要知道这些对象在java的面向对象编程概念中是如何体现出来的,这样更有利于开发者掌握java这门开发语言,以及其他面向对象编程的语言。

在这里只是简单罗列了一下,主要的知识点包括有:

  • 面向对象三大特性:封装,继承,多态;
  • 各自的定义概念,有哪些特性体现出来,各自的使用场景
  • 静态多分派,动态单分派的概念
  • 重载的概念和使用
  • 继承:接口多实现,基类单继承
  • 抽象,抽象类,接口
  • 多态:方法覆盖的概念和使用
  • 接口回调

8. static

静态属性在java日常开发中也是经常使用,需要了解和 static 关键字相关的用法,还有和其他关键字的配合使用, 如是否可以和 abstract, final 等关键字联合使用。

主要需要掌握的有:

  • 静态属性的定义,使用,以及类加载时如何初始化
  • 静态方法的定义和使用
  • 静态类的定义和使用
  • 静态代码块的定义和初始化时机

9. 基础知识点

这里主要罗列一些散落的,没有系统归类的一些java知识点。

在日常的开发中用到也不少。 这块内容其实还有很多,目前只是暂时归纳了这几个在这里:

包括有:

  • equals
  • hashcode
  • tring/stringbuffer
  • final
  • finally
  • finalize

10. 集合框架

这个是一个需要多加掌握的部分,做java开发,可以说没有不用到集合框架的,这很重要,这里整理的Java集合面试题及答案你必须都要清楚。

但是这里的知识点并不难,但是对于集合最好要了解内部的实现方式,因为这样有助于你在各个不同的场景选择适合的框架来解决问题,比如有1W个元素的集合,经常要进行contains判断操作,知道了集合的特性或者内部实现,就很容易做出正确的选择。

这里包括了如下内容(并发相关不包含在内):

集合框架的体系: 基础Collection ,Map

具体集合实现的内容, List ,Set ,Map 具体的实现,内部结构, 特殊的方法, 适用场景等

集合相关的工具类 Collections 等的用法

11. 异常框架

异常在java的开发中可能没有那么被重视,异常处理的最佳实战详细说明了。

一般遇到异常,直接上抛,或者随便catch一下处理之后对于程序整体运行也没有什么大的影响。不过在企业级设计开发中, 异常的设计与处理的好坏,往往就关系着这个系统整体的健壮性。

一个好的系统的异常对于开发者来说,处理应该统一,避免各处散落很多异常处理逻辑;对于系统来说,异常应该是可控的,并且是易于运维的,某些异常出现后,应该有应对的方法,知道如何运维处理,所以虽然异常框架很简单,但是对于整个企业级应用开发来说,异常处理是很重要的,处理好异常就需要了解Java中的异常体系。

这部分需要掌握的知识点不多,主要就是:

异常的体系:

  • Throwable
  • Exception
  • RuntimeException
  • Error
  • RuntimeException 和 一般 Exception 的区别, 具体处理方法等

12. Java IO

IO 在java中不仅仅是文件读写那么简单,也包括了 socket 网络的读写等等一切的输入输出操作。比如说 标准HTTP请求中Post的内容的读取也是一个输出的过程,等等…

对于IO,Java不仅提供了基本Input、Output相关的api,也提供了一些简化操作的Reader、Writer等api,在某些开发(涉及大量IO操作的项目)中也很重要,一般日常的开发中也会涉及(日志,临时文件的读写等)。

在这中的知识点主要有:

基本IO的体系包括有InputStream , OutputStream, Reader/Writer, 文件读取,各种流读取等,NIO 的概念, 具体使用方式和使用场景。

13. 多线程并发

多线程是Java中普遍认为比较难的一块。

多线程用好了可以有效提高cpu使用率, 提升整体系统效率, 特别是在有大量IO操作阻塞的情况下;这里整理的Java多线程面试题及答案你必须都要清楚。

但是它也是一柄双刃剑, 如果用不好,系统非但提升不大,或者没有提升,而且还会带来多线程之间的调试时等问题。

在多线程中内容有很多,只是简单说明一下Java中初步使用多线程需要掌握的知识点,以后有机会单独再详细介绍一些高级特性的使用场景。

  • 多线程的实现和启动
  • callable 与 runable 区别
  • syncrhoized ,reentrantLock 各自特点和比对
  • 线程池
  • future 异步方式获取执行结果
  • concurrent 包
  • lock

14. 网络

Java中也是提供了可以直接操作 TCP协议、UDP协议的API。

在需要强调网络性能的情况下,可以直接使用TCP/UDP 进行通讯。

在查看Tomcat等的源码中,就可以看到这些相关API的使用情况。

不过一般也比较少会直接使用TCP,会使用诸如MINA、Netty这样的框架来进行处理,因为这个方面的开发涉及不多,所以就不再详细罗列了。

15. 时间日期处理

几乎对于每个应用来说,时间日期的处理也是绕不过去的,但是JDK8 之前的时间相关API用法并不友好。

在那个时代,可以选择Joda等时间框架。到了JDK8 发布之后,全新的时间API基本融合了其他框架的优点,已经可以很好的直接使用了。

对于Java开发者来说,需要熟练地使用API来对时间和日期做相关的处理。

具体知识点不再罗列,会在以后再写个专门的文章来总结一下JDK8中时间日期API的用法。

16. XML解析/JSON解析

其实这两块内容都不是J2SE里面的内容,但是在日常开发中,和其他程序交互,和配置文件交互,越来越离不开这两种格式的解析。

不过对于一个开发者来说,能够了解一些XML/JSON具体解析的原理和方法,有助于你在各个具体的场景中更好的选择合适你的方式来使得你的程序更有效率和更加健壮。

XML: 需要了解 DOM解析和 SAX解析的基本原理和各自的适用场景

JSON: 需要了解一些常用JSON框架的用法, 如 Jackson, FastJson, Gson 等。

17. Maven使用

Maven也不是Java里面的内容,但是maven是革命性的,给java开发带来了巨大的便利,这30个Maven命令你必须熟悉。

从依赖的引入和管理,开发流程的更新和发布产出,乃至版本的更新,使用maven可以大大简化开发过程中的复杂度,从而节省大量时间。

可以说,maven已经成为java开发者的标配了。所以我把maven也作为一个java开发者对于基础必备的知识点。

18. 泛型

这是JDK5开始引入的新概念,其实是个语法糖。

在编写java代码时会有些许便利, 一般的应用或者是业务的开发,只需要简单使用,不一定会用到定义泛型这样的操作。

但是开发一些基础公共组件会使用到,可以在需要的时候再细看这个部分,一般情况下只要会简单使用即可。

19. 注解

也是jdk5 之后引入的,元注解你必须了解。

spring是个优秀的框架,最开始就以xml作为标准的配置文件。

不过到了Spring3 之后,尤其是 spring-boot 兴起之后,越来越推崇使用标注来简化xml配置文件了,对于开发者来说,可以节省不少xml配置的时间。

但是劣势是在于标注散落在各个类中,不像xml,可以对所有配置有个全局性的理解和管理,所以还没有办法说完全就取代所有的xml。

对于一般开发者,会使用标注即可,一些公共组建的开发者可能会需要了解标注的定义和实现,可以在具体需要的时候再细看。

20. RMI

RemoteMethodInvocation ,Java语言特有的远程调用接口,使用还是比较简单方便,点击这里了解RMI与RPC的区别详情。

不过需要跨语言的情况下,就需要使用 webservice 等其他方式来支持。

一般来说,程序都不需要使用RMI,不过可以在特定的情况下使用,我就在一个项目中,使用RMI来进行程序远程启动停止的控制。

21. JNI

Java Native Interface,可以允许Java中调用本地接口方法,一般用于C/C++代码的调用。

需要注意的是在java中加载so/dll文件的路径问题,本身调用接口并不复杂,但是经常在是否加载了所需的本地接口库中花费较多时间。

总结


以上也只是简单介绍了下我对于这些java基本知识点和技术点的一些看法和介绍。

这些内容都源自于我这些年来使用java的一些总结 。这当中还有些内容不够完善的地方,会通过以后的文章再添加上。

眼尖的朋友可能还看见了此博客页面左上角还有惊喜哟

点关注,不迷路;持续更新Java架构相关技术及资讯热文!!!

面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】 前言 15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中… 最终有幸去了网易。 但是要特别感谢点我达的领导及HR,真的非常非常好,很感谢他们一直的关照和指导。 面试整体事项 简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历的模板尽量选择简洁的,毕竟程序员大部分还是喜欢简单明了的。 推荐boss直聘,我觉得很好用(不是广告)。 一般的整 阅读详情

相关推荐

JAVA架构师具备知识

JAVA架构师具备知识

私信可回答各种问题~ 1455

Java架构

Java架构

新征程的博客 5120

自动驾驶仿真(六)—— SIL软件在环仿真测试

自动驾驶仿真六—— SIL软件在环仿真测试1. 在环仿真测试2. SIL软件在环仿真测试2.1 模型配置参数2.2 S function生成实现2.3 结果对比3. 参考学习的书目教材 博主前面的博文已经简要介绍了Carsim、Prescan 与 Simulink 在 “V”型开发流程的一些应用,现今成熟的汽车控制系统软件都是以(Model Based Design,MBD)来开发,它以图形化的方式表达复杂的逻辑、代码可读性、可移植性、开发调试便利程度都大大增强,同时利用成熟的代码生成工具链,也避免了手工代

zhudj08的博客 8653

Java开发必须掌握的 21 个 Java 核心技术!

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验...

weixin_33881041的博客 2834

用R语言实现“中断时间序列分析” --- R code for ITS

ITS方法可用于评估一项干预措施的效果,从水平改变和斜率改变两个角度来描述干预引起的变化。

franksui的博客 4026

验证(uvm常见问题)--子类和父类的句柄和对象问题

sv中的子类和父类 在sv中,有如下两个类,child继承于parent。然后在test module中,正确转换的方法如下面所示。其中c1,c2,p1 都指向了同一个子类的对象c1。总结如下: 一个子类的对象是包括子类的成员变量,方法和父类的成员变量,方法。 子类的句柄c1可以直接赋值给父类的句柄p1,此时p1只可以访问父类的成员变量和方法,或者子类的虚方法,比如下面调用p1.display是...

q876507447的博客 7633

java程序员 技术_java程序员必须知道的21个核心技术

Java程序员必须知道的21个核心技术,分享一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,方便大家更好学习和使用Java。这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Java中各个框架相关的内容。经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是...

weixin_35953060的博客 202

B3640 T3 句子反转

要求将这些单词倒序输出。而且对于每个单词,如果是小写词,应当转为大写;如果是大写词,应当转为小写;如果是自然数,应该倒转输出。给定一行句子,每个词之间用空格隔开,要么是全小写英文单词,要么是全大写英文单词,要么是自然数。第一次做的时候0分,两个小时没做出来。仅一行,表示程序对句子的处理结果。仅一行,即需要反转的句子。

小前日记 366

Java进化之路:从Java 8到Java 21的重要新特性(程序员必看版)

很多程序员还在用Java 8(别不承认,说的就是你!),但Java其实已经进化到21世纪了!最后送大家一句话:不追新版本的Java程序员,就像还在用诺基亚的商务人士——稳定,但迟早要被时代淘汰!(别打我,我说的大实话!(划重点)模块化就像乐高积木——搭得好爽歪歪,搭不好全垮掉!(2014年发布,但至今仍是企业级应用的扛把子)(百万级并发不是梦!(2021年发布,下一个LTS版本)(2017年发布,项目结构大洗牌)(2018年发布,长期支持版必选)(2023年发布,划时代更新)(来自Oracle内部消息)

cloudnomad1的博客 1112

真正的工业级环形缓冲区(Circular Buffer)完整实现细节

永远不要永远不要ToArray()或AddRange()永远返回或两段Span永远用_head_tail% Capacity实现环形照着上面这套代码改,你的系统将彻底告别内存爆炸,从“实验室玩具”变成“产线战神”!需要我给你一个支持两段绘制的完整实现吗?

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 127

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

STM32F407上优化CAN总线通信(500kbps速率,多终端系统)需要从硬件设计、软件配置和实时性能三个方面进行综合优化

a_zxswer的博客 381

Java程序员必备的21个核心技术,你都掌握了哪些?

前言 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。 不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。 JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。 我在面试有超过3年Java经验的开发者的时候, JVM几乎就.

架构大数据双料架构师的博客 585

QGIS编译(跨平台编译)之五十六:QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

QGIS编译;QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

LuckyHanMo的博客 1898

Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发

经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。

m0_60721649的博客 3732

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java 进化之路:从 Java 8 到 Java 21 的重要新特性(程序员必看)

各位Javaer注意了(敲黑板)!今天咱们要聊的可是Java发展史上最硬核的版本进化史!从Java 8到Java 21这13年间的重大更新,绝对能让你感受到Java语言的进化速度堪比火箭升空(特别是最近几年)!(重要提醒)别再抱着Java 8不放了!赶紧升级你的JDK,体验现代Java的魅力吧!(划重点)这个版本堪称Java界的"工业革命"!集合操作从此有了"流水线作业"!这几个版本简直是"甜度超标"(甜到齁的那种)!(用过就回不去系列)(前方高能)这个版本搞了个大新闻——的写法让代码瞬间变清爽!

techvoyager123的博客 807

深度学习工具包 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 8到Java 21的重要新特性(程序员必看指南)

你现在用的哪个Java版本?在评论区说出你的理由!(偷偷说,用Java 8的同学可以升级啦~)

syntaxsage的博客 965

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java进化之路:从Java 8到Java 21的颠覆性变革(程序员必看!!!)

从Java 8到Java 21,这九年Java的变化比过去二十年都大(Oracle这次是真拼了)。建议各位开发者至少每两年关注一次主要版本更新,否则真的会out到看不懂别人的代码!学新特性就像追剧,你可以不追最新番,但至少要了解剧情发展(不然代码review时会很尴尬哦~)

ByteBeacon的博客 756

程序员要掌握的21个Java核心技术

经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。 不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。 JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。 我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。 当

i6588662的博客 175

Java进化之路:从Java 8到Java 21的重要特性全解析(程序员必看!)

(悄悄说)其实Java版本号跳过了Java 2.0,直接从1.4跳到5.0,后来又改回数字…所以现在看到Java 21不要惊讶,它其实是Java 12.0!(官方这版本号玩得比女朋友的心思还难猜)

zenithdev1的博客 684

Java 进化之路:从 Java 8 到 Java 21 的重要新特性(程序员必读!)

很多小伙伴还在用 Java 8 写代码(别装了说的就是你),但你知道吗?从 2014 年 Java 8 发布至今,Java 已经完成了 13 次重大更新!(真实案例警告)我之前接手过一个 Java 8 的老项目,光是处理异步逻辑就写了 200 行回调地狱。各位Javaer们,让我们在版本更新的浪潮中,做个快乐的弄潮儿吧~ 🏄♂️。(亲测有效)推荐升级路线:8 → 11 → 17 → 21,每次跨越一个 LTS 版本更安全!默认点击下一步,直到安装页面,点击安装,等待安装完成,点击完成。

nexustech的博客 1101

Java的21个核心技术点,你知道吗?

Java的21个核心技术点,你知道吗? 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。   这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Jav

uingerss的博客 425

作为程序员的你,必须掌握的21个Java核心技术!

这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。 不过对于一个有着3年以上J...

weixin_30299709的博客 75

程序员必须掌握 21 个 Java 核心技术,你掌握了吗?

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的、和Java中各个框架相关的内容。经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。对于刚刚接触Java的人来说,J

364
下一篇: Java面试 32个核心必考点完全解析
程序员摩西
博客等级 码龄7年 45粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值