iosApplePay

1、Apple Pay 接入工程 - 简书

// 设置币种、国家码及merchant标识符等基本信息
PKPaymentRequest *payRequest = [[PKPaymentRequest alloc]init];
payRequest.countryCode = @"CN";     //国家代码
payRequest.currencyCode = @"CNY";       //RMB的币种代码
payRequest.merchantIdentifier = @"merchant.ApplePayDemoYasin";  //申请的merchantID
payRequest.supportedNetworks = supportedNetworks;   //用户可进行支付的银行卡
payRequest.merchantCapabilities = PKMerchantCapability3DS|PKMerchantCapabilityEMV;      //设置支持的交易处理协议,3DS必须支持,EMV为可选,目前国内的话还是使用两者吧

2、iOS集成ApplePay - 码农教程 

3、iOS开发ApplePay的介绍与实现_diaochuanzhi7826的博客-CSDN博客 

3.1>设备

  • 设备支持
    • iPhone
      • 配备面容 ID 的 iPhone 机型
      • 配备触控 ID 的 iPhone 机型(iPhone 5s 除外)
      • 识别您的 iPhone 机型
    • iPad
      • 配备触控 ID 或面容 ID 的 iPad Pro、iPad Air、iPad 和 iPad mini 机型
    • Apple Watch
      • Apple Watch Series 1 和 2 及更新机型
      • Apple Watch(第 1 代)7
    • Mac
      • 配备触控 ID 功能的 Mac 机型
      • 2012 年或之后推出的 Mac 机型,与支持 Apple Pay 的 iPhone 或 Apple Watch 搭配使用
  • 系统支持
    • iOS8.0以上版本, 注意:iOS9.2才真正的支持“银联支付”, 意味着iOS9.2以后才可以在中国市场使用。
  • 银行支持
    • 想要使用Apple Pay,对应的银行还要加入Apple Pay才行。

3.2>、发卡行及机构:亚太地区参加 Apple Pay 计划的银行和发卡机构:

亚太地区参加 Apple Pay 计划的银行和发卡机构 - 官方 Apple 支持 (中国)

3.3>、 应用场景:

  • 线下支付
    • 除去使用前提之外,还要商家支持(要求必须有支持NFC的刷卡机)
    • 如果发现以下标识,就代表该商家支持Apple Pay
  • 线上支付
    • 除去使用前提之外, 还要求App内部集成支持
    • 目前支持Apple Pay支付方式的App并不多。很多公司也在集成当中,这也是写这篇博客的目的。
    • 目前,苹果公开的支持Apple Pay的APP列表

3.4>、iOS开发_ApplePay的介绍与实现 

3.5>、代码实现:

   3.5.1>框架导入:
   #import <PassKit/PassKit.h>   // 用户绑定的银行卡信息
   #import <PassKit/PKPaymentAuthorizationViewController.h> // Apple pay的展示控件
   #import <AddressBook/AddressBook.h>// 用户联系信息相关

   3.5.2>判断设备是否支持:

    if(![PKPaymentAuthorizationViewController canMakePayments]) {
       NSLog(@"不能支付");
       return;
     }

   3.5.3>判断wallet是否添加了该支付网络的储蓄卡/信用卡:

       if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]]{
    NSLog(@"Wallet没有添加该支付网络的储蓄卡/信用卡");
    // 创建一个设置按钮
    //        PKPaymentButton *button = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline];
    //        [button addTarget:self action:@selector(jump) forControlEvents:UIControlEventTouchUpInside];
    //        button.center = self.view.center;
    //        [self.view addSubview:button];
    return;
  }

   3.5.4>创建一个支付请求,并配置各种信息:

      // 1. 创建一个支付请求
     PKPaymentRequest *request = [[PKPaymentRequest alloc] init];

    // 2. 参数配置
   // 2.1 商店标识
  request.merchantIdentifier = @"merchant.520it.com";
 
// 2.2 货币代码
request.currencyCode = @"CNY";
 
// 2.3 国家编码
request.countryCode = @"CN";
 
// 2.4 支持的支付网络(PKPaymentNetworkChinaUnionPay iOS9.2开始支持)
request.supportedNetworks = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay];
 
// 2.5 支付请求包含一个支付摘要项目的列表
NSDecimalNumber *price1 = [NSDecimalNumber decimalNumberWithString:@"2"];
PKPaymentSummaryItem *item1 = [PKPaymentSummaryItem summaryItemWithLabel:@"手榴弹" amount:price1];
 
NSDecimalNumber *price2 = [NSDecimalNumber decimalNumberWithString:@"6"];
PKPaymentSummaryItem *item2 = [PKPaymentSummaryItem summaryItemWithLabel:@"炸弹" amount:price2 type:PKPaymentSummaryItemTypePending];
 
NSDecimalNumber *totalAmount = [NSDecimalNumber zero];
totalAmount = [totalAmount decimalNumberByAdding:price1];
totalAmount = [totalAmount decimalNumberByAdding:price2];
PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"小码哥财务中心" amount:totalAmount type:PKPaymentSummaryItemTypePending];
// 注意: 数组最后一个是总价格
request.paymentSummaryItems = @[item1, item2, total];
 
// 2.6 运输方式
NSDecimalNumber *shippingPrice = [NSDecimalNumber decimalNumberWithString:@"18.0"];
PKShippingMethod *method = [PKShippingMethod summaryItemWithLabel:@"顺丰快递" amount:shippingPrice];
method.detail = @"24小时送到!";
method.identifier = @"shunfeng";
request.shippingMethods = @[method];
request.shippingType = PKShippingTypeServicePickup;
 
// 2.7 通过指定merchantCapabilities属性来指定你支持的支付处理标准,3DS支付方式是必须支持的,EMV方式是可选的,
request.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV | PKMerchantCapabilityCredit | PKMerchantCapabilityDebit;
 
// 2.8 需要的配送信息和账单信息
request.requiredBillingAddressFields = PKAddressFieldAll;
request.requiredShippingAddressFields = PKAddressFieldAll;
 
// 2.9 存储额外信息
// 使用applicationData属性来存储一些在你的应用中关于这次支付请求的唯一标识信息,比如一个购物车的标识符。在用户授权支付之后,这个属性的哈希值会出现在这次支付的token中。
request.applicationData = [@"购物车ID: 123456" dataUsingEncoding:NSUTF8StringEncoding];

   3.5.5>弹出授权控制器,让用户给支付授权:
PKPaymentAuthorizationViewController *paymentPane = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
if (paymentPane == nil) {
    NSLog(@"授权控制器创建失败");
    return;
}
paymentPane.delegate = self;
[self presentViewController:paymentPane animated:YES completion:nil];

   3.5.6>处理支付凭证:

      /**
*  当授权成功之后会调用这个代理方法
*/
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                   didAuthorizePayment:(PKPayment *)payment
                            completion:(void (^)(PKPaymentAuthorizationStatus status))completion {
 
    // PKPayment *temp = payment;
    NSLog(@"验证授权---%@", payment.token);
    NSLog(@"验证通过后, 需要开发者继续完成交易");
    // 它需要你连接服务器并上传支付令牌和 其他信息,以完成整个支付流程。
    BOOL isSuccess = YES;
    if (isSuccess) {
        completion(PKPaymentAuthorizationStatusSuccess);
    }
    else {
        completion(PKPaymentAuthorizationStatusFailure);
    }
}

   3.5.7>关闭授权控制器:

     /**
      *  当授权成功之后或者取消授权之后会调用这个代理方法
      */
   - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController*)controller {
      NSLog(@"取消或者交易完成");
      [self dismissViewControllerAnimated:YES completion:nil];
  }

   3.5.8>支付授权的流程:

 3.6>服务器处理:

    3.6.1>验证支付数据的哈希表和签名

    3.6.2>为加密过的支付数据解密

    3.6.3>向支付处理系统提交支付数据

    3.6.4>向订单追踪系统提交订单

4、iOS PassKit Wallet 开发(Passbook 开发)【附有很多官网说明链接】https://blog.csdn.net/andanlan/article/details/78113486?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-78113486-blog-52311153.235%5Ev27%5Epc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-78113486-blog-52311153.235%5Ev27%5Epc_relevant_recovery_v2&utm_relevant_index=3

4.1>分类:可被添加到wallet的票据凭证分以下5类

   4.1.1> Boarding pass(登机牌,如飞机票、火车票)

   4.1.2>Coupon(优惠券,如打折券、减免券 一般为一次性使用的券)

   4.1.3>Event ticket(票,如电影票、演出票)

   4.1.4>Generic(通用类型)

   4.1.5>Store card(购物卡,可以显示余额等信息)

4.2>创建凭证

    4.2.1>Creating and Populating the Pass Package(创建一个包含Pass所有信息和资源文件的文件夹):Passes 的创建需要一个 pass.json 文件,这个 pass.json 文件包含 pass 的所有信息,如票据类型,logo、icon资源图片,过期时间、票据描述等信息。将 pass.json 和需要的图片资源文件一起放入一个文件夹,然后从这个文件夹生成 Pass。

  创建步骤:

  1. 创建一个 filmTicket.pass 文件夹,使用 .pass 作为文件夹的后缀名,放在 Documents 目录下。
  2. 这里下载示例文件。
  3. 解压缩,将 Event.pass 文件夹中的所有内容拷贝到 filmTicket.pass 文件夹中。

  4.2.2>Setting the Pass Type Identifier and Team ID(设置PassTypeId和Team ID)

      每一个 pass 都需要通过一个 PassTypeID 关联到一个开发者账号下。所有的 PassTypeID 都通过开发者账号中心管理。想要创建 pass ,必须到开发者账号下配置你的 PassTypeID 。

**创建 PassTypeID **

  1. 到你的开发者账号中心,找到Certificates, Identifiers & Profiles,选择 Identifiers
  2. 在 Identifiers 下, 选择 Pass Type IDs
  3. 点击右上角 + 按钮。
  4. 填写描述和 Pass Type ID 并提交。

查看 Team ID:

到开发者账号下,选择 MemberShip 。

**添加 PassTypeID 和 Team ID 到 pass.json **

打开 filmTicket.pass 文件夹下的 pass.json , 将 PassTypeID 和 Team ID 替换为自己开发者账号下的。

{
...
"passTypeIdentifier" : "your pass type identifier",
"teamIdentifier" : "your Team ID",
...
}
4.2.3>. Signing and Compressing the Pass(签名并压缩 pass )
As part of building your production environment, you will need to set up a system for automatically signing and compressing passes as described in Passes Are Cryptographically Signed and Compressed. For this tutorial, a very simple tool for signing passes is included.

4.2.3.1>.下载签名证书

  1. 在 Certificates, Identifiers & Profiles, 选择 Identifiers
  2. 在 Identifiers 下,选择 Pass Type IDs.
  3. 选择你已经创建好的 pass type identifier, 点击编辑。
  4. 如果已经存在证书文件,直接点击下载即可。如果没有,点击创建,按照提示创建一个(与创建 APNs 推送证书基本一样)。

4.2.3.2>.生成 .pkpass 后缀的压缩文件   

  1. 找到上面已经下载的文件包,找到 signpass 工程,使用 Xcode 打开并运行。
  2. 选中 Xcode 中 Products 文件夹下的 signpass 文件,右击鼠标,Show in Finder
  3. 拷贝 signpass 文件到 filmTicket.pass 文件夹的同级目录(Documents)下。
  4. 执行以下语句:cd ~/Documents
    ./signpass -p filmTicket.pass

     上面语句会生成 filmTicket.pkpass 文件,也就是我们需要的压缩后的 pass

4.2.4>.查看 pass

   在 Mac 中直接双击就能打开查看。或者打开你的模拟器,将 filmTicket.pkpass文件拖拽到你的模拟器,就能添加这个 pass 到你模拟器的 Wallet 应用。

4.2.5>.修改信息,并重新生成 pass

原有 pass.json 文件内容

{
  "formatVersion" : 1,
  "passTypeIdentifier" : "pass.com.apple.devpubs.example",
  "serialNumber" : "nmyuxofgna",
  "teamIdentifier" : "A93A5CM278",
  "webServiceURL" : "https://example.com/passes/",
  "authenticationToken" : "vxwxd7J8AlNNFPS8k0a0FfUFtq0ewzFdc",
  "relevantDate" : "2011-12-08T13:00-08:00",
  "locations" : [
    {
      "longitude" : -122.3748889,
      "latitude" : 37.6189722
    },
    {
      "longitude" : -122.03118,
      "latitude" : 37.33182
    }
  ],
  "barcode" : {
    "message" : "123456789",
    "format" : "PKBarcodeFormatPDF417",
    "messageEncoding" : "iso-8859-1"
  },
  "organizationName" : "Apple Inc.",
  "description" : "Apple Event Ticket",
  "foregroundColor" : "rgb(255, 255, 255)",
  "backgroundColor" : "rgb(60, 65, 76)",
  "eventTicket" : {
    "primaryFields" : [
      {
        "key" : "event",
        "label" : "EVENT",
        "value" : "The Beat Goes On"
      }
    ],
    "secondaryFields" : [
      {
        "key" : "loc",
        "label" : "LOCATION",
        "value" : "Moscone West"
      }
    ]
  }
}
需要修改 eventTicket 的子级内容

4.2.5.1>.描述信息

4.2.5.2>.条形码改为二维码,添加描述

 // 修改前
"barcode" : {
    "message" : "123456789",
    "format" : "PKBarcodeFormatPDF417",
    "messageEncoding" : "iso-8859-1"
}
// 修改后
"barcode" : {
    "altText" : "订单号:123456",
    "message" : "123456789",
    "format" : "PKBarcodeFormatQR",
    "messageEncoding" : "iso-8859-1"
}

4.2.5.3>.删除原来生成的 filmTicket.pkpass 文件,重复上面的生成步骤。

4.2.6>pass.json 设计说明

   4.2.6.1>样式和内容规范

   4.2.6.2>相关 key-value 说明

4.3>.在APP中提供Wallet凭证支持(添加凭证到Wallet)

直接上代码(代码见4链接):记得 import PassKit

   4.3.1>将上个步骤生成的 .pkpass 文件拖拽到工程,然后加载本地凭证数据。

   4.3.2>显示凭证信息

   4.3.3>用户添加、取消后的回调操作

   4.3.3>查看 Wallet 中已添加的凭证

4.4>.更新凭证

当你购买了电影票,需要在指定的时间前去观看,超过了这个时间就过期了,那就需要更新凭证。
任何一个凭证凭证都可以通过它的 authentication token 和 serial number 更新。

 4.4.1>.更新流程简介

   Updating a pass is a cooperative effort between the user’s device, Apple’s servers, and your servers. At a high level, it consists of the following steps, shown in Figure 6-1:

  1. pass 被设置为支持更新和安装,并且用户设备注册到你的服务器获取更新。
  2. 如果有变更,则触发更新,你的服务器发送推送通知。
  3. 用户收到推送后,从你的服务器查询更新的列表。
  4. 用户从你的服务器获取每个 pass 的最新版本到自己的设备。

   4.4.2>.web server 注意事项

      4.4.2.1>备份私钥和证书,并将其保存在安全的位置。
      4.4.2.2>避免将私钥存储在Web服务器上,因为Web服务器通常具有较大的攻击面。一个更安全的方法是具有不同的服务器句柄创建和签名传递,并将完成的传递推送到您的Web服务器。
      4.4.2.3>当与您的Web服务通话时,序列号,传递类型标识符和last-update标签全部包含在URL中。使其过长可能会对对URL长度造成限制的系统造成问题。
      4.4.2.4>不要更改更新中的身份验证令牌。因为 passes 不能保证被更新,所以仍然可能有具有旧通行证和旧认证令牌的设备。您的服务器必须根据已经有效的每个令牌的列表来检查身份验证令牌。

4.5>.Demo

WalletDemo

4.6>.参考

Pass.json官方说明
Pass创建步骤官方文档

5、ApplePay的证书配置:iOS开发------Apple Pay(证书配置篇)_RITL的博客-CSDN博客

6、ApplePay线上使用演示:iOS开发------Apple Pay(PassKit.framework篇)_00烽火连城00的博客-CSDN博客

7、Apple Pay 接入工程 Apple Pay 接入工程 - 简书

当用户授权一个支付请求时,支付框架的 Apple 服务器与安全模块会协作创建一个支付令牌。你可以在委托方法 paymentAuthorizationViewController:didAuthorizePayment:completion: 中将支付信息以及其它你需要处理的信息,例如配送地址和购物车标识符,一起发送至你的服务器。这个过程如下所示:

  • 支付框架将支付请求发送至安全模块。只有安全模块会访问令牌化后的设备相关的支付卡号。
  • 安全模块将特定卡的支付数据和商家信息一起加密(加密后的数据只有 Apple 可以访问),然后将加密后的数据发送至支付框架。支付框架再将这些数据发送至 Apple 的服务器。
  • Apple 服务器使用商家标识证书将这些支付数据重新加密。这些令牌只能由你以及那些与你共享商户标识证书的人读取。随后服务器生成支付令牌再将其发送至设备。
  • 支付框架调用 paymentAuthorizationViewController:didAuthorizePayment:completion: 方法将令牌发送至你的委托。你在委托方法中再将其发送至你的服务器。

在服务器上的处理操作取决于你是自己处理支付还是使用其它支付平台。不过,在两种情况下服务器都得处理订单再将处理结果返回给设备。在设备上,委托再将处理结果传入完成处理方法中,详细过程请参阅 处理支付

- (void) paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                        didAuthorizePayment:(PKPayment *)payment
                                 completion:(void (^)(PKPaymentAuthorizationStatus))completion
{
    NSError *error;
    ABMultiValueRef addressMultiValue = ABRecordCopyValue(payment.billingAddress, kABPersonAddressProperty);
    NSDictionary *addressDictionary = (__bridge_transfer NSDictionary *) ABMultiValueCopyValueAtIndex(addressMultiValue, 0);
    NSData *json = [NSJSONSerialization dataWithJSONObject:addressDictionary options:NSJSONWritingPrettyPrinted error: &error];

    // ... Send payment token, shipping and billing address, and order information to your server ...

    PKPaymentAuthorizationStatus status;  // From your server
    completion(status);
}

8、ApplePay官方文档链接:Offering Apple Pay in Your App | Apple Developer Documentation

9、官方 Apple 支持

10、【iOS】Apple Pay配置 - 简书

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/7839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“被裁员之前,没得到任何风声,措手不及...” 一个在职6年测试工程师内心独白

前言 一个码农&#xff08;软件测试工程师&#xff09;的自白 小张&#xff1a; 我们用工作五年的积蓄&#xff0c;在这个一线城市买了房子&#xff0c;买了车子&#xff0c;然后领证。我也在6年前进入了一个很多人梦寐以求新的公司 码农的新生活开始了。在这家公司里&…

ChatGPT如何为企业提供帮助?

数字化转型是指利用技术来改变企业的运营方式并为客户提供价值&#xff0c;这不仅仅是关于如何采用新的技术或工具。要想取得成功&#xff0c;就需要从根本上改变文化和心态。 ChatGPT如何为企业提供帮助?从数据分析到知识管理再到客户服务等等&#xff0c;人工智能聊天机器人…

光伏发电系统模拟及其发电预测开源python工具pvlib

1. 太阳辐照量模拟 pysolar是一个用于计算太阳位置和辐照量的Python库。它是基于python语言编写的&#xff0c;可以方便地在各种python项目中使用。pysolar主要用于计算太阳的位置、太阳高度角、太阳方位角、日出和日落时间等信息。这些信息可以用于太阳能电池板和太阳能集热器…

【设计模式】创建型-抽象工厂模式

文章目录一、抽象工厂模式1.1、产品族、产品等级1.2、抽象工厂模式中的角色1.3、实例一、抽象工厂模式 在工厂方法模式中&#xff0c;每一个具体的工厂子类只能生成一种具体的产品&#xff0c;如果想要生产另外一种产品&#xff0c;就需要重新定义一个抽象工厂类&#xff0c;这…

泡泡玛特“失速”,盲盒经济迎来拐点?

配图来自Canva可画​ 前些年泡泡玛特的飞速增长&#xff0c;曾经在行业内外引起了广泛的反响&#xff0c;其主打的盲盒经济也曾风靡一时、被众多行业效仿。不过&#xff0c;这种情况在疫情肆虐的2022年似乎受到了一些影响&#xff0c;这在其财报中就有所体现。 3月29日&#…

Python 小型项目大全 61~65

六十一、ROT13 密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project61.html ROT13 密码是最简单的加密算法之一&#xff0c;代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25&#xff0c;加密后的字母距离明文字母 13 个空格&#xff1a; A变成N&…

【Android】之【自定义View实践】

这里以一个进度条的加载为例子&#xff0c;先看效果&#xff08;运行效果是动态变化的&#xff09; 一、自定义属性 首先在res->values目录下新建attrs资源文件&#xff0c;如下图&#xff1a; 内容如下&#xff1a; <?xml version"1.0" encoding"utf…

SpringBoot基础学习之(九)添加员工的信息

本次项目所有能够使用的静态资源可以免费进行下载 静态资源 在本篇代码DAO层将通过Java文件去实现&#xff0c;在这里就不连接数据&#xff0c;然后通过jdbc将数据库内容的内容显示出来 案例&#xff1a;员工管理系统 上一篇博文的主要的内容是展示员工的信息&#xff0c;本篇…

Oracle JDK 和 OpenJDK 有什么区别?

可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异&#xff1f;下面我通过收集到的一些资料&#xff0c;为你解答这个被很多人忽视的问题。 首先&#xff0c;2006 年 SUN 公司将 Java 开源&#xff0c;也就有…

JAVA——网络编程基本概念

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

腾讯云轻量服务器和云服务器区别对比(超详细)

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器费用更低&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

orcad library builder 建库及报错问题

目录 一.安装orcad library builder 二.orcad library builder 使用 1.建立一个orcad 原理图库测试下 尝试理解tcl那段的意思 xml文件导入建orcad库 折腾了2个多小时&#xff0c;居然没有直接方案搞定&#xff0c;简单记录下&#xff0c;后面遇到该问题的兄弟可参考借鉴&am…

Java集合框架之collection

1. 什么是集合 1.1 概念 对象的容器&#xff0c;实现类对对象常用的操作。 1.2 和数组的区别 数组长度固定&#xff0c;集合长度不固定。数组可以存储基本类型和引用类型&#xff0c;集合只能存储引用类型。 1.3 位置 java.util.*; 2. Collection体系 2.1 Collection父接…

网络编程 1

前言 小亭子正在努力的学习编程&#xff0c;接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟&#xff0c;如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话&#xff0c;烦请点赞关注支持一波, 感激不尽~~ 目录 网络编程 什么是网络编程&#xff1f;…

ASP网上视频点播系统的设计与实现

在线视频服务系统的功能模块划分如下图&#xff08;2-2&#xff09;所示&#xff1a; 电影分类浏览 用户可以通过电影的类别进行浏览。显示近期热门电影&#xff0c;近期点机排行。用户能很方便的找到自己感兴趣的电影进行观看。 电影搜索 如果用户有很明确的目的&#xff0c;…

JUC结构

JUC是java.util.concurrent包的简称在Java5.0添加&#xff0c;目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题&#xff01;进程与线程的区别&#xff1a;进程 : 一个运行中的程序的集合; 一个进程往往可以包含多个线程,至少包含一个线程…

JVM的内存区域划分

目录 1、程序计数器&#xff08;内存中最小的一块&#xff0c;里面保存了当前线程下一条执行的指令的地址&#xff09; 2、栈&#xff08;保存局部变量和方法调用的信息&#xff09; 3、堆 &#xff08;成员变量和new出来的对象都在堆上&#xff09; 4、方法区&#xff08…

闲人闲谈PS之四十——项目售前费用归集

惯例闲话&#xff1a;广东这段时间老是下雨&#xff0c;堪比江浙一带梅雨季节&#xff0c;人的心情也像这天气一样&#xff0c;阴雨绵绵。2023年伊始&#xff0c;确实感觉很多事情在发生剧变&#xff0c;这种变化也稍微影响了闲人那本来稳如老狗的心。面对未知和变化&#xff0…

FreeRTOS学习(一)

裸机与RTOS对比 裸机&#xff1a;又称为前后台系统&#xff0c;前台系统指的是中断服务函数&#xff0c;后台系统指的大循环&#xff0c;即应用程序。 实时性差&#xff1a;&#xff08;应用程序轮流执行&#xff09;delay&#xff1a;空等待&#xff0c;CPU不执行其它代码结…

智能汽车赛道「年度大奖」揭晓,哪些供应商在细分市场独占鳌头

智能汽车产业链年度细分市场领军供应商&#xff0c;是高工智能汽车研究院在每个年度基于前装量产数据库及定点车型库数据进行综合评价颁发的年度重量级行业奖项。 2022年&#xff0c;是中国乘用车市场从电动化转型升级到全面普及智能化的关键节点。从计算平台、域控制器、传感…
最新文章