- 软件测试(2):selenium 4.0 特点以及新特性
m0_49024067
软件测试selenium
特点免费开源支持多语言,java、python、c#支持多平台,windows、linux、macOS支持多浏览器,谷歌、火狐、edge、Safari分布式,可以把测试用例分发到不同的机器上执行selenium4.0新特性4.0以上的版本,需要python3.7及以上版本支持与3.0有定位语法差异(后面详细介绍)增加了相对定位above元素上below元素下toLeftOf元素左toRightOf
- mybatis里in关键字拼接id问题
williamyi74
mybatisjavasql
我们一般会把ids集合用StrUtil.join(‘,’)转成"1,2,3"这种形式然后放入in中我们会这么写:selectid,nick_name,iconfromtb_userwhereidin(#{ids})orderbyFIELD(id,#{ids})结果发现sql执行是这样的:selectid,nick_name,iconfromtb_userwhereidin('1011,1022')
- Hive优化高频面试题
lzhlizihang
hivehivehadoop面试题hive优化
文章目录一、开启本地模式二、explain分析sql语句三、修改Fetch操作四、开启hive的严格模式五、JVM重用六、分区、分桶以及压缩七、合理设置map和ruduce的数量八、设置并行执行九、CBO优化-成本优化器十、谓词下推十一、小表join大表--使用MapJoin十二、大表join大表--使用SMBJoin十三、列裁剪与分区裁剪十四、避免数据倾斜1、数据倾斜的表现2、数据倾斜的原因和解
- 【SQL多表查询完全指南】从零到精通:5种JOIN详解与性能优化实战
2401_83194332
sql性能优化数据库
附20+示例代码与思维导图,轻松应对复杂数据关联开篇:为什么需要多表查询?在电商系统中,用户信息存储在users表,订单数据在orders表,商品信息在products表。要分析“每个用户的消费金额”,必须关联多张表进行查询。这正是多表查询的核心价值:通过表间关联,挖掘数据深层关系。一、多表查询基础:理解关系代数1.1表关系类型关系类型描述示例一对一一条记录对应另一表的一条记录用户↔身份证信息一对
- 2024基于webpack从0搭建vue项目,vue2
2401_85124892
作者\/webpackvue.js前端
}),//自动清除dist目录插件newCleanWebpackPlugin(),//配置vueloader插件],//配置开启服务器的信息devServer:{static:{directory:path.join(__dirname,‘dist’),},compress:true,port:80,},performance:{hints:false}}按照上述配置把对应文件给创建好,如果没有文
- MySQL创建数据库和表,并插入四大名著英雄数据
Asuka07
数据库mysql
1.登录数据库并创建数据库db_ck;创建完成后使用到我们创建的数据库。Enterpassword:******WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis26Serverversion:8.4.3MySQLCommunityServer-GPLCopyright(c)2000,2024,Oraclean
- 设计模式扩展 MyBatis Plus BaseMapper接口
〆、风神
设计模式mybatiswindows
pomcom.github.yulichangmybatis-plus-join-boot-starterjava/**1.在MyBatisPlus的BaseMapper的基础上拓展,提供更多的能力2.3.1.{@linkBaseMapper}为MyBatisPlus的基础接口,提供基础的CRUD能力4.2.{@linkMPJBaseMapper}为MyBatisPlusJoin的基础接口,提供连
- Java 进阶之旅-day04:多线程学习~开启并发编程之门
禹曦a
Java基础加强java学习开发语言
目录线程与多线程的基本概念线程多线程创建线程的三种方式继承Thread类实现Runnable接口实现Callable接口线程常用方法start()run()sleep(longmillis)join()yield()isAlive()线程安全与线程同步线程安全线程同步synchronized关键字Lock接口线程池并发和并行并发并行在Java编程的世界里,多线程是一项强大且重要的技术。它能显著提升
- 将网页操作的脚本自动保存成yaml ,然后修改使用
PyAIGCMaster
我的学习笔记python自动化
可以使用Playwright更优雅地实现你的需求,它相比Selenium具有更现代化的API和更好的浏览器控制能力。以下是基于Playwright的改进方案:---###**1.Playwright核心优势**-**内置自动等待**:无需手动处理元素加载等待-**多浏览器支持**:Chromium/Firefox/WebKit统一API-**强大的录制功能**:自带`codegen`模式可生成操作
- 递归和非递归实现计算二叉树叶子节点的个数
如影随从
C++二叉树
#include#include#include#include#defineMAXSIZE50typedefstructBinaryTree{chardata;structBinaryTree*pLeft;structBinaryTree*pRight;}BinaryTree;//BinaryTreeNodetypedefstructStackTree{BinaryTree*b[MAXSIZE]
- java多线程实现方式
木子0204
java开发语言
目录1.继承Thread类2.实现Runnable接口3.实现Callable接口4.使用线程池5.使用CompletableFuture(Java8+)6.使用ForkJoinPool(Java7+)7.使用Timer和TimerTask8.使用ScheduledExecutorService总结1.继承Thread类通过继承Thread类并重写run()方法来实现多线程classMyThrea
- 数据库存储体系详解
王嘉俊925
SQL数据库
数据库存储体系详解目录结构MySQL体系架构存储引擎深度解析引擎对比与选型指南1.MySQL体系架构逻辑架构图解客户端连接层服务层存储引擎层文件系统四层架构解析层级核心组件功能特性关键技术连接层连接池身份验证用户身份认证连接数管理安全控制SSL加密线程池优化最大连接数配置服务层SQL接口解析器优化器查询缓存SQL语法解析执行计划优化结果缓存处理查询重写索引选择JOIN优化策略引擎层插件式引擎接口数
- 排序算法------练习1
日暮南城故里
算法刷题记录排序算法算法java
1.题目2.思路和题解这道题其实就是用昨天总结的常用排序算法里的快速排序。因为每次经过划分操作之后,一定是可以确定出一个元素的最终位置,因此我们不需要全部排序完成,只需要某次划分的qqq为倒数第kkk个下标的时候,就已经确定了答案。classSolution{intquickselect(int[]nums,intleft,intright,intk){if(left==right){return
- 如何优化SQL查询性能?
破碎的天堂鸟
学习教程数据库
以下是从多维度综合整理的SQL查询性能优化方案,结合索引设计、查询结构优化、数据库架构调整及硬件配置等关键因素,提供一套系统性的解决方案:一、索引优化策略(核心优化方向)精准索引定位在WHERE、JOIN条件、ORDERBY子句高频字段创建索引联合索引遵循最左前缀原则,区分度高的列靠左字符串索引采用前缀优化,如ALTERTABLEADDINDEX(col(20))避免在低选择性字段(如性别)建索引
- 在 Vue 中监听常用按键事件(回车,ESC 键,空格等)
介si啥呀~
jsvue.js前端javascript
一、Vue原生按键修饰符(推荐)html@keydown.esc="cancel"@keyup.space="togglePlay"@keydown.delete="clear"@keydown.tab="nextField"@keyup.up="navigate(-1)"@keyup.down="navigate(1)"@keyup.left="moveLeft"@keyup.right="mo
- MySQL 的 SQL 语句执行顺序
愿与狸花过一生
MySQLmysqlsql数据库
MySQL的SQL语句执行顺序并不完全按照代码的书写顺序执行,而是遵循一套固定的逻辑流程1.FROM和JOIN作用:确定查询的数据来源,包括表和它们的连接方式(如INNERJOIN,LEFTJOIN等)。细节:先执行FROM,确定基础表。再执行JOIN,将多个表按条件连接,生成临时结果集(中间表)2.WHERE作用:对FROM/JOIN生成的中间表进行过滤,筛选符合条件的行。细节:不可使用SELE
- Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!
测试工程师成长之路
测试工程师成长之路人工智能Playwright自动化测试
一、引言:自动化测试的“瓶颈”与MCP的革新传统自动化测试依赖开发者手动编写脚本,不仅耗时且容易因页面动态变化失效。例如,一个简单的登录流程可能需要开发者手动定位元素、处理等待逻辑,甚至反复调试超时问题。而MCP(ModelContextProtocol)协议的出现,让工具与大语言模型(LLM)的协作成为可能——通过自然语言描述需求,即可自动完成浏览器操作。以Playwright为例,结合MCP协
- Playwright从入门到实战:比Selenium更快的数据爬取案例实战
梦想画家
#python工具软件selenium测试工具Playwright
摘要Playwright是微软开源的下一代浏览器自动化工具,凭借其高性能、跨浏览器支持和现代化设计,迅速成为Web自动化领域的热门选择。本文将从安装配置开始,通过实战演练展示其核心功能,并与Selenium深度对比,帮助开发者选择适合的工具。一、Playwright基础前置知识1.什么是Playwright?Playwright是一个支持Chromium、Firefox、WebKit的浏览器自动化
- 9.6.1 ACM-ICPC 数据结构 并查集
夏驰和徐策
ICPC数据结构算法并查集
9.6.1ACM-ICPC数据结构:并查集并查集简介并查集(Union-Find或DisjointSetUnion)是一种用于管理不相交集合的数据结构,主要支持两种操作:合并(Union)和查找(Find)。它在解决连通性问题、图论问题(如最小生成树的Kruskal算法)以及其他需要动态连通性维护的场景中有着广泛应用。并查集的核心思想是通过树结构表示集合中的元素,并通过路径压缩和按秩合并等优化手段
- Doris 中大表与大表 Join 优化策略
小技工丨
大数据随笔开发语言大数据doris
在Doris中,大表与大表Join的性能瓶颈主要源于数据分布、网络传输和内存资源三大核心问题。结合Doris的MPP架构、列式存储和分布式计算特性,以下是针对性的优化方案及技术细节:0.常见的优化方向和策略优化方向适用场景核心手段数据分布优化高频Join键分布均匀使用ColocateJoin或分桶键优化计算下推Join条件可提前过滤数据谓词下推、分区裁剪、Ru
- 前端解决get请求传递数组
前端小趴菜05
前端
直接使用get请求传递数组,会报错解决方案1.传递字符串,将数组转为字符串进行传递,后端也以字符串接受//使用join方法将数组转为字符串letdata=[1,2,3,4,5]letparams=data.join(',')//1,2,3,4,52.将数组转换为查询字符串格式,并附加到URL上constarrayToQueryString=(data:number[],key:string)=>{
- MySQL多表查询核心指南
王嘉俊925
SQLmysql数据库
MySQL多表查询核心指南一、多表关系与ER模型1.关系类型与实现方案关系类型实现方式经典案例多对多独立关联表+双外键学生选课系统一对多多的一方添加外键部门-员工关系一对一任意一方添加UNIQUE约束外键用户基础信息-详情表拆分二、连接查询全解析1.七种JOIN操作可视化2.核心查询类型详解/*隐式内连接(WHERE过滤)*/SELECTe.name,d.nameFROMempe,deptdWHE
- 嵌入式数据结构—学习笔记 二叉树
忘山君
嵌入式数据结构数据结构学习笔记
二叉树的层次遍历_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1ee4y1q77b/?p=25&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=01c0a0b4e215da5cc9a422b60e2ca405一.二叉树的原理及优缺点二叉树是计算机科学中
- 求阶乘末尾零的个数
想喝牛奶的程序员
javapython算法大数据蓝桥杯
问题描述相信你已经熟练掌握N!末尾的0的个数的求法。现在给出数字k,请找到最小的N,使得N!末尾恰好有k个0【评测规模与约定】输入一个整数k对于30%的数据,1=left){longmid=(right+left)/2;//采用二分法取中间值if(count5(mid)==k){//判断末尾0的个数与k比较,下同理ans=mid;right=mid-1;}elseif(count5(mid)>k)
- C++-模板初阶
·前路漫漫亦灿灿
c++算法数据结构
一、目标1.泛型编程2.函数模板3.类模板二、对目标的介绍1.泛型编程下面有一个问题:如何实现一个通用的交换函数呢?首先我们想到了可以用学过的函数重载。如下代码:voidSwap(int&left,int&right){inttemp=left;left=right;right=temp;}voidSwap(double&left,double&right){doubletemp=left;lef
- Python Playwright库全面详解
老胖闲聊
Pythonpython开发语言
Playwright是Microsoft开发的一个现代化的端到端测试和浏览器自动化库,支持Chromium、WebKit和Firefox浏览器。它提供了跨浏览器、跨平台的自动化能力,且具有高性能和可靠性。一、核心特性多浏览器支持:Chromium(Chrome,Edge)WebKit(Safari)Firefox跨平台支持:WindowsmacOSLinux多语言支持:JavaScript/Typ
- lc-二叉树vs链表
我也爱吃馄饨
链表算法linux
1、链表:p与p.next二叉树:root与root.left、root.right2、遍历链表:用p.next二叉树:用root.left或者root.right3、获取值root.val/p.val4、其他:链表要注意有时加守卫头节点解题链表中若while循环中出现了p.next,while(p){}结构若while循环中出现了p.next.next,则while(p&&p.next)结构链表
- JAVA-批量异步任务实现
黑大帅--------
java开发语言异步springboot后端
1.批量异步1.CompletableFuture技术详细描述什么是CompletableFuture?定义:CompletableFuture是Java8引入的异步编程工具,用于表示一个可能在未来完成的异步计算的结果。它支持链式操作、组合多个异步任务、异常处理和回调机制。核心机制:异步执行:通过supplyAsync或runAsync启动异步任务(默认使用ForkJoinPool的公共线程池)。
- leetcode153.寻找旋转排序数组中的最小值
ゞ 正在缓冲99%…
算法leetcode数据结构
思路源于【小白都能听懂的算法课】【力扣】【Leetcode153】寻找旋转排序数组中的最小值|二分查找|数组classSolution{publicintfindMin(int[]nums){intleft=0,right=nums.length-1;while(left<=right){intmid=(right-left)/2+left;//left和right处于单调区间中那么left处就是
- 数据库_视图事务触发器存储过程
肖长青
mysql数据库
1.创建视图createview视图名(视图列1,视图列2)视图列名为中文asselect*from表名没有指定那一列,从第一个列名开始创建withcheckoption;2.添加视图数据、删除视图、查询视图、修改视图和表一样的用法3.创建多表视图createview视图名(视图列1,视图列2,视图列3)asselect列名1,列名2,列名3from表名1表名1别名leftjoin表名2表名2别名
- java解析APK
3213213333332132
javaapklinux解析APK
解析apk有两种方法
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息
2、利用相关jar包里的集成方法解析apk
这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果。
public class ApkUtil
{
/**
* 日志对象
*/
private static Logger
- nginx自定义ip访问N种方法
ronin47
nginx 禁止ip访问
因业务需要,禁止一部分内网访问接口, 由于前端架了F5,直接用deny或allow是不行的,这是因为直接获取的前端F5的地址。
所以开始思考有哪些主案可以实现这样的需求,目前可实施的是三种:
一:把ip段放在redis里,写一段lua
二:利用geo传递变量,写一段
- mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
dcj3sjt126com
mysql
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:
1.
CURRENT_TIMESTAMP
当要向数据库执行insert操作时,如果有个timestamp字段属性设为
CURRENT_TIMESTAMP,则无论这
- struts2+spring+hibernate分页显示
171815164
Hibernate
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
- 构建自己的Wrapper应用
g21121
rap
我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。
首先,创建项目应用
&nb
- [简单]工作记录_多线程相关
53873039oycg
多线程
最近遇到多线程的问题,原来使用异步请求多个接口(n*3次请求) 方案一 使用多线程一次返回数据,最开始是使用5个线程,一个线程顺序请求3个接口,超时终止返回 缺点 测试发现必须3个接
- 调试jdk中的源码,查看jdk局部变量
程序员是怎么炼成的
jdk 源码
转自:http://www.douban.com/note/211369821/
学习jdk源码时使用--
学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量
- Oracle RAC Failover 详解
aijuans
oracle
Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
Oracle 10g RAC 的Failover 可以分为3种:
1. Client-Si
- form表单提交数据编码方式及tomcat的接受编码方式
antonyup_2006
JavaScripttomcat浏览器互联网servlet
原帖地址:http://www.iteye.com/topic/266705
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交
1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:
- JS初学者必知的基础
百合不是茶
js函数js入门基础
JavaScript是网页的交互语言,实现网页的各种效果,
JavaScript 是世界上最流行的脚本语言。
JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页面增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的
- iBatis的分页分析与详解
bijian1013
javaibatis
分页是操作数据库型系统常遇到的问题。分页实现方法很多,但效率的差异就很大了。iBatis是通过什么方式来实现这个分页的了。查看它的实现部分,发现返回的PaginatedList实际上是个接口,实现这个接口的是PaginatedDataList类的对象,查看PaginatedDataList类发现,每次翻页的时候最
- 精通Oracle10编程SQL(15)使用对象类型
bijian1013
oracle数据库plsql
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
- 【Linux命令二】文本处理命令awk
bit1129
linux命令
awk是Linux用来进行文本处理的命令,在日常工作中,广泛应用于日志分析。awk是一门解释型编程语言,包含变量,数组,循环控制结构,条件控制结构等。它的语法采用类C语言的语法。
awk命令用来做什么?
1.awk适用于具有一定结构的文本行,对其中的列进行提取信息
2.awk可以把当前正在处理的文本行提交给Linux的其它命令处理,然后把直接结构返回给awk
3.awk实际工
- JAVA(ssh2框架)+Flex实现权限控制方案分析
白糖_
java
目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。
【SSH2权限系统的实现机制】
权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使
- angular.forEach
boyitech
AngularJSAngularJS APIangular.forEach
angular.forEach 描述: 循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值啦. (此函数不能够迭代继承的属性.)
- java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树
bylijinnan
二叉排序树
import java.util.LinkedList;
public class CreateBSTfromSortedArray {
/**
* 题目:给定一个排序数组,如何构造一个二叉排序树
* 递归
*/
public static void main(String[] args) {
int[] data = { 1, 2, 3, 4,
- action执行2次
Chen.H
JavaScriptjspXHTMLcssWebwork
xwork 写道 <action name="userTypeAction"
class="com.ekangcount.website.system.view.action.UserTypeAction">
<result name="ssss" type="dispatcher">
- [时空与能量]逆转时空需要消耗大量能源
comsci
能源
无论如何,人类始终都想摆脱时间和空间的限制....但是受到质量与能量关系的限制,我们人类在目前和今后很长一段时间内,都无法获得大量廉价的能源来进行时空跨越.....
在进行时空穿梭的实验中,消耗超大规模的能源是必然
- oracle的正则表达式(regular expression)详细介绍
daizj
oracle正则表达式
正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。
正则表达式中常用到的元数据(metacharacter)如下:
^ 匹配字符串的开头位置。
$ 匹配支付传的结尾位置。
*
- 报表工具与报表性能的关系
datamachine
报表工具birt报表性能润乾报表
在选择报表工具时,性能一直是用户关心的指标,但是,报表工具的性能和整个报表系统的性能有多大关系呢?
要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,哪些环节容易出现性能瓶颈,如何优化这些环节。
一、报表处理的一般过程分析
1、用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库。
2、
- 初一上学期难记忆单词背诵第一课
dcj3sjt126com
wordenglish
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
- 我学过和准备学的各种技术
dcj3sjt126com
技术
语言VB https://msdn.microsoft.com/zh-cn/library/2x7h1hfk.aspxJava http://docs.oracle.com/javase/8/C# https://msdn.microsoft.com/library/vstudioPHP http://php.net/manual/en/Html
- struts2中token防止重复提交表单
蕃薯耀
重复提交表单struts2中token
struts2中token防止重复提交表单
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月12日 11:52:32 星期日
ht
- 线性查找二维数组
hao3100590
二维数组
1.算法描述
有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n)
2.使用到的相关知识:
结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816)
3.使用数组名传递
这个的不便之处很明显,一旦确定就是不能设置列值
//使
- spring security 3中推荐使用BCrypt算法加密密码
jackyrong
Spring Security
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
- 学习编程并不难,做到以下几点即可!
lampcy
javahtml编程语言
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到