WPF TextBox 添加范围验证

news2025/1/20 3:40:31

WPF TextBox 添加范围验证

添加范围验证,若出现范围错误添加信息捕捉
使用到技术:使用ValidationRules实现范围验证,当范围出现错误时,可以通过触发器Validation.HasError=True设置自定义错误样式。
使用Behavior技术捕捉所有验证出错的消息,用于检查界面是否出错,实现行为捕获。
Behavior使用NuGet获取Microsoft.Xaml.Behaviors.Wpf
Mvvm使用NuGet获取CommunityToolkit.Mvvm
DI使用NuGet获取Microsoft.Extensions.DependencyInjection
界面库NuGet获取WeDraft.Toolkit.FirstDraft

第一步:正常MVVM模式定义View和ViewModel

View

<UserControl x:Class="Forwarding.Views.One2ManyView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Forwarding.Views"
             mc:Ignorable="d" 
             DataContext="{Binding One2Many, Source={StaticResource Locator}}"
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid Margin="20">
        <StackPanel>
            <TextBlock Text="0~10000以内的加法(a和b的取值范围在[0,10000])" />
            <WrapPanel Margin="0 5">
                <TextBlock Text="a:" Width="50" TextAlignment="Right"/>
                <TextBox Text="{Binding Param1}" MinWidth="50" TextAlignment="Right"/>
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="b:" Width="50" TextAlignment="Right"/>
                <TextBox Text="{Binding Param2}" MinWidth="50" TextAlignment="Right"/>
            </WrapPanel>
            <Border HorizontalAlignment="Stretch" Height="1" Background="Brown" Margin="0 5"/>
            <WrapPanel>
                <Button Content="a+b="  Width="50" Command="{Binding CalCommand}"/>
                <TextBox Text="{Binding Result}" MinWidth="50" TextAlignment="Right"/>
            </WrapPanel>
        </StackPanel>
    </Grid>
</UserControl>

ViewModel

public class One2ManyViewModel : ObservableObject
    {
        private int param2;

        public int Param2
        {
            get { return param2; }
            set { SetProperty(ref param2, value); }
        }

        private int param1;

        public int Param1
        {
            get { return param1; }
            set { SetProperty(ref param1, value); }
        }

        private int result;

        public int Result
        {
            get { return result; }
            set { SetProperty(ref result, value); }
        }

        public RelayCommand CalCommand => new RelayCommand(() =>
        {
            Result = Param1 + Param2;
        });
    }

在这里插入图片描述

DI

App.xaml

<Application x:Class="Forwarding.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Forwarding"
             xmlns:di="clr-namespace:Forwarding.Data"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/FirstDraft;component/Themes/Ui.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <di:ServiceLocator x:Key="Locator"/>
        </ResourceDictionary>
    </Application.Resources>
</Application>

App.xaml.cs

  /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public App()
        {
            Services = ConfigureServices();

            this.InitializeComponent();
        }

        /// <summary>
        /// Gets the current <see cref="App"/> instance in use
        /// </summary>
        public new static App Current => (App)Application.Current;

        /// <summary>
        /// Gets the <see cref="IServiceProvider"/> instance to resolve application services.
        /// </summary>
        public IServiceProvider Services { get; }

        /// <summary>
        /// Configures the services for the application.
        /// </summary>
        private static IServiceProvider ConfigureServices()
        {
            var services = new ServiceCollection();
            
            services.AddSingleton<One2ManyViewModel>();

            return services.BuildServiceProvider();
        }
    }

ServiceLocator

    internal class ServiceLocator
    {
        public One2ManyViewModel One2Many => App.Current.Services.GetService<One2ManyViewModel>();
    }

第二步 添加最大最小值范围验证

定义范围验证类

 public class RangeValidationRule : ValidationRule
    {
        private int min;
        private int max;

        public int Min
        {
            get { return min; }
            set { min = value; }
        }

        public int Max
        {
            get { return max; }
            set { max = value; }
        }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            int val = 0;
            var strVal = (string)value;
            try
            {
                if (strVal.Length > 0)
                {
                    if (strVal.EndsWith("."))
                    {
                        return CheckRanges(strVal.Replace(".", ""));
                    }

                    // Allow dot character to move to next box
                    return CheckRanges(strVal);
                }
            }
            catch (Exception e)
            {
                return new ValidationResult(false, "Illegal characters or " + e.Message);
            }

            if ((val < Min) || (val > Max))
            {
                return new ValidationResult(false,
                  "Please enter the value in the range: " + Min + " - " + Max + ".");
            }
            else
            {
                return ValidationResult.ValidResult;
            }
        }

        private ValidationResult CheckRanges(string strVal)
        {
            if (int.TryParse(strVal, out var res))
            {
                if ((res < Min) || (res > Max))
                {
                    return new ValidationResult(false,
                      "Please enter the value in the range: " + Min + " - " + Max + ".");
                }
                else
                {
                    return ValidationResult.ValidResult;
                }
            }
            else
            {
                return new ValidationResult(false, "Illegal characters entered");
            }
        }
    }

TextBox使用范围验证

                <TextBox MinWidth="50" TextAlignment="Right">
                    <TextBox.Text>
                        <Binding Path="Param1" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:RangeValidationRule  Min="0" Max="10000"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>

定义TextBox错误时界面显示

        <Style TargetType="TextBox">
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel>
                            <TextBlock Margin="1,2"
                                       DockPanel.Dock="Right"
                                       FontWeight="Bold"
                                       Foreground="Red"
                                       Text="" />
                            <AdornedElementPlaceholder />
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Trigger.Setters>
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
                        <Setter Property="BorderBrush" Value="Red" />
                        <Setter Property="Background" Value="Red" />
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>

添加验证后的View

<UserControl x:Class="Forwarding.Views.One2ManyView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Forwarding.Views"
             mc:Ignorable="d" 
             DataContext="{Binding One2Many, Source={StaticResource Locator}}"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>

        <Style TargetType="TextBox">
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel>
                            <TextBlock Margin="1,2"
                                       DockPanel.Dock="Right"
                                       FontSize="14"
                                       FontWeight="Bold"
                                       Foreground="Red"
                                       Text="" />
                            <AdornedElementPlaceholder />
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Trigger.Setters>
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
                        <Setter Property="BorderBrush" Value="Red" />
                        <Setter Property="Background" Value="Red" />
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>

    </UserControl.Resources>
    <Grid Margin="20">
        <StackPanel>
            <TextBlock Text="0~10000以内的加法(a和b的取值范围在[0,10000])" />
            <WrapPanel Margin="0 5">
                <TextBlock Text="a:" Width="50" TextAlignment="Right"/>
                <TextBox MinWidth="50" TextAlignment="Right">
                    <TextBox.Text>
                        <Binding Path="Param1" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:RangeValidationRule  Min="0" Max="10000"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="b:" Width="50" TextAlignment="Right"/>
                <TextBox MinWidth="50" TextAlignment="Right">
                    <TextBox.Text>
                        <Binding Path="Param2" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:RangeValidationRule  Min="0" Max="10000"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>
            </WrapPanel>
            <Border HorizontalAlignment="Stretch" Height="1" Background="Brown" Margin="0 5"/>
            <WrapPanel>
                <Button Content="a+b="  Width="50" Command="{Binding CalCommand}"/>
                <TextBox Text="{Binding Result}" MinWidth="50" TextAlignment="Right"/>
            </WrapPanel>
        </StackPanel>
    </Grid>
</UserControl>

在这里插入图片描述

第三步 引入Behavior对错误进行捕捉

NuGet 引用 项目 Microsoft.Xaml.Behaviors.Wpf

定义行为捕捉类

    public interface ITextValidationError
    {
        ObservableCollection<string> Errors { get; set; }
    }

    public class TextValidationErrorBehavior : Behavior<FrameworkElement>
    {
        protected override void OnAttached()
        {
            // 事件监听
            this.AssociatedObject.AddHandler(Validation.ErrorEvent, new EventHandler<ValidationErrorEventArgs>(OnValidationError));
        }

        private void OnValidationError(Object sender, ValidationErrorEventArgs e)
        {
            if (AssociatedObject.DataContext is ITextValidationError mainModel)
            {
                // 表示新产生的行为
                if (e.Action == ValidationErrorEventAction.Added)
                {
                    mainModel.Errors.Add(e.Error.ErrorContent.ToString());
                }
                else if (e.Action == ValidationErrorEventAction.Removed) // 该行为被移除,即代表验证通过
                {
                    mainModel.Errors.Remove(e.Error.ErrorContent.ToString());
                }
            }
        }

        protected override void OnDetaching()
        {
            // 移除事件监听
            this.AssociatedObject.RemoveHandler(Validation.ErrorEvent, new EventHandler<ValidationErrorEventArgs>(OnValidationError));
        }
    }

注意:接口ITextValidationError用于定义ViewModel获取错误消息的接口,示例使用DataContext进行传递。

ViewModel中对ITextValidationError接口实现并捕获错误

    public class One2ManyViewModel : ObservableObject, ITextValidationError
    {
        private int param2;

        public int Param2
        {
            get { return param2; }
            set { SetProperty(ref param2, value); }
        }

        private int param1;

        public int Param1
        {
            get { return param1; }
            set { SetProperty(ref param1, value); }
        }

        private int result;

        public int Result
        {
            get { return result; }
            set { SetProperty(ref result, value); }
        }

        private string errorMsg = string.Empty;

        public string ErrorMsg
        {
            get { return errorMsg; }
            set { SetProperty(ref errorMsg, value); }
        }

        public RelayCommand CalCommand => new RelayCommand(() =>
        {
            ErrorMsg = "";
            if (Errors.Count > 0)
            {
                ErrorMsg = "参数错误,原因:" + Errors[0];
                return;
            }
            Result = Param1 + Param2;
        });

        public ObservableCollection<string> Errors { get; set; } = new ObservableCollection<string>();
    }

View中添加使用行为捕捉

引入命名空间:xmlns:b=“http://schemas.microsoft.com/xaml/behaviors”
使用行为

    <b:Interaction.Behaviors>
        <local:TextValidationErrorBehavior />
    </b:Interaction.Behaviors>

View完整代码

<UserControl x:Class="Forwarding.Views.One2ManyView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Forwarding.Views"
             xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
             mc:Ignorable="d" 
             DataContext="{Binding One2Many, Source={StaticResource Locator}}"
             d:DesignHeight="450" d:DesignWidth="800">
    <UserControl.Resources>

        <Style TargetType="TextBox">
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel>
                            <TextBlock Margin="1,2"
                                       DockPanel.Dock="Right"
                                       FontSize="14"
                                       FontWeight="Bold"
                                       Foreground="Red"
                                       Text="" />
                            <AdornedElementPlaceholder />
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Trigger.Setters>
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
                        <Setter Property="BorderBrush" Value="Red" />
                        <Setter Property="Background" Value="Red" />
                    </Trigger.Setters>
                </Trigger>
            </Style.Triggers>
        </Style>

    </UserControl.Resources>
    <b:Interaction.Behaviors>
        <local:TextValidationErrorBehavior />
    </b:Interaction.Behaviors>
    <Grid Margin="20">
        <StackPanel>
            <TextBlock Text="0~10000以内的加法(a和b的取值范围在[0,10000])" />
            <WrapPanel Margin="0 5">
                <TextBlock Text="a:" Width="50" TextAlignment="Right"/>
                <TextBox MinWidth="50" TextAlignment="Right">
                    <TextBox.Text>
                        <Binding Path="Param1" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:RangeValidationRule  Min="0" Max="10000"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>
            </WrapPanel>
            <WrapPanel>
                <TextBlock Text="b:" Width="50" TextAlignment="Right"/>
                <TextBox MinWidth="50" TextAlignment="Right">
                    <TextBox.Text>
                        <Binding Path="Param2" NotifyOnValidationError="True" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:RangeValidationRule  Min="0" Max="10000"/>
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>
            </WrapPanel>
            <Border HorizontalAlignment="Stretch" Height="1" Background="Brown" Margin="0 5"/>
            <WrapPanel>
                <Button Content="a+b="  Width="50" Command="{Binding CalCommand}"/>
                <TextBox Text="{Binding Result}" MinWidth="50" TextAlignment="Right"/>
                <TextBlock Text="{Binding ErrorMsg}" Foreground="Red"/>
            </WrapPanel>
        </StackPanel>
    </Grid>
</UserControl>

在这里插入图片描述


积跬步以至千里:) (:一阵没来由的风

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

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

相关文章

1-Nginx介绍及安装(源码安装)

1.Nginx介绍 Nginx&#xff08;engine x&#xff09;是一个轻量级、高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP服务器。 Nginx特点&#xff1a; ->占用内存少 ->并发能力强(3W/S) 2.Nginx安装 2.1.环境 [rootcentos79-3 ~]# cat /etc/redha…

未来网站开发必备:14个让你惊艳的JavaScript Web API!

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

进制(数制)及进制之间的转换汇总(超详细)

进制是一种表示数字的方法&#xff0c;它决定了数字在数值系统中的位置和权值。常见的进制包括十进制、二进制、八进制和十六进制。 1. 十进制&#xff08;decimal&#xff09;&#xff1a; 十进制是我们日常生活中最常用的进制&#xff0c;使用0-9这10个数字来表示。每一位的…

小研报 - 神奇的 SD 图(InsCode Stable Diffusion 美图活动一期)

一、 Stable Diffusion 模型 在线使用地址&#xff1a;https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置 Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2391134711, Size: 512x512, Model hash: 74c61c3a52, Model: GuoFeng3, Version: v1.2…

【应用笔记】CW32 电容式触摸按键设计指南

前言 CW32 电容式触摸按键设计指南向客户提供一种利用 CW32 内部资源结合软件编程实现电容式触摸按键有效 触摸检测的方法。本指南的内容重点在于工作原理、软件检测过程以及调试指引。 利用芯源半导体的 CW32 系列小规模 MCU 的 IO、比较器、定时器、高速高精度内置 RC 时钟…

C++ 实现跳表

目录 1.什么是跳表-skiplist 2.skiplist的效率如何保证&#xff1f; 3.skiplist的实现 4.skiplist跟平衡搜索树和哈希表的对比 1.什么是跳表-skiplist skiplist 本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样…

计算机毕业论文内容参考|基于C的空中战机游戏设计与实现

文章目录 导文文章重点摘要前言绪论1课题背景2国内外现状与趋势3课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于C的空中战机游戏设计与实现 文章重点 摘要 本文将介绍基于C编程语言的空中战机…

【电影推荐系统】数据加载

目录 数据集 解释 movie.csv ratings.csv tag.csv 数据预处理 mongodb 将数据按照csv文件里的分割符进行分割&#xff0c;转换为DF Moive Rating Tag es 将mongo集合tag 根据mid tag > mid tags(tag1|tag2|tag3...) moive 添加一列 tags 导入后数据库信息 mong…

python爬虫_正则表达式获取天气预报并用echarts折线图显示

文章目录 ⭐前言⭐python re库&#x1f496; re.match函数&#x1f496; re.search函数&#x1f496; re.compile 函数 ⭐正则获取天气预报&#x1f496; 正则实现页面内容提取&#x1f496; echarts的天气折现图 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分…

SpringBoot使用EasyExcel批量导出500万数据

SpringBoot使用EasyExcel批量导出500万数据 说明excel版本比较EasyExcel介绍项目目录mysql对应表建表语句pom.xmlapplication.yml配置类启动类代码OrderInfo 实体类OrderInfoExcel excel模版标题类(EasyExcel需要使用这个)TestController控制层接口层TestServiceTestServiceImp…

L298N模块驱动2项4线步进电机的多种方法及其优缺点

摘要&#xff1a;本文将详细介绍L298N模块驱动2项4线步进电机的多种方法&#xff0c;并分析各种方法的优缺点。在实例程序中&#xff0c;将展示不同方法的代码示例&#xff0c;帮助读者理解并实际应用。 引言&#xff1a; 步进电机作为一种常用的电机类型&#xff0c;在许多嵌入…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源&#xff1a;由无界 AI生成 创业未半&#xff0c;而中道崩殂。 6 月 29 日&#xff0c;美团发布公告以 20.65 亿元全资收购光年之外全部权益&#xff0c;距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案&#xff0c;光年之外也在 4 个月时…

HTML5 游戏开发实战 | 黑白棋

黑白棋&#xff0c;又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋、翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子&#xff0c;最后以棋盘上谁的棋子多来判断胜负。黑白棋的棋盘是一个有88方格的棋盘。开始时在棋盘正中有两白两黑四个棋子交叉放置&#xff0…

观察级水下机器人第一次使用总结2023年6月

最近有个科研项目需要用到ROV&#xff0c;其合同三年之前就签订了&#xff0c;由于疫情的影响&#xff0c;一直没有执行。刚好我们的ROV也验收了&#xff0c;正好派上用场。因为属于ROV使用的菜鸟级&#xff0c;我们邀请厂家无锡智海张工和陈工&#xff0c;中海辉固ROV操作经验…

纵向越权-业务安全测试实操(32)

纵向越权 某办公系统普通用户权限越权提升为系统权限 服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在 Cookie中, 并发送至客户端存储。攻击者通过尝试修改Cookie中的身份标识为管理员,欺骗服务器分 配管理员权限,达到垂直越权的目的,如图所示。 某办公系…

「原汤话原食」更名「记者下班」,一切才刚刚开始

大家好&#xff0c;我是《原汤话原食》的小黑。这可能是我最后一次这样介绍自己。 毕竟&#xff0c;以后&#xff0c;我就得说&#xff0c;我是《记者下班》的小黑了。 事情是这样的&#xff1a; 2023年7月5日&#xff0c;津津乐道播客网络旗下《原汤话原食》节目正式更名为《记…

Claude使用教程,解决Claude不能回复

Claude是ChatGPT最为有⼒的竞争对⼿之⼀&#xff0c;Claude 的研发公司是专注人工智能安全和研究的初创公司 Anthropic&#xff0c;由前 OpenAI 员工共同创立的。今年 3 月份 Anthropic 获得了谷歌 3 亿美元的投资&#xff0c;谷歌也因此获得其 10% 股份。 ⽬前可以通过官⽹加…

day29-Oracle

0目录 第一章 Oracle 1.1 Oracle表空间-创建&#xff1a; 1.2 Oracle表空间-删除&#xff1a; 1.3 Oracle常用用户&#xff08;内置&#xff09;&#xff1a;&#xff08;1&#xff09;sys 超级用户&#xff1a; 定义&#xff1a;它是Oracle中的超级账户&#xff0…

百度算法提前批 面试复盘

作者 | liu_sy 面试锦囊之面经分享系列&#xff0c;持续更新中 欢迎后台回复"面试"加入讨论组交流噢 写在前面 之前通过非定向内推提前批&#xff0c;简历一直处于筛选状态中&#xff0c;然后大概在牛客看到一个前辈所在部门&#xff08;推荐搜索&#xff09;招人&…

【docker】在windows下配置linux深度学习环境并开启ssh远程连接

liunux下配置深度学习程序方便&#xff0c;windows下用起来更习惯。 windows下直接利用虚拟机是不太容易对GPU进行虚拟&#xff0c;利用docker就可以。这里简单介绍了在win主机下如利用docker&#xff0c;配置虚拟机环境&#xff0c;并和主机开启ssh连接配置。 配置与系统要求…