首页
学习
活动
专区
工具
TVP
发布

Java开发者杂谈

专栏作者
86
文章
96411
阅读量
43
订阅数
浅谈浮点数(一)
小数与浮点数 很多人都会认为,小数就是浮点数。但其实非也。 小数只是一种实数的一种特殊表现形式,所有分数都可以用小数来表示。 而浮点数,是计算机领域的一个术语,浮点数代表着目前计算机表示小数的一方式。 ---- 浮点数的由来 我们都知道计算机表示特定的数据类型长度是固定的。 比如在java语言里,小数的表示,float是4字节,double是8字节。 那么这些固定长度的二进制位是如何表示小数的呢? 最直观的表示办法就是:固定的整数部分位数和固定的小数部分位数。比如以float为例,我们假设取前8位表示整数部
SecondWorld
2021-08-06
5170
图解jdk1.8新特性(3)--- 注解与类型推测优化
​ jdk1.8的java.lang.Class类新增了方法getAnnotationsByType方法,该方法可以获取某一个类型的注解列表,具体代码示例如下:
SecondWorld
2019-10-29
4160
ThreadLocal剧集(一)
    最近做了一个日志调用链路跟踪的项目,涉及到操作标识在线程和子线程,线程池以及远程调用之间的传递问题。最终采用了开源的TransmittableThreadLocal插件(https://github.com/alibaba/transmittable-thread-local)完美解决。在分析源码以及中途修复bug的过程中,被ThreadLocal搞得晕头转向。好在静下心来细细啃了一下午,终于能理解各种ThreadLocal相关问题了。这里准备用博客记录下来。
SecondWorld
2019-03-21
3310
Ruby(3):基本语法中
字符串分割成数组: 可以使用先scan再join的方法,当然其实有更好的 split方法,专门用来分割字符串 1 # 在Ruby中,如果不使用inspect,直接使用puts输出数组,那么每个元素会占用一行输出 2 irb(main):001:0> puts "Short sentence.Another.No more".split(/\./) 3 Short sentence 4 Another 5 No more 6 => nil 7 irb(main):002:0> puts "Short se
SecondWorld
2018-03-14
9290
JDK1.7新特性(3):java语言动态性之脚本语言API
简要描述:其实在jdk1.6中就引入了支持脚本语言的API。这使得java能够很轻松的调用其他脚本语言。具体API的使用参考下面的代码: 1 package com.rampage.jdk7.chapter2; 2 3 import java.io.FileWriter; 4 import java.io.IOException; 5 6 import javax.script.Bindings; 7 import javax.script.Compilable; 8 i
SecondWorld
2018-03-14
1K0
java如何获取一个对象的大小
When---什么时候需要知道对象的内存大小 在内存足够用的情况下我们是不需要考虑java中一个对象所占内存大小的。但当一个系统的内存有限,或者某块程序代码允许使用的内存大小有限制,又或者设计一个缓存机制,当存储对象内存超过固定值之后写入磁盘做持久化等等,总之我们希望像写C一样,java也能有方法实现获取对象占用内存的大小。 How---java怎样获取对象所占内存大小 在回答这个问题之前,我们需要先了解java的基础数据类型所占内存大小。 数据类型 所占空间(byte) byte     1
SecondWorld
2018-03-14
7.6K1
java序列化反序列化深入探究
When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化。写一个排序算法也用不到序列化和反序列化。但是当你想要将一个对象进行持久化写入文件,或者你想将一个对象从一个网络地址通过网络协议发送到另一个网络地址时,这时候就需要考虑序列化和反序列化了。另外如果你想对一个对象实例进行深度拷贝,也可以通过序列化和反序列化的方式进行。 What---什么是序列化和反序列化: Serialization-序列化:可以看做是将一个对象转化为二进制流的过程 Deseriali
SecondWorld
2018-03-14
6370
将spring源码导入到eclipse中
前置条件: 1. 正确安装jdk,并配置好JAVA_HOME、PATH。(我这里安装的是jdk1.8) 2. 正确安装好eclipse。(我的eclipse版本是: Neon Release (4.6.0)) 步骤: 1. 首先去下载spring的源码 https://github.com/spring-projects/spring-framework/releases。 因为我的jdk版本是1.8,所以我这里下载的版本是4.3.2。 下载完成之后解压到本地目录。 2. spring源码的编译需要grad
SecondWorld
2018-03-14
1.4K0
将tomcat源码导入eclipse
前言: 写完了socket小应用的原始版本,中间还有好多预想的功能没有实现,在写的过程中也发现了很多问题。因为前面有粗略的看过tomcat实现原理解析,知道tomcat其实也是纯java写的web服务器,而且用的也是socket通信。所以特别想看下tomcat是如何处理这些问题的。 主要步骤: 1. 去apache官网下载对应的tomcat版本源码(我这里下载的是9.0.0.M9)  http://tomcat.apache.org/download-90.cgi 2. 解压后的源码是没法作为工程直接导入e
SecondWorld
2018-03-14
1.4K0
线程池定制初探
背景 ​ 我在的公司虽然是移动支付领域的公司。但是我做的业务类似于管理系统,所以一开始写代码的时候没有考虑到数据的量的问题。开始有一个统计页面,大概要统计的数据分为十多个维度,然后每个维度需要考虑十个左右的方面。也就是统计页面轻轻地点击一个查询按钮,要进行100次左右的数据库查询。开始数据量小的时候,查询还能够使用,页面不会超时。到后面数据量越来越大,最大的一张表数据量已经超过1亿。这时候悲催的事情发生了--- 页面点击查询直接未响应..... ---- 方案考虑 ​ 其实当时的方案我想了两种: 优化业务实
SecondWorld
2018-03-14
8730
java finally深入探究
When---什么时候需要finally: 在jdk1.7之前,所有涉及到I/O的相关操作,我们都会用到finally,以保证流在最后的正常关闭。jdk1.7之后,虽然所有实现Closable接口的流,可以通过在try块中定义,从而实现jvm自动关闭输入输出流。但其实在我们需要在代码块返回之前,实现在不管前面的操作是否执行成功,都要执行的某操作A。这时候我们就可以将A放入finally块中。很常见的一个操作就是锁的unlock操作。 What---什么是finally: 字面解释就是最终,eventuall
SecondWorld
2018-03-14
6660
Java-String.intern的深入研究
When---什么时候需要了解String的intern方法: 面试的时候(蜜汁尴尬)!虽然不想承认,不过面试的时候经常碰到这种高逼格的问题来考察我们是否真正理解了String的不可变性、String常量池的设计以及String.intern方法所做的事情。但其实,我们在实际的编程中也可能碰到可以利用String.intern方法来提高程序效率或者减少内存占用的情况,这个我们等下会细说。 What---String.intern方法究竟做了什么: Returns a canonical representa
SecondWorld
2018-03-14
7640
关于安装多个版本jdk之后java -version不正确的问题
问题描述: 今天突然想写一个socket通信的小应用,分别采用BIO、NIO、AIO的方式来实现,来复习前面看的关于TCP/UDP通信的知识。于是乎在原来安装了jdk1.6的机子上重新安装了jdk1.8。结果就出现了一个很蛋疼的问题:我原来的JAVA_HOME配置根本就没有改变,但是在命令行执行 java -version出现的却是1.8版本,而javac -version出现的是正常的1.6版本。 原因分析: 参考 http://www.oschina.net/question/942785_103000
SecondWorld
2018-03-14
1.3K0
使用ObjectOutputStream进行socket通信的时候出现固定读到四个字节乱码的问题
问题描述: 最近在写一个通信相关的项目,服务器端和客户端通过socket进行通信。本来想利用read的阻塞特性,服务器端和客户端按照一定的流程进行文件读写。结果发现客户端或者服务器read方法一直都返回乱码。而且读到的一端可能是客户端,可能是服务器端,固定的读到前面有四个字节的乱码,后续读到的字节码都是正常的。 原因分析: 开始以为是流没有正常关闭。修改了代码确保正确关闭之后,发现即使重新启动服务器和客户端,还是会固定读到四个字节乱码。后面查资料分析才找出真正的原因:由于我实现的socket通信既有字符串通
SecondWorld
2018-03-14
8270
java调用ruby代码
问题: 最近在做一个应用的时候碰到了一个问题。客户端需要调用服务器端传回的脚本信息,然后执行。其中脚本类型包括ruby。而java中调用ruby的代码大致如下: 1 String jrubyCode="puts 'hello world'"; 2 ScriptEngineManager manager = new ScriptEngineManager(); 3 ScriptEngine engine = manager.getEngineByName("jruby"); 4 engine.eval(jru
SecondWorld
2018-03-14
2.2K0
java调用python代码
同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包。 2. 下载下来的jar包其实既是使用的时候需要引入的jar包,也是安装就jython的jar包。具体安装细节参照:https://wiki.python.org/jython/InstallationInstructions#jython-2-7-0 其实直接使用: java -jar jython_installer-2.5.2
SecondWorld
2018-03-14
1.6K0
Netty(1):第一个netty程序
为什么选择Netty   netty是业界最流行的NIO框架之一,它的健壮型,功能,性能,可定制性和可扩展性都是首屈一指的,Hadoop的RPC框架Avro就使用了netty作为底层的通信框架,此外netty在互联网,大数据,网络游戏,企业应用,电信软件等众多行业都得到了成功的商业应用。正因为以上的一些特性,使得netty已经成为java NIO编程的首选框架。 构建netty开发环境 其实使用netty很简单,直接将其jar包引入到工程中即可使用。 去 http://netty.io/网站上下载最新版本
SecondWorld
2018-03-14
1.1K0
JDK1.7新特性(1):Switch和数字
Switch jdk1.7的switch语句增加了对字符串类型的支持。其实现的原理是通过字符串的hash值来比较的,代码示例如下: 1 String name = "KiDe"; 2 // Welcome the owner! 3 switch (name) { 4 case "KiDe": 5 System.out.println("Welcome the owner!"); 6 break; 7 default: 8 System.out.pri
SecondWorld
2018-03-14
6690
线程间通信
  如果一个多线程程序中每个线程处理的资源没有交集,没有依赖关系那么这是一个完美的处理状态。你不用去考虑临界区域(critical section),不用担心存在所谓的条件竞争(race condition),当然也不用去单行执行顺序,当然这种状态只是完美情况下,事实往往没有这么完美。   当多个线程进入临界区域对临界资源进行修改或者读取的时候,往往需要确定线程的执行顺序,以保证共享资源的可见性和相关操作的原子性。这就涉及到线程间的通信了,即 如果线程A正好进入临界区,他可能对临界资源进行修改或者读取,这时
SecondWorld
2018-03-14
9590
关于多态
  多态是面向对象的核心思想之一,多态的实现有三要素: 1、 存在继承 2、子类对父类的方法进行了重写 3、父类引用指向子类对象。   前面说的还是有点虚,下面通过一个例子来深入理解多态。   程序代码如下,给出对应的输出: 1 public class Polymorphism { 2 public static void main(String[] args) { 3 A a1 = new A(); 4 A a2 = new B(); 5
SecondWorld
2018-03-14
6650
点击加载更多
社区活动
Python精品学习库
代码在线跑,知识轻松学
热点技术征文第五期
新风口Sora来袭,普通人该如何把握机会?
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·干货材料·成员作品·最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档