首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏luoheng

    Java 编程问题

    本文为《Java Coding Problems》读书笔记。学习语言从解决问题开始,《Java Coding Problems》一书中包含了Java编程中常遇到的一些问题。 57Working With Date And Time 58-77Type Inference 78-98Arrays, Collections, And Data Structures 99-128Java I/O Paths, Files, Buffers, Scanning, And Formatting 129-148Java Reflection Classes, Interfaces, Constructors 书中以Java的方式解决诸多常见问题。后续文章中记录这些问题的解法,以此学习Java语言的常规技巧。 参考资料:https://learning.oreilly.com/library/view/java-coding-problems/9781789801415/。

    77200编辑于 2022-09-01
  • 来自专栏信数据得永生

    Java 编程问题:十二、`Optional`

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自【ApacheCN Java 译文集】,自豪地采用谷歌翻译。 本节介绍的问题和解决方案基于 Java 语言架构师 Brian Goetz 的定义: “Optional旨在为库方法返回类型提供一种有限的机制,在这种情况下,需要有一种明确的方式来表示无结果,并且使用null 问题 使用以下问题来测试你的Optional编程能力。 解决方案 以下各节介绍上述问题的解决方案。记住,通常没有一个正确的方法来解决一个特定的问题。另外,请记住,这里显示的解释仅包括解决问题所需的最有趣和最重要的细节。 本场景的候选对象是 Java 反射 APIMethod.invoke()(见第 7 章、“Java 反射类、接口、构造器、方法、字段”。

    1.6K20编辑于 2022-07-11
  • 来自专栏程序人生 阅读快乐

    Java编程思想-第4

    本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。 从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。 本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。 这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。 第4版特点: 适合初学者与专业人员的经典的面向对象叙述方式,为更新的Java SE5/6增加了新的示例和章节。

    56520发布于 2018-10-10
  • 来自专栏大数据钻研

    Java编程常见问题汇总

    Ajax,然后写个简单的Todo网页应用界面 1天的时间学会使用cowboy或者mochiweb,作为webserver使用 2天的时间完成 HTML+Erlang的Todo应用的前后端 2天时间把3、4、 ,而程序员思维经常被当做贬义词,因为多数情况下程序员思考问题像个计算机,并把这种思考模式带到了生活当中。 复杂到看不出问题还是简单到明显没有问题? 熟悉git吗?熟悉svn吗?他们的原理如何?最佳实践呢? 代码运行效率 统计过CPU/GPU/磁盘IO/网络IO/内存的消耗吗? 一次磁盘IO耗时多少? 至少一门静态编程语言,一门动态编程语言,一门函数性语言 2. 会web编程、app编程 3. 会大数据相关的技术:存储、挖掘、分析 4. 实践 其实这只是变为优秀程序员的一个步骤而已,根据我的观察,多数人学习编程时死在了这个山头。

    80870发布于 2018-04-18
  • 来自专栏信数据得永生

    Java 编程问题:四、类型推断

    本章包括 21 个涉及 JEP286 或 Java 局部变量类型推断(LVTI)的问题,也称为var类型。这些问题经过精心设计,以揭示最佳实践和使用var时所涉及的常见错误。 问题 使用以下问题来测试您的类型推断编程能力。 )(img/95cb6f1d-d16c-4a89-b68b-50281887697b.png)] 这个问题的解决方案是在依赖 LVTI 时为局部变量提供一个有意义的名称。 -1657077646422)(img/ec6aa8f3-a41c-4cc5-bff2-9d08083bcc91.png)] 这个问题的解决方案包括使用显式 Java 字面值: // Prefer var 使用var而不考虑可能的清晰度损失会产生这些问题。像这样的一些问题和代码将成为一个真正的痛苦。 83 LVTI 与面向接口编程技术相结合 Java 最佳实践鼓励我们将代码绑定到抽象。

    1.6K40编辑于 2022-07-11
  • 来自专栏一个会写诗的程序员的博客

    《Spring Boot极简教程》附录4 Java编程简史 附录4 Java编程简史参考资料

    附录4 Java编程简史 从GOTO到OOP 在20世纪60年代,软件曾出现过严重危机,由软件错误而引起的信息丢失、系统报废事件屡有发生。 最终,JDK 1.7的主要改进包括:提供新的G1收集器(G1在发布时依然处于Experimental状态,直至2012年4月的Update 4中才正式“转正”)、加强对非Java语言的调用支持(JSR- 和C#编写的一些类型的应用程序——像广播自动化、调度以及选举系统之类那些东西——它们许多都需要解决的并发问题.我发现只用面向对象编程和用那些语言的并发方法,对于处理这些类型的问题并不怎么够好——它们太难了 我是List的拥护者,还有其它的函数式语言,而我想要做的就是解决那些问题,创造一种立足于实际的语言,再也不用拿Java编程了.” RebelLabs《Java工具和技术概览2014》[4]的报告上“要去学习的下一个JVM语言”: ?

    50620发布于 2018-08-20
  • 来自专栏全栈程序员必看

    java并发编程实战_java解决并发问题

    Executors 在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。 Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。 因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免this逃逸问题——如果我们在构造器中启动一个线程 Java 开发者很有必要学习和理解他们,以便更高效的使用 Java 提供的不同类型的线程池。 4种方式,这里不再细说,要了解的,自己可以阅读下源码)。

    1K20编辑于 2022-10-01
  • 来自专栏信数据得永生

    Java 编程问题:九、函数式编程——深入研究

    本章包括 22 个涉及 Java 函数式编程问题。这里,我们将重点讨论在流中遇到的涉及经典操作的几个问题(例如,filter和map),并讨论无限流、空安全流和缺省方法。 一旦您涵盖了本章和上一章,您就可以在生产应用上释放函数式编程了。下面的问题将为您准备各种各样的用例,包括角落用例或陷阱。 问题 使用以下问题来测试您的函数式编程能力。 /raw/master/docs/java-coding-prob/img/2a4b5c75-e4c9-41f5-9cd7-fcb8b592cbcf.png)] 这一次,我们可以看到在应用了stream /raw/master/docs/java-coding-prob/img/368e3557-d155-4aae-bba2-c26bc0a960be.png)] 为了解决这个问题,我们必须依赖于flatMap 在流和函数式编程java8)之前,这样的任务是通过一堆繁琐、冗长且容易出错的意大利面代码应用于集合的。从 Java8 开始,我们有分组收集器。 在下一节中,我们来看看单级分组和多级分组。

    2.2K10编辑于 2022-07-11
  • 来自专栏花狗在Qt

    Java开发编程规范: 4.OOP 规约

    【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。 说明:可变参数必须放置在参数列表的最后。 (提倡同学们尽量不用可变参数编程) 正例:public List<User> listUsers(String type, Long... ids) {...} 在 getter/setter 方法中,不要增加业务逻辑,增加排查问题的难度。 4) 不允许运行过程中重新赋值的局部变量。      5) 避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量,方便更好 地进行重构。 4) 类非 static 成员变量并且仅在本类使用,必须是 private。      5) 类 static 成员变量如果仅在本类使用,必须是 private。      

    1.2K41发布于 2020-10-28
  • 来自专栏Ryan Miao

    java并发编程4)--线程池的使用

    转载:http://www.cnblogs.com/dolphin0520/p/3932921.html 一. java中的ThreadPoolExecutor类 java.util.concurrent.ThreadPoolExecutor 类时线程池中最核心的一个类,因此如果要透彻的了解java中线程池,必须先了解这个类。 ;然后就将任务也分配给这4个临时工人做;如果说这14个工人做任务的速度还是不够,此时工厂主管可能就要考虑不再接收新的任务或者抛弃前面的一些任务了。 这个例子中的corePoolSize就是10,而maximumPoolSize就是14(10+4)。 不过在java doc中,并不提倡我们直接使用ThreadPoolExecutor,而是使用Executors类中提供的几个静态方法来创建线程池: Executors.newCachedThreadPool

    91680发布于 2018-03-13
  • 来自专栏java一日一条

    Java编程常见问题汇总2

    这里有一个问题,connect可以指定超时时间,但是read无法指定超时时间。但是可以设置阻塞(block)时间。 正确的写法: ? 为了解决这些问题,一般采用缓存和异步/消息队列处理。 频繁使用计时器 错误代码: ? 这个代码有两个问题, 一个是没有告诉调用者, 系统调用出错了. 第二个是日志没有出错原因, 很难跟踪定位问题。 正确的写法: ? 重复包装RuntimeException 错误的写法: ?

    56410发布于 2018-09-18
  • 来自专栏程序编程之旅

    Java---网络编程(4)-CS-BS

    编程练习1 1、自定义一个服务器,接收浏览器发来的信息。显示浏览器发送了什么信息,并向浏览器发送简单的网页信息。 java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.ServerSocket ; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter 这很可能是TCP的三次握手造成的,即客户浏览器跟服务器进行几次请求与应答通讯,而服务器在第二次(同一次请求中的第2次握手)收到信息时却用另一个线程去接,因此握手就实现不了,而服务器却多次输出收到消息 编程练习 </body></html> 编程练习3: 3、网络蜘蛛,收集网页中的邮箱地址信息。

    43420发布于 2021-01-21
  • 来自专栏程序猿的大杂烩

    Java并发编程4)- 线程安全策略

    所以使用起来相对会有些不便,而Java在这方面提供了相应的同步容器,我们可以在多线程情况下可以结合实际场景考虑使用这些同步容器。 delIndex = v1.indexOf(integer); } } v1.remove(delIndex); } 最方便的方式就是使用jdk1.8提供的函数式编程接口 本小节将简单介绍一下并发容器,并发容器也称为J.U.C,即是其包名:java.util.concurrent。 ,即内存占用问题和数据一致性问题: 内存占用问题: 因为CopyOnWriteArrayList的写操作时的复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象 的4倍左右。

    73630发布于 2020-09-23
  • 来自专栏信数据得永生

    Java 编程问题:十一、并发-深入探索

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自【ApacheCN Java 译文集】,自豪地采用谷歌翻译。 本章包括涉及 Java 并发的 13 个问题,涉及 Fork/Join 框架、CompletableFuture、ReentrantLock、ReentrantReadWriteLock、StampedLock 读完本章,您将对并发性有相当的了解,这是每个 Java 开发人员都需要的。 问题 使用以下问题来测试您的并发编程能力。 thread:main [10:30:53] [INFO] Result: 10 216 CompletableFuture JDK8 通过用CompletableFuture增强Future,在异步编程领域迈出了重要的一步 我们可以通过同步来修复问题,或者通过原子变量来更好地解决问题。 原子变量类在java.util.concurrent.atomic中可用。

    1.3K20编辑于 2022-07-11
  • 来自专栏java一日一条

    Java编程常见问题汇总1

    每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题。虽然一般没有什么大问题,但是最好别这样做。 另外这里提到的很多问题其实可以通过Findbugs( http://findbugs.sourceforge.net/ )来帮我们进行检查出来。 字符串连接误用 错误的写法: ? 正确的写法: ? 问题在第三行,append char比String性能要好,另外就是初始化StringBuffer没有指定size,导致中间append时可能重新调整内部数组大小。 另外一个问题不能一次就将一个xml文件用String保存,这样对内存会造成不必要的浪费,正确的做法用InputStream来边读取边处理。为了解决编码的问题, 最好使用XML解析器来处理。

    73020发布于 2018-09-18
  • 来自专栏程序员IT圈

    Java编程常见问题汇总(一)

    另外一个问题不能一次就将一个xml文件用String保存,这样对内存会造成不必要的浪费,正确的做法用InputStream来边读取边处理。为了解决编码的问题, 最好使用XML解析器来处理。 这里有一个问题,connect可以指定超时时间,但是read无法指定超时时间。但是可以设置阻塞(block)时间。 正确的写法: Socket socket = ... 为了解决这些问题,一般采用缓存和异步/消息队列处理。 第二个是日志没有出错原因, 很难跟踪定位问题。 Exception e) { throw new MyRuntimeException("Could not do stuff because: "+ e.getMessage, e); } 作者:java

    1.1K90发布于 2018-03-05
  • 来自专栏java一日一条

    Java编程常见问题汇总3

    这里本意是希望用当前类来加载希望的对象, 但是这里的getClass()可能抛出异常, 特别在一些受管理的环境中, 比如应用服务器, web容器, Java WebStart环境中, 最好的做法是使用当前应用上下文的类加载器来加载 这里有两个错误, 一个是没有没有将毫秒归零, 不过最大的错误是没有指定TimeZone, 不过一般的桌面应用没有问题, 但是如果是服务器端应用则会有一些问题, 比如同一时刻在上海和伦敦就不一样, 因此需要指定的 关于时间的问题可以参考这篇文章: http://www.odi.ch/prog/design/datetime.php 这里主要的问题是Date对象并不包含Time Zone信息. 当然这里又涉及到另外一个OO设计的问题, 对外暴露Date实例本身就是不好的做法(一般的做法是在setter方法中设置Date引用参数的clone对象). 如果java编译器能针对这种情况给出警告. 或者在java语言规范中不支持浮点数类型的==操作就最好了。 正确的写法: ? 用浮点数来保存money 错误的写法: ? 这个也是一个老生常谈的错误.

    64720发布于 2018-09-18
  • 来自专栏藏经阁

    Java】函数式编程与JUC编程问题?函数式编程如何解决线程安全问题

    在实际开发中,两者可以结合使用,以便更好地解决问题 函数式编程之所以突然兴起,是因为它具有以下优点: 易于并行处理: 由于函数式编程中的函数没有副作用,即对同样的输入始终产生相同的输出,因此可以很容易地将一个大问题分解成多个小问题 同时,在Java 8中引入了lambda表达式和Stream API等特性,使得函数式编程Java中得到了更好的支持。 在实际开发中,我们通常会使用多线程来实现并发编程 4. 函数式编程如何解决线程安全问题? 函数式编程可以通过使用不可变数据和纯函数来解决线程安全问题。 在函数式编程中,由于数据全部都是不可变的,并且纯函数没有副作用,所以没有并发编程问题,是多线程安全的。每一个纯函数都是线程安全,更容易被并行执行。 总之,在函数式编程中使用不可变数据和纯函数可以有效地解决线程安全问题,并且使得程序更加容易被并行执行

    68020编辑于 2023-03-08
  • 来自专栏信数据得永生

    Java 编程问题:八、函数式编程-基础和设计模式

    本章包括 11 个涉及 Java 函数式编程问题。我们将从一个问题开始,这个问题旨在提供从 0 到函数式接口的完整过程。 然后,我们将继续研究 GoF 中的一套设计模式,我们将用 Java 函数风格来解释这些模式。 在本章结束时,您应该熟悉函数式编程,并准备好继续处理一组问题,这些问题允许我们深入研究这个主题。 问题 使用以下问题来测试您的函数式编程能力。我强烈建议您在使用解决方案和下载示例程序之前,先尝试一下每个问题: “编写函数式接口”:编写一个程序,通过一组有意义的例子定义从 0 到函数式接口的路径。 /raw/master/docs/java-coding-prob/img/9c5cc105-bad6-40a4-9334-0ea4aac81b72.png)] 为了避免这个样板代码,环绕执行模式依赖于行为参数化 /raw/master/docs/java-coding-prob/img/66d6e3a6-9a8e-4fe1-8a4e-e0266d3ec7ce.png)] 首先,我们创建一个名为Cake的接口:

    1.2K20编辑于 2022-07-11
  • 来自专栏拭心的安卓进阶之路

    并发编程4Java 阻塞队列源码分析(上)

    上篇文章 并发编程3:线程池的使用与执行流程 中我们了解到,线程池中需要使用阻塞队列来保存待执行的任务。这篇文章我们来详细了解下 Java 中的阻塞队列究竟是什么。 具体到 Java 中,使用 BlockingQueue 接口表示阻塞队列: public interface BlockingQueue<E> extends Queue<E> { //添加失败时会抛出异常 七种阻塞队列的前三种 Java 中提供了 7 种 BlockingQueue 的实现,在看线程池之前我根本搞不清楚究竟选择哪个,直到完整地对比总结以后,发现其实也没什么复杂。 看它的主要属性: public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable 不了解 Comparator 和 Comparable 可以看这篇 Java 解惑:Comparable 和 Comparator 的区别。

    1.7K90发布于 2018-01-05
领券