MVVM-Day9(直播)

Windows Phone 7 Panorama中枢设计:信息架构与MVVM轻量化实践 Panorama是Windows Phone 7提出的一种空间化信息组织范式,本质并非滑动容器,而是通过水平延展、视觉引导与内容隔离构建用户认知路径;其设计原理直指移动端核心命题——在有限屏幕与低性能设备上实现高信息密度与高操作效率的平衡。该模式依托MVVM实现松耦合,但摒弃教条框架,采用按需通知、Insert(0)置顶、TwoWay绑定等轻量化落地策略,显著提升响应性与可维护性。技术价值在于以空间换时间、用平台原生能力替代算力堆砌,适用于Xamarin、Flutter及现代跨平台教育类应用的信息中枢重构。 阅读详情

 继Day8

Aroute传值:

ARouter.getInstance()
                            .build(AroutePath.LIVE)
                            .withSerializable("databean",videoAdapter.getData().get(position))
                            .navigation();

接收页面(名字要一样不让报空指针异常):

  @Autowired
    VideoEntity.DataBean databean;

直播页面:

APi接口:

 //关注
    @POST("guanzhu/noguanzhu")
    Observable<ResultEntity> getNofocusData(@Body RequestBody body);

    //礼物
    @GET("gift/json")
    Observable<GiftEntity> getGiftData();

Model层:

package com.bw.day3.MVVM.Live;

import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Entity.ResultEntity;
import com.bw.day3.MVVM.Base.Model.BaseModel;

import io.reactivex.Observable;
import okhttp3.RequestBody;

public class LiveModel extends BaseModel {

    public Observable<ResultEntity> getFocusData( RequestBody body){
        return api.getFocusData(body);
    }

    public Observable<GiftEntity> getGiftData(){
        return api.getGiftData();
    }
}

VidewModel层:

package com.bw.day3.MVVM.Live;

import android.util.Log;

import androidx.lifecycle.MutableLiveData;

import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Entity.ResultEntity;
import com.bw.day3.MVVM.Base.ViewModel.BaseViewModel;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.RequestBody;

public class LiveViewModel extends BaseViewModel<LiveModel> {

    public MutableLiveData<ResultEntity> liveData=new MutableLiveData<>();
    public MutableLiveData<GiftEntity> liveData1=new MutableLiveData<>();

    @Override
    protected LiveModel creatModel() {
        return new LiveModel();
    }

    public void postFocus(RequestBody body){
        bModel.getFocusData(body)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<ResultEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(ResultEntity resultEntity) {
                        liveData.postValue(resultEntity);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    public void getGiftData(){
        bModel.getGiftData()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<GiftEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(GiftEntity giftEntity) {
                        Log.i("zs", "onNext: "+giftEntity.getData().size());
                        liveData1.postValue(giftEntity);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

直播Activity:

package com.bw.day3.MVVM.Live;

import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.BounceInterpolator;
import android.widget.Toast;

import androidx.recyclerview.widget.GridLayoutManager;

import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.bw.day3.MVVM.Adapter.MyGiftAdapter;
import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Entity.VideoEntity;
import com.bw.day3.MVVM.Base.Utile.GlideUtil;
import com.bw.day3.MVVM.Base.View.BaseActivity;
import com.bw.day3.MVVM.Const.AroutePath;
import com.bw.day3.R;
import com.bw.day3.databinding.ActivityLiveBinding;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import okhttp3.MediaType;
import okhttp3.RequestBody;

@Route(path = AroutePath.LIVE)
public class LiveActivity extends BaseActivity<ActivityLiveBinding,LiveViewModel> {

    @Autowired
    VideoEntity.DataBean databean;
    private MyGiftAdapter adapter;
    private List<GiftEntity.DataBean> list=new ArrayList<>();

    @Override
    protected Class<LiveViewModel> getViewModel() {
        return LiveViewModel.class;
    }

    @Override
    protected int getLayoutid() {
        return R.layout.activity_live;
    }

    @Override
    protected void initView() {
        ARouter.getInstance().inject(this);
        if (databean.getGuanzhu()==1){
            viewDataBinding.tvGuanzhu.setText("粉丝");
            viewDataBinding.tvGuanzhu.setBackground(getDrawable(R.drawable.shape_tuijian_pinglun));
        }
        viewModel.getGiftData();
    }

    @Override
    protected void initData() {
        viewDataBinding.gsyLive.setUp(databean.getVideopath(),true,"");
        viewDataBinding.gsyLive.getBackButton().setVisibility(View.GONE);
        viewDataBinding.gsyLive.getStartButton().setVisibility(View.GONE);
        viewDataBinding.gsyLive.startPlayLogic();
        viewDataBinding.tvUserLive.setText(databean.getAuthname()+"");
        viewDataBinding.tvLikecountLive.setText(databean.getLike_count()+"个点赞");
        GlideUtil.loadciecleImage(this,databean.getHeadpath(),viewDataBinding.ivHeadLive);

        viewDataBinding.tvGuanzhu.setOnClickListener(v -> {
            String authname = databean.getAuthname();
            Map<String,String> map=new HashMap<>();
            map.put("authname",authname);
            String json=new Gson().toJson(map);
            RequestBody requestBody=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),json);
            viewModel.postFocus(requestBody);
        });

        viewDataBinding.ivGiftLive.setOnClickListener(v -> {
            viewDataBinding.clGiftLive.setVisibility(View.VISIBLE);
            //动画
            Animation animation= AnimationUtils.loadAnimation(LiveActivity.this,R.anim.in);
            animation.setInterpolator(new BounceInterpolator());
            animation.setDuration(2000);
            viewDataBinding.clGiftLive.startAnimation(animation);
        });

        adapter=new MyGiftAdapter(R.layout.view_gift);
        viewDataBinding.rvGiftLive.setLayoutManager(new GridLayoutManager(this,5));
        viewDataBinding.rvGiftLive.setAdapter(adapter);

        adapter.setOnItemClickListener((adapter, view, position) -> {

        });
    }

    @Override
    protected void handObserver() {
        super.handObserver();
        viewModel.liveData.observe(this, resultEntity -> {
            if (resultEntity.getCode()==200){
                Toast.makeText(LiveActivity.this, "关注成功", Toast.LENGTH_SHORT).show();
                viewDataBinding.tvGuanzhu.setText("粉丝");
                viewDataBinding.tvGuanzhu.setBackground(getDrawable(R.drawable.shape_tuijian_pinglun));
                databean.setGuanzhu(1);
            }else {
                Toast.makeText(LiveActivity.this, "关注失败", Toast.LENGTH_SHORT).show();
            }
        });
        viewModel.liveData1.observe(this, giftEntity -> {
            if (giftEntity.getCode()==200){
                list.addAll(giftEntity.getData());
                adapter.getData().addAll(list);
                adapter.notifyDataSetChanged();
            }
        });
    }
}

页面布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data></data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MVVM.Live.LiveActivity">

        <com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
            android:id="@+id/gsy_live"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_user_live"
            android:layout_width="200dp"
            android:layout_height="60dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="5dp"
            android:background="@drawable/shape_tuijian_zhuan">

            <ImageView
                android:id="@+id/iv_head_live"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@mipmap/ic_launcher"
                app:layout_constraintBottom_toBottomOf="@+id/cl_user_live"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="@+id/cl_user_live" />
            <TextView
                android:text="昵称"
                app:layout_constraintTop_toTopOf="@+id/cl_user_live"
                app:layout_constraintLeft_toRightOf="@+id/iv_head_live"
                android:textSize="@dimen/dp_15"
                android:layout_marginLeft="5dp"
                android:textColor="@color/white"
                android:id="@+id/tv_user_live"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:layout_marginLeft="5dp"
                android:text="点赞的数量"
                app:layout_constraintTop_toBottomOf="@+id/tv_user_live"
                app:layout_constraintLeft_toLeftOf="@+id/tv_user_live"
                android:textColor="@color/white"
                android:id="@+id/tv_likecount_live"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:text="关注"
                android:id="@+id/tv_guanzhu"
                android:background="@drawable/shape_tuijian_add"
                app:layout_constraintTop_toTopOf="@+id/cl_user_live"
                app:layout_constraintBottom_toBottomOf="@+id/cl_user_live"
                app:layout_constraintRight_toRightOf="@+id/cl_user_live"
                android:layout_marginRight="10dp"
                android:textColor="@color/white"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            app:layout_constraintBottom_toBottomOf="parent"
            android:id="@+id/cl_bottom_live"
            android:layout_width="match_parent"
            android:layout_height="50dp">
            <TextView
                android:id="@+id/tv_input_live"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                android:layout_marginStart="10dp"
                android:text="说说东西"
                android:textColor="@color/gray"/>
            <ImageView
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                android:layout_marginRight="10dp"
                android:id="@+id/iv_like_live"
                android:src="@drawable/baseline_favorite_24"
                android:layout_width="40dp"
                android:layout_height="40dp"/>
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:id="@+id/iv_gift_live"
                android:src="@drawable/baseline_card_giftcard_24"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/iv_like_live"
                android:layout_marginRight="10dp"/>
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:id="@+id/iv_car_live"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintRight_toLeftOf="@+id/iv_gift_live"
                android:src="@drawable/baseline_shopping_cart_24"
                android:layout_marginRight="10dp"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_gift_live"
            android:background="@drawable/shape_tuijian_zhuan"
            android:visibility="gone"
            tools:visibility="visible"
            app:layout_constraintBottom_toTopOf="@+id/cl_bottom_live"
            android:layout_width="match_parent"
            android:layout_height="300dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_pay_live"
                android:text="充值"
                android:textColor="@color/white"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                android:layout_margin="10dp"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/tv_coin_live"
                android:text="抖币"
                app:layout_constraintTop_toTopOf="@+id/tv_pay_live"
                app:layout_constraintRight_toLeftOf="@+id/tv_pay_live"
                android:textColor="@color/white"
                android:layout_marginEnd="10dp"/>
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@mipmap/ic_launcher"
                android:id="@+id/iv_selectlogo_live"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                android:layout_margin="10dp"/>
            <ImageView
                android:layout_width="@dimen/dp_40"
                android:layout_height="@dimen/dp_40"
                android:id="@+id/iv_sendgift_live"
                android:src="@drawable/baseline_send_24"
                app:layout_constraintBottom_toBottomOf="@+id/iv_selectlogo_live"
                app:layout_constraintLeft_toRightOf="@+id/iv_selectlogo_live"
                android:layout_marginLeft="10dp"/>
            <androidx.recyclerview.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:id="@+id/rv_gift_live"
                app:layout_constraintTop_toBottomOf="@+id/tv_pay_live"
                app:layout_constraintBottom_toTopOf="@+id/iv_selectlogo_live"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

效果图:

需写适配器:

package com.bw.day3.MVVM.Adapter;

import android.view.View;
import android.widget.ImageView;

import androidx.annotation.NonNull;

import com.bw.day3.MVVM.Base.Entity.GiftEntity;
import com.bw.day3.MVVM.Base.Utile.GlideUtil;
import com.bw.day3.R;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;

public class MyGiftAdapter extends BaseQuickAdapter<GiftEntity.DataBean, BaseViewHolder> {

    public MyGiftAdapter(int layoutResId) {
        super(layoutResId);
    }

    @Override
    protected void convert(@NonNull BaseViewHolder baseViewHolder, GiftEntity.DataBean dataBean) {
        baseViewHolder.setText(R.id.gift_tv,dataBean.getPrice()+"抖币");
        View view = baseViewHolder.getView(R.id.gift_iv);
        GlideUtil.loadImage(getContext(),dataBean.getGiftpath(), (ImageView) view);
    }
}

礼物RecyclerView布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:id="@+id/gift_iv"/>
    <TextView
        tools:text="123"
        android:layout_gravity="center"
        android:layout_margin="10dp"
        android:id="@+id/gift_tv"
        android:textColor="@color/white"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

调用适配器完成礼物页面;

最终效果:

程序员职业成长手记:从.NET实践看技术人的三层修炼 程序员成长的本质,不是技术栈的堆叠,而是思维范式与工程心智的持续进化。在.NET这一兼具历史纵深与现代演进的典型技术生态中,开发者得以系统性地经历‘做人→做技术人员→做程序员’的三层递进:从协作边界与认知共情,到技术选型背后的组织适配与风险权衡,再到语法特性在真实Code Review与生产环境中的落地校验。这种以问题为起点、以源码为依据、以人因变量为标尺的反思路径,超越了框架教程与API文档,直指软件工程的核心矛盾——如何让代码既正确,又可持续、可协作、可传承。本文即基于十年持续更新的.NET技术博客实践 阅读详情

相关推荐

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档)

本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。

招风的黑耳优快云 173

Android面试一天一题(Day 37:一套高级工程师的面试题)

非常感谢这么多的读者一直关注“Android面试一天一题”这个系列,看了这么多篇面试题,不知道有没有效果呢?读者不妨用这一套题来检验一下自己。 虽然针对不同的情况会有不同的面试题,不同技术方向的公司或者不同风格的面试官也会有不一样的面试题,不过我们还是可以大体选出一套通用的高级工程师的面试题。 基础原理和运行机制 Android应用开发相关的一些基础原理和机制

AT弄潮儿 993

基于STM32F407ZGT6与INMP441的I2S音频采集系统:从配置到实时波形显示

本文详细介绍了基于STM32F407ZGT6与INMP441麦克风模块的I2S音频采集系统设计与实现。从硬件选型、CubeMX配置到音频数据处理和上位机波形显示,全面解析了系统架构、DMA传输优化及常见问题解决方案,帮助开发者快速构建高精度音频采集系统。

weixin_33743661的博客 403

Python Playwright实战:攻克动态事件日历数据抓取与时间解析

在Web数据采集领域,动态渲染页面是爬虫工程师面临的常见挑战,其核心原理在于现代前端框架(如React、Vue)通过JavaScript异步加载数据,导致传统请求库无法直接获取有效内容。为解决这一问题,浏览器自动化技术应运而生,它通过模拟真实用户操作来触发数据加载,从而提取所需信息,在数据聚合、竞品分析和市场监测等场景中具有重要价值。本文聚焦于使用Playwright这一现代浏览器自动化框架,结合dateparser等工具,深入讲解如何高效抓取动态事件日历中的复杂数据,并智能解析非结构化的时间描述,最终实现

weixin_34056162的博客 439

泛微Ecology流程数据表结构解析:workflow_requestbase和workflow_currentoperator到底怎么关联查询?

本文深入解析泛微Ecology系统中workflow_requestbase和workflow_currentoperator表的结构与关联机制,提供SQL查询语句示例,帮助开发者高效查询流程数据。涵盖待办事项、已办事项、办结事项和流程监控等典型场景,并分享性能优化技巧和常见问题排查指南。

weixin_33738555的博客 815

CAD图纸智能搜索三大突破:图纸秒搜技术、相似度匹配与AI语义搜索

CAD图纸作为核心资产,长期面临管理难题:传统全文检索需逐张打开图纸人工查找,效率低下;相似图纸匹配依赖人工比对,误差率高;非专业人员难以通过模糊描述精准定位图纸。针对这些问题,唯杰地图推出三项智能解决方案:一是基于现代化索引引擎的​​全文搜索​​,支持秒级检索图纸内的文字、图层、块名称等,并可多条件组合查询;二是​​相似度搜索​​,通过SIFT算法和深度学习提取几何特征与拓扑结构,实现高精度匹配;三是​​AI语义搜索​​,利用大模型解析自然语言指令(如“查找半径为10的红色圆”),直接定位目标图形。

vjmap的博客 1870

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 293

Ansys Zemax | 多模光纤耦合效率优化与IMAE操作数实战解析

本文详细解析了在Ansys Zemax(OpticStudio)中优化多模光纤耦合效率的实战流程。通过几何图像分析诊断初始效率,并重点介绍了如何利用IMAE操作数将分析工具转化为自动化优化引擎,实现从2%到54%的几何效率飞跃。文章还探讨了引入菲涅尔损耗与偏振计算以逼近真实效率,并分享了关键的避坑指南与高阶技巧。

xk7n92h3p5m的博客 750

信创环境下PageOffice文档控件适配与实践

信创适配做到文档控件这一层,拼的已经不是"有没有国产版本",而是同一个功能在两类终端上是否真的等价。等价的标准很具体:同一次点击能得到同样的结果,同一份公文能得到同样的版式,同一个项目不需要维护两套代码。这背后是三件并不轻松的工作:服务端用一套接口同时支撑两类终端,客户端把两种系统与四种芯片的安装包分发清楚,文档内核层由产品侧跟着 WPS 的版本走。浏览器这一层的压力,则被收进了产品自己的窗口里——升级节奏由产品掌握,不再交给运气。

zi_wu_xian的专栏 319

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 997

ubuntu通过qemu安装银河麒麟V10_Arm_v8 (kylin_v10_飞腾/鲲鹏版)

一、windows下安装vmware虚拟机 二、ubuntu下载地址 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.3-live-server-amd64.iso 三、vmware中新建虚拟机,并使用ubuntu-20.04.3-live-server-amd64.iso作为启用盘 。。。在虚拟机中安装ubuntu(略) 四、配置ssh(如果ssh登录不上时配置) 修改openssh的配置 vi /etc/s

u010533742的博客 8705

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 350

谷歌Gemini模型免费API调用全攻略:从注册到实战(附代码示例)

本文详细介绍了如何免费调用谷歌Gemini模型的API,从注册获取API密钥到实战应用的全过程。内容涵盖环境准备、基础API调用、多模态处理、高级功能及生产环境实践,帮助开发者高效利用Gemini模型进行代码生成和复杂任务处理。附有代码示例,适合AI开发者和技术爱好者。

weixin_29212429的博客 1606

第三篇 第 6 课

前置:第三篇第 1 课(stdx 引入),第二篇第 1 课(std.regex)。环境:仓颉 SDK 1.2.0。本文所有代码与输出均逐行实测。

weixin_41618057的博客 505

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1152

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 521

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 414

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

spdlog 同步日志库使用详解

spdlog是一个轻量级 C++ 日志库,支持同步日志、异步日志、多线程日志、日志文件轮转和自定义日志格式。对于嵌入式 Linux 应用开发,我建议先使用。它可以帮我们完成:日志级别过滤。时间戳和线程 ID 输出。日志格式化。终端和文件输出。多线程安全写入。日志文件按大小或时间轮转。我们不需要自己实现互斥锁、文件写入、日志格式化和轮转等底层功能。

zengjiajun2006的博客 994

JavaEE通关手册:数据类型与变量

代码无需额外处理,编译时编译器自动完成转换。

xys_678的博客 75

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 367

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 166

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 338

c++ explicit关键字详解

explicit。

拒绝AI文,努力在AI时代写出感动人心的好文章 43

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 348

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 301

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

Programming is a highly artistic endeavor 374
上一篇: MVVM-Day8(收藏分享)
下一篇: Kotlin基础1
LD_Round
博客等级 码龄4年 83粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值