jQuery–检查jquery的版本

想要查看jquery版本号,可以利用jquery属性;jquery属性用于返回jquery版本号。通过想要两种方法来查看jquery版本号

方法1:使用$().jquery

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>	<script> 
	    $(document).ready(function() { 
	            alert("运行的jquery版本是:" + $().jquery); 
	       
	    }); 
	</script>

方法2:使用$.fn.jquery

.jquery 属性是通过 jQuery 原型赋值的,通过使用它的别名 $.fn 进行引用。它是一个含有 jQuery 版本号的字符串,例如 “1.5.0” 或 “1.4.4”.

示例:取得页面上当前使用的 jQuery 的版本号

<script src="https://code.jquery.com/jquery-3.3.1.min.js"> </script>	<script> 
	    $(document).ready(function() { 
	            alert("正在运行的jquery版本:" + $.fn.jquery); 
	       
	    }); 
	</script>

方法3:在jQuery的源代码中查找有关版本好的信息

ZenCart-$db查询之后的数据结构

代码如下

D:\wamp\www\ZenCart\includes\functions\extra_functions\functions_vtscommon.php:56:
class queryFactoryResult#69 (10) {
  public $EOF =>bool(false)
  public $cursor => int(0)
  public $fields =>
  array(8) {
    'products_id' =>
    string(1) "1"
    'products_image' =>
    string(37) "20180420-RB/201804201144211220111.jpg"
    'products_tax_class_id' =>
    string(1) "0"
    'products_name' =>
    string(37) "Ray-Ban Aviator Classic Gold , RB3025"
    'products_date_added' =>
    string(19) "2019-04-24 12:32:17"
    'products_price' =>
    string(8) "203.0000"
    'products_type' =>
    string(1) "1"
    'master_categories_id' =>
    string(1) "1"
  }
  public $is_cached =>
  bool(true)
  public $result =>
  array(6) {
    [0] =>
    array(8) {
      'products_id' =>
      string(1) "1"
      'products_image' =>
      string(37) "20180420-RB/201804201144211220111.jpg"
      'products_tax_class_id' =>
      string(1) "0"
      'products_name' =>
      string(37) "Ray-Ban Aviator Classic Gold , RB3025"
      'products_date_added' =>
      string(19) "2019-04-24 12:32:17"
      'products_price' =>
      string(8) "203.0000"
      'products_type' =>
      string(1) "1"
      'master_categories_id' =>
      string(1) "1"
    }
    [1] =>
    array(8) {
      'products_id' =>
      string(1) "2"
      'products_image' =>
      string(36) "20180420-RB/20180420114420205068.jpg"
      'products_tax_class_id' =>
      string(1) "0"
      'products_name' =>
      string(38) "Ray-Ban Aviator Gradient Gold , RB3025"
      'products_date_added' =>
      string(19) "2019-04-24 12:32:17"
      'products_price' =>
      string(8) "168.0000"
      'products_type' =>
      string(1) "1"
      'master_categories_id' =>
      string(1) "1"
    }
    [2] =>
    array(8) {
      'products_id' =>
      string(1) "3"
      'products_image' =>
      string(36) "20180420-RB/20180420114420901099.jpg"
      'products_tax_class_id' =>
      string(1) "0"
      'products_name' =>
      string(38) "Ray-Ban Aviator Evolve Silver , RB3025"
      'products_date_added' =>
      string(19) "2019-04-24 12:32:17"
      'products_price' =>
      string(8) "183.0000"
      'products_type' =>
      string(1) "1"
      'master_categories_id' =>
      string(1) "1"
    }
    [3] =>
    array(8) {
      'products_id' =>
      string(1) "4"
      'products_image' =>
      string(36) "20180420-RB/20180420114419796045.jpg"
      'products_tax_class_id' =>
      string(1) "0"
      'products_name' =>
      string(33) "Ray-Ban Outdoorsman Gold , RB3030"
      'products_date_added' =>
      string(19) "2019-04-24 12:32:17"
      'products_price' =>
      string(8) "153.0000"
      'products_type' =>
      string(1) "1"
      'master_categories_id' =>
      string(1) "1"
    }
    [4] =>
    array(8) {
      'products_id' =>
      string(1) "5"
      'products_image' =>
      string(37) "20180420-RB/201804201144215330131.jpg"
      'products_tax_class_id' =>
      string(1) "0"
      'products_name' =>
      string(58) "Ray-Ban Outdoorsman Craft Gold ,Polarized Lenses - RB3422Q"
      'products_date_added' =>
      string(19) "2019-04-24 12:32:17"
      'products_price' =>
      string(8) "243.0000"
      'products_type' =>
      string(1) "1"
      'master_categories_id' =>
      string(1) "1"
    }
    [5] =>
    array(8) {
      'products_id' =>
      string(1) "6"
      'products_image' =>
      string(37) "20180420-RB/201804201144210790109.jpg"
      'products_tax_class_id' =>
      string(1) "0"
      'products_name' =>
      string(41) "Ray-Ban Outdoorsman Craft Black , RB3422Q"
      'products_date_added' =>
      string(19) "2019-04-24 12:32:17"
      'products_price' =>
      string(8) "193.0000"
      'products_type' =>
      string(1) "1"
      'master_categories_id' =>
      string(1) "1"
    }
  }
  public $result_random =>
  NULL
  public $limit =>
  int(6)
  public $resource =>
  class mysqli_result#70 (5) {
    public $current_field =>
    int(0)
    public $field_count =>
    int(8)
    public $lengths =>
    array(8) {
      [0] =>
      int(1)
      [1] =>
      int(37)
      [2] =>
      int(1)
      [3] =>
      int(41)
      [4] =>
      int(19)
      [5] =>
      int(8)
      [6] =>
      int(1)
      [7] =>
      int(1)
    }
    public $num_rows =>
    int(6)
    public $type =>
    int(0)
  }
  public $link =>
  class mysqli#7 (19) {
    public $affected_rows =>
    int(6)
    public $client_info =>
    string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $"
    public $client_version =>
    int(50011)
    public $connect_errno =>
    int(0)
    public $connect_error =>
    NULL
    public $errno =>
    int(0)
    public $error =>
    string(0) ""
    public $error_list =>
    array(0) {
    }
    public $field_count =>
    int(8)
    public $host_info =>
    string(20) "localhost via TCP/IP"
    public $info =>
    NULL
    public $insert_id =>
    int(0)
    public $server_info =>
    string(6) "5.7.19"
    public $server_version =>
    int(50719)
    public $stat =>
    string(135) "Uptime: 1598  Threads: 1  Questions: 604  Slow queries: 0  Opens: 388  Flush tables: 1  Open tables: 381  Queries per second avg: 0.377"
    public $sqlstate =>
    string(5) "00000"
    public $protocol_version =>
    int(10)
    public $thread_id =>
    int(12)
    public $warning_count =>
    int(0)
  }
  public $sql_query =>
  string(512) "SELECT distinct p.products_id, p.products_image, p.products_tax_class_id, pd.products_name,
                           p.products_date_added, p.products_price, p.products_type, p.master_categories_id
                           from products p, products_description pd 
                           where p.products_id = pd.products_id 
                           and pd.language_id = '1' 
                           and p.products_status = 1 and p.products_custom_attributes = 1 order by pd.products_id asc LIMIT 6"
}

ZenCart-memcached使用笔记-配合PHP使用

启动
启动失败原因
需要以管理员的身份运行cmd
C:\memcached-amd64\memcached.exe -m 1024

512表示512M,1024表示1G

配置PHP扩展
使用x86版本哦
D:\wamp\bin\php\php5.6.31\ext\php_memcache.dll

Telnet操作使用因为输入法

C:\memcached-amd64\memcached.exe -d install
C:\memcached-amd64\memcached.exe -d start

命令
stats

ZenCart–覆盖系统 在ZenCart中可以被覆盖重写的地方有哪些?

在ZenCart中可以被覆盖重写的地方有

语言模块

第一处 如果修改english.php的文件
includes/languages/english.php
includes/languages/CUSTOM/english.php

第二处
includes/languages/english/*.php
includes/languages/english/CUSTOM/*.php

第三处
includes/languages/english/html_includes/*.php includes/languages/english/html_includes/CUSTOM/*.php
includes/languages/english/html_includes/responsive_classic/*.php

第四处
includes/languages/english/extra_definitions/*.php
includes/languages/english/extra_definitions/responsive_classic/product_free_shipping.php

还有三个模块
includes/languages/english/modules/order_total
includes/languages/english/modules/payment
includes/languages/english/modules/shipping
以上几个地方 已经将语言部分完全重写了

仔细观察就可以发现,你想修改这些文件,你就需要单独建一个 你主题的文件夹,存放你重写覆盖的文件

模板模块的重写

includes/templates/template_default/templates/*.php
includes/templates/CUSTOM/templates/*.php

includes/modules/sideboxes/*.php
includes/modules/sideboxes/CUSTOM/*.php

includes/modules/*.php
includes/modules/responsive_classic/*.php

以上只是列出了一些,仔细观察,在ZenCart中如果找到带有classic的就表示可以重写

ZenCart-开启关闭gzip,响应头对比,有什么变化

开启Gizip,响应头如下

HTTP/1.1 200 OK
Date: Wed, 25 Dec 2019 02:22:38 GMT
Server: Apache/2.4.41 (Win64) PHP/7.3.12
X-Powered-By: PHP/7.3.12
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 508
Keep-Alive: timeout=5, max=97
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8


$request_type:NONSSL<br />$PHP_SELF:/ZenCart156cDev/default.php<br />$extra_datafiles_directory:E:/wamp64/www/ZenCart156cDev/includes/extra_datafiles/<br />$ws_extra_datafiles_directory:includes/extra_datafiles/<br />Array
(
    [0] => includes/classes/observers/auto.downloads_via_aws.php
    [1] => includes/classes/observers/auto.downloads_via_redirect.php
    [2] => includes/classes/observers/auto.downloads_via_streaming.php
    [3] => includes/classes/observers/auto.downloads_via_url.php
)
<br />

注意:Vary: Accept-Encoding

关闭之后,响应头如下

HTTP/1.1 200 OK
Date: Wed, 25 Dec 2019 02:19:20 GMT
Server: Apache/2.4.41 (Win64) PHP/7.3.12
X-Powered-By: PHP/7.3.12
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 508
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8


$request_type:NONSSL<br />$PHP_SELF:/ZenCart156cDev/default.php<br />$extra_datafiles_directory:E:/wamp64/www/ZenCart156cDev/includes/extra_datafiles/<br />$ws_extra_datafiles_directory:includes/extra_datafiles/<br />Array
(
    [0] => includes/classes/observers/auto.downloads_via_aws.php
    [1] => includes/classes/observers/auto.downloads_via_redirect.php
    [2] => includes/classes/observers/auto.downloads_via_streaming.php
    [3] => includes/classes/observers/auto.downloads_via_url.php
)
<br />

ZenCart–采集数据处理流程

采集数据处理流程

web scraper采集字段定义如下:

web-scraper-order,
web-scraper-start-url,
items,
items-href,

pro_name,
pro_new_price,
pro_old_price,
pro_size,

pro_main-src,
pro_des,
pro_detail_img-src,

pro_class,
pro_class_01,
pro_class_02,
pro_class_03

采集下来的数据

命名成1.csv

输入3.2命令 —- 转成1.xls

打开1.xls,删除第一行;替换第二行的“-” 为“_”

输入3.1命令,合并详细图数据 1.xls 生产 1_new.xls

编辑 1_new.xls的数据

–直接生成zencart 的数据 三份

ZenCart156数据上传数据字段定义如下

"v_products_model",
"v_products_type",
"v_products_image",
"v_products_name_1",
"v_products_description_1",
"v_products_url_1",
"v_specials_price",
"v_specials_date_avail",
"v_specials_expires_date",
"v_products_price",
"v_products_weight",
"v_product_is_call",
"v_products_sort_order",
"v_products_quantity_order_min",
"v_products_quantity_order_units",
"v_products_priced_by_attribute",
"v_product_is_always_free_shipping",
"v_date_avail",
"v_date_added",
"v_products_quantity",
"v_manufacturers_name",
"v_categories_name_1",
"v_tax_class_title",
"v_status",
"v_metatags_products_name_status",
"v_metatags_title_status",
"v_metatags_model_status",
"v_metatags_price_status",
"v_metatags_title_tagline_status",
"v_metatags_title_1",
"v_metatags_keywords_1",
"v_metatags_description_1"


"v_products_model",
"v_folder_name",
"v_mainimg",
"v_detailimg",
"v_videosrc",
"v_ext1",
"v_ext2",
"v_ext3"

"v_products_model",
"v_products_options_type",
"v_products_options_name_1",
"v_products_options_values_name_1"

OT数据格式字段定义如下:

Seo标题
Seo关键字
Seo描述
一级分类
二级分类
三级分类
四级分类
产品ID
产品名字
产品原始价格
产品折扣
产品售价
产品型号
产品Sku
产品自定义属性
产品状态
产品排序
产品描述
图片文件夹
主图
详细图
产品相关ID

合并数据之后1_new.xls数据定义字段如下

web_scraper_order
web_scraper_start_url
items
items_href
pro_name
pro_new_price
pro_old_price
pro_size
pro_main_src
pro_des
pro_detail_img_src
pro_class
pro_class_01
pro_class_02
pro_class_03
pro_merge_images

C#-面向对象-OOP基础概念

1.方法的签名是指 ?
答:方法名和该方法的参数列表,类型,大小,位置。
 
2.请简述C#中结构与类的区别?
答:数据类型不同:结构是值类型,值类型在堆栈上分配地址,所有的基类型都是结构类型,类是引用类型,引用类型在堆上分配地址。
继承性:结构不能从另外一个结构或者类继承,本身也不能被继承,类完全可扩展的,除非显示的声明 sealed,否则类可以继承其他类和接口,自身也能被继承,虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
内部结构:结构没有默认的构造函数,但是可以添加构造函数 ,没有析构函数,没有 abstract 和 sealed(因为不能继承) ,不能有 protected 修饰符,可以不使用 new 初始化 ,在结构中初始化实例字段是错误的。类有默认的构造函数 ,有析构函数,可以使用 abstract 和 sealed,有 protected 修饰符,必须使用 new 初始化。
 
3 C#中类可以实现多继承吗?通过什么方式实现呢?
答:C#中类不能够多继承,必须通过接口实现。
 
4.继承是面向对象编程的一个重要的概念.请简述继承的概念和优点.
答:继承:一个类可以有能力直接从另一个类获得其代码和数据,派生类从基类那里获得其所有成员。
优点:使用继承无需从头开始创建新类,便可以在现有类的基础上添加新方法、属性和事件(事件是对用户操作)的响应。,既省时又省力。
 
5.说明base关键字、new关键字和override关键字各自的作用。
答:关键字base,用于派生类的构造函数显示调用基类构造函数。
new访问修饰符用于显示隐藏继承自基类的成员,即如果派生的类成员的名称与基类成员名称相同,new关键字会将派生类成员识别为一个全新的成员。
关键字override用于修改方法,具有override关键字修饰的方法是对基类中同名方法的新实现
 
6.override即 重写 是指重写基类的方法(方法的覆盖)。
 
7.override用来重写父类的方法,重载使用相同名的方法或操作符拥有不同类型的参数
 
8.关键字base 用于派生类的构造函数显示调用基类构造函数
 
9.一个类可以有能力直接从另一个类获得其代码和数据,派生类从基类那里获得其所有成员的是继承   。
 
10.调用基类构造函数,运用base关键字。
 
11.虚方法的关键字是virtual 。
 
12.C#提供virtual关键字,用于将方法定义为支持多态。
 
13.Override 关键字用于重写基类的虚拟方法。
 
14.面向对象的特征有封装 继承 多态.
 
15.抽象类的关键字是abstract
 
16.密封类的关键字是sealed。
 
17.抽象类的方法 可以 实现,接口的方法 必须 实现。
 
18.接口不能被实例化
 
19.类不可以多重继承 而接口可以
 
20.抽象类自身可以定义成员而接口不可以
 
21.一个类可以实现多个接口
 
22.虚方法 可以在派生类 重写,抽象方法 必须在每个非抽象的派生类中 重写。
 
23.如果Alpha类继承自BETA类,则Alpha类称为  派生类     ,BETA类称为   基类     。
 
24.有一个基类Person,一个接口Iteller。类Employee要同时继承类和接口,则其正确的写法应该是   public class Employee : Person,Itrller   
 
25.接口是一种引用类型,在接口中可以声明方法、属性、索引器和事件,但不可以声明公有的域或私有的成员变量。
 
26.Sealed修饰符是干什么的?
答:表示密封类,用于类时表明该类不能被继承,不能和abstract同时使用,因为这两个修饰符在含义上互相排斥,用于方法和属性时,表示该方法或属性不能再被继承,必须和override关键字一起使用,因为使用sealed修饰符的方法或属性肯定是基类中相应的虚成员
 
27.简述抽象类的定义以及在C#编程语言中,抽象类的作用是什么?
答: 有时,我们只需要继承某个特定类,但不需要实例化该类的对象。这样的类成为抽象基类。C#允许通过在类中添加abstract关键字来创建抽象基类。
   作用: 在抽象基类中,可以指定一个方法而不指定其代码主体。这意味着抽象基类保存着方法的定义,而方法的实际实现则写在派生类中
 
28.声明抽象方法注意一下几点?
答: 抽象基类除了抽象方法外,还可以包含已实现的方法。
    需要用abstract关键字来标识。
    的定义始终已分号结束。
 
29.要声明类或结构上的索引器,使用this关键字
 
30.属性是一个或两个代码,表示一个get访问器和/或一个set访问器。
 
31.属性的     set   访问器用于将值赋给类的私有实例变
 
32.简述属性的定义及其作用?
答:属性是一种用于访问对象或类的特性的成员,停供了数据的封装性和安全
性。
 
33.简述索引器的定义及其作用?
答:索引器是C#的简单组件,使用索引器,可以用索引数组的方式来索引对象,
索引器提供了与数组访问相类似的类成员访问方式。
 
34.简述索引器和属性之间的区别?
答:属性通过名称标识。索引器通过签名标识。    
    属性通过简单名称或成员访问来访问。索引器通过元素访问来访问。    
    属性可以为静态成员或实例成员。索引器必须为实例成员。    
    属性的get 访问器没有参数。 索引器的 get 访问器具有与索引器相同的形参
表。属性的 set 访问器包含隐式 value 参数。除了 value 参数外,索引器的 set
访问器还具有与索引器相同的形参表。
 
35.什么是迭代器,运用迭代器有什么好处。
答:迭代器是 C# 2.0 中的新功能。迭代器是方法、get 访问器或运算符,它使
能够在类或结构中支持 foreach 迭代,而不必实现整个 IEnumerable 接口。只
需提供一个迭代器,即可遍历类中的数据结构,它的优点就是可以是实现容器
类和自定义集合的循环。
 
36.委托的关键字是delegate 。
 
37.委托的参数和返回类型必须和调用函数一致
 
38.委托本身能够拥有一个签名 ,当它持有与它的签名  相匹配的方法的引用后,委托就可以和这个方法一样被调用
 
39.定义事件的关键字是event  。
 
40.定义一个多路委托有几个步骤
答: 定义一个委托类型
编写具有相同签名方法作为委托
创建委托对象,将它绑定到需要通过委托调用的第一个方法
创建另一个委托对象,绑定到下一个需要调用的方法
可用+,-,+=或-=操作符,合并成一个集成的多播委托
 
41.简述创建事件的过程
答:定义事件
给对象预订该事件
将该事件(当它发生时)通知订户
 
42.什么是多播委托?
答:多播委托也是一个委托,它可以调用多个方法,只要这些方法的签名与委托的定义相同。多播委托的概念是委托和事件编程之间的门槛,多播委托是通过对方法的委托进行组合而创建的。组合多个委托,可用+,-,+=或-=操作符。要让一个委托调用多个方法,可以用+或+=操作符为该委托增加方法。要减少一个多播委托持有的方法,可以使用-或-=操作符。
————————————————