首页 文章 精选 留言 我的

精选列表

搜索[程序设计],共1339篇文章
优秀的个人博客,低调大师

JavaScript高级程序设计学习(二)之基本概念

任何语言的核心都必然会描述这门语言基本的工作原理。而描述的内容通常都要涉及这门语 言的语法、操作符、数据类型、内置功能等用于构建复杂解决方案的基本概念。如前所述, ECMA-262通过叫做 ECMAScript的“伪语言”为我们描述了 JavaScript的所有这些基本概念 本篇文章主要讲语法,类型,操作符,语句和函数。 任何编程,都是从基础的语法开始,例如java,java也有基础语法,操作符,数据类型,控制语句等。c++,php,python也同理。 js与java在变量上有其共同点,这也是很多编程语言也有的共性: 一、语法 变量命名: 1.区分大小写,例如在js中给变量命名可以是var,也可以是let, var t和vat T是两个变量,而并不是一个变量; 2.标识符,不能以数字开头,第一个字符必须是一个字母,下划线或$符号,建议命名驼峰命名法,首字母小写,剩下的第二个单词字母大写; 3.不得以关键字和保留字进行命名,例如True命名可以,true则不行,因为true是js的基本数据类型boolean类型; 关键字: 保留字: 当然上述列出的只是一部分,还有其他,其他可以去w3school参考:http://www.w3school.com.cn/js/ 变量有这么几种类型? 1.number 2.string 3.boolean 4.undefined 5.Object 上述js数据类型分别对应数字,字符串,布尔,未定义,对象等类型 typeof操作符可以得到该变量的类型 说到基本数据类型,不得不提一个类型转换,类型转换报错是很常见的: 类型转换应用: 比如字符串1,2,3,或者3.24,true等,我如何将其转换为数字类型,可使用parseInt(),parseFloat(),parseDouble()等方法可以进行转换 数字如何转字符串,toString()方法即可解决 undefined,有的时候我们添加数据时,有那么几个非必填项,但在列表展示时,常常展示为undefined,为什么会出现undefined,因为没有初始值,在java中int类型可默认初始值为0,声明尚未实现可以这样,js就不能这样,所以我们通常就要写if判断,当等于这个undefined时,我们给它赋个空串。 操作符也是开发中常用的,一元操作符,运算符,位操作符,布尔操作符,关系操作符,条件操作符,在这里我只说关系和条件,因为这两个用的比较多,当然还有布尔操作符,一元操作符,运算符等,位运算符,用的少,几乎没用过。 一元操作符类似于我们的if(condition){}else{},运算符,加减乘除,特别是关于购物车钱的计算及其日期的计算,例如下图示例: //本周 var date = new Date(); // 本周一的日期 date.setDate(date.getDate() - date.getDay() + 1); var begin = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " 00:00:00"; // 本周日的日期 date.setDate(date.getDate() + 6); var end = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " 23:59:59"; //当天 var year = now.getFullYear(); //年 var month = now.getMonth() + 1; //月 var day = now.getDate(); //日 var current=year+"-"+month+"-"+day; //最近一个月 function timeForMat (count) { // 拼接时间 let time1 = new Date() time1.setTime(time1.getTime() - (24 * 60 * 60 * 1000)) let Y1 = time1.getFullYear() let M1 = ((time1.getMonth() + 1) > 10 ? (time1.getMonth() + 1) : '0' + (time1.getMonth() + 1)) let D1 = (time1.getDate() > 10 ? time1.getDate() : '0' + time1.getDate()) let timer1 = Y1 + '-' + M1 + '-' + D1 // 当前时间 let time2 = new Date() time2.setTime(time2.getTime() - (24 * 60 * 60 * 1000 * count)) let Y2 = time2.getFullYear() let M2 = ((time2.getMonth() + 1) > 10 ? (time2.getMonth() + 1) : '0' + (time2.getMonth() + 1)) let D2 = (time2.getDate() > 10 ? time2.getDate() : '0' + time2.getDate()) let timer2 = Y2 + '-' + M2 + '-' + D2 // 之前的7天或者30天 return { t1: timer1, t2: timer2 } } var timer = timeForMat(30) alert(timer.t1) 布尔操作符,也比较常用,与(&),或(||),非(!) 关系操作符小于(<)、大于(>)、小于等于(<=)和大于等于(>=)这几个关系操作符用于对两个值进行比 较,比较的规则与我们在数学课上所学的一样。 条件操作符类似我们的if..else (1)var max = (num1 > num2) ? num1 : num2; (2)if(num1>num2){ alert(num1) }else{ alert(num2) } (1)和(2)实际上是一样的,没多大区别。不过注意的是写if时,连else也写了吧,这样逻辑清晰,还有if(){},这个{}可以省略,但建议不要省略。 二、语句 1.if语句 这个常用,就不多说了,总而言之,写if,要写就写全套,不要省略else if的话表单验证用的挺多的,我开发用的js验证全部用if 例如: 常见的密码一致性问题 if(password==null||password==""){ alert("密码不能为空"); return false; }else if(password2==null||password2==""){ alert("确认密码不能为空"); return false; }else if(password!=password2){ alert("两次输入密码不一致"); return false; }else{ //ajax请求,这里省略 } 2.do..while(condition) 注意:do..while和java中的一样,至少执行一次 不会出现当条件不满足时,不执行。先执行再判断,用这句话形容do..while非常合适 开发中的话,我个人不常用,当然应用场景的话,可以用作于数据初始化 3.while(conditioini) 先判断再执行,有可能一次都不执行 while的话,用的不多,应用场景当满足条件时,进行函数调用。不过注意,如果代码存在逻辑问题又或者其他原因,可能导致死循环或者浏览器崩溃。 4.for循环 这个玩意好啊,用的最多,不过用之不慎的话,也会导致死循环。记得某个幽默的大牛对我说,十年前,初次做开发,别人问他,你会什么,他回答说,我就会for循环。 for循环,我应用的地方是: // 数据展示 var loadData3 = function(list) { $("#s10_tbody tr[value != '']").remove(); var rows = ""; var comuStatus = ""; // 数据遍历 for (var i = 0; i < list.length; i++) { var comuStatus = list[i].comuStatus if (comuStatus == 1) { comuStatus = "正常"; } else { comuStatus = "异常"; } rows = rows + '<tr>'; rows = rows + ' <td>' + list[i].id + '</td>'; rows = rows + ' <td>' + comuStatus + '</td>'; rows = rows + ' <td>' + list[i].time + '</td>'; rows = rows + '</tr>'; } $("#s10_tbody").append(rows); } 5.for in 对于这个玩意,我应用的场景如图所示:通常for in是针对数组或集合 //按条件查找锁 function searchLock(index,size) { $(".list [value != '']").remove(); //用户ID var userId=$("#userId").val(); //门锁编码 var lockNo = $("#lock_no_search").val(); //房间编码 var roomCode = $("#room_no_search").val(); //房源编码 var houseCode = $("#house_bm_search").val(); //省市区 var province = $("#province").find("option:selected").text(); var city = $("#city").find("option:selected").text(); var district = $("#district").find("option:selected").text(); //安装地址 var region = province+"_"+city+"_"+district; //地址 var address = $("#address").val(); $.ajax({ type : "POST", url : "lock/list", data : { userId : userId, lockNo:lockNo, roomCode:roomCode, houseCode:houseCode, region:region, address:address, pageIndex:index, pageSize:size }, dataType : 'json', success : function(data) { var json = eval("("+data+")"); //总数 lockCount=json.lines; $("#locknum").html(lockCount); if(lockCount!=0){ //将后台集合装载入list var list = json.lockList; for (i in list){ var lockNo = list[i].lock_no; var houseCode = list[i].houseCode; var roomCode = list[i].roomCode; var type = list[i].type; var doorsensor = list[i].doorsensor; var comuStatus = list[i].comuStatus; var power = list[i].power; var region = list[i].region; var address = list[i].address; var installTime = list[i].installTime; var name = list[i].name; var nodeNo = list[i].nodeNo; if(type==1){ type="二代433门锁"; } if(doorsensor==1){ doorsensor="是"; }else{ doorsensor="否"; } if(comuStatus==1){ comuStatus="强"; } var rows="" +"<span class='fl lockinfo lockcheck' style='width:7%;'> <a class='checks' href='javascript:;' data-id='162235c895b065' data-node-comu='00' data-node-type='3' checks='false'></a> </span>" +" <span class='fl ip-p lockinfo'><a target='_blank' href='lockPassword.html?lockNo="+lockNo+"' class='listss-l'>"+lockNo+"</a></span>" +"<span class='fl code-p lockinfo'>"+houseCode+"</span>" +"<span class='fl room-p lockinfo'>"+roomCode+"</span>" +"<span class='fl lock-p lockinfo'>"+type+"</span>" +"<span class='fl magnetic-p lockinfo'>"+doorsensor+"</span>" +"<div class='fl commit-p lockinfo'><span class='ico ico-cmt-s4'></span><p class='green'>"+comuStatus+"</div>" +"<span class='fl qua-p lockinfo'><div class='iconfont icon-icon-test20 green'></div><div>"+power+"%</div></span>" +"<span class='fl add address lockinfo'><span style='display:none'>"+region+"</span>"+address+"</span>" +"<span class='fl time-p lockinfo'>"+installTime+"</span>" +"<span class='fl ope-p lockinfo'>"+name+"</span>" +"<span class='fl gate-p lockinfo'>"+nodeNo+"</span>" +"<span class='fl lockinfo lockope'><a class='opebtn opechange' href='lockPassword.html?lockNo="+lockNo+"' data-node='3' style='display: inline;'>编辑</a></span>"; $(".list").append(rows); } var page='<div id="userPage" align="center" ><font size="2">共' (lockCount+pageSize-1)/pageSize+'页</font> <font size="2">第' +(pageIndex+1)+'页</font> <a href="javascript:void" onclick="GoToFirstPage()" id="aFirstPage" >首页</a> ' +'<a href="javascript:void" onclick="GoToPrePage()" id="aPrePage" >上一页</a> ' +'<a href="javascript:void" onclick="GoToNextPage()" id="aNextPage" >下一页</a> ' +'<a href="javascript:void" onclick="GoToEndPage()" id="aEndPage" >尾页</a> '; page+='</div>'; $("#lockPage").html(page); // document.getElementById("dltitle").innerHTML = "查找结果如下"; } },error:function(){ alert("有异常"); } }); } 6.switch 这个switch的话,我觉得也很有用,可以针对不同的条件和参数调用不同的函数,挺有用的,不过我用的不多,可能是因为没有领会它的真谛吧,说到底就是用的太少不熟练。 应用场景的话,前后端分离,用的展示层就是html,如何进行权限控制呢?就通过switch,通过全局js函数获得用户角色,根据该角色,进行访问资源判断。例如, 不过这里的角色是有限的,基本定义为普通人员,安装人员,运维,admin或者root等四到五个角色,如果想crm或erp之类的,角色很多,万不可通过这种形式来定义对资源的访问。 三、函数 这个不能不提啊,现在我写的最多的就是js函数 突然让我想起了Linux,linux中的shell,shell脚本的基础就是linux的命令的集合体,记得在上家公司一位同事写监控服务器脚本就是用的函数,函数方便复用和模块化,什么是模块化呢?我个人的理解是,比如我写的一个用户管理界面,引用的js文件主要是用户管理相关js,该js文件专心于用户管理界面上的一切操作。

优秀的个人博客,低调大师

《Android程序设计》一3.8 Android应用打包:.apk文件

3.8 Android应用打包:.apk文件 Android提供了一个名为apkbuilder的应用,它能够生成可安装的Android应用文件,这些应用文件的扩展名是.apk。.apk是一种ZIP文件格式,它和很多其他面向Java的应用类似,包含应用说明、已经编译的应用类和应用资源。Android还提供了aapt工具对文件进行打包,这些文件也是生成.apk文件,但是开发人员通常倾向于在其开发环境中使用该工具构建他们的应用。绝大多数用户只是简单地依赖其IDE来创建其.apk文件。一旦开发人员创建了.apk文件,他可以选择下面任意一种方式在设备上进行安装:使用adb接口路径,或者更常见的是使用IDE。使用SD卡。把文件存储在Web服务器上。把文件上传到Android Market,然后选择Install。

优秀的个人博客,低调大师

《Kotlin 程序设计》第二章 快速开始:HelloWorld

第二章 快速开始:HelloWorld 正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item.jd.com/12181725.html 天猫Tmall:https://detail.tmall.com/item.htm?id=558540170670 使用云端在线IDE学习Kotlin 我们不需要搭建任何环境,只要有一台能联网的设备,打开浏览器访问: https://try.kotlinlang.org 你就可以尽情享受Kotlin的乐趣了。 使用本地命令行环境编译执行Kotlin代码 当然,我们也可以搭建本地环境,编译执行kotlin代码。 程序的本质就是映射(函数)。比如说kotlinc这个程序,我们知道,Kotlin基于Java虚拟机(JVM),通过Kotlinc编译器生成的JVM字节码与Java编译的字节码基本相同,也因此与Java可以完全兼容,并且语法更加简洁。 Downloading the compiler Every release ships with a standalone version of the compiler. We can download it from [GitHub Releases]({{ site.data.releases.latest.url }}). The latest release is {{ site.data.releases.latest.version }}. Manual Install Unzip the standalone compiler into a directory and optionally add the bin directory to the system path. The bin directory contains the scripts needed to compile and run Kotlin on Windows, OS X and Linux. SDKMAN! An easier way to install Kotlin on UNIX based systems such as OS X, Linux, Cygwin, FreeBSD and Solaris is by using SDKMAN!. Simply run the following in a terminal and follow any instructions: $ curl -s https://get.sdkman.io | bash Next open a new terminal and install Kotlin with: $ sdk install kotlin Homebrew Alternatively, on OS X you can install the compiler via Homebrew. $ brew update $ brew install kotlin MacPorts If you're a MacPorts user, you can install the compiler with: $ sudo port install kotlin Creating and running a first application Create a simple application in Kotlin that displays Hello, World!. Using our favorite editor, we create a new file called hello.kt with the following: fun main(args: Array<String>) { println("Hello, World!") } Compile the application using the Kotlin compiler $ kotlinc hello.kt -include-runtime -d hello.jar The -d option indicates what we want the output of the compiler to be called and may be either a directory name for class files or a .jar file name. The -include-runtime option makes the resulting .jar file self-contained and runnable by including the Kotlin runtime library in it. If you want to see all available options run $ kotlinc -help Run the application. $ java -jar hello.jar Compiling a library If you're developing a library to be used by other Kotlin applications, you can produce the .jar file without including the Kotlin runtime into it. $ kotlinc hello.kt -d hello.jar Since binaries compiled this way depend on the Kotlin runtime you should make sure the latter is present in the classpath whenever your compiled library is used. You can also use the kotlin script to run binaries produced by the Kotlin compiler: $ kotlin -classpath hello.jar HelloKt HelloKt is the main class name that the Kotlin compiler generates for the file named hello.kt. Running the REPL We can run the compiler without parameters to have an interactive shell. We can type any valid Kotlin code and see the results. ![]({{ url_for('tutorial_img', filename='command-line/kotlin_shell.png')}}) Using the command line to run scripts Kotlin can also be used as a scripting language. A script is a Kotlin source file (.kts) with top level executable code. import java.io.File val folders = File(args[0]).listFiles { file -> file.isDirectory() } folders?.forEach { folder -> println(folder) } To run a script, we just pass the -script option to the compiler with the corresponding script file. $ kotlinc -script list_folders.kts <path_to_folder_to_inspect> 使用 Intelli IDEA开发Kotlin程序 Kotlin是JVM上的语言,运行环境需要JDK环境。如果我们学习Kotlin,就不建议使用eclipse了。毕竟Kotlin是JetBrains家族的亲儿子,跟Intelli IDEA是血浓于水啊。 我们使用IDEA新建gradle项目,选择Java,Kotlin(Java)框架支持,如下图: 新建完项目,我们写一个HelloWorld.kt类 package com.easy.kotlin /** * Created by jack on 2017/5/29. */ import java.util.Date import java.text.SimpleDateFormat fun main(args: Array<String>) { println("Hello, world!") println(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())) } 整体的项目目录结构如下 . ├── README.md ├── build │ ├── classes │ │ └── main │ │ ├── META-INF │ │ │ └── easykotlin_main.kotlin_module │ │ └── com │ │ └── easy │ │ └── kotlin │ │ └── HelloWorldKt.class │ └── kotlin-build │ └── caches │ └── version.txt ├── build.gradle ├── settings.gradle └── src ├── main │ ├── java │ ├── kotlin │ │ └── com │ │ └── easy │ │ └── kotlin │ │ └── HelloWorld.kt │ └── resources └── test ├── java ├── kotlin └── resources 21 directories, 7 files 直接运行HelloWorld.kt,输出结果如下 Hello, world! 2017-05-29 01:15:30 关于工程的编译、构建、运行,是由gradle协同kotlin-gradle-plugin,在kotlin-stdlib-jre8,kotlin-stdlib核心依赖下完成的。build.gradle配置文件如下: group 'com.easy.kotlin' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.1.1' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'java' apply plugin: 'kotlin' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" testCompile group: 'junit', name: 'junit', version: '4.12' } 工程源码地址:https://github.com/EasyKotlin/easykotlin/tree/easykotlin_hello_world_20170529 使用Android Studio开发 Kotlin Android应用 2017谷歌I/O大会:宣布 Kotlin 成 Android 开发一级语言。 2017谷歌I/O大会上,谷歌宣布,将Kotlin语言作为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,与Java100%互通,并具备诸多Java尚不支持的新特性。谷歌称还将与JetBrains公司合作,为Kotlin设立一个非盈利基金会。 JetBrains在2010年首次推出Kotlin编程语言,并在次年将之开源。下一版的AndroidStudio(3.0)也将提供支持。 下面我们简要介绍如何在Android上开始一个Kotlin的HelloWorld程序。 对于我们程序员来说,我们正处于一个美好的时代。得益于互联网的发展、工具的进步,我们现在学习一门新技术的成本和难度都比过去低了很多。 假设你之前没有使用过Kotlin,那么从头开始写一个HelloWorld的app也只需要这么几步: 1.首先,你要有一个Android Studio。 本书中,笔者用的是2.2.3版本,其它版本应该也大同小异。 Android Studio 2.3.1 Build #AI-162.3871768, built on April 1, 2017 JRE: 1.8.0_112-release-b06 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o 2.其次,安装一个Kotlin的插件。 依次打开:Android Studio > Preferences > Plugins, 然后选择『Browse repositories』,在搜索框中搜索Kotlin,结果列表中的『Kotlin』插件,如下图 点击安装,安装完成之后,重启Android Studio。 3.新建一个Android项目 重新打开Android Studio,新建一个Android项目吧,添加一个默认的MainActivity——像以前一样即可。 4.Java to Kotlin 安装完插件的AndroidStudio现在已经拥有开发Kotlin的功能。我们先来尝试它的转换功能:Java -> Kotlin,可以把现有的java文件翻译成Kotlin文件。 打开MainActivity文件,在Code菜单下面可以看到一个新的功能:Convert Java File to Kotlin File。 点击转换, 可以看到转换后的Kotlin文件:MainActivity.kt package com.kotlin.easy.kotlinandroid import android.support.v7.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } } 这个转换功能,对我们Java程序员在学习Kotlin是十分实用。我们可以基于我们之前的Java编码的经验来迅速学习Kotlin编程。 5.配置gradle文件 MainActivity已经被转换成了Kotlin实现,但是项目目前gradle编译、构建、运行还不能执行,还需要进一步配置一下,让项目支持grade的编译、运行。当然,这一步也不需要我们做太多工作——IDEA都已经帮我们做好了。 在Java代码转换成Kotlin代码之后,打开MainActivity.kt文件,编译器会提示"Kotlin not configured",点击一下Configure按钮,IDEA就会自动帮我们把配置文件写好了。 我们可以看出,主要的依赖项是: kotlin-gradle-plugin plugin: 'kotlin-android' kotlin-stdlib-jre7 完整的配置文件如下: Project build.gradle // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.2-4' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } Module build.gradle apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.kotlin.easy.kotlinandroid" minSdkVersion 14 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" } repositories { mavenCentral() } 所以说使用IDEA来写Kotlin代码,这工具的完美集成会让你用起来如丝般润滑。毕竟Kotlin的亲爸爸JetBrains是专门做工具的,而且Intelli IDEA又是那么敏捷、智能。 配置之后,等Gradle Sync完成,即可运行。 6.运行 运行结果如下 工程源码:https://github.com/EasyKotlin/KotlinAndroid 参考资料 1.https://www.kotliner.cn/2017/03/13/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B%20Kotlin%2011%E6%8B%9B/

优秀的个人博客,低调大师

第三章 Java的基础程序设计结构

一个简单的 Java 应用程序 访问修饰符 public,private,protected main 方法必须时public修饰的,C#则不必须 数据类型 可以用16进制表示浮点数 可以用2,8,16进制表示整数 Double.POSITIVE_INFINITY,Double.NEGATIVE_INFINITY,DOUBLE.NaN 分别表示正无穷,负无穷,不是数值; if(x==Double.NaN) 永不成立,可以使用Double.isNaN(x)判断 强烈建议不要在程序中使用char,除非必须,可以使用String替代 运算符 整数被0除会抛出异常,浮点数则会得到无穷大或NaN结果 最初的JVM计算浮点时规定必须截断,这样在不同类型机器上可以得到一致的结果,但后来这点被修改, JVM设计者允许中间结果采用扩展的精度. 但是经过strictfp修饰的方法/类必须截断. 使用strictfp的方式可能产生溢出, 但不属于什么大问题. Math.floorMod 是为了解决有关整数余数的问题,即计算机设计中负数的余数为负数导致的不方便 StrictMath类能提供比Math更精确,更可预测的结果 int x; x+=3.5; 是合法的,结果为(int)(x+3.5) 字符串 StringBuilder 和 StringBuffer 的API是一样的, 不同的是StringBuffer是线程安全的,但使用StringBuilder效率较高; 流程控制语句 for中检测两个浮点数需要格外小心,for ( double x = 0 ; x ! = 10 ; x + = 0.1 ) 可能永远不会结束, 因为0.1不能精确用二进制表示 Java允许有标签的break语句,对嵌套循环的跳出到开头可以使用此类语句 数组 Arrays.copyOf()方法用于数组拷贝,将原数组的每个元素拷贝到新数组中去,通常用于数组扩容

优秀的个人博客,低调大师

C++程序设计基础(3)条件语句和循环语句

注:读《程序员面试笔记》笔记总结 1.知识点 1.1条件语句 (1)if……;(2)if……else……;(3)if……else if……;(4)switch(){case ():break;case():break;default:}。 关于switch的两点说明,第一是case后面结束后必须加break,否则将在执行某个case之后的所有case语句都会执行,第二是default可以省略。 1.2循环语句 (1)for(init;condition of continue circular;variables update);(2)while(condition)。 关于while的一点说明:当while(1)时一般在内部会有break来终止程序结束,否则进入死循环。 2.面试题 2.1.不使用break的switch语句 公司年底给员工发一条关于年终奖的短信,奖品根据员工年度绩效考评结果而定,具体见下表,请编写一个函数,输入为员工年度考评的结果,输出为短信的内容,短信中需要罗列员工所获得的所有奖品。 考评结果 年终奖品 优秀 A 美国 或英国十日游,五千元超市卡,两千元亚马逊卡,一个月奖金 良好B 五千元超市卡,两千元亚马逊卡,一个月奖金 及格C 两千元亚马逊卡,一个月奖金 未达标D 一个月奖金 1 string getMessage(char mark) { 2 string message = ""; 3 switch (mark) { 4 case 'A'://注意此处使用单引号表示字符,双引号表示字符串 5 message.append("美国或英国十日游,"); 6 case 'B': 7 message.append("五千元超市卡,"); 8 case 'C': 9 message.append("两千元亚马逊卡,"); 10 case 'D': 11 message.append("一个月奖金"); 12 default: 13 break; 14 } 15 return message; 16 } 17 //注意#include<string>来重载cout,才能够输出string类型的数据 2.2.for循环的三要素 写出下面程序的输出结果: 1 bool foo(char c) { 2 cout << c; 3 return true; 4 } 5 int main(int argc, char *argv[]) { 6 int i = 0; 7 for (foo('A'); foo('B') && (i++ < 2); foo('C')) { 8 foo('D'); 9 } 10 getchar(); 11 return 0; 12 } 答案:ABDCBDCB 2.3巧打乘法口诀表 编写一个函数,接受一个整形参数n表示输出的规模。要求只用一重循环输出乘法口诀表的全部内容,并且程序中不能使用任何条件语句。 1 void print(int n) { 2 int row = 1, column = 1; 3 char flag[] = " \n";//当列数等于行数时为flag[1]换行 4 while (row<=n) 5 { 6 cout << row << " * " << column << " = " << row * column << flag[column / row]; 7 int tem = column % row + 1;//当列数等于行数时,tem跳回1 8 row = column / row + row;//当列数等于行数时,行数加一 9 column = tem; 10 } 11 } 总结:(1)列号的变化规律符合取模运算,这种不断回到起点的数字排列特征符合取模运算的性质; 下一项列号=当前列号%当前行号+1 (2)对于行号来说,当列号等于行号时,行号加1,当列号等于行号时,行号不变。行号的变化规律符合整数除法的性质,当被除数小于除数时结果为零,当二者相等时结果为1。 下一项行号=当前列号/当前行号+1

优秀的个人博客,低调大师

C++程序设计基础(1)程序的编译和执行

注:读《程序员面试笔记》笔记总结 1.编译执行过程 1.1预处理: (1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif),#other(其他宏指令) (2)处理预定义的宏:例如__DATA__,__FILE__(前后都是两个下划线) (3)用一个空格代替连续的注释 (4)处理三元符:例如将??=替换成#(针对很古老的键盘,现在一般较少出现) 1.2编译: 对预处理后的代码进行词法、语法、语义分析,生成汇编代码(.s) 1.3汇编: 将汇编代码生成机器指令,生成目标文件(.o) 1.4链接: 和其他的目标文件以及库文件生成可执行程序 2.面试题 2.1简述#include<>和#include" "的区别 答案:#include直接从编译器指定的路径进行搜索,找不到则报错; #include“ ”则先从程序所做目录进行搜索,然后再到编译器指定路径进行搜索,(自定义的此种方式合适),搜索不到报错。 2.2简述#和##在define中的作用 答案:宏定义中的#运算符将其后面的参数转换成字符串; 宏定义中的##运算符将其前后的参数进行字符串连接。 1 #define PRINTCUBE(x) cout<<"cube("<<#x<<")="<<(x)*(x)*(x)<<endl; 2 3 PRINTCUBE(5); 4 5 //output: 6 //cube(5)=125 7 8 #define LINK3(x,y,z) x##y##z 9 10 LINK3(3,5,0) 11 12 //output: 13 //"350" 2.3简述assert断言的概念 答案:assert用于程序的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序。 注意点:(1)assert是一个带参数的宏,不是一个函数; (2)在#include语句前加入#define NDEBUG则禁用assert宏(即含有assert的语句都会被忽略); (3)在RELEASE中assert会被忽略(即含有assert的语句都会被忽略); (4)一个assert最好只有一个条件判断语句; 1 //修改前 2 assert(grade>0 && grade<=6); 3 //修改后 4 assert(grade>0); 5 assert(grade<=6); (5)在assert中不要去修改变量的值,否则在RELEASE中被忽略掉,造成结果不同; 1 //修改前 2 assert(success++>60); 3 //修改后 4 assert(success>60); 5 success++; (6)对用户的参数输入判断时,使用if语句来参数合法性检测,不要用assert。

优秀的个人博客,低调大师

Python程序设计思维练习---股票数据定向爬虫

本次练习是一个定向爬虫,爬取股票的相关数据,用到beautifulsoup,re,requests等库。 爬前分析:先分析比较不同网站提供的股票数据,在这里比较的是新浪股票和百度股票。因为百度股票的相关数据直接在html页面中爬取相对方便,而新浪股票的数据是通过js来传递的,获取比较麻烦,所以选择百度股票作为数据来源。 爬取流程:通过东方财富网得到上交所和深交所的所有股票代码,将股票代码依次导入百度股票的url中,即可访问各股的数据,再来分析百度股票的HTML页面爬取相关数据。 工具环境:python3.6.5,pycharm,win10。 图片来自拍信 0.网页分析 想必大家应该不是第一次爬取数据了,对于F12开发者工具有了一定了解,所以这里就不再赘述了。对于数据来源,别执着于一个网站,可以多分析几个网站来选择相对爬取简单的网站来进行数据的爬取。 1.流程分析 东方财富网源代码 百度股票的URL: http://gupiao.baidu.com/stock/sh502036.html 分析可得:只需将东方财富网中的 .html前的股票代码提取出来并加入到 https://gupiao.baidu.com/stock/的后面,便可以得到所有股票源数据。 百度股票源代码数据部分 2.函数设定 依据流程设定函数 3.完整代码 import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url, code="utf-8"): try: r = requests.get(url) r.raise_for_status() r.encoding = code return r.text except: return "" def getStockList(lst, stockURL): html = getHTMLText(stockURL, "GB2312") soup = BeautifulSoup(html, 'html.parser') a = soup.find_all('a') for i in a: try: href = i.attrs['href'] lst.append(re.findall(r"[s][hz]\d{6}", href)[0]) # 匹配类似sh000001的股票代码 except: continue def getStockInfo(lst, stockURL, fpath): count = 0 for stock in lst: url = stockURL + stock + ".html" html = getHTMLText(url) try: if html=="": continue infoDict = {} soup = BeautifulSoup(html, 'html.parser') stockInfo = soup.find('div',attrs={'class':'stock-bets'}) name = stockInfo.find_all(attrs={'class':'bets-name'})[0] infoDict.update({'股票名称': name.text.split()[0]}) keyList = stockInfo.find_all('dt') valueList = stockInfo.find_all('dd') for i in range(len(keyList)): key = keyList[i].text val = valueList[i].text infoDict[key] = val with open(fpath, 'a', encoding='utf-8') as f: f.write( str(infoDict) + '\n' ) count = count + 1 print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="") # \r:能让输出比例时不自动换行 except: count = count + 1 print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="") continue def main(): stock_list_url = 'http://quote.eastmoney.com/stocklist.html' stock_info_url = 'https://gupiao.baidu.com/stock/' output_file = 'D:/BaiduStockInfo.txt' slist=[] getStockList(slist, stock_list_url) getStockInfo(slist, stock_info_url, output_file) main() 运行 本练习来自中国大学MOOC

优秀的个人博客,低调大师

SQL Server 审核(Audit)-- 审核与应用程序设计架构

审核是在数据库服务器端进行监控日志,搭配应用程序的设计架构,例如客户端-服务器架构(Client-Server)、多层次架构(Multi-Tier)等。虽然使用“审核”可记录登录账户是来自哪一台工作主机的IP地址,但比较适合客户端-服务器架构环境。 “客户端-服务器架构”可以记录到各个客户端主机的IP地址 “多层次架构”记录到WebServer的IP地址 所以,在多层次架构上,若需要对客户端进行安全审核,可能需要自行利用前端应用程序,将客户端主机的IP地址等数据存放到数据库内。 在前端应用程序的设计上,有其用户账号与权限管理机制,一般分配数据库级别的可读写权限,以单一SQL Server登录账户方式,访问数据库服务器。这样的设计架构会造成“审核”在记录数据上的盲点,因为“审核”能记录到登录账户或是客户端主机的IP地址,但无法得知是何人执行应用程序。 l 基本上,设置在数据库系统上的安全监控工具,可能都会有前述的盲点,无从得知是哪一位客户访问过指定的对象。 l 由上述的应用程序架构来看,若需要记录是哪一位用户访问数据表,请自行在前端应用程序内设计合适的记录方式。 本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1595730 ,如需转载请自行联系原作者

优秀的个人博客,低调大师

《Android程序设计》一第1章-1.0 工具包

第1章-1.0 工具包 本章介绍Android软件开发工具包(SDK)及一些可能用到的相关软件的安装方法。最后,我们将可以在一个模拟器上运行简单的“Hello World”程序。在Windows、Mac OS X和Linux这几个系统上都可以进行Android应用开发。下面将载入该软件,介绍SDK中的工具并对示例源代码进行说明。本书(尤其是本章)将介绍各个网站提供的用于创建Android应用的工具的安装和更新说明。寻找相关工具的信息和链接最重要的地方是Android开发者网站.尽管各个环节的细节说明会有一定差异,但这里主要是展示整个安装的过程,并对Android的各个部分及其开发工具进行介绍说明。本书中给出的链接可能会发生变化。在本书的网站上提供了这些链接的说明和更新信息。在本书的目录页中可以找到这些网站链接。在阅读本书时,同时也

优秀的个人博客,低调大师

《Android程序设计》一3.9 把软件移植到Android中

3.9 把软件移植到Android中 在这一章,我们了解到的Android应用架构和传统的桌面应用架构有很大区别,甚至和大多数其他小型设备上的系统也很不一样,包括iPhone、iPod Touch和iPad所使用的iOS操作系统。如果想实现Objective-C、C++或C#这些不同语言上方法之间的转换,打算通过破坏Android应用架构并强制在Android应用中使用传统的应用架构的方式来移植软件,那么结果可能会很悲剧。如果你想把现有的软件移植到Android系统中,首先要对该软件进行分解:数据模型、用户界面、主要的非交互式模块和库。这些模块和库到底是移植到Android应用模型中,还是对它们进行重新实现,这要根据具体情况来处理。Android确实和其他现代的可管理的应用运行环境及语言系统有相似之处。一旦对Android有了更深的

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册