首页
关于
壁纸
直播
留言
友链
统计
Search
1
《三国志英杰传》攻略
6,034 阅读
2
Emby客户端IOS破解
5,769 阅读
3
白嫖Emby
5,768 阅读
4
《吞食天地1》金手指代码
4,694 阅读
5
破解emby-server
4,040 阅读
moonjerx
game
age-of-empires
zx3
san-guo-zhi
尼尔:机械纪元
net
emby
learn-video
docker
torrent
photoshop
route
minio
git
ffmpeg
im
vue
gitlab
typecho
svn
alipay
nasm
srs
mail-server
tailscale
kkfileview
aria2
webdav
synology
redis
oray
chemical
mxsite
math
π
x-ui
digital-currency
server
nginx
baota
k8s
http
cloud
linux
shell
database
vpn
esxi
rancher
domain
k3s
ewomail
os
android
windows
ios
app-store
macos
develop
java
javascript
uniapp
nodejs
hbuildx
maven
android-studio
jetbrain
jenkins
css
mybatis
php
python
hardware
hard-disk
pc
RAM
software
pt
calibre
notion
office
language
literature
philosophy
travel
登录
Search
标签搜索
ubuntu
mysql
openwrt
zerotier
springboot
centos
openvpn
jdk
吞食天地2
synology
spring
idea
windows11
吞食天地1
transmission
google-play
Japanese
xcode
群晖
kiftd
MoonjerX
累计撰写
370
篇文章
累计收到
459
条评论
首页
栏目
moonjerx
game
age-of-empires
zx3
san-guo-zhi
尼尔:机械纪元
net
emby
learn-video
docker
torrent
photoshop
route
minio
git
ffmpeg
im
vue
gitlab
typecho
svn
alipay
nasm
srs
mail-server
tailscale
kkfileview
aria2
webdav
synology
redis
oray
chemical
mxsite
math
π
x-ui
digital-currency
server
nginx
baota
k8s
http
cloud
linux
shell
database
vpn
esxi
rancher
domain
k3s
ewomail
os
android
windows
ios
app-store
macos
develop
java
javascript
uniapp
nodejs
hbuildx
maven
android-studio
jetbrain
jenkins
css
mybatis
php
python
hardware
hard-disk
pc
RAM
software
pt
calibre
notion
office
language
literature
philosophy
travel
页面
关于
壁纸
直播
留言
友链
统计
搜索到
370
篇与
moonjerx
的结果
2024-12-18
linux对用户组操作
1. 查看当前用户组查看所有用户组要查看系统中所有的用户组,可以使用cat或less命令查看/etc/group文件,该文件包含了所有用户组的信息。cat /etc/group或者使用less进行分页查看:less /etc/group每个条目包含四个字段,分别是:组名组密码(通常为空或x,表示密码存储在/etc/gshadow中)GID(Group ID)成员列表(用逗号分隔)查看当前用户的用户组要查看当前登录用户所属的所有用户组,可以使用groups命令:groups或者使用id命令,它会显示更详细的信息,包括用户ID(UID)和GID:id2. 添加用户组要创建一个新的用户组,可以使用groupadd命令:sudo groupadd 新组名例如,创建一个名为developers的用户组:sudo groupadd developers3. 删除用户组要删除一个用户组,可以使用groupdel命令:sudo groupdel 组名例如,删除developers用户组:sudo groupdel developers注意:删除用户组时,请确保该组没有活动成员,否则可能会导致权限问题。4. 修改用户组修改用户组名称要更改用户组的名称,可以使用groupmod命令:sudo groupmod -n 新组名 旧组名例如,将developers用户组重命名为devteam:sudo groupmod -n devteam developers修改用户组的GID你还可以更改用户组的GID(Group ID):sudo groupmod -g 新GID 组名例如,将devteam用户组的GID改为1005:sudo groupmod -g 1005 devteam5. 查询用户组信息查询特定用户组的信息要查看特定用户组的详细信息,可以使用getent命令:getent group 组名例如,查看devteam用户组的详细信息:getent group devteam这将返回类似于以下的输出:devteam:x:1005:user1,user2查询用户属于哪些组要查看某个特定用户属于哪些用户组,可以使用groups命令加上用户名:groups 用户名例如,查看bigserver用户属于哪些组:groups bigserver或者使用id命令:id bigserver6. 增加用户到用户组要将用户添加到一个用户组,可以使用usermod命令:sudo usermod -aG 组名 用户名例如,将bigserver用户添加到www用户组:sudo usermod -aG www bigserver-aG选项表示将用户添加到指定的组,而不影响其现有的其他组成员身份。7. 删除用户从用户组要将用户从一个用户组中移除,可以编辑/etc/group文件,或者使用gpasswd命令:sudo gpasswd -d 用户名 组名
2024年12月18日
9 阅读
0 评论
0 点赞
2024-11-23
【openwrt】通过zerotier网络连接路由器时,如何配置使用TYDD终端工具
一、创建新的接口命名为ZEROTIER,接口的协议选择DHCP客户端,接口选择已经连接的ZEROTIER适配器。修改刚刚创建的接口配置,防火墙设置,新建ZEROTIER防火墙,保存并应用二、配置防护墙端口转发配置7681端口转发,并选择ZEROTIER网络三、自定义规则iptables -I FORWARD -i ztyfejv2us -j ACCEPT iptables -I FORWARD -o ztyfejv2us -j ACCEPT iptables -t nat -I POSTROUTING -o ztyfejv2us -j MASQUERADE
2024年11月23日
63 阅读
0 评论
0 点赞
2024-11-11
Java面试一
面试概况本次面试为快手商业化部门日常实习生的一轮面试,面试时长约为40分钟。面试内容主要集中在Java基础知识、数据库、并发编程、算法等方面。以下是详细的面试问题及回答整理。面试问题及回答1. Java 的集合类知道哪些?Java 的集合类主要分为以下几类:List:有序集合,允许重复元素。常见实现类有 ArrayList、LinkedList、Vector。Set:不允许重复元素的集合。常见实现类有 HashSet、LinkedHashSet、TreeSet。Map:键值对集合,键唯一但值可以重复。常见实现类有 HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap。Queue:队列集合,支持 FIFO(先进先出)操作。常见实现类有 LinkedList、PriorityQueue、ArrayDeque。2. 说说 HashMap?HashMap 是 Java 中常用的集合类,基于哈希表实现,允许存储键值对。其主要特点如下:无序存储:HashMap 不保证元素的顺序。允许空键和空值:但最多只能有一个空键。线程不安全:在多线程环境下使用 HashMap 可能会导致数据不一致。时间复杂度:插入、删除、查找操作的时间复杂度均为 O(1)(理想情况下)。3. HashMap 线程安全吗,如何变线程安全?HashMap 本身是线程不安全的。可以通过以下几种方式使其线程安全:使用 Collections.synchronizedMap:将 HashMap 包装成线程安全的 Map。Map<String, String> map = Collections.synchronizedMap(new HashMap<>());使用 ConcurrentHashMap:ConcurrentHashMap 是线程安全的 Map 实现,性能优于 Hashtable。Map<String, String> map = new ConcurrentHashMap<>();手动同步:在访问 HashMap 的地方手动加锁。synchronized (map) { map.put(key, value); }4. ConcurrentHashMap 如何实现的?ConcurrentHashMap 通过分段锁(Segment)机制实现线程安全。具体实现如下:分段锁:将整个哈希表分成多个段(Segment),每个段内部是一个小的哈希表。锁粒度:每次操作只锁定当前段,而不是整个哈希表,提高了并发性能。JDK 1.8 改进:取消了 Segment,改为使用 CAS 操作和锁竞争机制,进一步提高了性能。5. synchronized 原理以及升级过程synchronized 是 Java 中的内置锁,用于实现线程同步。其原理如下:锁的状态:锁有四种状态,依次是无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。锁升级:锁可以从较低状态升级到较高状态,但不能降级。无锁状态:没有任何线程持有锁。偏向锁:偏向于第一个获取锁的线程,减少锁的竞争。轻量级锁:使用 CAS 操作尝试获取锁,如果失败则升级为重量级锁。重量级锁:使用操作系统互斥量实现,性能较差。6. 线程池的参数?ThreadPoolExecutor 是 Java 中创建线程池的类,其构造方法参数如下:corePoolSize:核心线程数。maximumPoolSize:最大线程数。keepAliveTime:线程空闲时间。unit:keepAliveTime 的时间单位。workQueue:任务队列,用于存储等待执行的任务。threadFactory:线程工厂,用于创建线程。handler:拒绝策略,当任务队列满且线程数达到最大值时的处理策略。7. full gc, minor gc?Minor GC:回收年轻代(Young Generation)的垃圾收集操作。当年轻代空间不足时触发。Full GC:回收整个堆(包括年轻代和老年代)的垃圾收集操作。通常在以下情况下触发:老年代空间不足。系统显式调用 System.gc()。Minor GC 时发现老年代空间不足。8. 垃圾回收算法?常见的垃圾回收算法有:标记-清除:标记所有需要回收的对象,然后清除这些对象。标记-整理:标记所有需要回收的对象,然后将存活对象移动到一端,清除边界外的对象。复制:将内存分为两个区域,每次只使用其中一个区域,将存活对象复制到另一个区域。分代收集:将内存分为年轻代和老年代,分别使用不同的回收算法。9. CPU 密集型和 IO 密集型下如何设置核心线程数?CPU 密集型:任务主要消耗 CPU 资源,核心线程数一般设置为 CPU 核心数 + 1。int corePoolSize = Runtime.getRuntime().availableProcessors() + 1;IO 密集型:任务主要消耗 I/O 资源,核心线程数一般设置为 CPU 核心数 * 2。int corePoolSize = Runtime.getRuntime().availableProcessors() * 2;10. 聚簇索引和非聚簇索引区别聚簇索引:数据行的物理存储顺序与索引顺序一致。一个表只能有一个聚簇索引。查询速度快,但插入、删除、更新操作较慢。非聚簇索引:数据行的物理存储顺序与索引顺序无关。一个表可以有多个非聚簇索引。查询速度相对较慢,但插入、删除、更新操作较快。11. MySQL 的各个隔离级别,以及分别解决了什么问题MySQL 的事务隔离级别有四种:读未提交(Read Uncommitted):最低隔离级别,允许脏读。读已提交(Read Committed):允许不可重复读,但不允许脏读。可重复读(Repeatable Read):默认隔离级别,允许幻读,但不允许脏读和不可重复读。串行化(Serializable):最高隔离级别,不允许脏读、不可重复读和幻读。12. Redis 有什么数据类型Redis 支持多种数据类型:字符串(String):最基本的类型,可以存储字符串、数字等。列表(List):有序集合,支持从两端插入和删除操作。集合(Set):无序集合,不允许重复元素。有序集合(Sorted Set):有序集合,每个元素关联一个分数。哈希表(Hash):键值对集合,键唯一。位图(Bitmap):用于处理位级别的操作。HyperLogLog:用于估算集合的基数。13. Redis 分布式锁实现?Redis 分布式锁可以通过以下几种方式实现:SETNX 命令:使用 SETNX 命令尝试获取锁。SETNX key valueEXPIRE 命令:设置锁的超时时间,防止死锁。EXPIRE key secondsLua 脚本:使用 Lua 脚本保证原子性。local key = KEYS[1] local value = ARGV[1] local expire = tonumber(ARGV[2]) if redis.call("setnx", key, value) == 1 then redis.call("expire", key, expire) return 1 else return 0 end14. 项目中的前缀树,自定义注解限频,网站优化过程前缀树(Trie):用于快速查找字符串,常用于搜索引擎、拼写检查等。自定义注解限频:通过自定义注解和 AOP 切面实现接口限流。@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface RateLimit { int limit() default 100; int time() default 1; } @Aspect @Component public class RateLimitAspect { @Around("@annotation(rateLimit)") public Object around(ProceedingJoinPoint joinPoint, RateLimit rateLimit) throws Throwable { // 限流逻辑 return joinPoint.proceed(); } }网站优化过程:前端优化:使用 CDN、压缩资源、合并文件、懒加载等。后端优化:优化数据库查询、使用缓存、减少网络请求等。服务器优化:调整 JVM 参数、优化网络配置、使用负载均衡等。15. 算法:反转链表反转链表的实现如下:public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode current = head; while (current != null) { ListNode next = current.next; current.next = prev; prev = current; current = next; } return prev; }总结本次面试涉及的知识点较为广泛,涵盖了 Java 基础、并发编程、数据库、算法等多个方面。准备面试时,建议重点复习这些知识点,并结合实际项目经验进行准备。希望这篇博客对大家有所帮助!
2024年11月11日
10 阅读
0 评论
0 点赞
2024-10-24
Git 操作指南:分支、标签和归档
在版本控制系统 Git 中,管理和维护代码的不同版本是一项常见任务。本文将详细介绍如何在 Git 中创建、切换、推送、删除分支、标签以及归档版本。目录创建分支切换分支推送分支删除分支创建和管理标签归档版本一、创建分支1. 创建本地分支要创建一个新的本地分支,可以使用 git checkout 或 git switch 命令:使用 git checkout 命令:git checkout -b <branch-name>使用 git switch 命令:git switch -b <branch-name>例如,创建一个名为 feature-branch 的分支:git checkout -b feature-branch # 或者 git switch -b feature-branch2. 推送分支到远程仓库创建本地分支后,可以将其推送到远程仓库:使用 git push 命令:git push origin <branch-name>例如,将 feature-branch 推送到远程仓库:git push origin feature-branch二、切换分支1. 切换到本地分支要切换到已有的本地分支,可以使用 git checkout 或 git switch 命令:使用 git checkout 命令:git checkout <branch-name>使用 git switch 命令:git switch <branch-name>例如,切换到 main 分支:git checkout main # 或者 git switch main三、推送分支1. 推送本地分支到远程仓库要将本地分支推送到远程仓库,可以使用 git push 命令:使用 git push 命令:git push origin <branch-name>例如,将 feature-branch 推送到远程仓库:git push origin feature-branch四、删除分支1. 删除本地分支要删除本地分支,可以使用 git branch 命令:使用 git branch -d 命令:git branch -d <branch-name>如果分支未合并,可以使用 -D 选项强制删除:git branch -D <branch-name>例如,删除本地分支 feature-branch:git branch -d feature-branch # 或者 git branch -D feature-branch2. 删除远程分支要删除远程分支,可以使用 git push 命令:使用 git push --delete 命令:git push origin --delete <branch-name>例如,删除远程分支 feature-branch:git push origin --delete feature-branch五、创建和管理标签1. 创建标签要创建一个标签,可以使用 git tag 命令:使用 git tag 命令:git tag <tag-name>例如,创建一个名为 v1.0 的标签:git tag v1.02. 推送标签到远程仓库创建标签后,可以将其推送到远程仓库:使用 git push 命令:git push origin <tag-name>例如,将 v1.0 标签推送到远程仓库:git push origin v1.03. 删除标签(1)删除本地标签要删除本地标签,可以使用 git tag 命令:使用 git tag -d 命令:git tag -d <tag-name>例如,删除本地标签 v1.0:git tag -d v1.0(2)删除远程标签要删除远程标签,可以使用 git push 命令:使用 git push --delete 命令:git push origin --delete <tag-name>例如,删除远程标签 v1.0:git push origin --delete v1.0六、归档版本1. 创建归档文件要创建一个归档文件,可以使用 git archive 命令:使用 git archive 命令:git archive --format=tar.gz -o <archive-file> <commit-ish>例如,创建一个包含版本 v1.0 的归档文件 v1.0.tar.gz:git archive --format=tar.gz -o v1.0.tar.gz v1.02. 解压归档文件要解压归档文件,可以使用相应的解压命令:使用 tar 命令:tar -xzvf <archive-file>例如,解压 v1.0.tar.gz 文件:tar -xzvf v1.0.tar.gz总结本文详细介绍了在 Git 中创建、切换、推送、删除分支、标签以及归档版本的操作。希望这些信息能帮助你更好地管理和维护代码版本。
2024年10月24日
17 阅读
0 评论
0 点赞
2024-10-13
自动选择可用的Maven仓库并下载settings.xml文件
在使用Maven进行项目构建时,正确配置settings.xml文件对于依赖管理和仓库访问至关重要。然而,在多仓库环境下,如何确保能够自动选择一个可用的仓库来下载settings.xml文件呢?本文将介绍一个简单的Shell脚本,它可以帮助我们解决这个问题。脚本功能该脚本的主要功能包括:定义多个Maven仓库及其对应的settings.xml文件URL。检查每个仓库是否可用。如果找到可用的仓库,则从其对应的URL下载最新的settings.xml文件到用户的.m2目录下。如果所有仓库都不可用,则输出错误信息。脚本代码#!/bin/bash # 定义仓库URL及对应的settings.xml文件URL declare -A REPOS=( ["http://100.100.100.196:30024/repository/maven-public/"]="https://dl.test.com/intranet/settings.xml" ["http://100.100.100.72:30024/repository/maven-public/"]="https://dl.test.com/private/settings.xml" ["https://maven.test.com/repository/maven-public/"]="https://dl.test.com/internet/settings.xml" ) # 获取当前登录用户的用户名 USERNAME=$(whoami) # 根据操作系统设置settings.xml的目标路径 if [[ "$OSTYPE" == "darwin"* ]]; then # macOS SETTINGS_XML="/Users/$USERNAME/.m2/settings.xml" elif [[ "$OSTYPE" == "msys"* ]] || [[ "$OSTYPE" == "cygwin"* ]]; then # Windows (Git Bash or Cygwin) SETTINGS_XML="C:/Users/$USERNAME/.m2/settings.xml" else # Linux 或其他 Unix-like 系统 SETTINGS_XML="$HOME/.m2/settings.xml" fi # 函数:检查仓库是否可用 check_repo() { local repo_url=$1 curl --silent --head --fail $repo_url > /dev/null if [ $? -eq 0 ]; then return 0 # 可用 else return 1 # 不可用 fi } # 函数:下载settings.xml文件 download_settings() { local settings_url=$1 echo "正在下载 $settings_url 到 $SETTINGS_XML" curl -s -o "$SETTINGS_XML" "$settings_url" if [ $? -eq 0 ]; then echo "下载成功" else echo "下载失败" fi } # 主逻辑:按顺序检查仓库直到找到一个可用的 for repo in "${!REPOS[@]}"; do if check_repo $repo; then download_settings ${REPOS[$repo]} exit 0 # 成功下载后退出脚本 else echo "仓库 $repo 不可用,尝试下一个..." fi done echo "所有仓库均不可用,无法更新settings.xml"使用方法将上述脚本保存为一个文件,例如命名为update-settings.sh。给该脚本执行权限:chmod +x update-settings.sh。运行脚本:./update-settings.sh。注意事项确保您的系统已安装curl工具,这是脚本中用于网络请求的工具。根据实际情况修改仓库URL和对应的settings.xml文件URL。此脚本假定用户已经有一个.m2目录,如果不存在,请先创建或允许脚本有权限创建。通过这个脚本,我们可以轻松地在多个可能的Maven仓库之间切换,并始终保持settings.xml文件是最新的。这对于需要频繁更新依赖或者在不同网络环境下工作的开发者来说非常有用。
2024年10月13日
18 阅读
0 评论
0 点赞
1
2
...
74
您的IP: