微信小程序开发系列二:微信小程序的视图设计
大家如果跟着我第一篇文章 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 一起动手,那么微信小程序的开发环境一定搭好了。效果就是能把该小程序的体验版以二维码的方式发送给其他朋友使用。这个系列接下来的文章我们就来研究使用微信开发者工具自动生成的这个小程序的实现文件。本文以小程序的视图设计为主,就是下图所示pages/index目录里的index.wxml文件。我的日常工作
HTTP 200 OK和HTTP 304 Not modified的由来
这两个字段都和HTTP协议的缓存控制相关。浏览器缓存机制是通过HTTP协议Header里的Cache-Control(或Expires)和Last-Modified(或 Etag)等字段来实现。这两个字段的作用:1. 接收响应时,浏览器决定文件是否需要被缓存;2. 需要加载文件时,浏览器决定是否需要发出请求的字段。看一些例子:Cache-Control:max-age=115360000,表示缓存
机器学习在客户管理场景中的应用
使用机器学习进行客户管理,我们可以得到客户360度全方位的视图。本文以SAP Cloud for Customer的客户管理应用为例,介绍机器学习是如何同传统的客户管理应用进行集成的。打开SAP C4C的客户中心,在客户列表里选中任意一个客户,能在右边看到一个名为Insights的页面。这些客户的360度视图是基于C4C内部和外部的数据源分析得出的,有助于销售人员进行更有针对性的客户计划和销售。C
聊聊JavaScript和Scala的表达式 Expression
我们先看下面这段简单的JavaScript代码。我在第10行调用了函数f,其中传入的第二个和第三个参数都是一个逗号表达式。函数f的实现,会检查这两个参数的类型,如果是函数,则执行函数调用,再打印其返回值,否则直接打印传入的表达式的值。执行上面这段代码,打印输出如下:我们可以看出,虽然传入的第一个参数为true,导致函数f内部只会打印第二个参数y代表的表达式的值,5,但是第三个参数代表的表达式在函数
Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
文章的标题看似自相矛盾,然而我在“正确”二字上打了引号。我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点。看下面这段程序。方法pleaseThrow接受一个Exception的实例,然后简单地将该实例抛出。然后调用这个方法时,我传入了一个SQLException的实例。因为pleaseThrow的调用包裹在一个try catch块里,问题:plesseTh
如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)
在JavaScript里可以用ES6提供的FunctionGenerator这种黑科技来打印非波拉契数列,具体细节参考我这篇文章。在ABAP里也有很多种方式实现这个需求。下面这个report分别用递归和ABAP internal table的方式实现了非波拉契数列的打印。REPORT Z_FIBO. PARAMETERS: N type i, v
使用JavaScript ES6的新特性计算Fibonacci(非波拉契数列)
程序员面试系列Java面试系列-webapp文件夹和WebContent文件夹的区别?程序员面试系列:Spring MVC能响应HTTP请求的原因?Java程序员面试系列-什么是Java Marker Interface(标记接口)使用JDK自带的工具jstack找出造成运行程序死锁的原因编程面试题:编写一个会造成数据库死锁的应用JavaScript面试系列:JavaScript设计模式之桥接模式
深入理解Java的整型类型:如何实现2+2=5?
先看下这段神奇的Java代码:public static void main(String[] args) throws Exception { doSomethingMagic();
JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
我写的程序员面试系列文章Java面试系列-webapp文件夹和WebContent文件夹的区别?程序员面试系列:Spring MVC能响应HTTP请求的原因?Java程序员面试系列-什么是Java Marker Interface(标记接口)使用JDK自带的工具jstack找出造成运行程序死锁的原因编程面试题:编写一个会造成数据库死锁的应用JavaScript面试系列:JavaScript设计模式
Cordova应用的JavaScript代码和自定义插件代码的调试
我之前写过三篇Cordova相关的技术文章。当我们使用Cordova将自己开发的前端应用打包安装到手机上后,可能会遇到需要调试Cordova应用的时候。本文就介绍Cordova应用的调试步骤。如果大家读过之前我写的文章,就知道Cordova应用在移动平台上运行时,实际上Cordova包内的前端应用的HTML/JavaScript代码仍然运行在一个嵌入的Webview里。同时Cordova也允许开发
编程面试题:编写一个会造成数据库死锁的应用
相信对于"开发一个会产生死锁的Java应用”这类需求,大家都能顺利完成。但是如果题目要求得更具体一些,要求这个死锁发生在数据库层面,应该怎样完成呢?下面我提供一种答案,采用SAP的编程语言ABAP(Advanced Business Application Programming)实现。我们从ABAP帮助文档中得知,SELECT SINGLE FOR UPDATE在从数据库读取一条记录时
使用JDK自带的工具jstack找出造成运行程序死锁的原因
Java多线程编程也是Java面试中经常考察的内容。刚接触Java多线程编程的朋友们,可能会不慎写出一些会导致死锁(deadlock)的应用出来。如何分析造成Java多线程的原因呢?很多时候我们在怀疑造成死锁的语句设置断点,单步调试,反而又不能重现了。这种现象很正常,因为咱们单步调试和直接运行程序,代码执行的时序是不同的,很可能无法满足死锁的触发条件。实际上,JDK已经给Java程序员提供了强大的
npm scripts的生命周期管理
我们平时阅读一些开源项目,可能会发现有些项目的package.json里的scripts区域定义的脚本很复杂,令人眼花缭乱。其实这些脚本是有规律可循的。让我们从最简单的一个例子开始学习。新建一个空文件夹,执行命令npm init,会自动在该文件夹下生成一个package.json。这个init其实是一个向导,会针对package.json里待生成的每一个字段询问您想填什么值。一路回车,使用默认值即
Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理
面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问“茴香豆的茴字有哪几种写法?”所谓代理模式,是指客户端(Client)并不直接调用实际的对象(下图右下角的RealSubject),而是通过调用代理(Proxy),来间接的调用实际的对象。代理模式的使用场合,一般是由于客户端不想直接访问实际对象,或者访问实际的对象存在技术上的障碍,
什么是Java Marker Interface(标记接口)
先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法。在Java里很容易找到标记接口的例子,比如JDK里的Serializable接口就是一个标记接口。首先明确一点,Marker Interface(标记接口)决不是Java这门编程语言特有的,而是计算机科学中一种通用的设计理念。我们看Wikipedia里对标记接口的定义。“The tag/ marke
Spring MVC能响应HTTP请求的原因?
很多Java面试官喜欢问这个问题:一个Spring MVC的项目文件里,开发人员没有开发自己的Servlet,只通过注解@RequestMapping定义了方法home能响应发向 /mvc/test1的请求。使用url http://localhost:9098/MavenSandbox/mvc/test1 测试,能观察到home方法返回的字符串,这背后的工作原理是什么?我们通
使用JavaScript调用手机平台上的原生API
我之前曾经写过一篇文章使用Cordova将您的前端JavaScript应用打包成手机原生应用,介绍了如何使用Cordova框架将您的用JavaScript和HTML开发的前端应用打包成某个手机平台(比如Android,iOS)的原生应用。那么,您也许会有一些需求,需要在您的前端应用里使用到手机平台的一些原生API,比如使用手机Mobile操作系统提供的传感器(Sensor)。这些任务是JavaSc
使用Cordova将您的前端JavaScript应用打包成手机原生应用
假设我用JavaScript和HTML开发了一个前端应用,我想把该应用打包成能直接在手机上安装和运行(不通过浏览器)的原生应用,例如像下面这样。对应用的用户来说,他们得到的用户体验和真正的用Android Studio或者XCode开发的原生应用完全一致。这是怎么做到的?答案是使用Apache的开源框架,Cordova。以Android框架为例,Cordova能将您的前端应用里的JavaScrip
使用javap分析Java的字符串操作
我们看这样一行简单的字符串赋值操作的Java代码。String a = "i042416";使用命令行将包含了这行代码的Java类反编译查看其字节码:javap -v constant.ConstantFolding我们看到字符串 "i042416" 被Java编译器加到了常量池里。Java代码 String a = "i042416"被
使用javap深入理解Java整型常量和整型变量的区别
我下图代码第五行和第九行分别定义了一个整型变量和一个整型常量:static final int number1 = 512;static int number3 = 545;Java程序员都知道两者的区别。下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。使用命令行javap -c constant.ConstantFolding查看.class文件