获得IE Cache 的摘要说明。

Cache超清晰逻辑详解(cache的三种映射) 在说之前要向大家安利一个网站,http://www.ecs.umass.edu/ece/koren/architecture/Cache/tutorial.html,这是马萨诸塞大学安姆斯特分校的体系结构课程的tutorial,能够对cache有更直观的理解。 之前课上老师讲的飞快,课后复习压力很大,无意间看了他的tutorial感觉非常有收获,本篇博客基于tutorial,详细说明cache 我们知道,存储分层是为了在速度和存储容量上获得最优解,从cache,到主存到辅存,速度上越来越慢,存储容量上越 阅读详情

来自:

using System;
using System.Runtime.InteropServices;
namespace CacheIEWithWinAPIDemo
{
    ///
    /// IECache 的摘要说明。
    ///
    public class IECache
    {
        public IECache()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }


  #region 引入所需要的Dll

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
  private struct INTERNET_CACHE_ENTRY_INFO
  {
   public int dwStructSize;
   public IntPtr lpszSourceUrlName;
   public IntPtr lpszLocalFileName;
   public int CacheEntryType;
   public int dwUseCount;
   public int dwHitRate;
   public int dwSizeLow;
   public int dwSizeHigh;
   public FILETIME LastModifiedTime;
   public FILETIME ExpireTime;
   public FILETIME LastAccessTime;
   public FILETIME LastSyncTime;
   public IntPtr lpHeaderInfo;
   public int dwHeaderInfoSize;
   public IntPtr lpszFileExtension;
   public int dwExemptDelta;
  }

  [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
  private struct SYSTEMTIME
  {
   public short wYear;
   public short wMonth;
   public short wDayOfWeek;
   public short wDay;
   public short wHour;
   public short wMinute;
   public short wSecond;
   public short wMilliseconds;
  }

  
  [DllImport("kernel32.dll",SetLastError=true, CharSet=CharSet.Auto)]
  private static extern int FileTimeToSystemTime(
   IntPtr lpFileTime,
   IntPtr lpSystemTime);

  [DllImport("wininet",SetLastError=true,CharSet=CharSet.Auto,EntryPoint="FindFirstUrlCacheGroup",CallingConvention=CallingConvention.StdCall)]
  private static extern IntPtr FindFirstUrlCacheGroup(
   int dwFlags,
   int dwFilter,
   IntPtr lpSearchCondition,
   int dwSearchCondition,
   ref long lpGroupId,
   IntPtr lpReserved);

[DllImport("wininet",SetLastError=true,CharSet=CharSet.Auto,EntryPoint="FindNextUrlCacheGroup",CallingConvention=CallingConvention.StdCall)]
  private static extern bool FindNextUrlCacheGroup(
   IntPtr hFind,
   ref long lpGroupId,
   IntPtr lpReserved);
  
  [DllImport("wininet", SetLastError=true, CharSet=CharSet.Auto, EntryPoint="DeleteUrlCacheGroup", CallingConvention=CallingConvention.StdCall)]
  private static extern bool DeleteUrlCacheGroup(
   long GroupId,
   int dwFlags,
   IntPtr lpReserved);


  [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)]
  private static extern IntPtr FindFirstUrlCacheEntry([MarshalAs(UnmanagedType.LPTStr)] string UrlSearchPattern, IntPtr lpFirstCacheEntryInfo, ref int lpdwFirstCacheEntryInfoBufferSize);

  [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)]
 private static extern bool FindNextUrlCacheEntry(
   IntPtr hEnumHandle,
   IntPtr lpNextCacheEntryInfo,
   ref int lpdwNextCacheEntryInfoBufferSize);

  [DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)]
  private static extern bool GetUrlCacheEntryInfo(
   [MarshalAs(UnmanagedType.LPTStr)] string lpszUrlName,
   IntPtr lpCacheEntryInfo,
   ref int lpdwCacheEntryInfoBufferSize
   );

  [DllImport("wininet.dll")]
  private static extern bool FindCloseUrlCache( IntPtr hEnumHandle);

  [DllImport("wininet",
    SetLastError=true,
    CharSet=CharSet.Auto,
    EntryPoint="DeleteUrlCacheEntryA",
    CallingConvention=CallingConvention.StdCall)]
  private static extern bool DeleteUrlCacheEntry(
   IntPtr lpszUrlName);

  const int ERROR_NO_MORE_ITEMS = 259;
  ///

  /// Retrieves the flags, type, and disk quota attributes of the cache group. This is used by the GetUrlCacheGroupAttribute function.
  ///
  const int CACHEGROUP_ATTRIBUTE_BASIC = 0x00000001;
  ///
  /// Sets or retrieves the flags associated with the cache group. This is used by the GetUrlCacheGroupAttribute and SetUrlCacheGroupAttribute functions.
  ///
  const int CACHEGROUP_ATTRIBUTE_FLAG =0x00000002;
  
  ///
  /// Retrieves all the attributes of the cache group. This is used by the GetUrlCacheGroupAttribute function.
  ///
  const uint CACHEGROUP_ATTRIBUTE_GET_ALL =0xffffffff;
  
  ///
  /// Sets or retrieves the group name of the cache group. This is used by the GetUrlCacheGroupAttribute and SetUrlCacheGroupAttribute functions.
  ///
  const int CACHEGROUP_ATTRIBUTE_GROUPNAME =0x000000010;
  
  ///
  /// Sets or retrieves the disk quota associated with the cache group. This is used by the GetUrlCacheGroupAttribute and SetUrlCacheGroupAttribute functions.
  ///
  const int CACHEGROUP_ATTRIBUTE_QUOTA =0x00000008;
  
  ///
  /// Sets or retrieves the group owner storage associated with the cache group. This is used by the GetUrlCacheGroupAttribute and SetUrlCacheGroupAttribute functions.
  ///
  const int CACHEGROUP_ATTRIBUTE_STORAGE =0x00000020;
  
  ///
  /// Sets or retrieves the cache group type. This is used by the GetUrlCacheGroupAttribute and SetUrlCacheGroupAttribute functions.
  ///
  const int CACHEGROUP_ATTRIBUTE_TYPE =0x00000004;
  
  ///
  /// Indicates that all the cache entries associated with the cache group should be deleted, unless the entry belongs to another cache group.
  ///
  const int CACHEGROUP_FLAG_FLUSHURL_ONDELETE =0x00000002;
  
  ///
  /// Indicates that the function should only create a unique GROUPID for the cache group and not create the actual group.
  ///
  const int CACHEGROUP_FLAG_GIDONLY = 0x00000004;
  
  ///
  /// Indicates that the cache group cannot be purged.
  ///
  const int CACHEGROUP_FLAG_NONPURGEABLE =0x00000001;
  
  ///
  /// Sets the type, disk quota, group name, and owner storage attributes of the cache group. This is used by the SetUrlCacheGroupAttribute function.
  ///
  const int CACHEGROUP_READWRITE_MASK =0x0000003c;

  ///

  /// Indicates that all of the cache groups in the user's system should be enumerated.
  ///
  const int CACHEGROUP_SEARCH_ALL =0x00000000;
  
  ///
  /// Not currently implemented.
  ///
  const int CACHEGROUP_SEARCH_BYURL =0x00000001;
  
  ///
  /// Indicates that the cache group type is invalid.
  ///
  const int CACHEGROUP_TYPE_INVALID =0x00000001;
  
  ///
  /// Length of the group owner storage array.
  ///
  const int GROUP_OWNER_STORAGE_SIZE =0x00000004;
  
  ///
  /// Maximum number of characters allowed for a cache group name.
  ///
  const int GROUPNAME_MAX_LENGTH =0x00000078;
#endregion

#region FileTimeToSystemTime

  private string FILETIMEtoDataTime(FILETIME time)
  {
   IntPtr filetime = Marshal.AllocHGlobal( Marshal.SizeOf(typeof(FILETIME)) );
   IntPtr systime = Marshal.AllocHGlobal( Marshal.SizeOf(typeof(SYSTEMTIME)) );
   Marshal.StructureToPtr(time,filetime,true);
   FileTimeToSystemTime( filetime ,systime);
   SYSTEMTIME st = (SYSTEMTIME) Marshal.PtrToStructure(systime,typeof(SYSTEMTIME));
   string Time = st.wYear.ToString()+"."+st.wMonth.ToString()+"."+st.wDay.ToString()+"."+st.wHour.ToString()+"."+st.wMinute.ToString()+"."+st.wSecond.ToString();
   return Time;
  }

#endregion

#region 加载数据

  ///

  /// 获得指定的URL的cache文件名
  ///
  /// URL
  /// 如果不存在该cache,返回空字符串
  public string GetURLCacheFileName(string URL)
  {
   string s="";
   int nNeeded = 0, nBufSize;
   IntPtr buf;
   INTERNET_CACHE_ENTRY_INFO CacheItem;

   FindFirstUrlCacheEntry( null, IntPtr.Zero, ref nNeeded );

   if ( Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS )
    return s;

   nBufSize = nNeeded;
   buf = Marshal.AllocHGlobal( nBufSize );
   GetUrlCacheEntryInfo(URL,buf,ref nNeeded);
   try
   {

    CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure( buf,typeof(INTERNET_CACHE_ENTRY_INFO) ); 
 
    s=Marshal.PtrToStringAuto(CacheItem.lpszLocalFileName);

/*
以下这一段儿写的有些弱智。。。。但是没有办法。。。。不知道为什么,通过上面的方法取出来的文件的Cache路径,有时候是乱码,有时候用PtrToStringAnsi可是又正常。。。。。唉,所以只能用这个笨办法。。。。

*/ 

   if(s.IndexOf("Temporary Internet Files")==-1)
     s=Marshal.PtrToStringAnsi(CacheItem.lpszLocalFileName); 
    if(s.IndexOf("Temporary Internet Files")==-1)
     s=Marshal.PtrToStringBSTR(CacheItem.lpszLocalFileName); 
    if(s.IndexOf("Temporary Internet Files")==-1)
     s=Marshal.PtrToStringUni(CacheItem.lpszLocalFileName); 

   }
   catch(System.Exception ex)
   {
    Console.WriteLine(ex.Message + ex.StackTrace);
   }

Marshal.FreeHGlobal( buf ); 
   return s;
  }

  public void GetCacheFile()
  {

   int nNeeded = 0, nBufSize;
   IntPtr buf;
   INTERNET_CACHE_ENTRY_INFO CacheItem;
   IntPtr hEnum;
   bool r;

   FindFirstUrlCacheEntry( null, IntPtr.Zero, ref nNeeded );

   if ( Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS )
    return;

   nBufSize = nNeeded;
   buf = Marshal.AllocHGlobal( nBufSize );
   hEnum = FindFirstUrlCacheEntry( null, buf, ref nNeeded );
   while ( true )
   {
    CacheItem = (INTERNET_CACHE_ENTRY_INFO) Marshal.PtrToStructure( buf,
     typeof(INTERNET_CACHE_ENTRY_INFO) );

    string modifiedTime = FILETIMEtoDataTime(CacheItem.LastModifiedTime);
    string expireTime = FILETIMEtoDataTime(CacheItem.ExpireTime);
    string accessTime = FILETIMEtoDataTime(CacheItem.LastAccessTime);
    string syncTime = FILETIMEtoDataTime(CacheItem.LastSyncTime);

    string s;
#region 获得数据
    try
    {

     s = Marshal.PtrToStringAuto(CacheItem.lpszSourceUrlName) + System.Environment.NewLine  + "  ===> " + Marshal.PtrToStringAuto(CacheItem.lpszLocalFileName) + System.Environment.NewLine+ "  ==> " + Marshal.PtrToStringAuto(CacheItem.lpHeaderInfo)+ System.Environment.NewLine + Marshal.PtrToStringAuto(CacheItem.lpszFileExtension);

     Console.WriteLine(s);
    }
    catch
    {
     
    }
#endregion 
    nNeeded = nBufSize;
    r = FindNextUrlCacheEntry( hEnum, buf, ref nNeeded );

    if ( !r && Marshal.GetLastWin32Error() == ERROR_NO_MORE_ITEMS )
     break;

    if ( !r && nNeeded > nBufSize )
    {
     nBufSize = nNeeded;
     buf = Marshal.ReAllocHGlobal( buf, (IntPtr) nBufSize );
     FindNextUrlCacheEntry( hEnum, buf, ref nNeeded );
    }
   }
   Marshal.FreeHGlobal( buf );
  }

#endregion

 }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CacheIEWithWinAPIDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            IECache IECacheEntity = new IECache();
            IECacheEntity.GetURLCacheFileName("http://dev.21tx.com/dotnet/");
        }
    }
}



计组实验5:cache大小测量与 cache line 大小测量 前言 今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要一个 fcyc2 头文件,可以在 https://github.com/fabiensanglard/CpuCacheMountainViewer 这里找到。 ⚠ 我没有在 Linux 下试过课本上面的代码。。。 我是在 win10 下测试的。。。 所以 。。。 我并不确定我的代码是否正确。 阅读详情

相关推荐

Cache结构

Cache架构,Cache设计

白马非马的博客 1569

如何获取(清除)IE缓存地址信息

一、主要用到以下几个API:1、FindFirstUrlCacheEntry2、FindNextUrlCacheEntry3、FindCloseUrlCache 下面的内容摘自MSDN:-----------------------------------------------------------------------------------------------------------

夜空 4960

利用WinInetAPI清除特定网站的IE缓存

利用WinInetAPI清除特定网站的IE缓存

Delphi 获取Internet缓存文件 -- FindFirstUrlCacheEntry FindNextUrlCacheEntry

<br />下面是我写的一个函数,把所有的缓存文件路径添加到一个字符串列表中,直接看代码,带了注释。另外还有删除缓存等等大家自己到msdn找找。<br /> <br /> <br />需要引用WinInet<br /> // 获取Internet缓存文件 function GetCacheFilePath(): TStringList; var pEntryInfo: PInternetCacheEntryInfo; lCacheDir, lEntrySize, lLastError: Ca

乱弹 3361

闲鱼x-sign、x-mini-wua、x-umt三字段协同验证机制解析

在移动客户端风控体系中,设备标识与行为签名是保障接口安全的核心技术。x-sign并非传统时间戳+密钥的静态签名,而是融合设备特征、运行时状态与服务端动态因子的多阶段位运算结果;x-mini-wua作为小程序轻量水印,依赖主App注入的短时效sessionKey与截断时间戳;x-umt则通过设备硬件与网络环境联合编码实现强绑定。三者构成‘设备—环境—行为’三位一体的交叉验证链路,广泛应用于电商API防护、二手平台数据采集及自动化运营等场景。本文基于Android/iOS真机逆向与Frida动态分析,揭示其生成

weixin_30457551的博客 422

【软碟通 | UltraISO】刻录光盘教程(制作U盘启动盘)

前言 今天老师说办公室的电脑有点卡,让我给重新安装一个 Windows 7 系统。于是就用软碟通(UltraISO)在 U 盘上刻录了一个 Windows 7 镜像,然后给老师重装了系统。顺便把制作 U 盘启动盘的教程也分享给大家。 软件 UltraISO v9.7.1.3519:点击跳转(密码:dd2k) 教程 将 U 盘插到电脑上,然后鼠标右击选择格式化(制作启动盘必须格式化) 点击文件-打开 选择下载好的系统镜像(如:Windows 7) 点击启动-写入硬盘映像 选择硬盘

XavierJ的博客 2万+

通过API访问IE Cache

通过API访问IE Cache    我们知道在使用IE浏览网页时,IE会把远端主机的内容保存在本机以供以后脱机访问。下面将介绍的是如何通过Delphi编程实现遍历Cache中所有保存的内容。    如果大家对Windows API编程比较熟悉的话,应该知道对于遍历访问一般有两种办法,一是定义一个回调函数,然后将回调函数地址传递给遍历函数,当遍历到一个内容时就会调用回调函数一次,例如EnumWin

4716

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 974

Linux内存之Cache

一、 Linux内存之Cache 1.1、Cache的基本介绍 Cache存储器,是位于CPU和主存储器DRAM之间的一块高速缓冲存储器,规模较小,但是速度很快,通常由SRAM(静态存储器)组成。 Cache的功能是提高CPU数据输入输出的速率。Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,可以让系统的性能大大改善,感觉就像是又有了主存储器的内存,又有了Cache的访问速度。 1.2、程序是如何运行的? 我们先思考一个问题:我们的程序是如何运行起来的? 我们应该知道,程序是运行在RAM之

wyttRain的博客 1万+

智能车竞赛蚂蚁搬家组:NXP-MicroPython与STC单片机协同搬运策略解析

本文深入解析智能车竞赛蚂蚁搬家组中NXP-MicroPython与STC单片机的协同搬运策略。通过硬件选型、通信架构设计、效率优化及实战经验分享,展示了如何利用NXP-MicroPython的实时控制与STC单片机的感知导航优势,实现高效多智能体协同作业,为参赛团队提供实用技术参考。

motor的博客 1080

mac安全干净卸载Anaconda3

主要原因是python命令没有映射到已经安装的python版本上,则需要添加。修改~/.bash_profile文件,将anaconda相关删除。现在想卸载Anaconda,恢复使用mac系统自带的Python。最后在mac的应用目录删除Anaconda。查看所有版本的python所在安装目录。或者不使用软连接映射,也可使用。再次查看python映射。查看python版本。建立软连接,添加映射。

buyue 5963

C#读取IE的Cache

using System;using System.Runtime.InteropServices;namespace TimeFound.CTD.ResourceManager{/// /// IECache 的摘要说明。/// public class IECache{public IECache(){...

weixin_30367169的博客 146

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4012

Cache工作原理,Cache一致性,你想知道的都在这里

关注「开源Linux」,选择“设为星标”回复「学习」,有我为您特别筛选的学习资料~可以随便到网上查一查,各大互联网公司笔试面试特别喜欢考一道算法题,即LRU缓存机制,又顺手查了一下LRU...

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大放送,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频 2662

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3913

【Mode】Mode expansion monitors

对于宽带仿真,因为被支持的模式可能是波长的函数,因此,推荐在波长范围内增加频率的采样点数量去计算支持的波导模式分布或者光纤模式分布。对于宽带仿真,如果在被计算模式上的频率点的数量与通过 frequency-domain monitors 被测量的频率点的数量不匹配,这种情况是正常的。Mode expansion monitors 对于仿真偏振转换器是十分有用的,比如,在偏振转换器中,当你想要提取从输入模式到输出模式的转换效率,或者提取一个装置的 S 参数。给出了进入到被选择模式中的合透射率,

u011699626的博客 2762

IE cache缓存 所带来的问题

 详解IE浏览器的缓存我们在上网浏览信息时经常会用到IE里的“前进”、“后退”按钮,来调用阅读过的页面。你会发现,这时的显示速度比较快。其实这些刚调出来的内容就存放在电脑的缓存中,而不需再次从网上重新传输数据。这就引出了一个概念——缓存,你对它是否了解呢?让我们一起来了解一下这方面的知识吧!   缓存的概念  缓存是指在本地使用的电脑中开辟一个空间,作为数据传输的缓冲区。IE里

坚持,才是力量.老实做人,踏实做事. 1171

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jQuery Ajax在IE8中的Cache问题

在使用jQuery的Ajax功能时,常用的就是Get和Post这两个。在使用Get获取数据时,如果你使用的浏览器是IE8,,你可能会碰到问题: ajax response返回时,success 函数没有被调用 页面刷新时,即使使用ctrl+F5,都不能得到最新的数据。 这个问题导致的结果就是前端显示的数据一塌糊涂。 造成这个问题的原因是因为IE8会默认缓存这时的Get方式获取的

changhong009的专栏 2923

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【IE Cache】IE浏览器造成的请求Cache问题 的解决方案

对于普通的静态文件,html、css、js和图片文件而言,是希望浏览器进行缓存,以便再次访问时直接从浏览器获取,减少请求。 对于其它的js请求而言,如果被浏览器缓存了,而不能实时获取到最新的数据是让人抓狂的事情。 IE浏览器就有这样一个设定:对于响应头(Response Header)中,没有明确表明是否缓存(强制缓存或者强制不缓存),IE浏览器默认的设置是“自动 automa

snow_finland的专栏 3942

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Cache原理简介及cache miss

CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存。 CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss)。 CPU访问它的速度介于寄存器与内存之间(数量级的差别)。实现Cache的花费介于寄存器与内存之间。 现在 CPU 的 Cache 又被细分了几层,常见的有 L1 Cache, L2 Cache, L3 Cache,其读写延迟依次增加,实现的成本依次降低。 现代系统采用从 Register ―>966.

hithj_cainiao的博客 1万+

如何清除IE Cache(緩存)

有时候缓存会给程序带来很大的麻烦,这段代码是用来清空IE缓存里的内容 1.禁止客户端缓存要在中加入类似如下内):   2.在服务器的动态网页中禁止缓存,要加入类似如下脚本 (1)asp: Response.Expires = -1 Response.ExpiresAbsolute = Now() - 1 Response.cachecontrol = "no-cache

何蘭萍的专栏 4137

Cache的基本知识

1.不同等级cache速度之间关系: 2.Cache和CPU的关系:每个CPU上的HT(Hyper-Threading)共享L1 cache和L2 Cache,其中L1 Cache又分为单独的instruction cache(ICache)和data cache(DCache);不同物理CPU有自己的L1、L2 cache独立,每个socket有自己的L3 cache(也叫LLC),即同socket上的所有CPU共享LLC。如下图 Cache映射关系 直接映射缓存 考虑一个问题,CPU..

weixin_39094034的博客 1万+

ajax cache 无效,ajax的 IE cache 相关问题解决

运用Ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于IE的cache的原因。复制代码 代码如下:function verify() {$.ajax({//issue for IE cache; timestamp=" + new Date().getTime()url:"checkGroupName?timestamp=" + new Date().getT...

weixin_33946505的博客 248
上一篇: 什么XMLHttpRequest 对象
下一篇: SqlHelper类(感觉很不错)
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值