首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写高质量代码

这是因为Math.round采用舍入规则所决定(采用是正无穷方向舍入规则),根据不同场景,慎重选择不同舍入模式,以提高项目的精准度,减少算法损失 提防包装类型null 中不能使用基本类型...异步运算考虑使用Callable接口; (多线程应用两种实现方式一种实现Runnable接口,另一种是继承Thread类,这两个方式都有缺点:run方法没有返回,不能抛出异常(归根到底是Runnable...要达到线程死锁需要四个条件:1、互斥条件;2、资源独占条件;3、不剥夺条件;4、循环等待条件;按照以下两种方式解决:1、避免减少资源贡献;2、使用自旋锁,如果在获取自旋锁时锁已经保持者,那么获取锁操作将...不要完全依靠单元测试发现问题; (单元测试目的是保证各个独立分隔程序单元正确性,虽然它能够发现程序中存在问题(或缺陷、错误),但是单元测试只是排查程序错误一种方式,不能保证代码中所有错误都能被单元测试挖掘出来...增强类可替换性; (Java三大特征:封装、继承、多态;说说多态,一个接口可以多种实现方式,一个父类可以多个子类,并且可以把不同实现子类赋给不同接口父类。

97820

Java研发方向如何准备BAT技术面试答案(上)

11.什么是、为什么要使用以及擦除 ,即“参数化类型”。 创建集合时就指定集合元素类型,该集合只能保存其指定类型元素,避免使用强制类型转换。...Java编译器生成字节码是不包涵信息类型信息将在编译处理是被擦除,这个过程即类型擦除。...擦除可以简单理解为将java代码转换为普通java代码,只不过编译器更直接点,将java代码直接转换成普通java字节码。...void wait(long timeout, int nanos) 导致当前线程等待,直到其他线程调用此对象notify()方法notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量...四.循环等待条件:若干进程之间形成一种头尾相接循环等待资源关系。 34.死锁预防 打破产生死锁四个必要条件中一个几个,保证系统不会进入死锁状态。 一.打破互斥条件。

1.1K50
您找到你想要的搜索结果了吗?
是的
没有找到

Q&A:Java

区别 Integer int 初始 null 0 存储位置 堆 栈 用于 可用于 可以 占用空间 较大 较小 方法 封装了方法,更灵活 无 为什么包装类型?...默认 :从变量是否默认来看,成员变量如果没有被赋初始,则会自动以类型默认而赋值(一种情况例外:被 final 修饰成员变量也必须显式地赋值),而局部变量则不会自动赋值。... 提供编译时类型安全检测机制,通过参数可以指定传入对象类型,编译时可以对参数进行检测 擦除:信息只存在于代码编译阶段,在进入 JVM 之前,与相关信息会被擦除掉。...注解只有被解析之后才会生效,常见解析方法两种: 编译期直接扫描 :编译器在编译 Java 代码时候扫描对应注解并处理,比如某个方法使用@Override 注解,编译器在编译时候就会检测当前方法是否重写了父类对应方法...使用ConcurrentHashMap(推荐) 使用HashTable(不推荐) 使用synchronizedLock加锁(不推荐) ConcurrentHashMap 和 Hashtable 区别

59420

史上最全面Java面试汇总(面试题+答案)

11.什么是、为什么要使用以及擦除  ,即“参数化类型”。 创建集合时就指定集合元素类型,该集合只能保存其指定类型元素,避免使用强制类型转换。...擦除可以简单理解为将java代码转换为普通java代码,只不过编译器更直接点,将java代码直接转换成普通java字节码。...void wait(long timeout, int nanos) 导致当前线程等待,直到其他线程调用此对象notify()方法notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量...四.循环等待条件:若干进程之间形成一种头尾相接循环等待资源关系。  34.死锁预防  打破产生死锁四个必要条件中一个几个,保证系统不会进入死锁状态。 一.打破互斥条件。...设计模式  观察者模式代理模式单例模式五种写法,可以参考文章单例模式五种实现方式可以考Spring中使用了哪些设计模式 分布式相关  分布式事务控制。分布式锁如何设计。

64530

史上最全面Java面试汇总(面试题+答案)

11.什么是、为什么要使用以及擦除 ,即“参数化类型”。 创建集合时就指定集合元素类型,该集合只能保存其指定类型元素,避免使用强制类型转换。...擦除可以简单理解为将java代码转换为普通java代码,只不过编译器更直接点,将java代码直接转换成普通java字节码。...void wait(long timeout, int nanos) 导致当前线程等待,直到其他线程调用此对象notify()方法notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量...四.循环等待条件:若干进程之间形成一种头尾相接循环等待资源关系。 34.死锁预防 打破产生死锁四个必要条件中一个几个,保证系统不会进入死锁状态。 一.打破互斥条件。...设计模式 观察者模式 代理模式 单例模式五种写法,可以参考文章单例模式五种实现方式 可以考Spring中使用了哪些设计模式 分布式相关 分布式事务控制。 分布式锁如何设计。

53320

3小时Java入门

其中TreeMap是一种有序Map. Map常用方法是put和get。如果想查询某个key是否存在,可以调用containsKey....使用Iterator模式进行迭代好处: 对任何容器都采用同一种访问模型; 调用者对容器内部结构一无所知; 容器类返回Iterator对象知道如何迭代。...二十五, 就是编写模板代码适应任意类型。Java容器类中大量使用了好处是使用时不必对类型进行强制转换,它通过编译器对类型进行检查。...Java中实现是使用擦拭法,编译器编译包含类时将换成Object类型, 编译器编译实例化代码时根据具体类型进行安全转型,而JVM虚拟机对一无所知。...Java中用方括号取索引,Scala中用圆括号取索引。 Java中用尖括号表示,Scala中用方括号表示。 Java中数组用花括号表示,Scala中一般用工厂方法。

2.7K30

从 Kotlin 开发者角度看 Java 缺失特性

= computeNullableString() 扩展函数 在 Java 中,扩展一哥类是通过继承实现: 继承类两个主要问题。第一个问题是有些类不允许继承:它们使用了 final 修饰符。...通过这种方式,如果某个方法不存在于某个类中,辅助类就提供这样一个方法,这个方法将这个类作为参数并执行所需操作。...Kotlin 提供了扩展函数来解决同样问题。 Kotlin 提供了不通过类继承使用装饰器等设计模式实现扩展类接口能力。这可以通过一种叫作扩展特殊声明来实现。 ...与之相反是具体化,也就是说,类型将被写入字节码中。 编译时类型存在一些问题。...如果 Java 具体化,就没有必要这么做了: public interface BeanFactory { T getBean();} 想象一下 Kotlin 具体化

76420

2022年Unity面试题分享

5种:类、结构、接口、委托、方法 类型占位符 T 表示 类不是实际类,而是类模板 从类型创建实例 声明类型》通过提供【真实类型】创建构造函数类型》从构造类型创建实例...类 类型参数 性能:不会强行对类型进行装箱和拆箱,对引用类型进行向下强制类型转换,所以性能得到提高 安全:通过知道使用定义变量类型限制,编译器可以在一定程度上验证类型假设...Assetsbundle:即将资源打成 asset bundle 放在服务器本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object,unity官方推荐也是绝大多数商业化项目使用一种方式... Action和Func重要区别: Action只用于没有返回方法,Func只用于返回方法 它们区别: Action里要和方法参数类型相同...,且只有一种 Func里前者和方法参数类型相同,最后一个与返回类型相同 一般用于回调方法,注册事件,类直接数据交互松耦合 链接: 参考资料. ---- 【重点面试题】35、unity常用资源路径哪些

3.8K10

精:C#这些年来受欢迎特性

因为相比于写迭代器,我更频繁地使用。在 C# 中很多 SOLID 编程原则 都是使用强化,同样它也有助于保持代码 干爽 。...编者注:学习如何 在 C# 中 使用提高应用程序可维护性 向.NET Framework引入了类型参数概念,这使得可以设计类和方法推迟一个多个类型规范,直到类方法被客户端代码声明和实例化为止...想象一下,我们大量代表趋势天气信息记录。我们可能希望对这些数据执行一些操作,不是在一个典型循环中遍历它,而是在某个时候,我们可以采用不同方式。...异步/等待 调用方信息 当 C# 5.0 发布时,它实际上改变了 C# 开发人员编写异步代码方式。今天仍然很多困惑,我在这里向您保证,这比大多数人想象要简单得多。...在定义了一个遵循 try-parse 模式私有委托之后,我们可以编写一个复合方法,它可以传递类型参数、字符串和 tryparse 委托。

14330

C# 这些年来受欢迎特性

因为相比于写迭代器,我更频繁地使用。在 C# 中很多 SOLID 编程原则 都是使用强化,同样它也有助于保持代码 干爽 。...编者注:学习如何 在 C# 中 使用提高应用程序可维护性 向.NET Framework引入了类型参数概念,这使得可以设计类和方法推迟一个多个类型规范,直到类方法被客户端代码声明和实例化为止...想象一下,我们大量代表趋势天气信息记录。我们可能希望对这些数据执行一些操作,不是在一个典型循环中遍历它,而是在某个时候,我们可以采用不同方式。...异步/等待 调用方信息 当 C# 5.0 发布时,它实际上改变了 C# 开发人员编写异步代码方式。今天仍然很多困惑,我在这里向您保证,这比大多数人想象要简单得多。...在定义了一个遵循 try-parse 模式私有委托之后,我们可以编写一个复合方法,它可以传递类型参数、字符串和 tryparse 委托。

15420

Java方向如何准备BAT技术面试答案(汇总版)

11.什么是、为什么要使用以及擦除 ,即“参数化类型”。 创建集合时就指定集合元素类型,该集合只能保存其指定类型元素,避免使用强制类型转换。...Java编译器生成字节码是不包涵信息类型信息将在编译处理是被擦除,这个过程即类型擦除。...擦除可以简单理解为将java代码转换为普通java代码,只不过编译器更直接点,将java代码直接转换成普通java字节码。...void wait(long timeout, int nanos) 导致当前线程等待,直到其他线程调用此对象notify()方法notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量...四.循环等待条件:若干进程之间形成一种头尾相接循环等待资源关系。 34.死锁预防 打破产生死锁四个必要条件中一个几个,保证系统不会进入死锁状态。 一.打破互斥条件。

1.1K90

React实战精讲(React_TSAPI)

你能所学到知识点 ❝ TS_React:使用改善类型 TS_React:Hook类型化 TS_React:类型化事件回调 React API ❞ TS_React:使用改善类型 TypeScript...可以直接在浏览器中使⽤ ⽀持模块、和接⼝ 不⽀持接⼝ ---- 典型 TypeScript ⼯作流程 在上图中包含 3 个 ts ⽂件:a.ts、b.ts 和 c.ts。...⾸先我们定义⼀个通⽤ identity 函数,函数「返回类型」与它「参数相同」 我们⽬标是让 identity 函数可以适⽤于「任何特定类型」,为了实现这个⽬标,我们可以使⽤「解决这个问题...通过比较nextProps和nextState,判断当前组件是否必要继续执行更新过程。...getServerSnapshot:返回服务端(hydration模式下)渲染期间使用存储函数 ---- useTransition useTransition: 返回一个「状态」表示过渡任务等待状态

10.3K30

《面试八股文》之 Java 基础 34 卷

HashSet 是「基于 HashMap 实现,底层「采用 HashMap 保存元素」 元素哈希是通过元素 hashcode 方法 获取, HashSet 首先判断两个元素哈希,如果哈希一样...13.什么是:「把类型明确工作推迟到创建对象调用方法时候才去明确特殊类型」 14.擦除是什么?...因为其实只是在编译器中实现而虚拟机并不认识类项,所以要在虚拟机中将类型进行擦除。也就是说,「在编译阶段使用,运行阶段取消,即擦除」。...ReentrantLock两种模式一种是公平锁,一种是非公平锁。...公平模式等待线程入队列后会严格按照队列顺序去执行 非公平模式等待线程入队列后有可能会出现插队情况 「公平锁」 第一步:「获取状态 state 」 如果 state=0 即代表锁没有被其它线程占用

1.3K42

Android面试问题汇总

装饰模式是起到了增加作用,例如ViewGroup拓展了view功能,又能传入view,自己又是view 适配器特点在于兼容 装饰器模式特点在于增强 代理模式特点在于隔离 3.通过静态内部类实现单例模式哪些优点...详细看SparseArray和ArrayMap 简单介绍一下java中擦除以及相关概念,解析与分派? 1、类型参数只能是类类型(包括自定义类),不是简单类型。...2、同一种可以对应多个版本(因为参数类型是不确),不同版本类实例是不兼容。 3、类型参数可以多个。 4、参数类型可以使用extends语句,例如。...信息只存在代码编译阶段,在进入JVM之前,与信息都会被擦除掉。...Volatile 1)保证了不同线程对这个变量进行操作时可见性即一个线程修改了某个变量,这新对其他线程是立即可见。 2)禁止进行指令重排序。

28110

Rust学习笔记之、trait 与生命周期

在函数定义中使用 当使用定义函数时,本来在函数签名中指定参数和返回类型地方,会改用表示。...---- 结构体定义中 同样也可以用 语法定义「结构体」,它包含一个多个参数类型字段。...可以通过 trait 以一种抽象方式定义共享行为。可以使用 trait bounds 指定是任何拥有特定行为类型。...这样当为某个特定类型实现 trait 时,可以选择「保留」「重载」每个方法默认行为。...第三条规则使得方法更容易读写,因为只需更少符号。 ❞ ---- 方法定义中生命周期标注 声明和使用生命周期参数位置依赖于生命周期参数是否同结构体字段方法参数和返回相关。

1.5K20

编写高质量可维护代码:Awesome TypeScript

后续如果订单相关操作功能有变化,只需要重新定义一个类实现这个接口即可。...允许同一个函数接受不同类型参数,相比于使用 Any 类型,使用创建组件可复用和易扩展性要更好,因为会保留参数类型。可以应用于接口、类、变量。...使用大写字母 A-Z 定义类型变量都属于,常见变量如下: T(Type):表示一个 TypeScript 类型 K(Key):表示对象中键类型 V(Value):表示对象中类型 E(Element...request is ReqParams { return request && request.url } 开发小技巧 需要连续判断某个对象里面是否存在某个深层次属性,可以使用 ?....语法实现工厂模式很简单,只需先定义一个函数,并声明一个构造函数类型参数,然后在函数体里面返回 c 这个类构造出来对象即可。

2.4K10

理解C#中ValueTask

一、Task 虽然Task用法很多,但其最核心是“承诺(promise)”,用来表示某个操作最终完成。...ValueTask.IsCompleted之类属性,返回指示异步操作是否仍在挂起或是否已完成以及完成情况(成功失败)指示。...这也意味着非ValueTask是不必要(因为没有TResult):对于同步完成情况,返回为Task方法可以返回Task.CompletedTask单例,此单例由async Task方法运行时隐式返回...因此,在.NET Core 2.1中,我们还引入了非ValueTask和IValueTaskSource。它们提供版本对应版本,使用方式类似,只是GetResult返回void。...在添加抽象、虚拟接口方法时,您还需要考虑这些方法重载/实现是否存在这些情况。 八、ValueTask和ValueTask下一步是什么?

22330

理解C#中ValueTask

一、Task 虽然Task用法很多,但其最核心是“承诺(promise)”,用来表示某个操作最终完成。...ValueTask.IsCompleted之类属性,返回指示异步操作是否仍在挂起或是否已完成以及完成情况(成功失败)指示。...这也意味着非ValueTask是不必要(因为没有TResult):对于同步完成情况,返回为Task方法可以返回Task.CompletedTask单例,此单例由async Task方法运行时隐式返回...因此,在.NET Core 2.1中,我们还引入了非ValueTask和IValueTaskSource。它们提供版本对应版本,使用方式类似,只是GetResult返回void。...在添加抽象、虚拟接口方法时,您还需要考虑这些方法重载/实现是否存在这些情况。 八、ValueTask和ValueTask下一步是什么?

27540

Java基础

反射作用:undefined1)可以使用反射动态地创建类型实例,将类型绑定到现有对象,从现有对象中获取类型undefined2)应用程序需要在运行时从某个特定程序集中载入一个特定类型,以便实现某个任务时可以用到反射...Java实现方法:类型擦除undefinedJava是伪,因为Java在编译期间,所有的信息都会被擦掉。...Java基本上都是在编译器这个层次上实现,在生成字节码中是不包含类型信息,使用时候加上类型参数,在编译器编译时候会去掉,这个过程称为类型擦除。 30....由于抽象类,它允许使用接口名作为引用变量类型。通常动态联编将生效。引用可以转换到接口类型从接口类型转换,instanceof 运算符可以用来决定某对象是否实现了接口。...内部类好处 完善了Java多继承机制,由于每一个内部类都可以独立继承接口类,所以无论外部类是否继承实现某个接口,对于内部类没有影响。 方便写事件驱动程序。 32.

1.3K10
领券