实习笔记(一) Java Document 工具类

这篇具有很好参考价值的文章主要介绍了实习笔记(一) Java Document 工具类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java 中,String 的 null、isEmpty() 和 "" 的区别

  • null表示字符串对象不存在,即没有引用任何字符串对象。如果尝试调用一个 null 引用上的方法,将会触发 NullPointerException 异常。因此,null 表示未初始化或不存在的字符串。
  • isEmpty()String 类的方法,用于检查字符串是否为空,即字符串的长度是否为 0。如果字符串是空的,isEmpty() 方法返回 true,否则返回 false
  • ""表示一个空字符串,即包含零个字符的字符串。它是一个非 null 的字符串对象,但它的长度为 0。可以将 "" 用作表示空字符串的值。
String emptyString = "";
boolean isEmpty = emptyString.isEmpty(); // true

try(){}和try { }


        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

try 语句可以与资源管理一起使用,这在 Java 中是一种常见的模式,称为 "try-with-resources"。该模式用于确保在代码块执行完毕后,自动关闭已分配的资源,如文件、网络连接、数据库连接等。这可以提高代码的可读性和健壮性。

try (resource_declaration) {
    // 使用资源的代码
} catch (exception_type exception_variable) {
    // 处理异常的代码
}

resource_declaration 是在 try 块之前声明和初始化资源的语句,资源必须实现 java.lang.AutoCloseable 接口,以便在代码块结束时自动关闭。try 块结束时,不需要显式地关闭资源,系统会自动关闭它们。

自定义注解:

自定义注解中有三个元注解@Target,@Retention,@Document

/**
 * 系统日志注解
 *
 * @author Mark sunlightcs@gmail.com
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {

	String value() default "";
}

@Target(ElementType.METHOD) 表示只能在方法上声明

@Retention 元注解 注解标记其他的注解用于指明标记的注解保留策略

首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。
一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@RestController使用RUNTIME注解
如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;
如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。
注解@Deprecated,用来表示某个类或属性或方法已经过时,不想别人再用时,在属性和方法上用@Deprecated修饰
@Documented注解标记的元素,Javadoc工具会将此注解标记元素的注解信息包含在javadoc中。默认,注解信息不会包含在Javadoc中。

instanceof

  •  instanceof 是 Java 的保留关键字。
  •  作用是:测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型
  •  instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

@XmlRootElement

便于对象与xml文件之间的转换

@XmlRootElement( name="doc" )
public class Document {
   @XmlElement
   protected Foo foo;
   // ...
}
<?xml version="1.0" encoding="UTF-8"?>
<doc>
    <foo>...</foo>
</doc>

Java Document 工具类

Java 对本地HTML文件的读取和写入的工具类,可以用来修改静态HTML的内容

@Deprecated 说明

  • 若类、方法、属性加上该注解之后,表示不再建议使用,调用时会出现删除线,但并不代表不能用,只是不推荐使用,因为有更好的替代

@Qualifier

Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个,如果有多个,就会报错(比如一个接口有多个实现类,我们在注入到时候,就需要用Qualifier注解标注用哪个。

《该注解可以使用在类上、属性上、参数上、方法上》

1.  当使用在类上的时候,如下代码,@Qualifier注解里面填写的值就是当前类注入到IOC容器的bean的唯一标识(id),再使用到该Bean的地方就可以直接根据唯一标识(id)从IOC容器中获取了;

其他基本上都是唯一标识的作用,即如果有两个相同的bean,但是我们在某一个加上了@Qualifier,则会装配这个。

@Service("a")
public class QualifierServiceImpl implements QualifierService {
    public QualifierDto getQualifierById(Long id) {
        return new QualifierDto();
    }
}

@Service("b")
public class QualifierServiceImpl1 implements QualifierService {
    public QualifierDto getQualifierById(Long id) {
    	return new QualifierDto();
    }
}

我们应用@Qualifier(“b”),就可以消除上面定义的歧义,注入容器中的就QualifierServiceImpl1的实例了

@Controller
@RequestMapping("/test")
public class TestQualifier {
    
    @Autowired
    @Qualifier("b")
    QualifierService qualifierService;
    
    @RequestMapping(params = "method=showQualifierInfo")
    public void showQualifierInfo(HttpServletRequest request, HttpServletResponse response, QualifierDto dto) {
        ......
    }
}

二级缓存

Redis+Guava

Guava Cache 是其中的一个专门用于处理本地缓存的轻量级框架,是全内存方式的本地缓存,而且是线程安全

和 ConcurrentMap 相比,Guava Cache 可以限制内存的占用,并可设置缓存的过期时间,可以自动回收数据,而 ConcurrentMap 只能通过静态方式来控制缓存,移除数据元素需要显示的方式来移除。

先去查看缓存,若缓存中没有数据则去访问数据库,同时将数据更新至缓存

优点:

  • 保证最小的缓存量满足精确查询业务,避免冷数据占用宝贵的内存空间
  • 对增删改查业务入侵小、删除即同步
  • 可插拔,对于老系统升级,历史数据无需在启动时初始化缓存

缺点:

  • 数据量需可控,在无限增长业务场景不适用
  • 在微服务场景不利于全局缓存应用

微服务场景下,多个微服务使用一个大缓存,流数据业务下,高频读取缓存对 Redis 压力很大,最终导致缓存雪崩,进而引发我们的服务雪崩。我们使用本地缓存结合 Redis 缓存使用,降低 Redis 压力,同时本地缓存没有连接开销,性能更优

热点数据(热key)放到我们JVM的本地缓存中,本地缓存可以使用caffeine,ehcache,guava。本文介绍Guava进行实现。

实习笔记(一),java,开发语言

如果是通过redis集群来实现的,我们可以通过一致性hash算法构建一个hash环,主要是防止某一个或者某些个redis结点宕机或者下线而导致数据丢失的问题以及我们后面动态进行扩容的问题

 hash取模算法,实际上对目标表或者目标数据库进行hash取模,一旦目标表或者数据库发生数量上的变化,就会导致所有数据都需要进行迁移,为了减少这种大规模的数据影响,才引入了一致性hash算法。

一致性哈希将整个哈希值空间组织成一个虚拟的圆环,取模运算不是直接对这四个表来完成,而是对2^32来实现,

实习笔记(一),java,开发语言

实习笔记(一),java,开发语言

guava的数据回收策略
对于guava的数据删除分为被动移除和主动移除两种

被动移除
基于大小的移除
看字面意思就知道就是按照缓存的大小来移除,如果即将到达指定的大小,那就会把不常用的键值对从cache中移除。

guava提供了两个基于时间移除的方法:

  • expireAfterAccess(long, TimeUnit) 这个方法是根据某个键值对最后一次访问之后多少时间后移除
  • expireAfterWrite(long, TimeUnit) 缓存项在给定时间内没有被写访问(创建或覆盖),则回收。如果认为缓存数据总是在固定时候后变得陈旧不可用,这种回收方式是可取的

基于引用的移除

  • 这种移除方式主要是基于java的垃圾回收机制,根据键或者值的引用关系决定移除。

主动移除数据
主动移除有三种方法:

  • 单独移除 Cache.invalidate(key)
  • 批量移除 Cache.invalidateAll(keys)
  • 移除所有 Cache.invalidateAll()
     

参考:千万级并发架构下,如何进行关系型数据库的分库分表_ZNineSun的博客-CSDN博客

Redis+Guava实现高性能的二级缓存_guavacache和redis结合使用_ZNineSun的博客-CSDN博客

原码
用第一位表示符号,其余位表示值。因为第一位是符号位,所以8位二进制数的取值范围就是:[1111_1111 , 0111_1111]  即 [-127 , 127] ,原码是容易被人脑所理解的表达方式

反码
正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反。例如正数1的原码是[0000_0001],它的反码是是其本身

[0000_0001],-1的原码是[1000_0001],其反码是[1111_1110]

补码
正数的补码是其本身,负数的补码是在其反码的基础上+1,例如正数1的原码是[0000_0001],他的补码是其本身[0000_0001],

-1的补码是[1111_1111]
 

取值范围:

其中byte、short、int、long都是表示整数的,只不过他们的取值范围不一样 (一个字节是8位)
byte的取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1) 
short的取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1) 
int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1) 
long的取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)

正整数用原码表示,负数用补码表示:


(int 为例)在计算机中,用二进制保存数值。最高位为符号位,(0正数,1复数)。因此,最大的正数为:0111 1111 1111 1111 1111 1111 1111 1111 

最小的负数:1000  0000 0000  0000  0000 0000 0000 0000,反码1111 1111 1111......

补码为反码加1, 故-2 ^32

在计算的时候,按位相加,正数没问题,但是负数存在问题。因此要用补码。文章来源地址https://www.toymoban.com/news/detail-652160.html

到了这里,关于实习笔记(一) Java Document 工具类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面了个 Java 实习生,小伙很优秀!

    大家好,我是鱼皮,前几天给自己的公司面试了一位 Java 暑期实习生,候选人目前是大三。 整个过程我都录屏了,并且在征得候选人的同意后,把面试过程分享出来。一方面是希望对其他在学编程找工作的小伙伴有一些启发和参考,另一方面也是希望大家给屑老板一些建议,

    2024年02月05日
    浏览(39)
  • 基于JAVA(springboot框架)实习管理系统 毕业设计开题报告

     博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月05日
    浏览(34)
  • Java 开发工具—IDEA

    IDEA 全称 IntelliJ IDEA ,是用于 Java 语言开发的集成环境,它是业界公认的目前用于 Java 程序开发最好的工具。 集成环境 :把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 2.1 IDEA下载 下载:(官网下载)  https://www.jetbrains.com/idea/ 安装:傻瓜式安装,建议修改

    2024年02月07日
    浏览(139)
  • JAVA开发常用测试工具

    什么是junit JUnit 是一个用于编写和运行单元测试的开源框架,是Java 开发中最常用的单元测试框架之一。它为 Java 开发者提供了一种简单、灵活且可扩展的方式来编写自动化测试代码,并帮助开发者进行单元测试的管理和执行。 JUnit 提供了一组注解和断言方法,使开发者能够

    2024年04月25日
    浏览(41)
  • ssm(springboot 高校学生实习管理系统 Java(code&LW)

    ssm(springboot 高校学生实习管理系统 Java(codeLW) 开发语言:Java 框架:ssm/springboot + vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0) 数据库工具:Navicat 开发软件:eclipse//idea 依赖管理包:Maven 您是否想要一个与众不同的网站?我这提供精美的基于springboot(ssm)

    2024年02月05日
    浏览(46)
  • Java学习笔记(七)——操作数组工具类Arrays

    操作数组的工具类。 Arrays.toString() Arrays.binarySearch() Arrays.copyOf() 如果新数组的长度小于原始数组的长度——部分拷贝 如果新数组的长度等于原始数组的长度——完全拷贝 如果新数组的长度大于原始数组的长度——完全拷贝+补上默认初始化值0 Arrays.copyOfRange() 范围:包头不包

    2024年01月21日
    浏览(33)
  • 开发语言漫谈-Java

            由于C++过于复杂,Java诞生了。与C++相比,Java更易于学习和使用,它去掉C++中的指针和解决了内存管理问题。Java提供了垃圾自动回收机制,自动管理不再使用的内存。Python又进一步简化,使得语法更简洁,更易于阅读和编写。当然随着简化,性能就越来越低。    

    2024年04月10日
    浏览(36)
  • java开发常用的工具以及配置类

    今天接着上一篇博文,聊 java开发常用的工具以及配置类。 13 日期操作相关的java类。 比如在开发预约旅游 预约体检 预约售票等相关和日期相关的业务,需要获取日期以及判断是一周的哪一天等。 14 处理请求路径的URL工具类 比如,有时需要根据传入的路径url获取请求参数或

    2024年02月08日
    浏览(38)
  • 【Java 回忆录】Java全栈开发笔记文档

    实战代码文档一比一记录实战问题和解决方案 涉及前端、后端、服务器、运维、测试各方面 通过各方面的文档与代码,封装一套低代码开发平台 直接开腾讯会议,实实在线一起分享技术问题 核心以 Spring Boot 作为基础框架进行整合 后期基于 Spring Cloud Alibaba 增加微服务模块

    2024年02月13日
    浏览(33)
  • Java开发笔记

      (1)业务场景:接收前端传输过来的json串,需要将其写入数据库,写入之前需要校验其是否能够转换成对应实体类,以便后续从数据库读取   (2)方法:借助 jackson 中的反序列化工具,当字符串不符合json格式或出现实体类中不存在的字段时,会报错。步骤如下:   

    2024年01月17日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包