Java

springboot[1]_HelloWorld

1. 介绍 springboot 项目官网:https://spring.io/projects/spring-boot springboot 是一个基于java的开源框架,能够轻松快速地创建基于spring的应用程序。它的目的在于减少一些繁琐的配置,减少甚至不需要配置文件,因为内置了Tomcat服务器,所以可以快速开发并启动一个项目。 我们以创建HelloWorld项目为例来介绍。 2. 创建H

springboot[4]_配置mybatis

在springboot中使用mybatis 1. 建表 在test库中,建立一张animal表,并存入三条数据。 CREATE TABLE `test`.`animal` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) CHARACTER SET latin1 COLLATE latin1_swedish_ci N

第一个Java程序HelloWorld

编写第一个程序HelloWorld 在任意文件夹中创建java文件 例如新建一个文本文件(.txt),然后修改文件名和文件扩展名 记得打开显示文件扩展名!!! 在Notpad++或记事本中打开刚刚创建的java文件(hello.world) 编写 注意类名(public class hello)的hello一定要和文件名相同,负责无法编译 编译 在文件夹上方希纳是的文件路径前添加cmd+空格

Vue Router 返回后记住滚动条位置的实现方法

要在 Vue Router 中实现返回时记住滚动条位置的功能,可以利用 Vue Router 提供的 scrollBehavior 函数。这允许在导航时控制页面的滚动行为,包括返回之前访问的页面时恢复到之前的滚动位置。 实现方法 以下是一个示例,展示如何在 Vue 3 中使用 scrollBehavior 实现返回时记住滚动条位置: 解释 scrollBehavior 函数: to:即将进

记一次vue数据异步刷新引发的bug

问题背景 在开发过程中,为了threejs对象在watch监听中能够被顺利取到,我加了一个信号量,在初始化对象后,通过threejs对象状态和表单状态来重新渲染画面。然而,我把threejs对象从null设置为正常的对象时,页面居然卡死了。在实际的代码中,用到对象的情况只有wacth里面监听到信号量为true时。什么都没改,只是把之前的对象赋值页面就没有了 排查过程 第一步,把threejs对

SpringBoot 用的 spring-jcl 打印日志,与 LoggingSystem 有鸡毛关系?

开心一刻 现实中,我有一个异性游戏好友,昨天我心情不好,找她聊天 我:我们两个都好久没有坐下来好好聊天了 她:你不是有女朋友吗 我:人家不需要我这种穷人啊 她:难道我需要吗 前情回顾 从源码分析 SpringBoot 的 LoggingSystem → 它是如何绑定日志组件的 从源码的角度讲述了 Spring Boot 的 LoggingSystem 与日志组件的绑定,默认情况下绑定的是 Log

「Java开发指南」MyEclipse for Spring参数 - 注释器(二)

在上文中我们主要为大家介绍了Spring开发中的注释器、Spring注释器等,本文将继续介绍JAX-WS注释器和JPA注释器。 MyEclipse v2024.1离线版下载 MyEclipse技术交流群:742336981 欢迎一起进群讨论 3. JAX-WS注释器 JAX-WS注释器用于配置JAX-WS服务,注释器显示与JAX-WS相关的注释和配置选项。 JAX-WS注释器帮助将Spring服务

Java 11环境变量配置(Win7)

今天电脑重启后,发现之前配置的环境变量居然莫名消失了,且趁这次机会重新温习一遍Win7下Java环境变量的配置。 Win7不同Win10,环境变量的界面还比较简陋。 一、下载 可以去Oracle官网下载,也可以去各个镜像网站下载,这里列出几个 Oracle官网:https://www.oracle.com/cn/java/technologies/downloads/ (商业收费,学习免费) Or

Java查看对象头大小

添加依赖 查看对象头大小 输出: 创建一个自定义User对象,对象头大小为24 Bytes

Java数据类型转换

自动类型转化(隐式转换): 容量小的数据类型可以自动转换为容量大的数据类型。 由低字节向高字节的转换 byte->short-> char –>int->long->float->double 1.整行隐式类型转换: byte类型的变量num1被隐式转换为int类型的变量num2,short类型的变量num3被隐式转换为int类型的变量num4。这是因为int

并发编程[2]_线程的常用方法

介绍一下线程常用的一些方法 1. run() 和 start() start() 方法让线程进入就绪状态 run() 方法 是Runnable 中的一个抽象方法,线程启动时就会调用run() 方法 (1) 如果直接调用run()方法,是不会启动新线程的 运行结果: 可以看出log输出内容都是在 [main]线程中输出的, 并不是在thread1线程中执行的。(2) start() 方

并发编程[1]_线程的创建

介绍线程创建的两种基本的方法:继承Thread类和实现Runnable接口 1. 继承Thread类 自定义类继承Thread类,重写 run() 方法 或者直接用匿名内部类实现 调用start() 方法启动线程,线程启动后会执行run()方法。 运行结果: 2.实现Runnable接口 实现Runnable接口,重写run()方法,然后将Runnable实例丢

Dart 语言入门

一、开篇 dart 语言具有如下特性: 一切变量皆是对象,每个对象都是类的实例。int、double、null、函数等都是对象,所有对象都继承自 Object 类 dart 是强类型语言,但由于具备类型推导功能所以类型声明是可选的 dart 支持顶级函数、静态函数、实例函数,也允许在函数中嵌套函数,即局部函数。类似的,dart 也支持顶级变量、静态变量和实例变量; dart 没有关于 publi

并发编程[3]_java线程的六种状态

java线程状态 1. 操作系统进程的五种状态 网上找了一张图: 2. java线程的六种状态 Thread类中getState()方法可以获取线程的状态,返回值是Thread类中的enum类型,取值有NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED六种状态。java的线程状态将阻塞状态细分为BLOCKED,WAITING,TIM

利用Spring Boot实现微服务的API限流策略

利用Spring Boot实现微服务的API限流策略 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! API限流是一种控制访问速率的机制,用于保护后端服务不被过载。Spring Boot提供了多种工具和方法来实现API限流策略。 API限流的概念 API限流通常通过限制在一定时间窗口内的请求数量来实现。常见的限流算法有令牌桶和漏桶算法。 使用Spring Clo

Java运行机制 与 Intellj IDEA的安装

Java运行机制 编译型 + 解释型 编译为.class, 之后一边运行一边解释 IDE 集成开发环境,提供程序开发环境的应用程序 下载 Intellj IDEA 略(可参考【附安装包】IDEA下载、安装、配置与使用(保姆级教程)-CSDN博客),非本人博客 IDEA中的快捷键 psvm自动补全

并发编程[4]_synchronized关键字

介绍synchronized关键字 1. 概念 同步代码块(Synchronized Block)是Java提供的一种内置锁机制。用关键字synchronized来修饰的方法,就是同步代码块。线程在进入同步代码块的时候会自动获取锁,退出代码块时会自动释放锁。内置锁是互斥锁,最多只有一个线程能持有,被锁保护的同步代码块会以原子方式执行,保证了多个线程在执行该代码块时不会互相干扰。synchron

MybatisPlus Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew != null and ew.sqlSet != null'. Cause

报错信息: 报错原因:  解决方法:使用正确的调用方式 希望对你有帮助

并发编程[5]_wait和notify

1. wait 和 notify wait() 方法是Object类中的方法,他的作用是让当前线程进入等待状态,而使用notify() 方法可以唤醒。 wait(long): void ,参数是毫秒,表示等待毫秒数,直到时间结束或被唤醒; wait(long, int): void ,第一个参数是毫秒,第二个参数是纳秒,如果纳秒在0-999999之间,则第一个参数值+1, 最后调用wait

并发编程[7]_ReentrantLock

ReentrantLock 翻译为可重入锁,是 java.util.concurrent.locks 包中的一个类,可以通过代码调用lock() 和 unlock() 方法来进行加锁解锁。因此一般使用的时候要用到try,finally,在finally中进行锁的释放。 1. ReentrantLock 和 synchronized ReentrantLock 和 synchronized 这两种

并发编程[6]_死锁

介绍死锁。 1. 死锁的概念 简单的说,死锁是指多个线程在竞争资源时,造成了互相等待阻塞的现象。例1: 运行结果: 程序并没有结束。t1占有了objA,在未释放锁的情况,想访问objB,t2也是类似的情况,这样互相循环等待,造成了死锁。 2. 产生死锁的四个条件 (1) 互斥:一个资源一次只能被一个资源使用(2) 请求与保持:又叫占有并等待。进程中在等待分配其他资源时,对已经占有的资

并发编程[9]_自定义线程池

使用线程池可以减少创建和销毁线程的次数,可以调整线程池中工作线程的数量,防止内存过多消耗。在阿里巴巴Java开发手册中,也强调了线程资源必须通过线程池提供,不允许在应用中自行显式创建线程,应通过ThreadPoolExecutor的方式来创建线程池,规避资源耗尽的风险。在学习Java的线程池之前,我们先来手动写一个线程池,来熟悉线程池的类似实现。 1. 线程任务队列类 我们先创建一个线程任务

并发编程[8]_并发编程三大性质和volatile关键字

本文介绍并发编程的三大性质:原子性,可见性,有序性以及volatile关键字。 1. 原子性 原子性指一个操作或者多个操作,要么全部执行要么全部不执行。在介绍synchronized关键字的时候,就有介绍过,在执行 i++ 的时候,实际上执行的是三个步骤:读取 i 的值,i+1,将结果写入。所以这个操作不是原子操作,在多线程执行 i++ 和 i-- 的时候,结果跟我们所想的不同。而synchr

构造函数当做Function用做方法入参

1.先有一个类,有一个构造函数 2.定义一个Function用来指定不同的构造函数 入参:List 出参:Action 接口 3.分析上述构造函数 发现构造函数的入参就是List 构造函数一般返回类自己对象,因为类有继承关系,父类有实现接口逻辑,用多态特性可以用接口接受返回类型 所有构造函数是可以用做Function类型的接收的 4.实际定义例子 原创:做时间的朋友

并发编程[10]_线程池

本文介绍java中的线程池类ThreadPoolExecutor。 我们可以利用ThreadPoolExecutor创建线程池,这个类中有多个构造方法。 参数介绍: corePoolSize : 核心池的大小,即核心线程的数目 maximumPoolSize:线程池最大线程数 keepAliveTime:空闲线程存活时间。表示线程没有任务执行时,多久会终止。 unit:

转载:国产麒麟v10、UOS系统在线比较两个Word文件的内容差异

调用PageOffice的WordCompare方法,同时在线打开两个Word文档,可以切换显示其中的一个文档,或者显示两个文档的对比结果,即可实现在线的文档内容比较功能。此功能可以应用在以下方面: 文档管理中,比较两个版本Word文档的差别。 在处理文档管理的Web项目中,

构建Spring Boot应用的微服务服务契约管理

构建Spring Boot应用的微服务服务契约管理 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,服务之间的通信依赖于明确的接口契约。服务契约管理是确保服务间能够正确交互的关键。Spring Boot提供了多种机制来定义和管理服务契约。 服务契约的概念 服务契约是服务提供者和消费者之间的一种协议,它规定了服务的请求和响应格式、数据类型以及行为。

lambda表达式的使用

测试类 员工类 接口

install java javac on kali linux, raspberry pi

$ sudo apt update$ sudo apt install default-jdkIf you want to install a specific version of the JDK, use the following command to search for the exact package you want. This will show all the JDK pack

[Javascript] Access private variable inside IIFE and mutate this through Object.prototype getter function

For this code, try to not modify the code itself but mutate obj var o = (function () { var obj = { a: 1, b: 2, }; return { get: function (k) { return obj[k]; }, }; }

<<  <  218  219  220  221  222  223  224  225  226  227  228  >  >>