首页
统计
留言
友链
更多
图片
关于
Search
1
软件开发 | flutter使用camera插件在安卓11以上的机器上调用availableCameras无法正常获得usb相机列表
5 阅读
2
scoop包管理器
3 阅读
3
利用深度搜索求解回溯问题的通用模板
3 阅读
4
java开发知识点
2 阅读
5
codeforces-cpp模板
2 阅读
默认分类
后端开发
相关配置
知识分享
异常处理
前端开发
建站教程
开发教程
知识回顾
软件开发
杂项
登录
Search
标签搜索
java
golang
scoop
go
vue
hexo
sublime text
cpp
windows
redis
mc
mod
fabric
mysql
word
计算机网络
channel
html
flutter
camera
Wisansiiz
累计撰写
24
篇文章
累计收到
2
条评论
首页
栏目
默认分类
后端开发
相关配置
知识分享
异常处理
前端开发
建站教程
开发教程
知识回顾
软件开发
杂项
页面
统计
留言
友链
图片
关于
搜索到
24
篇与
的结果
2024-07-31
java框架之spring
java框架之spring(未完)AOP和IOCIOCIoC (Inversion of Control )即控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。例如:现有类 A 依赖于类 B传统的开发方式 :往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来使用 IoC 思想的开发方式 :不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面去取即可。从以上两种开发方式的对比来看:我们 “丧失了一个权力” (创建、管理对象的权力),从而也得到了一个好处(不用再考虑对象的创建、管理等一系列的事情)为什么叫控制反转?控制 :指的是对象创建(实例化、管理)的权力反转 :控制权交给外部环境(IoC 容器)原文链接IOC 的出现使得开发者不用关注于对象的创建可以更关注于如何使用对象。当我们新建一个接口的某一实现时,如果该实现发生了变化,那所有的引用了这一实现的类都需要修改,而使用 IOC 容器管理的话就不用再进行这种修改操作,降低了类之间的耦合。AOPAOP(Aspect Oriented Programming)即面向切面编程,AOP 是 OOP(面向对象编程)的一种延续,二者互补,并不对立。AOP 的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和可扩展性。OOP 的目的是将业务逻辑按照对象的属性和行为进行封装,通过类、对象、继承、多态等概念,实现代码的模块化和层次化(也能实现代码的复用),提高代码的可读性和可维护性原文链接
2024年07月31日
0 阅读
0 评论
0 点赞
2024-07-30
Java多线程
java面试之多线程(待补充)线程与进程什么是线程进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。进程与线程的区别总结线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行创建线程创建线程的几种方法1-继承Thread类,重写run()方法步骤:1.创建一个继承于Thread类的子类2.重写Thread类的run() --> 将此线程执行的操作声明在run()中3.创建Thread类的子类的对象4.通过此对象调用start()执行线程class myThreadTest extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " i=" + i); } } } 2-实现Runnable接口步骤:1.创建一个实现了Runnable接口的类2.实现类去实现Runnable中的抽象方法:run()3.创建实现类的对象4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象5.通过Thread类的对象调用start() 1.启动线程 2.调用当前线程的run()–>调用了Runnable类型的target的run()class myThreadTest2 implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " i=" + i); } } }3-实现Callable接口步骤:1.创建一个实现Callable的实现类2.实现call方法,将此线程需要执行的操作声明在call()中3.创建Callable接口实现类的对象4.将此Callable接口实现类的对象作为传递到FutureTask构造器中,创建FutureTask的对象5.将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()6.获取Callable中call方法的返回值实现Callable接口的方式创建线程的强大之处call()可以有返回值的call()可以抛出异常,被外面的操作捕获,获取异常的信息Callable是支持泛型的class myThreadTest3 implements Callable<Integer> { @Override public Integer call() throws Exception { int sum = 0; for (int i = 1; i <= 10; i++) { System.out.println(i); sum += i; } return sum; } }4-使用线程池线程池好处:1.提高响应速度(减少了创建新线程的时间)2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)3.便于线程管理为什么使用多线程使用多线程是为了 提高系统的资源利用率,在 CPU 多核的情况下,如果只是使用单线程,那就只使用了单个核心,其他核心处于空闲状态,这显然没有充分利用系统资源,进行多线程操作可以让相互独立的事件运行速度变得更快,运行效率变得更高,原本有 4 件事务,每个事务要操作 10 分钟,单线程需要操作 4 * 10 = 40 分钟,而如果你让 4 个 CPU 核心同时工作,只需 10 分钟就搞定。其实我们最早在小学初中就有学习到像煮开水,煎饼问题,怎么做才能使等待的事件最短,就是用到了相互独立的事件(互不干预)同时进行。
2024年07月30日
0 阅读
0 评论
0 点赞
2024-07-24
minecraft模组开发-1
minecraft模组开发-使用反射批量添加创建的物品在使用数据生成时,使用反射批量注册物品 Model ,将自己创建的 ModItems 类中写的所有物品进行注册,下面是一个简单的例子package net.wssz.tutorialmod.datagen; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; import net.minecraft.data.client.BlockStateModelGenerator; import net.minecraft.data.client.ItemModelGenerator; import net.minecraft.data.client.Models; import net.minecraft.item.Item; import net.wssz.tutorialmod.block.ModBlocks; import net.wssz.tutorialmod.item.ModItems; import java.lang.reflect.Field; public class ModModelsProvider extends FabricModelProvider { public ModModelsProvider(FabricDataOutput output) { super(output); } @Override public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator) { blockStateModelGenerator.registerSimpleCubeAll(ModBlocks.RED_IRON_ORE); } @Override public void generateItemModels(ItemModelGenerator itemModelGenerator) { Field[] fields = ModItems.class.getDeclaredFields(); try { for (Field field : fields) { if (field.getType().equals(Item.class)) { itemModelGenerator.register((Item) field.get(null), Models.GENERATED); } } } catch (IllegalAccessException e) { throw new RuntimeException(e); } } }
2024年07月24日
1 阅读
0 评论
0 点赞
2024-07-14
sublime-text中clang-format插件的配置
Custom style{ "BasedOnStyle": "Google", "IndentWidth": 4, "AlignAfterOpenBracket": true, "AlignConsecutiveAssignments": true, //# 连续声明时,对齐所有声明的变量名 "AlignConsecutiveDeclarations": false, "MaxEmptyLinesToKeep": 4, "BreakBeforeBraces": "Attach", "AllowShortIfStatementsOnASingleLine": true, "IndentCaseLabels": true, "ObjCBlockIndentWidth": 4, "ObjCSpaceAfterProperty": true, "ColumnLimit": 0, "AlignTrailingComments": true, "SpaceAfterCStyleCast": true, "SpacesInParentheses": false, "SpacesInSquareBrackets": false, "TabWidth": 4, "UseTab": "Never", "AllowShortBlocksOnASingleLine": false, "AllowShortIfStatementsOnASingleLine": true, "AllowShortLoopsOnASingleLine": true, "BraceWrapping":{ "AfterClass": false, "AfterControlStatement": false, "AfterEnum": false, "AfterFunction": false, "AfterNamespace": false, "AfterObjCDeclaration": false, "AfterStruct": false, "AfterUnion": false, "BeforeCatch": false, "BeforeElse": false, "IndentBraces": false, "SplitEmptyFunction": true, "SplitEmptyRecord": true, "SplitEmptyNamespace": true }, "Cpp11BracedListStyle": true, "ColumnLimit": 80, } User setting{ "binary": "D:\\LLVM\\bin\\clang-format.exe", "style": "Custom", "format_on_save": true, "languages": ["C", "C++"] }
2024年07月14日
0 阅读
0 评论
0 点赞
2024-06-06
codeforces-cpp模板
codeforces-cpp模板#include <bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define mk make_pair #define endl "\n" #define enld "\n" #define fastio \ ios_base::sync_with_stdio(false); \ cin.tie(0); \ cout.tie(0) #define LCM(a, b) a *b / __gcd(a, b) #define GCD(a, b) __gcd(a, b) #define len(v) int(v.size()) #define all(v) v.begin(), v.end() #define sz 100010 #define mod 1000000007 #define inf 1e18 #define i32 1e9 typedef long long ll; typedef unsigned long long ull; typedef double ld; typedef long double lld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef tuple<int, int, int> iii; typedef vector<int> vi; typedef vector<pii> vpii; typedef vector<ll> vll; typedef vector<ld> vd; void solve() { int n; cin >> n; cout << n << endl; } int main() { fastio; int t = 1; cin >> t; while (t--) solve(); }
2024年06月06日
2 阅读
0 评论
0 点赞
1
2
3
4
5