DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕

共同探索软件研发!敬请关注【宝码香车】
关注描述

csdngif标识

目录

  • DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)
    • 📚前言
    • 📚进入安装好的DeepSeek
    • 📚页面效果
    • 📚指令输入
      • **组件属性 (Props)**
      • **组件事件 (Events)**
    • 📚think
      • 📘组件代码
        • 1. 组件实现代码
        • 2. 调用示例
        • 3. 增强建议
    • 📚代码测试
    • 📚测试代码正常跑通,附其他代码
      • 📘编写路由 src\router\index.js
      • 📘编写展示入口 src\App.vue
    • 📚页面效果
    • 📚自己部署 DeepSeek 安装地址
    • 📚相关文章


📚📗📕📘📖🕮💡📝🗂️✍️🛠️💻🚀🎉🏗️🌐🖼️🔗📊👉🔖⚠️🌟🔐⬇️·正文开始⬇️·🎥😊🎓📩😺🌈🤝🤖📜📋🔍✅🧰❓📄📢📈 🙋0️⃣1️⃣2️⃣3️⃣4️⃣5️⃣6️⃣7️⃣8️⃣9️⃣🔟🆗*️⃣#️⃣

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

📚前言

对于 AI 社区来说,DeepSeek 的开源策略吸引了大量开发者和研究人员的关注和参与,形成了一个活跃的社区。开发者们可以在 GitHub 等平台上自由获取和修改模型代码,共同推动 AI 技术的发展。这种开放式的创新模式激发了更多的创意和灵感,加速了模型的更新和迭代。许多开发者基于 DeepSeek 的开源模型进行二次开发,开发出了各种有趣的应用和工具,进一步拓展了 DeepSeek 的应用场景。

在行业发展方面,DeepSeek 的开源策略降低了中小企业和个人开发者的使用成本,使得他们能够以较低的成本进行模型微调和应用开发。这有助于推动人工智能技术在各个行业的普及和应用,促进了整个 AI 行业的发展。同时,DeepSeek 与多家芯片企业合作,优化模型在国产芯片上的推理效率,推动了 AI 生态的建设。它还通过开源课程体系,培养具备全栈 AI 开发能力的复合型人才,为行业发展提供了人才支持。

📚进入安装好的DeepSeek

0基础3步部署自己的DeepSeek安装步骤

打开搭建好的DeepSeek应用。

DeepSeek应用

进入应用。

进入DeepSeek应用

📚页面效果

页面效果

📚指令输入

已经创建好了一个基于Vue3的组合式API的项目(Composition API),并能正常运行起来,请帮我用 Vue3的组合式API(Composition API) 生成一个 瀑布流布局(Masonry Layout) 的功能组件,所有代码都保存在components/MasonryLayout 下的文件夹中。功能组件的script标签中只有setup属性,使用普通 JavaScript 实现,不使用TypeScript。
功能要有,如下属性:


组件属性 (Props)

  1. columns

    • 类型: Number
    • 默认值: 2
    • 说明: 初始列数
  2. gutter

    • 类型: Number
    • 默认值: 8
    • 说明: 列间距(像素)
  3. breakpoints

    • 类型: Object
    • 默认值: {}
    • 说明: 响应式断点配置,例如 { 768: 3, 1024: 4 }
  4. resizeObserver

    • 类型: Boolean
    • 默认值: true
    • 说明: 是否监听容器尺寸变化自动重新布局
  5. useImageLoader

    • 类型: Boolean
    • 默认值: true
    • 说明: 是否监听子元素内的图片加载完成事件后重新布局
  6. itemClass

    • 类型: String
    • 默认值: 'masonry-item'
    • 说明: 子元素的 CSS 类名
  7. transitionDuration

    • 类型: Number
    • 默认值: 300
    • 说明: 布局变化时的过渡动画时长(单位:ms)

组件事件 (Events)

  1. layout-complete

    • 触发时机: 布局计算完成后
    • 参数: { columns: number, containerHeight: number }
  2. item-positioned

    • 触发时机: 单个子元素定位完成后
    • 参数: { element: HTMLElement, position: { x: number, y: number } }

你有更好的建议也可以添加,要注明。组件定义好后给出3个及以上完整的调用示例。
下面是现有目录
vueAndDeepseek/
├── src/ # 源代码目录
│ ├── assets/ # 静态资源
│ │ ├── base.css
│ │ ├── main.css
│ │ └── logo.svg
│ ├── components/ # 组件目录
│ │ ├── HelloWorld.vue
│ │ ├── TheWelcome.vue
│ │ ├── WelcomeItem.vue
│ │ ├── Progress/
│ │ │ └── Progress.vue
│ │ ├── Accordion/
│ │ ├── BackToTop/
│ │ ├── Card/
│ │ ├── InfiniteScroll/
│ │ ├── Notification/
│ │ ├── Timeline/
│ │ ├── Switch/
│ │ ├── Tabs/
│ │ ├── Sidebar/
│ │ ├── Breadcrumbs/
│ │ ├── MasonryLayout/
│ │ └── icons/
│ ├── router/ # 路由配置
│ │ └── index.js
│ ├── stores/ # Pinia 状态管理
│ │ └── counter.js
│ ├── views/ # 页面组件
│ │ ├── ProgressView.vue
│ │ ├── TabsView.vue
│ │ ├── SwitchView.vue
│ │ ├── TimelineView.vue
│ │ ├── NotificationView.vue
│ │ ├── CardView.vue
│ │ ├── InfiniteScrollView.vue
│ │ ├── BackToTopView.vue
│ │ ├── AccordionView.vue
│ │ ├── SidebarView.vue
│ │ ├── BreadcrumbsView.vue
│ │ ├── MasonryLayoutView.vue
│ │ └── AboutView.vue
│ ├── App.vue # 根组件
│ └── main.js # 应用入口
├── public/ # 公共资源目录
├── index.html # HTML 模板
├── package.json # 项目配置
├── vite.config.js # Vite 配置
└── node_modules/ # 依赖包目录

📚think

嗯,我现在需要帮用户生成一个基于Vue3组合式API的瀑布流布局组件。首先,我得理解用户的需求。他已经有一个Vue项目,使用Composition API,并且能正常运行。他想在这个基础上创建一个MasonryLayout组件,并且代码放在components/MasonryLayout文件夹下。

好的,先看看组件需要哪些属性。有columns、gutter、breakpoints这些,还有resizeObserver和useImageLoader两个布尔值。另外,还有itemClass和transitionDuration。这些都需要在setup函数中处理。

然后是事件,layout-complete和item-positioned。这两个事件要在布局完成后和每个子元素定位后触发。我需要记得使用emit来发送这些事件。

接下来,组件的结构应该是怎样的?父容器是一个div,里面包含多个子元素。子元素会根据列数排列,并且可能有图片加载的情况,所以需要用Intersection Observer来监听页面尺寸变化和图片加载完成。

在实现上,我需要计算当前屏幕宽度,根据breakpoints决定显示多少列。然后,动态设置每个子元素的位置。这涉及到测量每列的高度,将子元素放入最矮的列中。

对于响应式布局,resizeObserver为true时,应该监听页面容器大小的变化,并重新计算布局。同时,useImageLoader为true时,需要监听页面内的图片加载完成事件,调整布局。

在代码结构上,我需要用ref来管理容器和子元素,使用computed来处理当前的列数和gutter宽度。生命周期钩子mounted和unmounted用来初始化和清理观察者实例。

可能会遇到的问题是图片加载顺序不同导致布局混乱,所以需要确保所有图片都加载完成后才进行布局,或者在每个图片加载后动态调整。

测试示例部分,用户需要至少三个完整的调用示例,包括基本使用、响应式断点和复杂布局。这些示例应该展示组件的不同功能和配置选项。

最后,我得检查代码是否符合Vue3的组合式API规范,不使用TypeScript,只用普通JavaScript,并且所有逻辑都在setup函数中处理。同时,确保样式部分正确应用,包括过渡效果和边距设置。

📘组件代码

这里为您实现一个基于Vue3 Composition API的瀑布流组件,按照您的要求分文件保存:

vueAndDeepseek/
└─ src/└─ components/└─ MasonryLayout/├─ index.vue          # 组件主文件└─ MasonryLayout.vue  # 组件逻辑
1. 组件实现代码
<!-- components/MasonryLayout/index.vue -->
<template><div class="masonry-container" ref="containerRef"><slot></slot></div>
</template><script setup>
import { ref, computed, watch, onMounted, onUnmounted } from 'vue'
import { useElementSize, useWindowSize } from '@vueuse/core'const props = defineProps({columns: { type: Number, default: 2 },gutter: { type: Number, default: 8 },breakpoints: { type: Object, default: () => ({}) },resizeObserver: { type: Boolean, default: true },useImageLoader: { type: Boolean, default: true },itemClass: { type: String, default: 'masonry-item' },transitionDuration: { type: Number, default: 300 }
})const emit = defineEmits(['layout-complete', 'item-positioned'])// 响应式变量
const containerRef = ref(null)
const items = ref([])
let observer = null
let resizeObserver = null// 计算当前列数
const currentColumns = computed(() => {const { width } = useWindowSize()const breakpoints = Object.keys(props.breakpoints).map(Number).sort((a, b) => b - a)for (const bp of breakpoints) {if (width.value >= bp) {return props.breakpoints[bp]}}return props.columns
})// 核心布局方法
const calculateLayout = async () => {if (!containerRef.value) return// 等待图片加载if (props.useImageLoader) {await loadImages(containerRef.value)}const containerWidth = containerRef.value.offsetWidthconst colWidth = (containerWidth - (currentColumns.value - 1) * props.gutter) / currentColumns.valueconst positions = Array(currentColumns.value).fill(0)items.value = Array.from(containerRef.value.children).filter(el => el.classList.contains(props.itemClass))items.value.forEach(item => {const minHeight = Math.min(...positions)const columnIndex = positions.indexOf(minHeight)const x = columnIndex * (colWidth + props.gutter)const y = minHeight// 应用定位item.style.transform = `translate(${x}px, ${y}px)`item.style.transition = `transform ${props.transitionDuration}ms`// 触发单个元素定位事件emit('item-positioned', {element: item,position: { x, y }})positions[columnIndex] += item.offsetHeight + props.gutter})// 更新容器高度containerRef.value.style.height = `${Math.max(...positions)}px`emit('layout-complete', {columns: currentColumns.value,containerHeight: Math.max(...positions)})
}// 图片加载处理
const loadImages = (container) => {return Promise.all(Array.from(container.querySelectorAll('img')).map(img => {if (img.complete) return Promise.resolve()return new Promise(resolve => {img.onload = resolveimg.onerror = resolve})}))
}// 监听器设置
const setupObservers = () => {if (props.resizeObserver && containerRef.value) {resizeObserver = new ResizeObserver(calculateLayout)resizeObserver.observe(containerRef.value)}if (window.MutationObserver) {observer = new MutationObserver(calculateLayout)observer.observe(containerRef.value, {childList: true,subtree: true})}
}// 生命周期
onMounted(() => {calculateLayout()setupObservers()window.addEventListener('resize', calculateLayout)
})onUnmounted(() => {if (resizeObserver) resizeObserver.disconnect()if (observer) observer.disconnect()window.removeEventListener('resize', calculateLayout)
})// 响应props变化
watch([currentColumns, () => props.gutter], calculateLayout)
</script><style scoped>
.masonry-container {position: relative;margin: 0 auto;
}.masonry-container :deep(.masonry-item) {position: absolute;box-sizing: border-box;will-change: transform;
}
</style>
2. 调用示例
<!-- views/MasonryLayoutView.vue -->
<template><!-- 基础示例 --><MasonryLayout:columns="2":gutter="10"@layout-complete="handleLayoutComplete"><div v-for="(item, index) in 20" :key="index"class="masonry-item":style="{ height: `${Math.random() * 300 + 100}px`, background: randomColor() }"/></MasonryLayout><!-- 响应式断点示例 --><MasonryLayout:columns="2":breakpoints="{ 768: 3, 1024: 4 }":gutter="15":transition-duration="500"><div v-for="(item, index) in images" :key="item.id"class="masonry-item"><img :src="item.url" alt=""></div></MasonryLayout><!-- 动态内容示例 --><button @click="addItems">添加元素</button><MasonryLayoutref="masonry":item-class="customItemClass":resize-observer="false"><div v-for="(item, index) in dynamicItems" :key="index":class="customItemClass":style="{ height: item.height }"/></MasonryLayout>
</template><script setup>
import { ref } from 'vue'// 示例数据
const randomColor = () => '#' + Math.floor(Math.random()*16777215).toString(16)const images = ref([{ id: 1, url: '/image1.jpg' },{ id: 2, url: '/image2.jpg' },// ...
])const dynamicItems = ref(Array(10).fill().map(() => ({height: `${Math.random() * 400 + 100}px`,color: randomColor()
})))const customItemClass = 'custom-masonry-item'const handleLayoutComplete = ({ columns, containerHeight }) => {console.log(`布局完成,列数:${columns},容器高度:${containerHeight}px`)
}const addItems = () => {dynamicItems.value.push({height: `${Math.random() * 400 + 100}px`,color: randomColor()})// 手动触发布局更新nextTick(() => {masonry.value.calculateLayout()})
}
</script><style>
.custom-masonry-item {width: 100%;background: #f0f0f0;border-radius: 8px;padding: 1rem;transition: transform 0.5s ease-in-out;
}
</style>
3. 增强建议
  1. 性能优化

    • 添加虚拟滚动支持(对于大数据量)
    • 使用requestAnimationFrame优化布局计算
    • 添加布局缓存机制
  2. 功能扩展

    // 在组件中暴露方法
    defineExpose({calculateLayout,refreshLayout: calculateLayout
    })
    
  3. 错误处理

    // 在图片加载处添加错误处理
    const loadImages = (container) => {return Promise.all(Array.from(container.querySelectorAll('img')).map(img => {return new Promise(resolve => {if (img.complete) return resolve()img.onload = resolveimg.onerror = resolve // 即使图片加载失败也继续执行})}))
    }
    
  4. SSR支持

    // 在onMounted中初始化观察器
    if (typeof window !== 'undefined') {// 初始化代码
    }
    

这个实现包含了您要求的所有功能,并通过三个示例展示了不同的使用场景。组件会自动响应窗口大小变化、内容变化和图片加载,并提供了良好的可扩展性。

📚代码测试

正常

📚测试代码正常跑通,附其他代码

  • 添加路由
  • 页面展示入口

📘编写路由 src\router\index.js

\router\index.js

import { createRouter, createWebHistory } from 'vue-router'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'progress',component:  () => import('../views/ProgressView.vue'),},{path: '/tabs',name: 'tabs',// route level code-splitting// this generates a separate chunk (About.[hash].js) for this route// which is lazy-loaded when the route is visited.// 标签页(Tabs)component: () => import('../views/TabsView.vue'),},{path: '/accordion',name: 'accordion',// 折叠面板(Accordion)component: () => import('../views/AccordionView.vue'),},{path: '/timeline',name: 'timeline',// 时间线(Timeline)component: () => import('../views/TimelineView.vue'),},{path: '/backToTop',name: 'backToTop',component: () => import('../views/BackToTopView.vue')},{path: '/notification',name: 'notification',component: () => import('../views/NotificationView.vue')},{path: '/card',name: 'card',component: () => import('../views/CardView.vue')},{path: '/infiniteScroll',name: 'infiniteScroll',component: () => import('../views/InfiniteScrollView.vue')},{path: '/switch',name: 'switch',component: () => import('../views/SwitchView.vue')},{path: '/sidebar',name: 'sidebar',component: () => import('../views/SidebarView.vue')},{path: '/breadcrumbs',name: 'breadcrumbs',component: () => import('../views/BreadcrumbsView.vue')},{path: '/masonryLayout',name: 'masonryLayout',component: () => import('../views/masonryLayoutView.vue')}],
})export default router

📘编写展示入口 src\App.vue

 src\App.vue

<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script><template><header><img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" /><div class="wrapper"><HelloWorld msg="You did it!" /><nav><RouterLink to="/">Progress</RouterLink><RouterLink to="/tabs">Tabs</RouterLink><RouterLink to="/accordion">Accordion</RouterLink><RouterLink to="/timeline">Timeline</RouterLink><RouterLink to="/backToTop">BackToTop</RouterLink><RouterLink to="/notification">Notification</RouterLink><RouterLink to="/card">Card</RouterLink><RouterLink to="/infiniteScroll">InfiniteScroll</RouterLink><RouterLink to="/switch">Switch</RouterLink><RouterLink to="/sidebar">Sidebar</RouterLink><RouterLink to="/breadcrumbs">Breadcrumbs</RouterLink><RouterLink to="/masonryLayout">MasonryLayout</RouterLink></nav></div></header><RouterView />
</template><style scoped>
header {line-height: 1.5;max-height: 100vh;
}.logo {display: block;margin: 0 auto 2rem;
}nav {width: 100%;font-size: 12px;text-align: center;margin-top: 2rem;
}nav a.router-link-exact-active {color: var(--color-text);
}nav a.router-link-exact-active:hover {background-color: transparent;
}nav a {display: inline-block;padding: 0 1rem;border-left: 1px solid var(--color-border);
}nav a:first-of-type {border: 0;
}@media (min-width: 1024px) {header {display: flex;place-items: center;padding-right: calc(var(--section-gap) / 2);}.logo {margin: 0 2rem 0 0;}header .wrapper {display: flex;place-items: flex-start;flex-wrap: wrap;}nav {text-align: left;margin-left: -1rem;font-size: 1rem;padding: 1rem 0;margin-top: 1rem;}
}
</style>

📚页面效果

页面效果

📚自己部署 DeepSeek 安装地址

蓝耘元生代智算云平台地址:https://cloud.lanyun.net/#/registerPage?promoterCode=07100c37a0

📚相关文章

 

———— 相 关 文 章 ————

 

  1. 0基础3步部署自己的DeepSeek安装步骤

  2. DeepSeek 助力 Vue 开发:打造丝滑的步骤条(Step bar)

  3. DeepSeek 助力 Vue 开发:打造丝滑的进度条(Progress Bar)

  4. 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的标签页(Tabs)

  5. 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的折叠面板(Accordion)

  6. 自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )

  7. DeepSeek 助力 Vue 开发:打造丝滑的返回顶部按钮(Back to Top)

  8. DeepSeek 助力 Vue 开发:打造丝滑的通知栏(Notification Bar)

  9. DeepSeek 助力 Vue 开发:打造丝滑的卡片(Card)

  10. DeepSeek 助力 Vue 开发:打造丝滑的无限滚动(Infinite Scroll)

  11. DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)

  12. DeepSeek 助力 Vue 开发:打造丝滑的侧边栏(Sidebar)

  13. DeepSeek 助力 Vue 开发:打造丝滑的面包屑导航(Breadcrumbs)

到此这篇文章就介绍到这了,更多精彩内容请关注本人以前的文章或继续浏览下面的文章,创作不易,如果能帮助到大家,希望大家多多支持宝码香车~💕,若转载本文,一定注明本文链接。


整理不易,点赞关注宝码香车

更多专栏订阅推荐:
👍 html+css+js 绚丽效果
💕 vue
✈️ Electron
⭐️ js
📝 字符串
✍️ 时间对象(Date())操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/70404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决弹窗中form表单中按下tab键不切换的问题

开发过程中碰到el-dialog中使用的form组件&#xff0c;按下键盘tab键不会切换到下一个&#xff0c;普通页面就正常切换。 解决办法 <ElInputref"newPWDInput"v-model"newPWD":clearable"true":maxlength"16":tabindex"2&quo…

封装一个vue3控制并行任务数量的组合式函数

一. 使用场景 使用环境&#xff1a; vue3 当需要处理多个异步任务时&#xff0c;想要控制并行异步任务的数量&#xff0c;不想所有任务同时执行导致产生性能上的问题&#xff0c; 比如当需要同时发起多个网络请求&#xff0c;但又不想一次性发出过多请求导致服务器压力过大或…

最新华为 HCIP-Datacom(H12-821)2025.2.20

最新 HCIP-Datacom&#xff08;H12-821&#xff09;&#xff0c;完整题库请扫描上方二维码访问。 如图所示为某OSPF网络&#xff0c;已知R1和R2已,成功建立邻接关系&#xff0c;现一工程师在R2上配置了图中命令。那么在R2上查看LSDB时&#xff0c;可能存在以下哪些LSA? A&…

MongoDB between ... and ... 操作

个人博客地址&#xff1a;​​​​​​​MongoDB between ... and ... 操作 | 一张假钞的真实世界 MongoDB中类似SQL的between and操作可以采用如下语法&#xff1a; db.collection.find( { field: { $gt: value1, $lt: value2 } } );

vue2和vue3的按需引入的详细对比通俗易懂

以下是 Vue2 与 Vue3 按需引入的对比详解&#xff0c;用最简单的语言和场景说明差异&#xff1a; 一、按需引入的本质 目标&#xff1a;只打包项目中实际用到的代码&#xff08;组件、API&#xff09;&#xff0c;减少最终文件体积。类比&#xff1a;去餐厅点餐&#xff0c;只…

bash+crontab充当半个守护进程的歪招

两个cpolar下的不同程序&#xff0c;都需要定时监测&#xff0c;以免程序没有再运行。有点类似半个守护进程吧。但是守护进程不会写&#xff0c;咋搞&#xff1f;就用这个办法临时当下守门员。这里主要为了备忘xpgrep -各类参数的用法。 #!/bin/bashif pgrep -fl "check_…

Web自动化之Selenium 超详细教程(python)

Selenium是一个开源的基于WebDriver实现的自动化测试工具。WebDriver提供了一套完整的API来控制浏览器&#xff0c;模拟用户的各种操作&#xff0c;如点击、输入文本、获取页面元素等。通过Selenium&#xff0c;我们可以编写自动化脚本&#xff0c;实现网页的自动化测试、数据采…

如何调用 DeepSeek API:详细教程与示例

目录 一、准备工作 二、DeepSeek API 调用步骤 1. 选择 API 端点 2. 构建 API 请求 3. 发送请求并处理响应 三、Python 示例&#xff1a;调用 DeepSeek API 1. 安装依赖 2. 编写代码 3. 运行代码 四、常见问题及解决方法 1. API 调用返回 401 错误 2. API 调用返回…

基于flask+vue的租房信息可视化系统

✔️本项目利用 python 网络爬虫抓取某租房网站的租房信息&#xff0c;完成数据清洗和结构化&#xff0c;存储到数据库中&#xff0c;搭建web系统对各个市区的租金、房源信息进行展示&#xff0c;根据各种条件对租金进行预测。 1、数据概览 ​ 将爬取到的数据进行展示&#xff…

磐维数据库双中心容灾流复制集群搭建

1. 架构 磐维数据库PanWeiDB V2.0.0基于gs_sdr工具&#xff0c;在不借助额外存储介质的情况下实现跨Region的异地容灾。提供流式容灾搭建&#xff0c;容灾升主&#xff0c;计划内主备切换&#xff0c;容灾解除、容灾状态监控等功能。 2. 部署双中心磐维集群 2.1. 主集群 角色…

wordpress企业官网建站的常用功能

WordPress 是一个功能强大的内容管理系统(CMS)&#xff0c;广泛用于企业官网的建设。以下是企业官网建站中常用的 WordPress 功能&#xff1a; 1. 页面管理 自定义页面模板&#xff1a;企业官网通常需要多种页面布局&#xff0c;如首页、关于我们、产品展示、联系我们等。Wor…

Linux应用之构建命令行解释器(bash进程)

目录 1.分析 2.打印输入提示符 3.读取并且处理输入字符串 4.创建子进程并切换 5.bash内部指令 6.完整代码 1.分析 当我们登录服务器的时候&#xff0c;命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。 我们在命令行上输入的…

ETL工具: Kettle入门(示例从oracle到oracle的数据导入)

kettle介绍 ETL工具,用于对数据的抽取&#xff08;Extract), 转换(Transform),加载 (Load&#xff09; Kettle 是一种ETL工具, 现称为 Pentaho Data Integration (PDI) 特点:纯JAVA语言编写 官方学习文档 网站: https://docs.hitachivantara.com/r/en-us/pentaho-data-int…

DeepSeek VS ChatGPT-速度、准确性和成本

撰写本文时马斯克刚刚发布了聊天机器人Grok2&#xff0c;10万张算卡体现了马斯克的财大气粗。近年来&#xff0c;人工智能模型取得了长足的发展&#xff0c;每个模型都力求在速度、准确性和成本效率方面超越其他模型。在本文中&#xff0c;我将深入研究比较中美在AI的焦点模型上…

SQLMesh 系列教程7- 详解 seed 模型

SQLMesh 是一个强大的数据建模和管道管理工具&#xff0c;允许用户通过 SQL 语句定义数据模型并进行版本控制。Seed 模型是 SQLMesh 中的一种特殊模型&#xff0c;主要用于初始化和填充基础数据集。它通常包含静态数据&#xff0c;如参考数据和配置数据&#xff0c;旨在为后续的…

基于大数据的国内高校排名可视化分析及推荐系统

【大数据】基于大数据的国内高校排名可视化分析及推荐系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 高校排名一直是教育研究领域的重要课题&#xff0c;具有丰富的理论价值。通过分析和可…

【前端小点】vue3项目内根据主题读取不同文件夹下的图片资源(图片文件)

项目要求实现一键换肤的功能&#xff0c;不仅仅是主题颜色上的替换&#xff0c;还有图片素材的替换&#xff0c;主题颜色替换的方案大同小异&#xff0c;下面仅对图片素材的一件替换进行方法描述。 主要思路 使用本地仓库对当前主题进行存储&#xff0c;系统根据主题去加载不同…

recent移除task时,结束其所有进程和service(全Android版本)

目录 一、Launcher中forceStopPackage Android9 Android13 二、AMS中判断前台service也杀死 Android6 Android7 Android11 Android原生系统在清理后台应用时&#xff0c;其实并不能清理所有进程。例如&#xff1a; 在点击系统自带的播放器以后&#xff0c;播放音乐的时…

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…

Day6 25/2/19 WED

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p4&v…