Android性能优化
Android性能优化
如何优化一个包含大量图片加载的Android应用,以提高性能和用户体验?
优化一个包含大量图片加载的Android应用,可以从以下几个方面入手,以提高性能和用户体验:
- 选择合适的图片加载库
使用成熟的图片加载库可以大大简化图片加载和缓存的实现过程。推荐使用以下库:
Glide:支持异步加载、内存缓存、磁盘缓存等,适合多种图片格式。
Picasso:功能丰富,易于使用,支持图片加载、缓存、变换等。
Fresco:专为Android设计,支持图片解码、加载、缓存、显示等。 - 图片资源优化
图片压缩:在加载图片之前,对图片进行压缩可以显著减少图片的加载时间和内存占用。可以使用第三方库如 TinyPNG 或 ImageOptim 进行图片压缩。
选择合适的图片格式:WebP格式具有较好的压缩率,适合网络传输。
按需加载:只加载用户需要显示的图片,避免加载过多不必要的图片资源。 - 图片缓存策略
内存缓存:将常用图片缓存到内存中,如使用LruCache。
磁盘缓存:将图片缓存到磁盘,如使用DiskLruCache。
合理配置缓存策略:Glide提供了多种缓存策略,可以根据不同场景选择合适的策略。 - 异步加载和线程管理
异步加载:使用异步加载机制,避免图片加载阻塞主线程,导致应用卡顿。
线程池:使用线程池管理图片加载任务,避免创建过多的线程,造成系统资源浪费。 - 图片加载性能监控
Logcat:通过Logcat查看图片加载过程中的错误信息,定位问题。
性能分析工具:使用性能分析工具(如Android Profiler)监控图片加载过程中的性能指标,如内存占用、CPU占用等。 - 图片加载错误处理
设置占位图和错误图:在图片加载过程中,显示占位图可以提升用户体验。当图片加载失败时,可以显示一个错误占位图。
重试机制:当图片加载失败时,可以尝试重新加载图片。 - 其他优化技巧
避免加载过大的图片:根据设备的屏幕尺寸和分辨率,设置合适的图片大小,避免加载过大的图片导致内存溢出。
图片复用:在加载图片时,可以使用ViewHolder模式和convertView进行图片复用,提高性能。
硬件加速:开启硬件加速可以提高图片显示性能。
分页加载:将图片分批次加载,降低一次性加载压力。
通过以上策略,可以有效优化Android应用中大量图片的加载速度,提高用户体验。在实际开发过程中,可以根据具体需求选择合适的方案,以达到最佳效果。
如何优化一个包含大量数据处理和复杂UI渲染的Android应用,以提升其性能和响应速度?
优化一个包含大量数据处理和复杂UI渲染的Android应用,可以从以下几个方面入手,以提升其性能和响应速度:
- 多线程与异步操作优化
合理管理线程:使用ExecutorService来管理线程池,避免主线程阻塞,提高应用的并发能力和响应速度。
异步任务处理:将耗时操作(如网络请求、数据库查询等)放在后台线程执行,避免在主线程中进行耗时操作。 - 数据处理优化
选择合适的数据结构:使用高效的数据结构(如HashMap、ArrayList等)来提升数据查找和遍历效率。
延迟加载与分页加载:对于大量数据,采用分页加载和延迟加载的方式,减少一次性加载的数据量。 - UI渲染优化
减少布局层级:使用扁平化的布局结构,减少嵌套层级,推荐使用ConstraintLayout。
避免过度绘制:减少背景色的重复绘制,使用合适的背景颜色和透明度。
硬件加速:在AndroidManifest.xml中启用硬件加速,提升绘制性能。 - 内存优化
及时释放资源:在不再使用资源时及时释放,避免内存泄漏。
使用内存缓存:对频繁使用的数据(如图片)使用内存缓存,减少重复加载。
优化Bitmap使用:合理使用Bitmap,及时回收不再使用的Bitmap对象。 - 网络请求优化
缓存机制:对于不经常变化的数据,使用缓存机制减少网络请求次数。
异步网络请求:使用异步任务处理网络请求,避免阻塞主线程。 - 启动速度优化
延迟加载:将非必要的资源加载延迟到应用启动后再进行。
优化启动流程:减少启动时的初始化任务,简化启动Activity的布局和逻辑。 - 工具与监控
性能分析工具:使用Android Studio的Profiler工具监控和分析应用的性能瓶颈。
内存监控:使用LeakCanary等工具检测和修复内存泄漏。
通过以上优化措施,可以显著提升包含大量数据处理和复杂UI渲染的Android应用的性能和响应速度。
如何避免OutOfMemoryError,并优化应用的内存管理?
为了避免OutOfMemoryError并优化Android应用的内存管理,可以从以下几个方面入手:
- 检测内存泄漏
内存泄漏是导致OutOfMemoryError的常见原因之一。可以通过以下工具和方法检测内存泄漏:
LeakCanary:这是一个自动检测内存泄漏的工具,能够自动监控Activity、Fragment等组件的生命周期,并在检测到内存泄漏时生成详细的报告。
添加依赖:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1'
使用LeakCanary监控对象的生命周期,一旦发现泄漏,它会通过通知提示开发者。
MAT(Memory Analyzer Tool):用于分析堆转储文件,找出内存泄漏的原因。
生成堆转储文件:在Android Studio中使用“Capture heap dump”功能。
导入堆转储文件到MAT,并使用“Leak Suspects”报告或“Histogram”视图分析内存泄漏。
Android Studio Profiler:实时监控应用的内存使用情况,包括内存分配和垃圾回收。
打开Profiler窗口,选择内存监控选项卡,运行应用并模拟内存泄漏场景,观察内存使用情况。
2. 优化内存使用
避免静态变量持有引用:静态变量在整个应用生命周期内都存在,如果它们持有Activity或View的引用,将导致这些对象无法被垃圾回收。
正确管理线程和Handler:确保在Activity或Fragment销毁时,释放或取消相关的线程和Handler。
使用弱引用:对于一些需要持有引用但又不希望影响垃圾回收的对象,可以使用WeakReference。
合理管理集合类:避免集合类(如ArrayList、HashMap)中存放过多对象,并及时移除不再需要的元素。
3. 优化图片加载
使用合适的图片加载库:如Glide、Picasso等,它们提供了高效的图片加载和缓存机制。
图片压缩:在加载图片之前进行压缩,减少图片的内存占用。
按需加载:只加载用户需要显示的图片,避免加载过多不必要的图片。
4. 优化数据处理
延迟加载与分页加载:对于大量数据,采用分页加载和延迟加载的方式,减少一次性加载的数据量。
减少临时对象:避免在循环中频繁创建新对象,例如使用StringBuilder替代字符串拼接。
5. 系统级别的优化
增加物理内存:如果服务器的物理内存不足,考虑增加内存容量。
使用64位JVM:64位JVM能够使用更大的内存空间。
通过以上方法,可以有效避免OutOfMemoryError,并优化Android应用的内存管理,提升应用的性能和响应速度。
如何优化布局层级,减少过度绘制,提升UI渲染性能?
优化布局层级、减少过度绘制以及提升UI渲染性能是Android开发中提升用户体验的重要环节。以下是一些具体的优化策略:
- 优化布局层级
1.1 使用扁平化布局
避免嵌套过多的视图:尽量减少布局的嵌套层级,避免使用过多的LinearLayout或RelativeLayout嵌套。
使用ConstraintLayout:ConstraintLayout是一个高效的布局,可以替代多层嵌套的LinearLayout和RelativeLayout。它通过约束来定义视图的位置和大小,减少了布局的层级。
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, World!"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
1.2 使用merge标签
减少不必要的布局层级:如果一个布局文件中只有一个根视图,可以使用标签来减少一层布局。
<merge xmlns:android="http://schemas.android.com/apk/res/android"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, World!" />
</merge>
1.3 使用include标签
复用布局:如果多个布局文件中有重复的布局,可以使用标签来复用这些布局。
<include layout="@layout/reusable_layout" />
- 减少过度绘制
2.1 避免背景色的重复绘制
使用单一背景色:尽量避免在多个视图上设置相同的背景色,减少重复绘制。
使用透明背景:如果需要,可以将某些视图的背景设置为透明,减少不必要的绘制。
2.2 使用View的setLayerType
硬件加速:对于复杂的视图,可以使用硬件加速来提升性能。
view.setLayerType(View.LAYER_TYPE_HARDWARE, null);
2.3 使用Profile GPU Rendering工具
分析过度绘制:在Android Studio中使用Profile GPU Rendering工具来分析过度绘制的情况。
打开Profile GPU Rendering工具,运行应用并观察绘制情况。
如果发现某个视图的绘制时间过长,可以进一步优化该视图的布局和绘制逻辑。
3. 提升UI渲染性能
3.1 使用硬件加速
启用硬件加速:在AndroidManifest.xml中启用硬件加速。
<applicationandroid:hardwareAccelerated="true">
</application>
3.2 使用RecyclerView代替ListView
高效滚动:RecyclerView比ListView更高效,支持多种布局管理器和动画效果。
<androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent" />
3.3 使用ViewHolder模式
减少视图查找:在RecyclerView或ListView中使用ViewHolder模式,减少每次滚动时的视图查找操作。
public class MyViewHolder extends RecyclerView.ViewHolder {public TextView textView;public MyViewHolder(View itemView) {super(itemView);textView = itemView.findViewById(R.id.textView);}
}
3.4 使用DiffUtil优化列表更新
高效更新:使用DiffUtil来计算列表的差异,避免不必要的视图更新。
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffCallback(oldList, newList));
diffResult.dispatchUpdatesTo(adapter);
3.5 使用Picasso或Glide加载图片
高效图片加载:使用Picasso或Glide等图片加载库,它们提供了高效的图片缓存和加载机制,减少图片加载对UI线程的影响。
Glide.with(context).load(imageUrl).into(imageView);
- 工具与监控
4.1 使用Android Studio Profiler
实时监控:使用Android Studio Profiler工具实时监控应用的CPU、内存、网络和UI性能。
打开Profiler窗口,选择Memory或CPU选项卡,运行应用并观察性能指标。
4.2 使用Hierarchy Viewer
分析布局层级:使用Hierarchy Viewer工具分析布局层级,找出布局中的问题。
打开Hierarchy Viewer,选择目标设备和应用,分析布局层级。
通过以上优化策略,可以有效减少布局层级、减少过度绘制,提升UI渲染性能,从而提升应用的整体性能和用户体验。
如何使用TraceView或Android Profiler来分析和优化应用的性能瓶颈?
使用TraceView或Android Profiler分析和优化应用的性能瓶颈
- 使用Android Profiler进行性能分析
1.1 打开Profiler工具
启动Android Studio,运行应用,并连接设备。
在Android Studio底部工具栏中点击“Profiler”标签,或者选择View -> Tool Windows -> Profiler。
1.2 监控CPU使用情况
在Profiler界面中,选择“CPU”选项卡。
选择要分析的应用进程。
点击“Start”按钮开始记录CPU使用情况。
分析CPU使用图表,查找高CPU消耗的代码。
1.3 监控内存使用情况
选择“Memory”选项卡。
点击“Dump Java Heap”按钮,捕获当前的内存快照。
分析内存快照,查找内存泄漏或过度分配的问题。
1.4 监控网络性能
选择“Network”选项卡。
分析网络请求的耗时和数据量,优化网络请求。
1.5 监控能耗情况
选择“Energy”选项卡。
分析应用在不同情景下的能耗表现,优化能耗。 - 使用TraceView进行性能分析
2.1 准备工作
确保已安装Android SDK,并设置好环境变量。
2.2 启动TraceView
在代码中插入Debug.startMethodTracing()和Debug.stopMethodTracing()来标记需要跟踪的代码段。
运行应用并触发需要分析的操作。
TraceView会生成一个.trace文件,用于后续分析。
2.3 分析Trace文件
打开生成的.trace文件,查看函数调用关系和执行时间。
通过分析报告,找出性能瓶颈,如耗时过长的函数。 - 性能优化建议
3.1 CPU优化
减少不必要的计算,使用更高效的算法。
避免频繁的UI更新,使用线程池合理管理线程。
3.2 内存优化
及时释放不再使用的资源,避免内存泄漏。
使用WeakReference,及时关闭数据库连接,合理使用缓存。
3.3 网络优化
合并网络请求,减少请求的数据量。
使用更高效的请求方式,如HTTP/2。
3.4 能耗优化
优化应用的唤醒机制,减少不必要的硬件使用。
使用更节能的API。
通过使用Android Profiler和TraceView,开发者可以深入分析应用的性能数据,定位性能瓶颈,并采取相应的优化措施,从而提升应用的性能和用户体验。
如何优化RecyclerView的性能,特别是在处理大量数据时?
优化RecyclerView的性能,尤其是在处理大量数据时,可以从以下几个方面入手:
- 布局优化
减少布局嵌套:避免在RecyclerView的Item布局中使用过多的嵌套布局和复杂的层次结构,这会增加渲染的时间和消耗。尽量使用简单的布局结构,并合理使用ConstraintLayout等高效布局。
启用setHasFixedSize:如果RecyclerView的Item高度固定且不会发生变化,设置setHasFixedSize(true)可以避免requestLayout导致的资源浪费。 - 减少绘制
使用DiffUtil进行数据更新:在数据集变化时,使用DiffUtil进行差异计算可以减少不必要的UI更新,提高性能。
限制列表项的数量:如果列表中的数据量非常大,可以考虑进行分页加载或者只加载可见范围内的数据,以减少内存占用和渲染时间。 - 预加载
增加额外布局空间:通过重写calculateExtraLayoutSpace方法,为RecyclerView预留额外空间,有助于提前加载屏幕外的Item,避免滑动过程中的卡顿。
自定义预取逻辑:在自定义LayoutManager中重写collectAdjacentPrefetchPositions方法,实现相邻位置的预取逻辑,提高滑动的流畅度。 - 内存优化
共享RecycledViewPool:如果多个RecyclerView的Adapter相同,可以让它们共享一个RecycledViewPool,以提高性能。
设置缓存大小:通过setItemViewCacheSize方法控制RecyclerView中缓存ViewHolder的数量,避免过多缓存占用内存。
释放资源:在onViewRecycled方法中释放ViewHolder中的资源,如图片资源、监听器等,避免内存泄漏。 - 其他优化
使用ViewHolder模式:减少findViewById的调用次数,提高性能。
启用缓存:通过setHasStableIds启用稳定ID,让RecyclerView更高效地处理数据更新。
限制重绘:使用notifyItemChanged等方法限制整个列表的重绘。
异步加载数据:通过协程或线程来处理数据加载任务,避免阻塞主线程。
通过以上优化策略,可以有效提升RecyclerView在处理大量数据时的性能,使其在各种情况下都能保持流畅。
如何优化应用的启动时间?
优化Android应用的启动时间可以从多个方面入手,以下是一些具体的优化策略和示例:
- 冷启动优化
冷启动是指应用从完全关闭状态启动的过程。优化冷启动时间的关键在于减少启动时加载的资源量和初始化操作的耗时。
延迟初始化非关键组件:将非关键组件的初始化操作延迟到应用启动后执行,可以减少冷启动时间。
class MyApplication : Application() {override fun onCreate() {super.onCreate()// 延迟初始化非关键组件Handler().postDelayed({initNonCriticalComponents()}, 1000)}private fun initNonCriticalComponents() {// 初始化非关键组件}
}
- 热启动优化
热启动是指应用从后台恢复的过程。优化热启动时间的关键在于合理管理应用的生命周期,避免不必要的资源重新加载。
缓存数据:通过缓存数据,避免在热启动时重新加载数据,可以显著提升热启动速度。
class MainActivity : AppCompatActivity() {private lateinit var cachedData: List<String>override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)if (savedInstanceState != null) {// 从缓存中恢复数据cachedData = savedInstanceState.getStringArrayList("cachedData") as List<String>} else {// 加载新数据cachedData = loadData()}}private fun loadData(): List<String> {// 加载数据return listOf("Data1", "Data2", "Data3")}override fun onSaveInstanceState(outState: Bundle) {super.onSaveInstanceState(outState)outState.putStringArrayList("cachedData", ArrayList(cachedData))}
}
- 使用启动框架管理启动任务
使用启动框架可以将核心业务提前加载完成,同时将任务细粒度化。例如,为了使首页更快地展示,可以将首页的数据请求和UI渲染相剥离。
任务分发器管理启动任务:通过任务分发器管理启动任务,可以优化启动流程,减少启动耗时。
class MyApplication : Application() {override fun onCreate() {super.onCreate()// 初始化启动任务分发器TaskDispatcher.init(this)val dispatcher: TaskDispatcher = TaskDispatcher.createInstance()// 添加任务并启动dispatcher.addTask(InitSumHelperTask(this)).addTask(InitMmkvTask()).addTask(InitAppManagerTask()).addTask(InitRefreshLayoutTask()).addTask(InitArouterTask()).start()// 等待需要等待的任务执行完成dispatcher.await()}
}
- 延迟加载非关键任务
将非关键任务延迟加载可以减少启动时的初始化工作,提升启动速度。
延迟加载非关键任务:通过延迟加载非关键任务,可以避免在启动时执行不必要的操作,提升启动速度。
// 首页首帧时间回调
homeBannerAdapter.onFirstFrameTimeCall = {AppExecutors.mainThread.executeDelay(Runnable {// 任务延迟3s执行initToastTask()}, 3000)
}
- 使用启动引导页
在应用启动时显示一个启动引导页,同时异步加载应用资源,可以提升用户感知的启动速度。
设置启动引导页:通过设置启动引导页,可以掩盖启动时的空白时间,提升用户体验。
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"><item name="android:windowBackground">@drawable/splash_background</item>
</style>
- 优化onCreate方法
避免在Activity的onCreate方法中执行耗时操作,使用HandlerThread或协程来异步处理耗时任务。
异步加载数据:通过将耗时操作移至后台线程执行,可以避免阻塞主线程,提升启动速度。
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 异步加载数据val handlerThread = HandlerThread("MyHandlerThread")handlerThread.start()val handler = Handler(handlerThread.looper)handler.post {// 执行耗时操作val data = loadData()// 回到主线程更新UIrunOnUiThread {textView.text = data}}}private fun loadData(): String {// 模拟耗时操作Thread.sleep(2000)return "加载完成"}
}
性能监控与测试工具
Android Profiler:用于监控应用的CPU、内存和网络使用情况,帮助开发者识别性能瓶颈。
TraceView:用于分析应用的执行流程,找出耗时操作。
Systrace:用于系统级的性能分析,帮助开发者优化系统启动过程。
通过以上优化策略,可以显著提升Android应用的启动速度和用户体验。
相关文章:

Android性能优化
Android性能优化 如何优化一个包含大量图片加载的Android应用,以提高性能和用户体验? 优化一个包含大量图片加载的Android应用,可以从以下几个方面入手,以提高性能和用户体验: 选择合适的图片加载库 使用成熟的图片…...

1、http介绍
一、HTTP 和 HTTPS 简介 HTTP(HyperText Transfer Protocol) 用途:用于网页数据传输(不加密)。协议特性:以明文形式传输数据,默认端口 80,无身份验证和完整性保护。典型场景…...

2.6 寒假训练营补题
C Tokitsukaze and Balance String (hard) 题目描述 本题为《Tokitsukaze and Balance String (easy)》的困难版本,两题的唯一区别在于 n n n 的范围。 一个字符串是平衡的,当且仅当字符串中 "01" 连续子串的个数与 "10" 连续子…...

kafka生产者之发送模式与ACK
文章目录 Kafka的发送模式Kafka的ack机制发送模式与ack的关联重试次数总结 在Kafka中,发送模式与ack机制紧密相关,它们共同影响着消息发送的可靠性和性能。 Kafka的发送模式 发后即忘(Fire and Forget):生产者发送消息…...

笔记:蓝桥杯python搜索(3-2)——DFS剪支和记忆化搜索
目录 一、DFS剪支 二、例题 P2942 数字王国之军训军队 P3075 特殊的多边形 三、记忆化搜索 四、例题 例题 P3820 混境之地 P216 地宫取宝 一、DFS剪支 在搜索过程中,如果需要完全遍历所有情况可能需要很多时间在搜索到某种状态时,根据当前状态判断…...

ChatBox+硅基流动Deepseek_R1开源API 满血(671B)部署教程,全程干货无废话
DeepSeek开源深度推理模型火爆发布,网络流量过大经常导致服务器崩溃,所以一般有两种方法解决这个问题 如果你的硬件支持,或者保密文档,保密单位,那么可以部署在本地端。但是再好的电脑也不能让DS满血复活,…...

35~37.ppt
目录 35.张秘书-《会计行业中长期人才发展规划》 题目 解析 36.颐和园公园(25张PPT) 题目 解析 37.颐和园公园(22张PPT) 题目 解析 35.张秘书-《会计行业中长期人才发展规划》 题目 解析 插入自定义的幻灯片:新建幻灯片→重用…...

畅快使用DeepSeek-R1的方法
腾讯云API接入Cherry Studio简明指南-畅快使用DeepSeek-R1 注意:腾讯云API针对deepseek限时免费(后续即使收费也较为便宜,可以作为长期使用的方法),并且比华为的API要快不少。 一、获取腾讯云API密钥 登录并进入腾讯…...

【人工智能】Python中的序列到序列(Seq2Seq)模型:实现机器翻译
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 序列到序列(Seq2Seq)模型是自然语言处理(NLP)中一项核心技术,广泛应用于机器翻译、语音识别、文本摘要等任务。本文深入探讨Seq2Seq模…...

【算法】动态规划专题⑥ —— 完全背包问题 python
目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题,它与0-1背包问题相似,但有一个关键的区别:在完全背包问题中,每种物品都有无限的数量可用。…...

记一次基于manifest v3开发谷歌插件
背景 头疼在国际化功能普遍的前端项目中,如果你在处理或者在某一块功能上新增一些需求的时候,在没有国际化功能的页面中,我们随便复制一些文本,然后在vs code中全局搜索,很快就可以找到所要更改的代码文件在哪里&…...

C# OpenCvSharp 部署MOWA:多合一图像扭曲模型
目录 说明 效果 项目 代码 下载 参考 C# OpenCvSharp 部署MOWA:多合一图像扭曲模型 说明 算法模型的paper名称是《MOWA: Multiple-in-One Image Warping Model》 ariv链接 https://arxiv.org/pdf/2404.10716 效果 Stitched Image 翻译成中文意思是&…...

本地部署DeepSeek-R1模型(新手保姆教程)
背景 最近deepseek太火了,无数的媒体都在报道,很多人争相着想本地部署试验一下。本文就简单教学一下,怎么本地部署。 首先大家要知道,使用deepseek有三种方式: 1.网页端或者是手机app直接使用 2.使用代码调用API …...

神经网络常见激活函数 5-PReLU函数
文章目录 PReLU函数导函数函数和导函数图像优缺点pytorch中的PReLU函数tensorflow 中的PReLU函数 PReLU 参数化修正线性单元:Parametric ReLU 函数导函数 PReLU函数 P R e L U { x x > 0 α x x < 0 ( α 是可训练参数 ) \rm PReLU \left\{ \begin{array}{} x \qua…...

2025我的第二次社招,写在春招之季
先说一个好消息,C那些事 4w star了! 前面断更了一个月,本篇文章就可以看到原因,哈哈。 大家好,我叫光城,腾讯实习转正做后端开发,后去小公司做数据库内核,经过这几年的成长与积累&am…...

Visual Studio Code中文出现黄色框子的解决办法
Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”,往下滑动,找到“Un…...

threejs开源代码之-旋转的彩色立方体
效果:旋转的彩色立方体 效果描述: 一个立方体在场景中旋转。立方体的每个面有不同的颜色。使用自定义着色器为立方体添加动态的光影效果。 代码实现 import * as THREE from three; import { OrbitControls } from three/examples/jsm/controls/OrbitC…...

visual studio 2008的试用版评估期已结束的解决办法
visual studio 2008试用期过了后,再次启动时提示:visual studio的试用版评估期已结束。 需要的工具:补丁文件PatchVS2008.exe 解决办法: 1.在“控制面板”-“添加删除程序”中选择visual studio 2008,点击“更改/卸载”…...

解锁 DeepSeek 模型高效部署密码:蓝耘平台深度剖析与实战应用
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

Http和Socks的区别?
HTTP 和 SOCKS 的区别 HTTP 和 SOCKS 都是用于网络通信的协议,但它们在工作原理、应用场景和实现方式上有显著的区别。以下是详细的对比和说明。 一、HTTP 协议 1. 定义 HTTP(HyperText Transfer Protocol)是用于传输超文本数据的应用层协…...

VC播放mp3的方法
1、使用msi库 #include <mmsystem.h> #pragma comment(lib,"winmm.lib") .......//打开文件MCI_OPEN_PARMS mciOpen; mciOpen.lpstrDeviceType _T("mpegvideo"); mciOpen.lpstrElementName _T("c://1.mp3"); MCIERROR mciError mci…...

Docker 部署 verdaccio 搭建 npm 私服
一、镜像获取 # 获取 verdaccio 镜像 docker pull verdaccio/verdaccio 二、修改配置文件 cd /wwwroot/opt/docker/verdaccio/conf vim config.yaml config.yaml 配置文件如下,可以根据自己的需要进行修改 # # This is the default configuration file. It all…...

49-拓展(1)
49-拓展(1) 扩展概述 扩展可以为在当前 package 可见的类型(除函数、元组、接口)添加新功能。 当不能破坏被扩展类型的封装性,但希望添加额外的功能时,可以使用扩展。 可以添加的功能包括: …...

国产编辑器EverEdit - 在文件中查找和替换
1 在文件中查找和替换 1.1 应用场景 某些场景,用户需要在所有工程文件中进行查找和替换关键词,比如:查找工程中哪些文件使用了某个常量。 1.2 使用方法 选择主菜单查找 -> 在文件中查找和替换,或使用快捷键Ctrl Shift F&a…...

安全行业大模型SecLLM技术白皮书
在ChatGPT 呈现全球现象级热度时,通用大语言模型(Large Language Model, LLM)技术成为了推动创新和变革的关键驱动力。但由于安全行业的特殊性和复杂性,LLM 并不能满足其应用需求。安全行业大模型(Security Large Language Model,…...

基础入门-HTTP数据包红蓝队研判自定义构造请求方法请求头修改状态码判断
知识点: 1、请求头&返回包-方法&头修改&状态码等 2、数据包分析-红队攻击工具&蓝队流量研判 3、数据包构造-Reqable自定义添加修改请求 一、演示案例-请求头&返回包-方法&头修改&状态码等 数据包 客户端请求Request 请求方法 …...

2025年日祭
本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…...

git命令行删除远程分支、删除远程提交日志
目录 1、从本地通过命令行删除远程git分支2、删除已 commit 并 push 的记录 1、从本地通过命令行删除远程git分支 git push origin --delete feature/feature_xxx 删除远程分支 feature/feature_xxx 2、删除已 commit 并 push 的记录 git reset --hard 7b5d01xxxxxxxxxx 恢复到…...

centOS8安装MySQL8设置开机自动启动失败
提供一个终极解决方案虽然systemctl 更符合管理预期但是不能用 使用一下命令 修改配置文件、修改mysql.service全是问题 systemctl start mysqld systemctl enable mysqld systemctl daemon-reload完全不生效各种报错 提示配置文件内容有问题 Main process exited, codeexite…...

对接DeepSeek
其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日࿰…...