不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享

BAT + 程序员校招指南 每一年,应届毕业生都要面对校招,对于程序员来说,进大厂是我们最大的理想。那么我们应该如何准备校园招聘,如何见招拆「招」?简历、网申、笔试、面试、offer,你会过招到哪关? 正值春招结束,此时准备秋招再合适不过,本栏将为你答疑解惑,帮助技术同学更好地去应对校园招聘,拿到心目中理想的大厂 offer。 专栏作者是 985 硕士,目前是阿里 Java 工程师,在 2018 年秋招期间收获了 BAT 头... 阅读详情

本文转载自:不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享


一. JDK/JRE/JVM 三者之间的联系与区别

  • JDK:开发者提供的开发工具箱,是给程序开发者用的。它包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。
  • JRE:(Java Runtime Environment) JVM运行时所须的包依赖的环境都在JRE中。
  • JVM:当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理、垃圾回收和安全机制等。这种独立于硬件和操作系统,正是Java程序可以一次编写多处执行的原因。
JDK>JRE>JVM

二. Java 面向对象编程的三大特性

2.1 封装

封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性和方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有供外界访问的方法,那么这个类也就没有什么意义了。

2.2 继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或者新的功能,也可以用父类的功能,但不能选择性的继承父类。通过使用继承我们能够非常方便地复用以前的代码。

关于继承如下三点需要记住:

  • 子类拥有父类非private的属性和方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。

2.3 多态

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用,在编程时并不确定,而是在程序运行期间才确定。即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中的同一方法)

三. 面向对象与面向过程

3.1、面向过程

  • 优点:性能比面向对象强,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
  • 缺点:没有面向对象易维护、易复用、易扩展。

3.2、面向对象

  • 优点:易维护、易复用、易扩展。由于面向对象有封装、继承、多态的三大特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
  • 缺点:性能比面向过程低。

四. Java 语言有哪些特点

  • 简单易学;
  • 面向对象(封装、继承、多态);
  • 平台无关性(Java虚拟机实现平台无关性);
  • 可靠性;
  • 安全性;
  • 支持多线程;
  • 很方便的支持网络编程;
  • 编译与解释并存;

五. Java和C++的区别

没学过C++,不代表面试官也没学过

  • 都是面向对象的语言,都支持封装、继承和多态
  • Java不提供指针来直接访问内存,程序内存更加安全
  • Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承。
  • Java有自动内存管理机制,不需要程序员手动释放无用内存。

六. Java 基本数据类型

Javabyteshortintlongdoublefloatcharboolean
字节大小12488421
占位大小81632646432168
  • 整数类型:byte、short、int、long
  • 字符型:char
  • 浮点类型:float、double
  • 布尔型:boolean

注意:

整数型默认int型。小数型默认是double型。float和long类型必须加后缀。

比如:float f=100f。

七. 成员变量与局部变量的区别

从语法形式上看:

  • 成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;
  • 成员变量可以被public、private、static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰。但是,成员变量和局部变量都能被final所修饰。

从变量在内存中的存储方式来看:

  • 如果成员变量是使用的 static修饰的,那么这个成员变量是属于类的,如果没有使用 static修饰,这个成员变量是属于实例(对象)的。而对象存在与堆内存中、局部变量则存在于栈内存中。

从变量在内存中的生存时间上看:

  • 成员变量是对象的一部分。它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。

  • 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外:被final修饰的成员变量也必须显示的赋值),而局部变量则不会自动赋值。

八. 静态方法和实例方法有何不同

在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

九. 构造方法

9.1、特性

  • 名字与类名相同;
  • 没有返回值。但是不能用void声明构造函数(方法);
  • 生成类的对象时自动执行,无需调用。

9.2、构造方法是否可以被override

在继承中我们就知道父类的私有属性和构造方法不能被继承,所以Constructor也就不能被override(重写),但是可以overload(重装),所以你可以看到一个类中有多个构造函数的情况。

9.3、父子关系的构造方法的执行顺序

  • 父类有无参构造方法,子类才可以写无参构造方法;父类有含参构造方法,子类才可以写含参构造方法。
  • 构造方法不能被继承、重写。
  • 当进行无参构造时,先调用父类无参构造方法,然后调用子类无参构造方法;当进行有参构造时,先调用父类有参构造,然后调用子类有参构造。

十. this和super关键字

  • super关键字用于从子类访问父类的变量和方法,也包含构造方法。
  • this关键字用于引用类的当前实例。此关键字是可选的。这意味着如果上面的实例在不使用此关键字的情况下表现相同。但是,使用此关键字可能会使代码更易读或易懂。this也可以调用当前类的构造方法。
  • super调用父类中的其他构造方法时,调用时要放在构造方法的首行!this调用本类中的其他构造方法时,也要放在首行。
  • this、super不能用在静态方法中。因为被static修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享。而this代表对本类对象的引用,指向本类对象;而super代表对父类对象的引用,指向父类对象;所以,this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西。

十一. 重载和重写的区别

  • 重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
  • 重写:发生在子父类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。

十二. String和StringBuffer、StringBuidler

12.1 可变性

String类中使用final关键字修饰的字符数组保存字符串private final char value[],所以String对象是不可变的。

而StringBuidler与StringBuffer都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符串数组保存字符串 char value[] 但是由于没有用final关键字修饰,所以这两个类都是可变的。

12.2 线程安全性

  • String中的对象是不可变的,也就是可以理解为常量,线程安全。
  • AbstractStringBuilder 是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。
  • StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
  • StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

12.3 性能

每次对String类型进行改变的时候,都会生成一个新的String对象,然后将地址引用指向新的String对象。

StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StingBuilder相比使用StringBuffer仅能获得10%~15%左右的性能提升,但却要冒着多线程不安全的风险。

12.4 对于三者的使用总结

  • 操作少量的数据:String
  • 单线程在字符串缓冲区下操作大量数据:StringBuidler
  • 多线程在字符串缓冲区下操作大量数据:StringBuffer

十三. 自动装箱与拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为对应的基本数据类型;

十四. HashCode、equals与==

14.1 HashCode()介绍

hashcode()的作用是获取哈希码,也成为散列码。它实际上返回的是一个int类型的整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashcode()定义在JDK的Object类中,这就意味着Java中任何类都包含有hashcode()函数。另外需要注意的是:Object的hashcode方法是本地方法,也就是用c或c++实现的,该方法通常用来将对象在内存中的内存地址转换为整数之后返回。

14.2 为什么需要hashCode

以"HashSet如何保证唯一"为例子来说明为什么要有hashcode:

当你把对象加入HashSet时,jvm会先去检索HashCode方法,如果返回值是相等的,进而调用equals方法比较内容,如果内容(各种字段值)相同,那么返回true,数据就不往里面添加,因为里面已经存有该实例,如果返回是false就说明,是不同的实例对象,就往里面存。

因此,保证每个类的HashCode的值的唯一性,有助于提高效率,这也就是下面第三条约定所谈及的内容,因为,一旦判断出来hashcode不同,就相当于不用比较equals里面的字段,直接存入即可。因此提高了效率。

14.3 hashCode()与equals()的相关规定

  • 如果两个对象相等,则hashcode一定也是相同的。
  • 两个对象相等,对两个对象分别调用equals方法都返回true。
  • 两个对象有相同的hashcode值,它们也不一定是相等的。
  • 因此,equals方法被重写过,则hashcode方法也必须被重写。
  • hashcode()的默认行为是对堆内存上的对象产生独特值。如果没有重写hashcode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。

14.4 为什么两个对象有相同的hashCode值,它们也不一定相等的?

hashCode() 所使用的杂凑算法也许刚好会让多个对象传回相同的杂凑值。越糟糕的杂凑算法越容易碰撞,但这也与数据值域分布的特性有关(所谓碰撞也就是指的是不同的对象得到相同的hashCode)。在HashSet中,在作对比的时候,同样的hashCode有多个对象,它会使用equals()来判断是否真的相同。也就是说hashCode只是用来缩小查找成本的。

14.5 ==与euqals

==:它的作用是判断两个对象的地址是不是相等。即:判断两个对象是不是同一个对象。(基本数据类型"“比较的是值,引用数据类型”"比较的是内存地址)

equals():它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

  • 类没有重写equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
  • 类重写了equals()方法。一般,我们都通过重写equals()方法来比较两个对象的内容是否相等;如果内容相等,则返回true(即,认为这两个对象相等)。

说明:

  • String中的equals方法是被重写过的,因为Object类的equals方法是比较的对象的内存地址,而String的equals方法比较的是对象的值。
  • 当创建String类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重写创建一个String对象。

十五. 关于final关键字的一些总结

final关键字主要用在三个地方:变量、方法、类。

对于一个final变量:

  • 如果是基本数据类型的变量,则其数组一旦初始化以后就不能更改;
  • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

当用final修饰一个类时,表面这个类不能被继承。final类中的所有成员方法都会被隐式的指定为final方法。

使用final修饰方法的原因:

  • 把方法锁定,以防任何继承类修改它的含义
  • 效率:在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的Java版本已经不需要使用final方法进行这些优化了)。类中所有的private方法都隐式地指定为final。

十六. 接口和抽象类的区别

  • 接口的方法默认是public,所有的方法在接口中不能有实现(Java8开始接口方法可以有默认实现),抽象类可以有非抽象的方法。
  • 接口中的实例变量默认是final类型的,而抽象类中则不一定。
  • 一个类可以实现多个接口,但最多只能实现一个抽象类。
  • 一个类实现接口的话要实现接口中的所有方法,而抽象类不一定。
  • 接口不能用new 实例化,但可以声明,但是必须引用一个实现该接口的对象;从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

备注:在JDK8中,接口也可以定义静态方法,可以直接用接口名调用。实现类和实现是不可以调用的。如果同时实现两个接口,接口中定义了一样的默认方法,必须重写,不然会报错。

十七. static关键字

17.1 修饰成员变量和成员方法

被static修饰的成员变量属于静态成员变量,静态变量存放在Java内存区域的方法区中。

调用格式:类名.静态变量名

被static修饰的成员方法属于类,不属于这个类的某个对象,被类中所有的对象共享,并且建议通过类名调用。

调用格式:类名.静态方法名()

17.2 静态代码块

静态代码块定义在类中方法外,静态代码块在非静态代码块之间执行(静态代码块–>非静态代码块–>构造方法)。该类不管创建多少对象,静态代码块只执行一次。

静态代码块的格式是:static{语句体;}

一个类中的静态代码块可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果静态代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问。

静态代码块定义在类中方法外,静态代码块在非静态代码块之前执行(静态代码块–>非静态代码块–>构造方法)。

该类不管创建多少对象,静态代码块只执行一次。

17.3 静态内部类(static修饰类的话,只能修饰内部类)

​ 静态内部类与非静态内部类之间存在一个巨大的区别:非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:

  • 它的创建是不需要依赖外围类的创建。
  • 它不能使用任何外围类的非static成员变量和方法。

17.4 静态导包(用来导入类中的静态资源,1.5之后的新特性)

格式为:import static

这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法。

17.5 静态方法和非静态方法

静态方法属于类本身,非静态方法属于从该类生成的每个对象。如果你的方法执行的操作不依赖于其类的各个变量和方法,请将其设置为静态(这将使程序的占用空间更小)。否则,它应该是非静态的。

总结:

  • 在外部调用静态方法时,可以使用“类名.方法名”的方式,也可以使用“对象名.方法名”的方式。而实例(非静态)方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
  • 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例(非静态)方法则没有这个限制。

17.6 静态代码块和非静态代码块

  • 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,定义多个时按定义的顺序执行,一般在代码块中对一些static变量进行赋值。
  • 不同点:静态代码块在非静态代码块之前执行(静态代码块->非静态代码块->构造方法)。静态代码块只在第一次new 的时候执行一次,之后不再执行,而非静态代码块每new一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。

一般情况下,如果有些代码,比如一些项目最常用的变量或对象必须在项目启动的时就执行的时候,需要使用静态代码块,这种代码是主动执行的。如果我们想要设计不需要创建对象就可以调用类中的方法,例如:Arrays类,Character类,String类等,就需要使用静态方法,两者的区别是:静态代码块是自动执行的而静态方法是被调用的时候才执行的。

17.7 非静态代码块和构造函数

  • 非静态代码块与构造函数的区别是:

  • 非静态代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。

因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化的内容。

17.8 在一个静态方法内调用一个非静态成员为什么是非法的

由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。


本文转载自:不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享

2019社招阿里、腾讯、蚂蚁金服Java面试真题 在过去很长一段时间内,国内互联网一直处于三足鼎立状态,BAT即百度、阿里巴巴、腾讯。而在最新的互联网企业价值榜上,百度却被蚂蚁金服挤出前三的位置。 能够进一线互联网公司,是大部分程序员奋斗的目标,有很多小伙伴可能因为学历望而止步,其实只要能力够,学历真的不是那么重要! 今天给大家带来ATM(阿里巴巴,腾讯,蚂蚁金服)的Java面试真题,希望能帮助各位读者在奋斗的路上少走弯路。 阿里巴... 阅读详情

相关推荐

java(BAT)面试题汇总

自己总结得java(BAT)面试题汇总pdf版,总共834页,116道面试题的详细解答过程,有助于面试求职,积分不多,是自己辛辛苦苦整理的,麻烦广大求职友好评

Java 易错点: 自动装箱与自动拆箱

jdk 升级之后,引入了很多新的特性,如本文所说的自动装箱与自动拆箱。 关于自动装箱与自动拆箱,请自行查阅资料。 package mark.zhang; public class MyCounter { public static void main(String[] args) { long startCountTime = System.currentTime

CodingMan 2001

BATjava面试含答案

BAT面试常见问题,里面包含33道常见的java问题,有助于了解BAT面试的常见问题。

Java基础面试题

1.输出下列代码结果 class A { static { System.out.println("1"); } public A() { System.out.println("2"); } } class B extends A { static { System.out.println("a"); } public B() { System.out.pr

张巍的博客 616

Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

下面小编就为大家带来一篇Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Telegram Bot Api使用教程

其中token为你的机器人token,method为telegram给定的方法,在获取群组chat_id那一步就使用了telegram的其中一个方法(getUpdates),其他方法后面会介绍。telegram发送消息的方式类似与钉钉机器人,都是向一个api发送http请求,而且对于同一个APItelegram支持GET和POST两种请求方式.请求的api格式如下。通常来说我们都需要让机器人在一个群组里工作,所以首先我们需要将机器人添加到我们指定的群组,在群组里发送随意消息并@这个机器人,比如...

豫迷糊的码上生活 1万+

耗时整理一周,2023BAT大厂最新Java热门面试题及答案总结

含:Redis核心数据结构,Redis持久化机制与安全机制,哨兵与集群架构,Redis缓存穿透,缓存失效,缓存雪崩,Redis缓存设计与性能优化等。含:分布式架构原理,集群架构原理,分布式锁,分布式事务,分布式协议,分布式配置,海量数据分库分表,分布式调度等。含:消息丢失,消息重复消费,消息乱序,消息积压,延时队列,消息回溯消费,消息刷盘机制,MQ中间件集群架构原理等。含:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式,适配器模式,装饰器模式,代理模式等23种设计模式。

m0_73311735的博客 156

USB之ch376s数据手册

         最近师兄交给我一个项目,虽说刚学嵌入式起步,但上手一个项目怎说都是最好的快速学习方式。因为刚了解ch376s管理U盘的数据,所以先是看了ch376s的数据手册。那我就把数据手册直接放上来吧。。。。      1、概述 CH376 是文件管理控制芯片,用于单片机系统读写 U 盘或者 SD 卡中的文件。 CH376 支持 USB 设备方式和 USB 主机方式,并且内置了 USB 通...

iBGG的博客 6002

多线程基础学习

1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支 持,它也是一个很好的卖点。欲了解更多详细信息请点击这里。 2) 线程和进程有什么区...

654

基于唤醒音频的目标说话人语音识别系统设计报告

摘要 本报告设计了一套基于唤醒音频的目标说话人语音识别系统,通过五级流水线架构(唤醒检测→声纹注册→语音分离→目标ASR→拒识决策)解决复杂声学场景下的目标说话人识别问题。系统整合ECAPA-TDNN声纹模型、Conv-TasNet语音分离网络和Whisper ASR引擎,在L20 GPU上实现高效端到端推理,支持-5dB~5dB SNR范围和0~100%重叠率的双人语音场景处理。系统在目标说话人CER、拒识率和推理效率等关键指标上均达到设计目标,为智能语音交互提供了有效的身份感知解决方案。

huanghm88的专栏 73

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3150

java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享

一. JDK/JRE/JVM 三者之间的联系与区别JDK:开发者提供的开发工具箱,是给程序开发者用的。它包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。JRE:(Java Runtime Environment) JVM运行时所须的包依赖的环境都在JRE中。JVM:当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,...

weixin_39612677的博客 102

基于Simulink进行步进电机的重复控制仿真建模

目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

MHD0815的博客 382

不想进BAT的Java程序员不是好的程序员吗?分享一波BAT后端的Java岗面试真题分享(附答案)

一. JDK/JRE/JVM 三者之间的联系与区别 JDK:开发者提供的开发工具箱,是给程序开发者用的。它包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。 JRE:(Java Runtime Environment) JVM运行时所须的包依赖的环境都在JRE中。 JVM:当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理、垃圾回收和安全机制等。这种独立于硬件和操作系统,正是Java程序可..

如果频繁就私信一下呢 174

在 Zynq 7010 上运行 VxWorks 7.0 的详细流程【持续更新】

本文介绍了在Zynq 7010开发板上运行VxWorks 7.0的完整流程。主要包括:1)使用Vivado创建硬件设计,配置Zynq模块并生成比特流文件;2)通过Workbench 4创建VxWorks工程,配置启动参数并生成镜像;3)下载运行步骤。此外还讲解了使用Workbench 4开发VSB和VIP工程的方法,包括工程创建、配置和调试流程。文中提供了关键操作截图和注意事项,为开发者提供了完整的Zynq 7010平台VxWorks开发解决方案。

weixin_45397344的博客 1223

2026保姆级:1小时搞定C# OPC UA客户端开发——PLC与上位机全量数据交互零基础教程

本文介绍了使用C#开发OPC UA客户端的核心流程和关键代码实现。文章首先指出工业上位机开发中OPC UA的重要性,并针对新手常见问题提出了1小时掌握核心功能的解决方案。重点内容包括:选择官方.NET Standard库的优势、5分钟搭建开发环境的步骤、OPC UA客户端架构与通信流程的图解说明,以及完整的客户端基础类代码实现,涵盖了连接管理、证书配置、安全认证等关键功能。通过本文提供的代码模板,开发者可快速实现与PLC等工业设备的稳定数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 799

原创文章汇总(职场经验分享、自学教程、面试真题解析、技术专题深度解析)

Java 进阶学习、面试真题解析、面试经验分享

程序员囧辉 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

论:一个草根程序员怎么进BAT??

因此,把AbstractQueuedSynchronizer这个类研究透彻,非常有助于你理解concurrent包。最后一点,面试的时候还经常会被问到的一个问题,就是ReentrantLock和synchronized关键字有什么区别。记得LZ之前组织过的YY面试活动里,LZ问过很多次这个问题,但几乎所有人都答不出来。这只能说明一个问题,那就是大部分人在用synchronized和ReentrantLock的时候,并不会考虑这两者到底用哪个好一些。

2401_84435885的博客 832

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 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")

面试BAT时,他们问了我这些!

能进入BAT 等一线大厂工作,是很多开发者们的目标与梦想,为帮助开发者们提升面试技能、高效通关一线互联网公司的面试,提炼总结了这份面试真题,一次整体放出送给大家。 看看自己能答对多少 本篇建议大家收藏、备用~ 【BAT 等一线互联网面试真题集锦】 涵盖:开源、Java集合、JVM、NIO、Dubbo、秒杀系统、高并发、分布式、锁、redis、MySQL、Linux、hashMap、中间件等...

JavaEdge全是干货的技术号 6861

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

2025Java面试红皮书:1000道BAT真题详解

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析,阐述下如何去准备,去回答面试官的提问,可以和面试官有个愉快的交谈。小编分享的这份 BAT 必考 Java 真题合集包含了性能调优、并发编程。

sjkflw121150的博客 764

2025Java面试红皮书:1000道BAT真题详解,GitHub已爆火的免费上岸手册

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析,阐述下如何去准备,去回答面试官的提问,可以和面试官有个愉快的交谈。

m0_50180963的博客 846

Java岗招聘标准水涨船高,五年Java程序员表示面试太难了

一位从事Java工作五年的朋友最近参加了几场面试,结束之后感概不已,现在互联网公司的用人标准水涨船高,面试机会少了,就连面试的难度都越来越大了。 但不管怎样,扎实的基本功、准备的充分程度,都能决定你的Java工程师之路未来能走多远。只有同时掌握两点,才能决胜未来。我一直相信,机会是留给有准备的人的,所以,请提早准备,越早越好。 Mike总结的1-5年工作经验Java工程师学习方向与内容,以及最新的...

mikechen的互联网架构 1087

数据结构与算法java版_2020互联网企业Java岗面试总纲:JVM+分布式+Spring+算法数据结构...

去年我持续分享了BAT TMD为代表的大厂最新面试题目,特别是阿里(蚂蚁金服)、腾讯、百度、京东、头条、网易、拼多多等Java技术专场题目。过去1年,我已经成功的帮助了部分朋友进入了大厂。2020开始,我依然会为大家带来最新的一线互联网公司现场面试专场题目,希望能帮助到更多的小伙伴实现自己的大厂梦。回到正题,金三银四将正式到来,这是一个比较重要的涨薪季。我知道很多朋友早就在未雨绸缪,已经提前开始准...

weixin_39822728的博客 181
上一篇: 不会Java 注解?阿里架构师7分钟带你学会Java 注解基本原理
下一篇: 年终Redis总结:数据结构+持久化+事务;附《深入理解Redis》+面试题
Java_supermanNO1
博客等级 码龄7年 1170粉丝 329原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值