开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
Computer Science
Computer Science

Java 的 Mutable 和 Immutable 对象

Mutable object(可变对象) :当对象被创建后,你可以修改对象的状态以及字段。例如 StringBuilder, java.util.Date Immutable object (不可变对象):当对象被创建后,你不能修改对象的状态以及字段,例如包装类,如: Integer, Long,String 等。 绕的地方 当对象被创建后不能被改变?这个说法可能有点绕。其实说的是当对象被创建后就会一直在那里,如果你对对象进行调整,其实不是对老的对象的调整,其实等于你创建了一个新的对象,并对新的对象进行赋值。 Immutable 在 Spring 的 Autowired 注解中比较重要。在 Spring 的 Autowired 三种方式中,只有构造方法的 Autowired 是限制对象不能为 NULL 的,主要也是针对 Immutable 的问题。 实例 下面的代码来自 MIT 的教程,并且以比较常见的 Spring 和 StringBuffer and StringBuilder 为例子。 考察下面的代码: String s = "a"; s = s.concat("b"); // s+="b" and s=s+"b" also mean the same thing 官方的说法有点绕,上面的方法是我们常用的方法连接字符串。在第一步 String 创建对象的时候,我们赋值给对象 s。 在第二行代码,我们将对象 s 的后面再添加一个字符串。 在完成第二行代码后的 s 和 第一行代码的 s 不是同一个对象,等于 JVM 在第二行为你创建了一个新的对象并进行赋值。 StringBuilder sb = new StringBuilder("a"); sb.append("b"); 上面有关可变对象的 StringBuilder 的方法却完全不一样,在完成第一行和第二行后,sb 的这个对象没有改变。 一直都是 sb 这个对象,但是我们 sb 对象中的值改变了。 这就是很多人在编程的时候,会告诉你如果你需要使用 for 循环,或者是使用字符串拼接的时候,尽量使用 StringBuffer,在完成所有的 append 获得需要的字符串后,再使用 toString 转换为 String。 上面的小技巧的根源就在于可变对象或者不可变对象,通过这样可以避免在循环中过多的创建对象,因为在 JVM 中创建对象和销毁对象是占用资源的。 https://www.ossez.com/t/java-mutable-immutable/13265

2021年02月02日 0Comments 685Browse 0Like Read more
Computer Science

Spring @Autowired注解提示 Field injection is not recommended 警告

Field injection is not recommended 警告的主要原因是:使用变量的依赖注入不被推荐。 @Autowired private REListingRepository reListingRepository; 可能很多人都会使用上面代码来进行依赖注入,因为上面的代码最简单,也是可以用的,但有时候你会遇到 IJ 的提示。     原因和处理 这个代码与 Spring 的 Autowired 3 种类注入依赖有关。 变量注入 上面的写法就是变量注入,这是我们遇到警告提示的地方。 Set 方法注入 为了避免上面的警告,我们可以使用 Set 方法来进行注入。 使用 Set 方法的代码如下: private REListingRepository reListingRepository; @Autowired public void setReListingRepository(REListingRepository reListingRepository) { this.reListingRepository = reListingRepository; } 构造器方法注入 另外的,我们还可以使用构造器的方法来进行注入。 上面的代码可以简化为: private REListingRepository reListingRepository; private TownRepository townRepository; @Autowired public TaxServiceImpl(REListingRepository reListingRepository, TownRepository townRepository) { this.reListingRepository = reListingRepository; this.townRepository = townRepository; } 的构造器方法来进行注入。 IJ 快捷键 在 IDEA 中是可以使用快捷键的。 在代码的空白地方,使用快捷键 Alt + Insert。 在弹出的对话框中,你可以看到为你生成构造方法和 Setter 方法的快捷键。 然后选择需要的生成相应的方法即可,而不需要你再手动敲一次。 使用何种依赖注入 我们现在知道了 Spring 有 3 中依赖注入方式。那么我们应该使用何种依赖注入方式? 是使用: Constructor-based or setter-based DI 其实在官方里面已经有一个解释说明了:6. The IoC container 简单来说 Set 方法依赖注入中使用的依赖是可选的,选择依赖的意思是注入的依赖是可以为 NULL 的,当然你也可以在 Set 方法中通过添加 @Required 让依赖不为 NULL。 如果使用构造方法注入依赖的话,那么依赖是不能为 NULL 的。 变量方式注入应该尽量避免,使用set方式注入或者构造器注入,这两种方式的选择就要看这个类是强制依赖的话就用构造器方式,选择依赖的话就用set方法注入。 根据 Spring 官方的说法,如果注入的对象是 immutable objects (不可变对象)的话,依赖的注入是不能为 NULL 的。因此基于上面的示例和说法,Spring 官方是推荐使用构造方法来进行依赖注入,以便于针对不可变对象的注入。     唯一感觉不是非常好的就是代码比较长,看起来不太舒服。 不过使用 IEDA 可以在修改变量后重新使用快捷键生成构造方法。 https://www.ossez.com/t/spring-autowired-field-injection-is-not-recommended/13264/2

2021年02月02日 0Comments 728Browse 0Like Read more
Computer Science

过去计算机教室要带鞋套呢

N 年前,计算机可是高档货。 Win 95 的 PC 带个光驱售价上万,20 年前上万的价格和现在上万的价格比比看。 现在的计算机已近是白菜价了,计算机越做越好,性能越来越高,同时计算机中的机械部件越来越少了,很多 PC 更是连风扇都省了,硬盘也慢慢采用固态硬盘了。软驱读数据的体验有不,1.44 MB,读到内存中 3 分钟,还经常坏道。 以前的计算机机房有除尘要求并且担心静电对集成电路的损伤,也是担心粉尘对计算机的机械部件造成伤害,说白了就是担心风扇灰尘太厚,散热不好 CPU 主机温度升高后死机。 搞不好来个静电,板卡就报废了,在当时,这可是大件呀。 另外的主要原因是装逼和拉动鞋套生产。 https://www.ossez.com/t/topic/13258

2021年01月30日 0Comments 777Browse 0Like Read more
Computer Science

除了应付面试,程序员为什么要学习数据结构与算法

数据结构和算法是计算机处理信息的基础。 抛开所有的东西都不看的话,计算机做的事情就是存储,然后计算。数据结构解决存储的问题,一些算法解决计算的问题,所以程序员必须要了解必须使用数据结构和算法。     比如 Java 中的集合,链表,变量定义都是解决存储的问题,这个存储的定义不是硬件中的存储,而是存储在内存中的数据结构。 你的方法也好,算法也好,必须要拿到数据才能计算,怎么算,这个就是算法。 举个最简单的栗子,读取 CSV 文件,存入到数据库中。抽象来说就是先把 CSV 文件读取到内存中,存好。存成什么样的?你可以存为字符串,也可以进一步存为 List,也可以是 Set。 拿到这个数据后,再进行计算,有可能是去重,分组,遍历等等。这些就是算法了。 不仅仅是应付面试,程序员也好,技术研究也好,数据结构和算法是基础。这 2 样最好是需要比较熟练的掌握,哪怕是不能马上找到解决方案,至少能提供一个思路。 这个对取得面试成功会是个加分项。 https://www.ossez.com/t/topic/13252

2021年01月30日 0Comments 785Browse 0Like Read more
Computer Science

为什么后端喜欢把「男女」等枚举类型的数据转成 01

如果是针对其他非中文语言开发,这怎么办呢?字典怎么设置呀,例如来个日文,你总不能写个日文的枚举(其实这个也不应该定义成枚举)吧。 使用 0 1 / Y N 这种类型的大家基本上都明白,还要注意后面开发的时候会经常遇到加状态,减状态的情况。 将中文字符保存在代码中,虽然没有太大问题,要知道还有乱码的问题,后台对这种元数据基本上都会有个字典表给你的。或者后台在 Service 这层帮你查一次转换下。 枚举类型有的状态有限,状态比较固定使用,针对省市这种,一般都会做成字典或者成元数据数据字典,如果还把省市写到代码里面的话只能说后端真牛。 男女这种其实也应该做成字典,现在有变性人,还有一些人属于。。。。所以性别现在不只 2 个 状态了。 https://www.ossez.com/t/topic/13251

2021年01月30日 0Comments 689Browse 0Like Read more
Computer Science

为什么国内政府机关的网站 UI 那么丑

外行指导内行。 我们的 UI 历来是注重功能。信息实用性,界面交互性,不存在的。一套 UI 本来好好的,demo 过后,领导觉得这个不好看,主题不突出,没关系,改。 颜色不够红,没关系,接着改。 改到最后审美疲劳了,懒得改了。就凑合看看吧,反正是个内容展示,又不实现什么功能。社区要备案,还麻烦,搞不好群众意见太大,这个是红线不能碰的,多一事不如没有事,完成任务就好。 群众有意见,微博牢骚下就好了。 预算花掉了,平台内容也有了,反正也没人看,换届的时候换个领导照片,一年就发那么几条动态。皆大欢喜。

2021年01月30日 0Comments 614Browse 0Like Read more
Computer Science

Java 如何删除 List 中的重复元素

我们知道在 Java 的 List 中是允许对象或者元素是重复的。 不允许重复的集合,我们可以使用 set。 在有时候,我们希望 List 集合中的内容是不重复的,所以我们需要对 List 进行一次去重。 使用 Guava 其实有多个办法来去重,相对简单实用点的可以使用 Guava。 使用下面的这句话就可以了: List<String> townsName = FileUtils.readLines(new File("C:\\Users\\yhu\\Documents\\town\\us-ma.txt")); logger.debug("Town Count - [{}]",townsName.size()); townsName = Lists.newArrayList(Sets.newHashSet(townsName)); logger.debug("Town Count Clean - [{}]",townsName.size());     上面代码就是简单的把 List 设到 HashSet 中,然后再转换为 List。 上面的内容为测试的问题,第一步是使用 FileUtils 将文本中的内容读取到 List 列表中。 https://www.ossez.com/t/java-list/13247

2021年01月30日 0Comments 553Browse 0Like Read more
Computer Science

显示源代码及其子目录中的文件结构

有时候,我们希望在论坛或者 MD 文件中展示下文件夹的目录结构。 在 windows 中,我们可以使用 tree 这个命令。     在上面的命令中,我们可以查看当前目录,以及当前目录的所有子目录。 连同文件显示 如果你还想显示目录中的文件的话,你可以使用参数 /f 需要执行的命令为: tree /f     添加上面的参数后可以显示文件的内容。 C:. ├───main │ ├───java │ │ └───com │ │ └───ossez │ │ └───edtestbank │ │ └───service │ │ ├───configuration │ │ ├───controller │ │ └───filter │ └───resources └───test ├───java │ └───com │ └───ossez │ └───edtestbank │ └───service │ └───test │ └───utilities └───resources └───data 在完成上面的输出后,你可以直接拷贝粘贴到文本文件中。   https://www.ossez.com/t/topic/13246

2021年01月30日 0Comments 560Browse 0Like Read more
Computer Science

Spring Boot 项目可以参考的一个项目结构

可以参考的一个项目结构。 这个项目结构也是在网络上搜索到了,不一定需要完全按照上面的项目结构来操作。 但是还是比较明确的。 |_annotation:放置项目自定义注解 |_aspect:放置切面代码 |_config:放置配置类 |_constant:放置常量、枚举等定义 |__consist:存放常量定义 |__enums:存放枚举定义 |_controller:放置控制器代码 |_filter:放置一些过滤、拦截相关的代码 |_mapper:放置数据访问层代码接口 |_model:放置数据模型代码 |__entity:放置数据库实体对象定义 |__dto:存放数据传输对象定义 |__vo:存放显示层对象定义 |_service:放置具体的业务逻辑代码(接口和实现分离) |__intf:存放业务逻辑接口定义 |__impl:存放业务逻辑实际实现 |_utils:放置工具类和辅助代码 关于 /src/main/resources 目录中的内容排列,基本上可以按照下面一些格式: |_mapper:存放mybatis的XML映射文件(如果是mybatis项目) |_static:存放网页静态资源,比如下面的js/css/img |__js: |__css: |__img: |__font: |__等等 |_template:存放网页模板,比如thymeleaf/freemarker模板等 |__header |__sidebar |__bottom |__XXX.html等等 |_application.yml 基本配置文件 |_application-dev.yml 开发环境配置文件 |_application-test.yml 测试环境配置文件 |_application-prod.yml 生产环境配置文件 通过上面的配置,基本上能够完成一个 Spring Boot 的项目的配置。 https://www.ossez.com/t/spring-boot/13245

2021年01月30日 0Comments 614Browse 0Like Read more
Computer Science

IntelliJ IDEA 2020.3.1 Git 远程地址

IntelliJ IDEA 2020.3.1 版本的 Git 远程地址的链接路径已经修改了。 可以通过左下角的操作按钮来对远程仓库进行操作。 https://www.ossez.com/t/intellij-git-remote/188/2

2021年01月30日 0Comments 792Browse 0Like Read more
1…109110111112113…237
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (516)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1