隔叶黄莺 Yanbin's Blog - 软件编程实践
open-menu closeme
Home
Archives
Links icon
LinkedIn X
留言
关于
github twitter linkedin rss
  • 《100 Java Mistakes and How to Avoid Them》笔记 3

    calendar Dec 28, 2023 · 4 min read · Java  ·
    Share on: twitter facebook linkedin copy
    本书的阅读又搁置了许久,虽然感觉 Manning 出版社的这一 100 Mistakes 系列从书的质量不是那么的高,但开了头还是继续从本书 40% 的位置往下。


    开始要讲述到异常了,异常还是有必要认真对待的,比如

    1. Java 中很容易被 CheckedException 弄得代码不整洁
    2. 缺少必要的参数检查,不舍得抛出异常,视异常为 Bug
    3. 不明确出现异常时后续如何处理,
    4. 或者是捕获而隐藏了异常致使定位错误变得更难。

    Java 的主要异常大分类是
    Throwable
    ├── Error
    └── Exception
              └── RuntimeException
    NullPointerException, 这恐怕是一个最常见的异常,Java 对一个对象是否能为 null 值没什么约束,甚至用 null 来表示业务上的空。比如说方法的参数与返回值,Java 都可以是 null 值,而在 Kotlin 中非明确可为 null 的时不能为 null Read More
  • 《100 Java Mistakes and How to Avoid Them》笔记 2

    calendar Oct 25, 2023 · 5 min read · Java  ·
    Share on: twitter facebook linkedin copy
    《100 Java Mistakes and How to Avoid Them》笔记 2
    继续阅读本书,编程语言处理数值都有可能出现问题,如溢出,整数的最大最小值不对称,Double.NaN 等。


    由于 Java 学了 C,也用 0 开始的数字来表示 8 进制数,如 037, 010 分别是十进制的 31 和 8,这与现实不相符。因为如果你在纸上写下 037, 010, 几乎所有人(除了某些程序员)都会认为它们就是十进制的 37 和 10。但是 Java 表示 2 进制, 16 进制的方式没有问题的,如 0b10, 0x37。IntelliJ IDEA 看到使用 0 开头的 8 进制数会不建议那么使用. 8 进制数字的范围是 0~8, 所以 09 是错误的, 但是 Java 编译器似乎对此很陌生.

    int a = 09;

    IntelliJ IDEA 会提示 Integer number too large, 编译器提示说 java: ';' expected, 有点驴唇不对马嘴.

    现在几乎没有必要使用 0 开始的 8 进制数的方式, 或许还有用的就是表示 Unix 下文件权限, 如

    int fileMode = 0644

    所以任何时候看到 0 开头的数字都必须仔细检视, 基本可以禁止使用这种方式 Read More
  • 《100 Java Mistakes and How to Avoid Them》笔记 1

    calendar Sep 17, 2023 · 8 min read · Notes  ·
    Share on: twitter facebook linkedin copy
    《100 Java Mistakes and How to Avoid Them》笔记 1
    这几日在阅读 Manning 出版社的 《100 Java Mistakes and How to Avoid Them》, 其中列举的确实是一些容易带入到代码中的错误,不少还是通过代码 Review 或单元测试很难发现的问题。也有些看似很弱智,却可能是隐匿许久的定时炸弹,只等某一特定条件出现时即爆。


    阅读的同时简单的作了笔记及少许联想,所以内容有些杂乱无条理。最前面介绍了一些静态代码分析工具,也有两个动态分析工具。本书目前还是 Manning 的 MEAP 体验版,未正式发售。一共讲了 100 个常见错误如何避免(例如,怎么用最新 Java(Java 9 -- Java 21) 语法, API 来改进),以及用静态分析工具,单元测试及早发现。

    这是读完了 1/4 数量的记录,笔记开始 Read More
  • Apache 配置 SSL(HTTPS) 并整合 Tomcat

    calendar Mar 30, 2014 · 1 min read · Apache Tomcat HTTPS  ·
    Share on: twitter facebook linkedin copy
    我们在 Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问, 不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS 协议部份,甚至是静态页面是交给 Apache 的处理,Apache 与 Tomcat 之间有一个通道。 当然前端用 F5 那类负载均衡设备就另当别论了。

    这里实践一下怎么开启 Apache 的 HTTPS,并与 Tomcat 进行整合的操作。平台是 Mac OS X, Apache2, Tomat8,其他平台或不同版本的应用软件配置类似。

    第一步: 生成自签署证书

    安全加密的东西都得证书,我们需要用到 openssl,没有就先安装它,命令是:
    openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
    上面命令可以指定生成 server.crt 和 server.key 文件的目录,默认产生在当前目录下,假设这两个文件生成在 /etc/apache2 目录下。 Read More
  • 快速启用 Tomcat 的 HTTPS 协议访问

    calendar Mar 29, 2014 · 1 min read · Tomcat HTTPS  ·
    Share on: twitter facebook linkedin copy
    有时候安全考虑会要开启 Tomcat 的 https 协议访问,最快速的配置,两步


    1. 创建 keystore 文件
    执行 JDK 带的命令
    keytool -genkey -alias tomcat -keyalg RSA
    按命令提示各个信息即可,最后在用户主目录下创建了一个 .keystore 文件

    2. 配置 Tomcat 使用 keystore 文件

    打开 server.xml 找到下面被注释的这段
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
              maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS" />
    -->
    
    Read More
  • Ant 提示输入并根据用户输入执行不同的任务

    calendar Jan 29, 2014 · 2 min read · ant 自动化  ·
    Share on: twitter facebook linkedin copy
    使用 Ant 进行自动化处理时,不想记住每一个 target  的名称,而是让默认的 target 列出需要的 target 出来,让用户输入名称或数字选择执行哪个 target。这样做自然是多了一步,有时候确也方便不少,但 Ant 还是有个缺点,它不能持久性的保持在 Ant 控制台下,持续的进行用户交互。


    对于实现 Ant 的简单用户交互,我们可以借助于两个 Task,input 和 antcall, input 用来提示用户输入值,再根据 input 设定的属性来确定 antcall 调用哪个 target。执行完退出到系统 Shell 下,想要再来,就再执行一下 ant 吧,我也只能做到这一步了。

    看下面的例子 build.xml 内容 Read More
  • 关于 JavaBean 规范你还是应该知道的二三事(补充)

    calendar Jul 2, 2009 · 1 min read · Java JavaBean  ·
    Share on: twitter facebook linkedin copy

    前面写过一篇: 关于 JavaBean 规范你还是应该知道的二三事 ,发现还略受关注。其中有人对 boolean 型属性的 getter/setter 方法还有些想法,以及 JavaBean 的规范是根据属性名找相应的 getter/setter 方法,还是由 getter/setter 定位属性呢。本文主要就这两问题展开话题,原本想附中前篇中去,但考虑会让前文凌乱,所以另立新篇。

    1. 关于 boolean  型属性

    分别来看看 Eclipse(3.5) 和 NetBean(6.7) 的重构功能对 oolean student 和 boolean isStudent 生成什么样的 getter/setter 方法的。 Read More

  • 关于 JavaBean 规范你还是应该知道的二三事

    calendar Jul 1, 2009 · 2 min read · Java JavaBean  ·
    Share on: twitter facebook linkedin copy
    作为 Java  程序员,对于 JavaBean 也许你会说再熟悉不过了,它贯穿在系统的多层中,不同的叫法有 PO、VO、DTO、POJO、DO(Domain Object)。然而它无外乎就是一个 Class 类,带上些属性和它们的 setter/getter 方法,set/get 后面那一个字母大写。虽然我们现在很少把 JavaBean 与那个古老的 2.0 的 EJB 搞混,但为什么明明用 IDE 为属性生成的 getter/setter 方法,应用一运行,还是报找不到某个 bean 属性的 setter 或 getter 方法呢?

    要知道,在 Sun 的网站上那个关于 JavaBean 规范的 PDF 文档可是有足足实实的 114 页啊。难免有些规则有点古怪,至使知名的 IDE 都难以应对,所以我们还是有必要了解其中二三,来规范我们的 JavaBean 和解释一些情形。

    Sun  的关于 JavaBean 规范见:http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html,其中可下载到 JavaBean 规范的  PDF 文档。 Read More
  • 拾谈"用最有效率的方法算出2乘以8等於几?"

    calendar Jun 18, 2006 · 2 min read · compile  ·
    Share on: twitter facebook linkedin copy
    这是网上流传的"变态级JAVA程序员面试32问"的其中一题(二十八题),然后下面给出来的答案是

    第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
    有C背景的程序员特别喜欢问这种问题。

    2 << 3

    粗看似乎很在理,大致想来2<<3会是移位操作,在Java的字节码中移位指令是ishl(右移),而在CPU上的硬件指令可能就会是shl(算术右移指令)。其实不然,如果熟悉汇编语言,还考虑过编译优化,2<<3根本不会使用移位操作,而是在编译时就优化计算出16来了。

    但如果是写成这样的方式(int i = 2; int j = i<<2;),又是不一样的,大家可以从代码不同写法生成的Java操作指令或汇编指令看出个端倪。 Read More
  • 用Ant进行单元测试并生成测试报告

    calendar Jan 3, 2006 · 1 min read · ant JUnit Report  ·
    Share on: twitter facebook linkedin copy
    关键Ant的build文件如下(已加上比较详细的说明)


     1<?xml version="1.0" encoding="UTF-8"?>
     2<project basedir="." default="main" name="excute TestCase and build test report">
     3    <!-- 测试报告存放目录 -->
     4    <property name="build.reports.dir" value="${basedir}/report" />
     5    <target name="main">
     6        <!-- 删除测试报告数据,重新生成 -->
     7        <delete>
     8            <fileset dir="${basedir}/report">
     9                <include name="*.*" />
    10            </fileset>
    11        </delete>
    12        <junit fork="yes" printsummary="true">
    13            <!-- 生成的class目录以及执行TestCase所依赖的库
    14            无论是用<test>还是<batchtest>都要这个配置 -->
    15            <classpath location="${basedir}/bin" />
    16            <!-- 生成报告数据的格式,可能多个,支持xml/brief/plain -->
    17            <formatter type="xml" />
    18            <formatter type="brief" usefile="false" />
    19            <!-- 可以用<test>也可以用<batchtest>,但两种的设置有一些区别
    20                以下<test>和<batchtest>三种形式用某一种就可以的 -->
    21            <!-- name指定Class的名称,如CatTest或com.unmi.CatTest -->
    22            <test name="CatTest" todir="${build.reports.dir}" />
    23            <!-- 注意其中<fileset>的dir属性及<include>的name属性指代的意义 -->
    24            <batchtest todir="${build.reports.dir}">
    25                <!-- dir属性指定TestCase类的源代码的路径 -->
    26                <fileset dir="${basedir}/src">
    27                    <!-- name属性指定TestCase源文件规则 -->
    28                    <include name="**/*Test.java" />
    29                </fileset>
    30            </batchtest>
    31            <!-- 上面的<batchtest>还可以写成如下形式,<fileset>按指定为class
    32                  注意其中<fileset>的dir属性及<include>的name属性指代的意义 -->
    33            <batchtest todir="${build.reports.dir}">
    34                <!-- dir属性指定TestCase类的路径 -->
    35                <fileset dir="${basedir}/bin">
    36                    <!-- name属性指定TestCase类文件规则 -->
    37                    <include name="**/*Test.class" />
    38                </fileset>
    39            </batchtest>
    40        </junit>
    41        <!-- 用执行以上TestCase生成的报告数据生成测试报告 -->
    42        <junitreport todir="${build.reports.dir}">
    43            <fileset dir="${build.reports.dir}">
    44                <include name="TEST-*.xml" />
    45            </fileset>
    46            <!-- 指定生成测试报告的格式frames/noframes,和报告存放目录 -->
    47            <report format="frames" todir="${build.reports.dir}" />
    48        </junitreport>
    49    </target>
    50</project>
    下面以后也会加上测试报告的贴图的。
    • ««
    • «
    • 1
    • 2
    • »
    • »»

Yanbin Qiu

长年奋斗在软件编程第一线的从业人员,以写日志的形式帮助自己记忆与深入探索,文章若对大家有所帮助,实属敝人之荣幸。
Read More

Featured Posts

  • Rust 调用 C/Rust 生成的动态库
  • AWS 上 Java Lambda 应用记要
  • Apache 配置 SSL(HTTPS) 并整合 Tomcat
  • My First Post
  • Markdown Syntax Guide

Recent Posts

  • 学习 Rust 的工作空间, 包, Crate 和模块管理
  • 《100 Java Mistakes and How to Avoid Them》笔记 3
  • 《100 Java Mistakes and How to Avoid Them》笔记 2
  • 《100 Java Mistakes and How to Avoid Them》笔记 1
  • AWS Lambda 中使用 Python 并发编程
  • AWS Lambda 重试与死信队列(DLQ)
  • AWS Lambda 按序处理同一个 Kinesis Shard 中的消息
  • AWS Java Lambda 与环境变量

Categories

JAVA/JEE 11 AWS 6 CLOJURE 3 JVM 3 READINGNOTES 3 MID-WARE 2 RUST 2 SYNTAX 2 C++/VB 1 LINUX/UNIX 1 PYTHON 1 TECHNOLOGY 1 THEMES 1 WEB/JS 1

Series

THEMES GUIDE 2

Tags

JAVA 7 LAMBDA 5 ANT 4 CLOJURE 3 GC 3 JVM 3 HTTPS 2 JAVABEAN 2 MARKDOWN 2 RUST 2 TOMCAT 2 ANGULARJS 1 APACHE 1 AWS 1
All Tags
ANGULARJS1 ANT4 APACHE1 AWS1 CLOJURE3 COMPILE1 CSS1 DLQ1 EMOJI1 FEATURED1 GC3 HTML1 HTTPS2 HUGO1 INDEX1 JAVA7 JAVABEAN2 JAVASCRIPT1 JUNIT1 JVM3 KINESIS1 LAMBDA5 MARKDOWN2 NOTES1 PRIVACY1 PROCESS1 REPORT1 RUST2 SCP1 SHARED LIBRARY1 SHORTCODES1 SSH1 TAG_NAME11 TAG_NAME21 TEXT1 THEMES1 TOMCAT2 WEBSPHERE1 云服务1 自动化1
[A~Z][0~9]
Yanbin 隔叶黄莺

Copyright 2010-  YANBIN 隔叶黄莺. All Rights Reserved

to-top