自学开发技术,从入门到入行

今天我们不谈技术,也不聊业务,说说学习技术的心得。

说到学习这种事情,无论是学什么,都需要持之以恒,拥有坚持的决心才有可能会学到一些东西。如果只是三天打鱼,两天晒网的态度,不出差错的话,结果一定是和你想的大相径庭。

接下来我要说的话题是自学开发,从开始的入门,到最后进入了这个行业,成为了一名所谓的后台工程师。

虽然大学学的专业是和计算机相关的,也学了一些计算机语言,但是毕业后所从事的工作却不是技术开发,因为在上学的时候就很排斥写代码(没想到最后还是要以写代码谋生活),以至于那个时候老师需要带几个同学一起做项目,也选择了我,但是因为不喜欢代码没有去,现在很后悔好不好。

现在想一想,如果大学的时候就在老师的带领下做过几个项目,学到的应该会很多吧,至少是毕业找工作的时候也会有很多优势,简历写得也比较充实。就不会有工作后再去挤出时间自学技术这样的人生插曲。所以在这里要给那些想要从事技术开发尚在校门之内的同学建议,能多学一些就多学些,有老师带学生做项目的机会千万把握住啊。

不好意思,谈到学生时代的事情说多了些哈,这就来说说标题相关的事情。虽然当时工作不是开发(猜猜刚开始我是干什么工作的),但是公司也是互联网行业,身边有很多程序员,有Java工程师、Android工程师、iOS工程师、前端工程师、运维工程师。每天看他们写代码,做出一款款产品,心生佩服之情。

当时我就萌生了要转行的想法,有一个方法就是辞职了出去培训机构,学费一万多,培训半年再出来找工作,机会成本有点高啊。后来想了想,本身自己也有编程的底子,为什么不自学。于是说干就干,在网上浏览了很多书,最后入手了一本Java从入门到精通的书,后来才知道有人给这本书起了另一个名字,Java从入门到放弃。

要知道,离开了学校,毕了业从事工作,学习精力就没有当年还在学校的时候那么强了,学起来真的很费劲。白天工作,晚上回去看书学习基础,概念、语法等。然后跟着书里面的demo敲代码,每晚不过12点不睡的。很快,大概花了一个月时间,整本书我都看完了,但是这本书出版的有点早,有些知识已经过时了甚至不用了。

我的运气很好,有天中午吃完饭,有个技术部的同事看到我在网上查开发的资料,得知我在自学写代码,给我推荐了一个学习网站,尚硅谷(此处不是打广告),有很多免费的学习资源,有配套视频、有配套demo,还有很多框架。真的我真的很感谢他,从这里我学到了很多。

有的人说,开发要会的很多,不仅只会Java,还要学习数据库,js、html等等语言,而且学完还得有项目做、得实践,不容易找工作啊。是的,这对于是科班出身、还是培训机构出来的、又或是自学的,只要是新手,同样面临这样的问题。但我觉得,如果你只是一个新手,刚接触第一份工作的时候,不要要求太高,毕竟我们的目的是积累项目经验,学技术的,应该还是能找到工作的。

而我,运气又很好,偶然的机会我在公司转岗了,转到了技术部,这样我就有机会做项目了,那个时候真的很兴奋,可能是兴趣使然,技术部每晚我都是最后一个走的,回到家都躺床上睡觉了,想到解决需求的方案竟然爬起来开电脑马上实践是否可行。

学习总是枯味烦躁的,特别是夜深人静的时候,一个人在学习。但是你想得到些什么,总得付出些什么吧。

技术是学无止境的,我觉得自己很菜,也时刻在学习着,只要你坚持下去熬到入门了,后面学习其他的技术知识就比较容易了,加油,天选学习人。

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

上一篇:微信开放平台之第三方平台开发,模板小程序如何提交?

本文转载于网络 如有侵权请联系删除

相关文章

  • html嵌入python代码(python做人脸识别)

    大家好,又见面了,我是你们的朋友全栈君。最近闲来无事,研究研究在安卓上跑Python。想起以前玩过的kivy技术,kivy[1]是一个跨平台的UI框架。当然对我们最有用的是,kivy可以把python代码打包成安卓App。但是由于安卓打包的工具链很长,包括androidsdk打包java代码、ndk编译python、编译各种python依赖包,经常花一整天从入门到放弃。这次使出认真研究的心态,终于找到一个解决方案,于是有了这篇文章:•只要会python就能写安卓App,无需安卓开发基础,无需编译•手机上也有交互式python解释器,直接调试python代码•可以使用各种python库,包括numpy/opencv等机器学习包•可以与安卓接口交互,使用手机硬件,比如摄像头那么我们就以人脸识别App为例,看看如何简单几步搞定。先看看成品的效果:第一步:安装airport.apkAirPort是我编译好的一个安卓App,里面包含了python解释器和一些常用的python库。第二步:连接手机的python解释器启动手机上的AirPort应用,就会运行python解释器。我内置了一个ssh服务

  • 要快!像华为和Commvault抓住二级存储市场的变化那样

    面对即将出现的用户潜在需求,科技公司需要表现得像一条寻血猎犬那样,嗅觉灵敏、行动迅速。华为HC2018会场入口科技创新能力仍然是俘获市场用户的必要条件,但在市场中,你还得考虑的更多。例如善于发现新需求的敏锐嗅觉,以及生态协作效率——这些都是科技公司争夺市场的重要武器。在10月10日开始的华为全联接大会(HUAWEICONNECT2018)首日,华为和Commvault发布了华为超融合数据保护解决方案(HuaweiDataProtectionwithCommvaultHyperScale™)。在此之前,市场甚至没有同类型解决方案。华为与Commvault于方案发布现场2018年下半年初,一家全球知名的大型运营商的现网二级存储设备进入了5年硬件更新周期的末年,这些设备分布在了7个城市,现存容量巨大。由于不愿接受设备全部更新带来的成本压力,运营商开始向外界寻求解决方案。新方案的硬件成本要足够低廉,同时它要能以软件定义存储的方式,保护和管理数据。华为正在等待这个机会,扣动扳机。在运营商咨询华为前的今年的1月份,数据备份和恢复厂商Commvault刚刚将它新的CommvaultHyperScal

  • 基于SpringMVC注解的学生信息的查询

    实验内容:创建com.itheima.po.Student类,包含两个属性,stuName(String),password(String)创建StudentController,并存储Student对象student,设置stuName=”小雪”,password=”123”采用注解的形式实验步骤:首先创建com.itheima.po.Student类,包含两个属性,stuName(String),password(String),并且自动生成相关的Setter/Getter方法和toString方法,同时利用@Component("student")注解生成一个Student的实例。创建StudentController,并利用@Resource(name="student")获取Student实例,并存储到Student对象student,然后利用Setter方法设置stuName=”小雪”,password=”123”。利用@RequestMapping(value="/selectStudent")进行映射,实现St

  • Java之跳转控制语句-break

    文章目录跳转控制语句-break1.看下面一个需求2.基本介绍:3.基本语法4.以while使用break为例,画出示意图5.快速入门6.注意事项和细节说明:7.课堂练习题跳转控制语句-break1.看下面一个需求随机生成1-100的一个数,直到生成了97这个数,看看你一共用了几次? 提示使用(int)(Math.random()*100)+1方法分析:查看random方法和API,前面加上int就是强制类型转换,Math.random()范围是[0,1),乘上100就是[0,100),前面加上int就是double-->int,强转会造成精度缺失,所以范围变成了[0,99],加上1就是[1,100] doublem=99.9; intn=(int)m; System.out.println(n);复制返回10个[1,100]的随机数方法 for(inti=1;i<=10;i++){ System.out.println((int)(Math.random()*100)+1); }复制思路分析: 循环,但是循环的次数不知道.->break,当某个条件满足时

  • Spring Boot简明教程--参数校验

    添加依赖如想正常食用参数校验功能,请先添加hibernateValidator依赖,SpringBoot已经集成了该依赖,就不必单独导入了,是不是更香了呢!<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>复制常用属性注解@Null被注释的元素必须为null @NotNull被注释的元素必须不为null @AssertTrue被注释的元素必须为true @AssertFalse被注释的元素必须为false @Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax(value)被注释的元素必须是一个数字

  • 【高并发】学好并发编程,需要掌握这些核心知识体系!!

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:https://github.com/sunshinelyz/mykit-delay PS:欢迎各位Star源码,也可以pr你牛逼哄哄的代码。写在前面很多小伙伴问我:我在大学时候就学习了多线程,工作后,自己也看过不少有关多线程和并发编程的书籍和视频,为啥真正到工作的时候,我还是不知道在项目中哪里会用到并发编程。我知道有关于并发编程的各个知识点,但是没办法将这些知识点串起来,形成知识体系。冰河,你能不能推一篇文章,讲讲如何学习并发编程,如何将并发编程的各个知识点串成知识体系呢?今天,我们就一起来探讨下有关于并发编程的核心知识体系。 有关更多并发编程的知识,小伙伴们可以到【高并发专题】进行系统学习。并发编程的核心我们先来看下并发编程的三大核心知识图。核心问题要想学好并发编程,首先要理解三个核心的问题:分工,同步和协作(《【高并发】要想学好并发编程,关键是

  • LeetCode 162. 寻找峰值(二分查找)

    1.题目峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中nums[i]≠nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=-∞。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-peak-element 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.二分查找题目假设nums[-1]=nums[n]=-∞。如果nums[i]>nums[i+1],则在i之前一定存在峰值元素 如果nums[i]<nums[i+1],则在i+1之后一定存在峰值元素 添加两个虚拟左右端点,二分查找 classSolution{ public: intfindPeakElement(vector<int>&nums){ nums.push_back(INT_MIN); reverse(nums.begin(),nums.end()); nums.push_back(IN

  • DM 达梦数据库 主ASM磁盘组不能删除 的推测

    在DMDSC集群中删除ASM磁盘组,报如下错误:[dmdba@www.cndba.cn~]$dmasmtooldcr_ini=/home/data/dmdcr.ini DMASMTOOLV8 ASM> ASM>dropdiskgroup'DMLOG' [code:-11011]主ASM磁盘组[DMLOG]不能删除,除非仅剩下一个 ASM> 这个DMLOG是DMDSC集群中创建的第一个磁盘组,尝试删除其他磁盘组,正常: ASM>dropdiskgroup'CNDBA' Usedtime:12.022(ms). ASM>复制查询了一下v$asmgroup视图:SQL>select*fromv$asmgroup; 行号GROUP_IDGROUP_NAMEN_DISKAU_SIZEEXTENT_SIZETOTAL_SIZEFREE_SIZETOTAL_FILE_NUM --------------------------------------------------------------------------

  • JSON Bigint 大数精度丢失的背后

    如果你在ChromeDevTools控制台中输入JSON.parse('{"taskid":9007199254740993}')运行结果返回的将会是{taskid:9007199254740992}。为什么parse后的数值会不一致?双精度浮点数IEEE754JavaScript采用双精度浮点数(IEEE754标准)来表示它的Number类型。一个数字占用64bits存储空间(这里的每一位都只能存放0或1):Generaldoubleprecisionfloat第一位0表示正值、1表示负值;第2-12位表示2的指数部分(可正可负);剩下的52个bits表示尾数部分,它的长度决定了数字的精度。(-1)^{sign}×2^{exponent-0x3ff}×1.mantissa如果我们将符号位和指数位共12个bits表示为16进制(4个二进制bits1111得到1个16进制的f),那么它的取值范围为[000,7ff]。其中,规范约定当取值7ff时,可以表示无穷大或NaN。所以双精度浮点数能表示的最大16进制数为0x7fef_ffff_ffff_fff

  • VC++平台上的内存对齐操作

    我们知道当内存的边界正好对齐在相应机器字长边界上时,CPU的执行效率最高,为了保证效率,在VC++平台上内存对齐都是默认打开的,在32位机器上内存对齐的边界为4字节;比如看如下的代码:structMyStruct { inti; charc; }; int_tmain(intargc,_TCHAR*argv[]) { cout<<sizeof(MyStruct)<<endl; return0; }复制此时输出的结果并不是sizeof(int)+sizeof(char)=5而是8,因为内存对齐的原因,将char分配为4个字节效率更高;在VC平台上我们可以通过预处理指令:#pragmapack(show)来查看当前内存对齐的方式,我们在代码前加上一句#pragmapack(show),再次编译,在编译器的“生成”窗口中看到一个警告:“warningC4810:杂注pack(show)的值==8”说明这时编译器采用的是8字节的对齐方式,另外可以通过这个预处理指令更改对齐方式,比如将代码改写一下:#pragmapack(show) #pragmapack(1) str

  • APK安装流程详解4——安装中关于so库的那些事

    本片文章的主要内容如下:1、ABI简介2、PackageManagerService#derivePackageAbi(PackageParser.Package,File,String,boolean)方法解析3、PackageManagerService#setNativeLibraryPaths(PackageParser.Package)方法分析一、ABI简介ABI全程是:Applicationbinaryinterface,即:应用程序二进制接口,它定义了一套规则,允许编译好的二进制目标代码在所兼容该ABI的操作系统和硬件平台中无需改动就能运行。 不同的Android手机使用不同的CPU,因此支持不同的指令集。CPU与指令集的每种组合都有其自己的应用二进制接口(或ABI)。"ABI"精确定义了"运行时,应用的机器码和系统的交互方式"。你必须为应用要使用每个CPU架构指定ABI。典型的ABI包含以下信息:1、机器代码应使用的CPU指令集2、运行时内存存储和加载的字节顺序3、可执行二进制文件(例如程序和共享库)的格式,以及它们支持的内容类型

  • 网络安全法与AiLPHA大数据智能分析平台

    《中华人民共和国网络安全法》于2016年11月7日经十二届全国人大常委会第二十四次会议表决通过后,并于2017年6月1日起正式实施。网络安全法的正式施行,不仅从法律上保障了人民群众在网络空间的合法利益,有效维护了国家网络空间主权和安全。而且,还有利于推动信息技术的创新和应用,有利于凸显物联网、云计算以及大数据安全分析的巨大价值。安恒AiLPHA大数据智能分析平台在网络安全法法规和安全分析技术层面有非常高的契合度。 网络安全法要求: 第二十一条:国家实行网络安全等级保护制度。网络运营者应当按照网络安全等级保护制度的要求,履行下列安全保护义务,保障网络免受干扰、破坏或者未经授权的访问,防止网络数据泄露或者被窃取、篡改。 (三)采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月;AiLPHA大数据智能分析平台解决方案: 安恒AiLPHA大数据智能安全平台包括实时流分析系统、大数据存储系统、用户行为分析系统以及深度智能感知系统。能够对海量异构事件进行持续不断地采集和存储,TB级的存储能力,可保证按照规定留存相关的网络日志不少于六个月,满足关联分析和事后

  • Python中else关键字的常见用法

    Python中的else常见用法有三:选择结构、循环结构和异常处理结构。(1)选择结构这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块。(2)循环结构Python中的for循环和while循环都可以带else子句,如果循环是因为条件不再成立而自然结束时会执行else中的代码块,如果循环是因为执行了break语句而提前结束则不会执行else中的代码块。(3)异常处理结构Python中的异常处理结构try...except...[else...][finally...]中也可以使用else,如果try中的语句块引发了异常就会由except去尝试捕获,不会再执行else中的代码;如果try中的代码没有引发异常,则会执行else中的代码。下面的代码演示了在选择结构和异常处理结构中else的用法,模拟的问题是:输入若干个成绩,求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩,回答“yes”就继续输入下一个成绩,回答“no”就停止输入成绩。numbers=[]whileTrue:x=input('请输入一个数字:')#在异

  • 2016.07 第4周 群问题分享

    HTML+CSSCSSpixels与Devicepixels有何区别?2016.07.25~2016.07.29核心概念CSSpixels、Devicepixels问题解析CSSpixels:浏览器使用的抽象单位,主要用来在网页上绘制内容Devicepixels:显示屏幕的的最小物理单位,每个dp包含自己的颜色、亮度等值的CSSpixels在手机屏幕上占多大的位置,这不是固定的,这取决于很多属性。经过分析和总结,我们可以得出这么一条公式:1CSSpixels=(devicePixelRatio)^2Devicepixels(^2是平方的意思)想了解更多关于“CSSpixels与Devicepixels”发送“适配”到HTML5学堂公众号JavaScript如何替换丢失(加载失败)的图片2016.07.25~2016.07.29核心概念unbind()、attr()问题解析//第一种方法 //为了防止替换的图片也加载失败而导致死循环,这边给完成替换的图片移除掉error事件 $("img").error(function(){ $(this).unbind("

  • 《Asp.Net Core3 + Vue3入坑教程》 - Vue 2.使用Ant Design of Vue编写页面 &amp; vue-router 初试

    简介 《Asp.NetCore3+Vue3入坑教程》此教程适合新手入门或者前后端分离尝试者。可以根据图文一步一步进操作编码也可以选择直接查看源码。每一篇文章都有对应的源码 目录 《Asp.NetCore3+Vue3入坑教程》系列教程目录 Asp.NetCore后端项目 后端项目搭建与Swagger配置步骤 配置CROS策略解决跨域问题 AutoMapper&RestfulAPI&DI EFCore&Postgresql .NetCore3升级成.Net5&JWT (推荐)异常处理与UserFriendlyException ... Vue3前端项目 使用vue-cli创建vue项目 (本文)使用AntDesignofVue编写页面&vue-router初试 (暂未发表敬请期待...)将Antd导航菜单与vue-router绑定 (暂未发表敬请期待...)保存用户登入状态vuex初试 本文简介 本文为《Asp.NetCore3+Vue3入坑教程》系列教程的前端第二篇-使用AntDesignofVue编写页面&vue-router初试

  • 正则表达式

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 元字符 描述 \ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。 ^ 匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。 + 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配

  • LOJ-10095(缩点的特殊使用)

    题目链接:传送门 思路: 缩点求最值,但是有一点行不通,如果被选中的点才能缩点,否则缩点没有意义; 所以就先缩选中的点,然后从小到大统计没有缩点的点,就是NO; 如果找最小值,就是一个环里的最小值,然后求和就好了。 注意: (1)预处理si和mon (2)对选中的点缩点,不然全部缩点后比较麻烦   #include<iostream> #include<cstdio> #include<cstring> usingnamespacestd; constintmaxn=500100; constintINF=99999999; inthead[maxn],next[maxn],ver[maxn],tot; intnum[maxn],low[maxn],co[maxn],tim,col,si[maxn]; intst[maxn],top; intmon[maxn],in[maxn]; intMIN(intx,inty) { returnx<y?x:y; } voidInit() { for(inti=0;i<maxn;i++)s

  • 嵌入式开发常用的一些命令

    文件查找 find*-name"xarina_evb_defconfig"   grep"TEXT_BASE"*-nR find.!-name"*.txt"-print 搜索除了*.txt之外的文件  find-name*.patch|xargs-icp'{}'./patch/   查看文件的实际内容 od-cpeng.txt   -c表示以字符方式打印文件的内容 嵌入式开发之清除root开机密码 passwd-droot 文件权限和所属chmodchown chownhttp.http/etc/httpd//将目录/etc/httpd的属主修改为http,组修改为http chmod的常用选项:-R对指定目录所有文件和子目录递归式地进行同样的操作-h如果file_name是符号链接,则只对符号链接本身进行操作 chgrphttp/etc/httpd//将目录/etc/httpd的所属组修改为http 符号连接

  • vs2015中搭建EF框架在代码生成策略中找不到“旧的ObjectContext

    vs2015中搭建EF框架在代码生成策略中找不到“旧的ObjectContext” 生生不息0.o 于2022-01-0617:28:10发布 429收藏分类专栏:C#EF文章标签:c#软件框架版权 C#同时被2个专栏收录12篇文章0订阅订阅专栏 EF2篇文章0订阅订阅专栏最近在研究EF+WCF的框架搭建,过程还算顺利,就是在搭建EF的时候出现问题,我发现自己搭建的EF矿建与网上教程的结果不一样,上网查问题才发现是自己代码生成策略选成“T4”了,而网上教程选择的代码生成策略是“旧的ObjectContext”。为了以后在搭建EF时不再踩坑,这里做以下记录。 EF搭建我这里就不说了。但是这里有一个最重要的点:你在搭建EF的时候,实体框架要选择实体框架5.0,不然后面你在属性里面找不到“旧的ObjectContext” 第一步.删除多余的.tt文件,删除T4模板中我框起来的部分 第二步:双击.edmx文件,进入数据库模型视图,右键空白,选择属性,在最上面的代码生成策略中,下拉选择“旧的ObjectContext”(注意:最一开始实体框架要选择实体框架5.0,不然这里没有“旧的ObjectC

  • 《C/C++实现Console下的加载进度条模拟[美观版]》

    前言   有时候我们会遇到在CMD或DOS控制台上出现的加载进度条,虽然不是如网页和软件写的美观。但确确实实也有着自己的特色。而且,一个好看的加载进度条也能增加用户使用控制台程序的体验!所以,拿来研究一下也未尝不可!   博主,一开始写了个加载进度条的模拟。但是,效果不是很理想!于是,我默默地掏出了度娘....   Whatareyou搞啥勒?网上的答案几乎千篇一律,哎~有时候还能看见两篇一模一样的文章作者居然同时标注原创!而且,模拟的效果也不咋滴!   没办法,自己动手丰衣足食!还是得我自己来! 第一次尝试   这是博主第一次写的进度条,怎么讲呢!两个方块之间的空隙让人看了是真的不爽!   之前见那些控制台应用程序的加载进度条也不是这样的啊!为什么他们写的挺好看的?   中间这个方块怎么解决?   莫非不是某个字符输出的?这时,我不经意间发现了这个....   好像被选中的两个字符中间是连续的啊!难道那些应用就是通过选中了那块内容覆盖弄出的吗?好像不对!一来,这样实现似乎比较困难;二来,每次...总之还是比较困难o(////▽////)o....   不过.... 第二次尝试  

  • Windows执行打开文件命令

    ShellExecute(NULL,"open", localFile.c_str(), NULL,NULL,SW_SHOW);        会调用该文件类型关联的程序打开,成功会返回大于32的数               弹出选择指定程序打开文件对话框       std::stringcmd="shell32.dll,OpenAs_RunDLL\"fileName"\"";          ShellExecute(NULL, NULL, "rundll32.exe",  cmd.c_str(),NULL,SW_SHOW);

相关推荐

推荐阅读