<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[高热度网]]></title><description><![CDATA[高热度网博客是面向全球开发者的技术交流社区，专注于分享黑科技、实用工具、免费资源等技术文章，涉及前端HTML，CSS，Javascript，NodeJS等领域的软件视频教程及资源下载。
]]></description><link>https://blog.gaoredu.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 13 May 2026 18:57:47 GMT</lastBuildDate><atom:link href="https://blog.gaoredu.com/rss" rel="self" type="application/rss+xml"/><author><![CDATA[https://github.com/fecommunity]]></author><category><![CDATA[前端]]></category><category><![CDATA[黑科技]]></category><category><![CDATA[免费资源]]></category><item><title><![CDATA[ 初始化electron项目运行后报错 electron uninstall 解决方法]]></title><description><![CDATA[<p><img src="https://api.gaoredu.com/public/uploads/2025-09-27/image.png" alt="image.png" /></p>
<h2 id="问题描述">问题描述</h2>
<p>首次初始化electron-vite项目，运行pnpm dev后出现了报错，一大堆，关键的就是提到了electron uninstall这个错误。</p>
<h2 id="解决方法">解决方法</h2>
<p>如果是在node环境下，运行命令 node .\node_modules\electron\install.js 后，项目就可以正常启动了。</p>
<h2 id="问题背景">问题背景</h2>
<p>最近在初始化一个新的 electron-vite 项目时，运行 <code>pnpm dev</code> 命令后遇到了一系列错误，其中最关键的报错信息提到了 <strong>electron uninstall</strong>。这个错误通常发生在首次创建或克隆 Electron 项目时，特别是在依赖安装完成后尝试启动开发环境的情况下。</p>
<h2 id="错误现象">错误现象</h2>
<p>当你满怀期待地执行 <code>pnpm dev</code> 命令，准备开始 Electron 开发之旅时，却在控制台看到了类似以下的错误信息：</p>
<pre><code>Error: Cannot find module 'electron'
// 或者
Error: Electron failed to install correctly
// 或者直接提到 electron uninstall 相关错误
</code></pre>
<p>这些错误通常伴随着一堆堆栈跟踪信息，让新手开发者感到困惑。</p>
<h2 id="问题根源">问题根源</h2>
<p>这个问题的根本原因在于 Electron 的安装机制。Electron 包在安装过程中需要执行一个后安装脚本（post-install script）来下载实际的 Electron 二进制文件。有时候，由于网络问题、权限限制或安装过程被中断，这个步骤可能没有正确完成。</p>
<h2 id="解决方案">解决方案</h2>
<h3 id="方法一：手动运行安装脚本（推荐）">方法一：手动运行安装脚本（推荐）</h3>
<p>最简单的解决方法是手动运行 Electron 的安装脚本：</p>
<pre><code class="bash language-bash">node ./node_modules/electron/install.js
</code></pre>
<p>这个命令会：</p>
<ol>
<li>检查当前平台（Windows、macOS 或 Linux）</li>
<li>下载对应平台的 Electron 二进制文件</li>
<li>将其安装到项目的 <code>node_modules</code> 目录中</li>
</ol>
<h3 id="方法二：重新安装依赖">方法二：重新安装依赖</h3>
<p>如果上述方法不奏效，可以尝试删除 <code>node_modules</code> 文件夹并重新安装依赖：</p>
<pre><code class="bash language-bash"># 删除 node_modules
rm -rf node_modules
# 或者 Windows 系统使用
rmdir /s node_modules

# 重新安装依赖
pnpm install
</code></pre>
<h3 id="方法三：清除缓存并重新安装">方法三：清除缓存并重新安装</h3>
<p>有时候，缓存可能导致安装问题：</p>
<pre><code class="bash language-bash"># 清除 npm/pnpm 缓存
pnpm store prune
# 或者
npm cache clean --force

# 然后重新安装依赖
pnpm install
</code></pre>
<h3 id="方法四：检查网络和代理设置">方法四：检查网络和代理设置</h3>
<p>如果你在公司网络或使用代理，可能需要检查网络设置：</p>
<pre><code class="bash language-bash"># 设置 Electron 镜像（中国大陆用户）
npm config set electron_mirror https://npmmirror.com/mirrors/electron/

# 然后重新运行安装
node ./node_modules/electron/install.js
</code></pre>
<h2 id="预防措施">预防措施</h2>
<p>为了避免将来再次遇到这个问题，可以考虑以下预防措施：</p>
<ol>
<li><p><strong>使用可靠的网络环境</strong>：在安装 Electron 项目时确保网络连接稳定</p></li>
<li><p><strong>设置环境变量</strong>：对于经常需要安装 Electron 的环境，可以设置镜像源：</p></li>
</ol>
<pre><code class="bash language-bash">   # 在 .bashrc、.zshrc 或环境变量中设置
   export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
</code></pre>
<ol start="3">
<li><strong>使用 .npmrc 配置</strong>：在项目根目录创建 <code>.npmrc</code> 文件：</li>
</ol>
<pre><code>   electron_mirror=https://npmmirror.com/mirrors/electron/
</code></pre>
<ol start="4">
<li><strong>考虑使用 yarn 或 pnpm</strong>：这些包管理器有时能更好地处理依赖安装</li>
</ol>
<h2 id="深入理解">深入理解</h2>
<p>为什么需要这个额外的安装步骤？这是因为 Electron 实际上由两部分组成：</p>
<ul>
<li>包含 JavaScript API 的 npm 包</li>
<li>平台特定的二进制可执行文件</li>
</ul>
<p>当你安装 <code>electron</code> npm 包时，它只包含了 JavaScript 部分。实际的 Chromium + Node.js 运行时需要在安装后单独下载，这就是 <code>install.js</code> 脚本的作用。</p>
<h2 id="总结">总结</h2>
<p>遇到 Electron uninstall 错误时不必惊慌，这通常只是 Electron 二进制文件没有正确下载导致的。通过运行 <code>node ./node_modules/electron/install.js</code> 命令，大多数情况下问题都能迎刃而解。如果问题依然存在，按照上述方法一步步排查，通常能找到解决方案。</p>
<p>希望这篇博客能帮助遇到类似问题的开发者顺利开始他们的 Electron 开发之旅！</p>]]></description><link>https://blog.gaoredu.com/article/cb236181-0ea2-4fe3-aedb-5cdfe68da0d2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cb236181-0ea2-4fe3-aedb-5cdfe68da0d2</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Sep 2025 14:19:04 GMT</pubDate></item><item><title><![CDATA[从 Vercel 构建失败谈 Git 大小写敏感性问题：一个容易被忽视的跨平台陷阱]]></title><description><![CDATA[<blockquote>
  <p>本地构建一切正常，但一到 Vercel 就报错？这可能是 Git 大小写敏感性在作祟。本文将分享一个真实的故障排查案例，帮助你避免这个隐蔽的跨平台兼容性问题。</p>
</blockquote>
<h2 id="问题背景：诡异的构建失败">问题背景：诡异的构建失败</h2>
<p>最近在部署一个 React 项目到 Vercel 时，遇到了一个令人困惑的问题：</p>
<pre><code class="bash language-bash"># 本地构建（成功）
pnpm run build
# ✅ 一切正常

# Vercel 构建（失败）
22:32:28.979 src/api/Article.ts(27,43): error TS2307: 
Cannot find module './HttpClient' or its corresponding type declarations.
</code></pre>
<p>奇怪的是，相同的代码、相同的依赖、相同的构建命令，在本地能够完美构建，但在 Vercel 上却失败了。</p>
<h2 id="问题根源：大小写敏感性的差异">问题根源：大小写敏感性的差异</h2>
<p>经过排查，发现问题出在文件命名上：</p>
<ul>
<li><strong>实际文件名</strong>: <code>httpClient.ts</code>（首字母小写）</li>
<li><strong>导入语句</strong>: <code>import HttpClient from './HttpClient';</code>（首字母大写）</li>
</ul>
<p>这个差异在不同操作系统环境下表现不同：</p>
<h3 id="操作系统差异">操作系统差异</h3>
<table>
<thead>
<tr>
<th>环境</th>
<th>大小写敏感性</th>
<th>行为</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows</td>
<td>不敏感</td>
<td><code>./HttpClient</code> 和 <code>./httpClient</code> 都能找到文件</td>
</tr>
<tr>
<td>macOS</td>
<td>通常不敏感</td>
<td>同上</td>
</tr>
<tr>
<td>Linux (Vercel)</td>
<td>敏感</td>
<td>必须精确匹配 <code>./HttpClient</code></td>
</tr>
</tbody>
</table>
<h3 id="git-的配置陷阱">Git 的配置陷阱</h3>
<p>问题的深层原因在于 Git 的配置：</p>
<pre><code class="bash language-bash"># 检查 Git 大小写配置
git config core.ignorecase
# 返回: true
</code></pre>
<p>当 <code>core.ignorecase=true</code> 时，Git 不会区分文件名的大小写，这就导致了：</p>
<ol>
<li>在 Windows/Mac 上开发时，一切正常</li>
<li>文件被提交为 <code>httpClient.ts</code>（小写）</li>
<li>但在 Linux 构建环境中，导入语句找不到对应的文件</li>
</ol>
<h2 id="解决方案：三步修复法">解决方案：三步修复法</h2>
<h3 id="第一步：诊断问题">第一步：诊断问题</h3>
<pre><code class="bash language-bash"># 查看实际文件名
find . -name "*httpclient*" -type f
# 输出: ./src/api/httpClient.ts

# 查看 Git 记录的文件名
git ls-files | grep -i httpclient
# 输出: src/api/httpClient.ts
</code></pre>
<h3 id="第二步：修复文件名">第二步：修复文件名</h3>
<pre><code class="bash language-bash"># 临时启用大小写敏感
git config core.ignorecase false

# 重命名文件（两步法避免冲突）
git mv src/api/httpClient.ts src/api/HttpClient.temp.ts
git mv src/api/HttpClient.temp.ts src/api/HttpClient.ts

# 提交修复
git commit -m "fix: correct HttpClient filename case sensitivity"
git push origin feat/reactpresss-config-v2
</code></pre>
<h3 id="第三步：验证修复">第三步：验证修复</h3>
<pre><code class="bash language-bash"># 在 GitHub 上确认文件名已更正
# 等待 Vercel 重新部署
# 构建应该成功通过
</code></pre>
<h2 id="预防措施：建立防护网">预防措施：建立防护网</h2>
<h3 id="1-项目级配置">1. 项目级配置</h3>
<p>在项目中添加 <code>.gitconfig</code> 文件：</p>
<pre><code class="ini language-ini">[core]
    ignorecase = false
</code></pre>
<h3 id="2-eslint-规则检查">2. ESLint 规则检查</h3>
<p>配置 ESLint 检查文件名规范：</p>
<pre><code class="javascript language-javascript">// .eslintrc.js
module.exports = {
  rules: {
    'unicorn/filename-case': [
      'error',
      {
        cases: {
          camelCase: true,    // 工具函数：camelCase
          pascalCase: true    // 类/组件：PascalCase
        }
      }
    ]
  }
};
</code></pre>
<h3 id="3-cicd-流水线检查">3. CI/CD 流水线检查</h3>
<p>在 GitHub Actions 中添加检查：</p>
<pre><code class="yaml language-yaml"># .github/workflows/check-filenames.yml
name: Check Filename Case
on: [push, pull_request]

jobs:
  check-case:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Check filename consistency
        run: |
          for file in $(find src -name "*.ts" -o -name "*.tsx"); do
            filename=$(basename "$file" .ts | basename "$file" .tsx)
            if [[ $filename =~ [A-Z] ]]; then
              echo "✓ $filename uses PascalCase"
            else
              echo "⚠ $filename - consider using PascalCase for components/classes"
            fi
          done
</code></pre>
<h3 id="4-预提交钩子">4. 预提交钩子</h3>
<p>使用 Husky 在提交前检查：</p>
<pre><code class="bash language-bash">#!/bin/bash
# .husky/pre-commit
find src -name "*.ts" -o -name "*.tsx" | while read file; do
    base=$(basename "$file")
    if [[ $base =~ ^[a-z] ]] &amp;&amp; [[ $base =~ \.(ts|tsx)$ ]]; then
        echo "警告: 建议类文件使用 PascalCase: $file"
    fi
done
</code></pre>
<h2 id="深入理解：为什么会有这种差异？">深入理解：为什么会有这种差异？</h2>
<h3 id="历史原因">历史原因</h3>
<ul>
<li><strong>Windows</strong>: 源于 DOS，设计初衷是用户友好，不区分大小写</li>
<li><strong>Linux</strong>: 源于 UNIX，强调精确和一致性，区分大小写</li>
<li><strong>macOS</strong>: 基于 UNIX，但默认文件系统 HFS+/APFS 通常不区分大小写</li>
</ul>
<h3 id="git-的设计选择">Git 的设计选择</h3>
<p>Git 为了跨平台兼容性，默认采用 <code>core.ignorecase=true</code>，这在实际开发中带来了便利，但也埋下了隐患。</p>
<h2 id="最佳实践总结">最佳实践总结</h2>
<ol>
<li><strong>统一命名规范</strong></li>
</ol>
<ul>
<li>类文件使用 PascalCase: <code>HttpClient.ts</code></li>
<li>工具函数使用 camelCase: <code>formatDate.ts</code></li>
<li>配置文件使用 kebab-case: <code>app-config.ts</code></li>
</ul>
<ol>
<li><strong>团队协作约定</strong></li>
</ol>
<ul>
<li>新成员入职时强调文件名规范</li>
<li>代码审查时注意文件名大小写</li>
<li>使用工具自动化检查</li>
</ul>
<ol>
<li><strong>跨平台开发策略</strong></li>
</ol>
<ul>
<li>主要开发环境尽量与生产环境一致（推荐使用 Linux 容器）</li>
<li>定期在 CI/CD 环境中测试构建</li>
<li>建立快速反馈机制</li>
</ul>
<h2 id="结语">结语</h2>
<p>这个看似简单的"大小写"问题，实际上涉及操作系统设计、Git 工作原理、团队协作规范等多个层面。在跨平台开发日益普遍的今天，我们需要更加重视这类环境差异导致的问题。</p>
<p><strong>记住：在本地能运行只是第一步，在生产环境能运行才是真正的完成。</strong></p>
<p>希望通过这个案例，你能避免类似的陷阱，建立更健壮的开发工作流。如果你也遇到过类似的跨平台兼容性问题，欢迎在评论区分享你的经验和解决方案！</p>
<hr />
<p><em>本文基于真实故障排查经历撰写，项目已成功部署。特别感谢 Vercel 清晰的错误日志，让问题定位变得容易。</em></p>]]></description><link>https://blog.gaoredu.com/article/948f0521-4a4c-41b9-be93-008d629d04da</link><guid isPermaLink="true">https://blog.gaoredu.com/article/948f0521-4a4c-41b9-be93-008d629d04da</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Sep 2025 13:37:30 GMT</pubDate></item><item><title><![CDATA[NestJS 安装服务稳定性问题分析与解决方案]]></title><description><![CDATA[<h2 id="问题概述">问题概述</h2>
<p>在使用 NestJS 构建安装向导服务时，开发人员经常会遇到一系列棘手问题，包括端口占用冲突、进程异常关闭、服务启动失败，以及安装成功后前端轮询无法正确检测服务状态等问题。这些问题不仅影响用户体验，还可能导致安装流程完全失败。</p>
<h2 id="问题一：偶发进程关闭异常">问题一：偶发进程关闭异常</h2>
<h3 id="根本原因分析">根本原因分析</h3>
<ol>
<li><strong>竞争条件</strong>：安装服务器关闭与主应用启动之间存在时间差，导致资源访问冲突</li>
<li><strong>状态管理缺失</strong>：缺乏服务器状态跟踪机制，无法判断服务器是否已完全关闭</li>
<li><strong>异常处理不足</strong>：关闭操作缺少超时控制和错误恢复机制</li>
<li><strong>资源未完全释放</strong>：连接和套接字未正确清理，导致端口占用</li>
</ol>
<h3 id="核心解决方案代码">核心解决方案代码</h3>
<pre><code class="typescript language-typescript">// 服务器状态跟踪接口
interface ServerState {
  server: any;
  isClosing: boolean;
  isListening: boolean;
}

// 全局状态管理
const serverState: ServerState = {
  server: null,
  isClosing: false,
  isListening: false
};

// 安全关闭服务器函数
const safelyCloseServer = async (): Promise&lt;void&gt; =&gt; {
  if (!serverState.server || serverState.isClosing) {
    return;
  }

  serverState.isClosing = true;

  return new Promise((resolve) =&gt; {
    // 设置超时强制关闭
    const timeout = setTimeout(() =&gt; {
      if (serverState.server.closeAllConnections) {
        serverState.server.closeAllConnections();
      }
      serverState.server = null;
      serverState.isClosing = false;
      serverState.isListening = false;
      resolve();
    }, 3000);

    // 尝试正常关闭
    serverState.server.close((err: any) =&gt; {
      clearTimeout(timeout);
      if (err &amp;&amp; err.code !== 'ERR_SERVER_NOT_RUNNING') {
        console.warn('Server close warning:', err.message);
      }
      serverState.server = null;
      serverState.isClosing = false;
      serverState.isListening = false;
      resolve();
    });
  });
};
</code></pre>
<h2 id="问题二：服务启动后轮询异常">问题二：服务启动后轮询异常</h2>
<h3 id="根本原因分析-1">根本原因分析</h3>
<ol>
<li><strong>时机不同步</strong>：前端轮询开始时，后端服务尚未完全初始化完成</li>
<li><strong>URL 不一致</strong>：前端使用固定URL轮询，但后端服务可能使用不同端口</li>
<li><strong>缺少超时处理</strong>：轮询请求可能无限期等待，导致浏览器阻塞</li>
<li><strong>错误处理不足</strong>：网络错误或服务暂时不可用时缺乏重试机制</li>
</ol>
<h3 id="核心解决方案代码-1">核心解决方案代码</h3>
<pre><code class="typescript language-typescript">// 后端：安装完成后返回正确的服务器URL
app.post('/install', async (req, res) =&gt; {
  try {
    // ... 安装逻辑

    res.json({ 
      success: true, 
      message: 'Installation completed! Server will restart.',
      serverUrl: site.serverUrl || 'http://localhost:3002' // 返回实际使用的URL
    });

    // 确保响应已发送后再关闭服务器
    res.on('finish', async () =&gt; {
      await safelyCloseServer();
      await startMainApplication();
    });
  } catch (error: any) {
    res.status(400).json({ 
      success: false, 
      message: `Installation failed: ${error.message}` 
    });
  }
});
</code></pre>
<pre><code class="javascript language-javascript">// 前端：智能轮询机制
let redirectAttempts = 0;
const maxRedirectAttempts = 30;

function startServerStatusCheck() {
  const checkInterval = setInterval(() =&gt; {
    if (redirectAttempts &gt;= maxRedirectAttempts) {
      clearInterval(checkInterval);
      showError('Server did not start in time');
      return;
    }

    // 使用HEAD请求和超时控制
    fetch(`${serverUrl}/api`, { 
      method: 'HEAD',
      signal: AbortSignal.timeout(3000)
    })
    .then(response =&gt; {
      if (response.ok) {
        clearInterval(checkInterval);
        window.location.href = `${serverUrl}/api`;
      } else {
        redirectAttempts++;
      }
    })
    .catch(() =&gt; {
      redirectAttempts++;
      updateStatusMessage(`Waiting for server... (${redirectAttempts}/${maxRedirectAttempts})`);
    });
  }, 2000);
}
</code></pre>
<h2 id="问题三：端口占用与服务启动失败">问题三：端口占用与服务启动失败</h2>
<h3 id="根本原因分析-2">根本原因分析</h3>
<ol>
<li><strong>端口竞争</strong>：多个服务实例尝试绑定相同端口</li>
<li><strong>进程残留</strong>：先前实例异常退出，端口未释放</li>
<li><strong>缺乏端口管理</strong>：没有端口检测和自动回退机制</li>
</ol>
<h3 id="核心解决方案代码-2">核心解决方案代码</h3>
<pre><code class="typescript language-typescript">// 端口检测函数
const checkPort = (port: number): Promise&lt;boolean&gt; =&gt; {
  return new Promise((resolve) =&gt; {
    const server = net.createServer();
    server.once('error', () =&gt; resolve(false));
    server.once('listening', () =&gt; server.once('close', () =&gt; resolve(true)).close());
    server.listen(port);
  });
};

// 查找可用端口
const findAvailablePort = async (startPort: number): Promise&lt;number&gt; =&gt; {
  for (let port = startPort; port &lt; startPort + 10; port++) {
    if (await checkPort(port)) {
      return port;
    }
  }
  throw new Error(`No available ports found in range ${startPort}-${startPort + 9}`);
};

// 等待端口释放
const waitForPort = async (port: number, timeout = 30000): Promise&lt;boolean&gt; =&gt; {
  const startTime = Date.now();

  while (Date.now() - startTime &lt; timeout) {
    if (await checkPort(port)) {
      return true;
    }
    await new Promise(resolve =&gt; setTimeout(resolve, 500));
  }

  return false;
};
</code></pre>
<h2 id="综合解决方案实施">综合解决方案实施</h2>
<h3 id="1-安装流程优化">1. 安装流程优化</h3>
<pre><code class="typescript language-typescript">const main = async () =&gt; {
  try {
    setupSignalHandlers();

    const envPath = join(__dirname, '../.env');
    if (fs.existsSync(envPath)) {
      console.log('[ReactPress] Environment file exists, starting main application');
      await startMainApplication();
      return;
    }

    console.log('[ReactPress] Starting installation wizard');
    await runInstallationWizard();

  } catch (error) {
    console.error('[ReactPress] Fatal error:', error);
    await safelyCloseServer();
    process.exit(1);
  }
};
</code></pre>
<h3 id="2-主应用启动流程">2. 主应用启动流程</h3>
<pre><code class="typescript language-typescript">const startMainApplication = async (): Promise&lt;void&gt; =&gt; {
  try {
    // 确保安装服务器完全关闭
    await safelyCloseServer();

    // 延迟启动以确保端口释放
    await new Promise(resolve =&gt; setTimeout(resolve, 1000));

    // 动态导入以避免在安装阶段加载 NestJS
    const { bootstrap } = await import('./starter');
    await bootstrap();
  } catch (error) {
    console.error('Failed to start main application:', error);
    process.exit(1);
  }
};
</code></pre>
<h2 id="总结">总结</h2>
<p>通过以上解决方案，我们成功解决了 NestJS 安装服务中的三个核心问题：</p>
<ol>
<li><strong>进程关闭异常</strong>：通过状态跟踪和安全关闭机制，确保服务器完全关闭后再启动新服务</li>
<li><strong>轮询异常</strong>：通过智能轮询机制、超时控制和正确的URL管理，确保前端能正确检测服务状态</li>
<li><strong>端口占用</strong>：通过端口检测、等待和自动查找机制，避免端口冲突</li>
</ol>
<p>这些解决方案不仅提高了安装服务的稳定性和可靠性，还显著改善了用户体验，使安装过程更加顺畅和可预测。关键技术点包括状态管理、资源清理、超时控制和渐进式回退策略，这些原则同样适用于其他类似的服务器应用场景。</p>]]></description><link>https://blog.gaoredu.com/article/2b15053d-f22e-4aea-8aec-70fd9cc057c7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2b15053d-f22e-4aea-8aec-70fd9cc057c7</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Sep 2025 01:45:24 GMT</pubDate></item><item><title><![CDATA[Alpha-Beta 剪枝：让智能体“聪明”地舍弃无用功]]></title><description><![CDATA[<h2 id="alpha-beta-剪枝：让智能体“聪明”地舍弃无用功">Alpha-Beta 剪枝：让智能体“聪明”地舍弃无用功</h2>
<p>想象你下棋时，每走一步都要考虑对手所有可能的反击，然后你再所有可能的应对…… 这种计算量会像大树一样疯狂分叉，几步之后可能就有数百万种局面需要评估，计算机也难以承受。这就是经典的<strong>极小极大算法（Minimax）</strong> 面临的“组合爆炸”难题。而 <strong>Alpha-Beta 剪枝（Alpha-Beta Pruning）</strong> 正是解决这一难题的“剪刀”，它能显著减少需要计算的节点数量，却不影响最终找到最优解！</p>
<h3 id="一、基础：极小极大算法（minimax）——博弈的“灵魂”">一、基础：极小极大算法（Minimax）——博弈的“灵魂”</h3>
<p>理解 Alpha-Beta 剪枝，先要了解它的基石：极小极大算法。</p>
<ul>
<li><strong>核心思想：</strong> 模拟两位理性玩家（Max 和 Min）的对抗。<ul>
<li><strong>Max玩家（你）：</strong> 总是选择能让自己评估<strong>得分最高</strong>的走法。</li>
<li><strong>Min玩家（对手）：</strong> 总是选择能让 Max <strong>得分最低</strong>的走法（相当于最大化他自己的利益）。</li></ul></li>
<li><strong>执行过程（深度优先搜索）：</strong><ol>
<li><strong>构建博弈树：</strong> 从当前局面开始，生成所有可能的走法分支，形成树状结构。</li>
<li><strong>评估叶子节点：</strong> 到达一定深度或游戏结束时，用评估函数给该局面打分（例如，国际象棋中，正分对 Max 有利，负分对 Min 有利）。</li>
<li><strong>向上回溯：</strong><ul>
<li>在 <strong>Min 层</strong>：节点值取<strong>子节点最小值</strong>（因为 Min 会选择最不利于 Max 的走法）。</li>
<li>在 <strong>Max 层</strong>：节点值取<strong>子节点最大值</strong>（因为 Max 会选择对自己最有利的走法）。</li></ul></li>
<li><strong>决策：</strong> 最终，根节点（当前局面）的值代表了在双方最优决策下的预期结果。Max 选择能到达这个最大值的分支走法。</li></ol></li>
</ul>
<p><strong>极小极大算法确保了在有限搜索深度内找到理论上的最优解，但其需要遍历整个博弈树，效率低下。</strong></p>
<h3 id="二、alpha-beta-剪枝：引入“哨兵”的智慧">二、Alpha-Beta 剪枝：引入“哨兵”的智慧</h3>
<p>Alpha-Beta 剪枝的核心妙处在于：<strong>它能在搜索过程中提前发现某些分支是“徒劳”的，从而安全地剪掉（跳过）这些分支的计算，大大提升效率。</strong></p>
<p>它引入了两个关键的“哨兵”变量，在搜索过程中动态传递信息：</p>
<ul>
<li><strong>α (Alpha)：</strong> 代表 Max 玩家<strong>当前已知的</strong>至少能获得的最好分数（下界）。初始值为 <code>-∞</code>。</li>
<li><strong>β (Beta)：</strong> 代表 Min 玩家<strong>当前已知的</strong>至多会让 Max 获得的分数（上界）。初始值为 <code>+∞</code>。</li>
</ul>
<h4 id="剪枝原理：何时能“剪”？">剪枝原理：何时能“剪”？</h4>
<p>剪枝发生在搜索过程中，当算法发现某个节点的值已经不可能对最终决策产生影响时。主要有两种情况：</p>
<ol>
<li><p><strong>在 Min 节点剪枝（Beta 剪枝）：</strong></p>
<ul>
<li>场景：你正在一个 Min 节点（对手决策点）评估它的子节点（即对手可能的走法）。</li>
<li>条件：当发现某个子节点的值 <code>V</code> <strong>≤</strong> 当前 α 值时。</li>
<li>推理：Min 节点的职责是选子节点中的<strong>最小值</strong>返回给它的父节点（一个 Max 节点）。如果已经有一个子节点的值 <code>V &lt;= α</code>，那么：<ul>
<li>这个 Min 节点最终返回的值<strong>最多是 <code>V</code>（如果其他子节点更大，Min 会选这个小的 <code>V</code>；如果其他子节点更小，Min 会选更小的那个）</strong>。</li>
<li>因此，这个 Min 节点返回的值<strong>肯定 ≤ <code>V</code></strong>，进而<strong>肯定 ≤ <code>α</code></strong>。</li></ul></li>
<li>结论：对于这个 Min 节点的父节点（一个 Max 节点）来说，它要选子节点（即当前这个 Min 节点）的<strong>最大值</strong>。既然这个子节点最多只能返回一个 ≤ α 的值，而 α 是 Max 已知的“至少能获得”的分数（可能来自其他分支），那么<strong>这个分支就不可能提供比 α 更好的结果给 Max</strong>。因此，Min 节点剩下的未搜索子节点<strong>完全没必要再计算了</strong>，可以剪掉！</li></ul></li>
<li><p><strong>在 Max 节点剪枝（Alpha 剪枝）：</strong></p>
<ul>
<li>场景：你正在一个 Max 节点（你的决策点）评估它的子节点（即你可能的选择）。</li>
<li>条件：当发现某个子节点的值 <code>V</code> <strong>≥</strong> 当前 β 值时。</li>
<li>推理：Max 节点的职责是选子节点中的<strong>最大值</strong>返回给它的父节点（一个 Min 节点）。如果已经有一个子节点的值 <code>V &gt;= β</code>，那么：<ul>
<li>这个 Max 节点最终返回的值<strong>至少是 <code>V</code>（如果其他子节点更小，Max 会选这个大的 <code>V</code>；如果其他子节点更大，Max 会选更大的那个）</strong>。</li>
<li>因此，这个 Max 节点返回的值<strong>肯定 ≥ <code>V</code></strong>，进而<strong>肯定 ≥ <code>β</code></strong>。</li></ul></li>
<li>结论：对于这个 Max 节点的父节点（一个 Min 节点）来说，它要选子节点（即当前这个 Max 节点）的<strong>最小值</strong>。既然这个子节点至少会返回一个 ≥ β 的值，而 β 是 Min 已知的“至多会让 Max 获得”的分数（可能来自其他分支），那么<strong>这个分支就不可能提供比 β 更差的结果给 Min</strong>（即 Min 无法通过选择这个分支把 Max 的分数压到比 β 更低）。因此，Max 节点剩下的未搜索子节点<strong>完全没必要再计算了</strong>，可以剪掉！</li></ul></li>
</ol>
<h4 id="形象比喻：砍价与拍卖">形象比喻：砍价与拍卖</h4>
<ul>
<li><strong>α (Alpha)：</strong> 买家（Max）的心理底线：“低于这个价我就肯定不买了！”（我能接受的最高价）。</li>
<li><strong>β (Beta)：</strong> 卖家（Min）的心理底线：“高于这个价我就肯定卖了！”（我能接受的最低价）。</li>
<li><strong>剪枝：</strong><ul>
<li>如果卖家发现一个潜在买家只出价 <strong>≤ α</strong> (买家的最高接受价)，卖家知道即使和其他买家谈，<strong>最终成交价也不可能高于 α</strong>，而买家只接受 ≤ α 的价格，那么卖家<strong>无需再和其他买家浪费时间谈更高价了</strong>（Beta 剪枝）。</li>
<li>如果买家发现一个卖家要价 <strong>≥ β</strong> (卖家的最低接受价)，买家知道即使和其他卖家谈，<strong>最终成交价也不可能低于 β</strong>，而卖家只接受 ≥ β 的价格，那么买家<strong>无需再和其他卖家浪费时间谈更低价了</strong>（Alpha 剪枝）。</li></ul></li>
</ul>
<h3 id="三、执行过程详解（图示）">三、执行过程详解（图示）</h3>
<p>假设一棵简单的博弈树（Max 在根节点）：</p>
<pre><code>          A (Max, α=-∞, β=+∞)
        /        |        \
      B(Min)    C(Min)    D(Min) &lt;-- 假设先搜索B，再C，最后D
     /  |  \    /  \      /  \
    3   5   1  2    8    4    6
</code></pre>
<ol>
<li><p><strong>搜索节点 B (Min):</strong></p>
<ul>
<li>初始化：<code>α = -∞</code>, <code>β = +∞</code> (从父节点 A 继承)。</li>
<li>搜索第一个子节点：值 = 3。<ul>
<li>B 作为 Min 节点，当前值 <code>V = min(3, ...) = 3</code>。</li>
<li>更新父节点 A 的潜在值：A 是 Max，所以可能通过 B 得到至少 3 -&gt; <strong>更新 A 的 α = 3</strong>。</li></ul></li>
<li>搜索第二个子节点：值 = 5。<ul>
<li>B 尝试找到最小值，当前 <code>min(3, 5) = 3</code>。</li>
<li>没有触发剪枝条件（5 &gt; α(A)=3？ 5 &gt; 3 成立，但 Min 节点剪枝条件是 <code>V &lt;= α</code>，这里 5 &gt; 3，不满足）。</li></ul></li>
<li>搜索第三个子节点：值 = 1。<ul>
<li>B 找到 <code>min(3, 5, 1) = 1</code>。</li>
<li>将 <code>V = 1</code> 返回给父节点 A。</li>
<li>更新 A：A 是 Max，收到子节点 B 的值 1。A 当前值取 max(…, 1)。<strong>更新 A 的 α = max(3, 1) = 3</strong> (α 只能增加或保持不变)。</li></ul></li></ul></li>
<li><p><strong>搜索节点 C (Min):</strong></p>
<ul>
<li>初始化：<code>α = 3</code> (从父节点 A 继承，因为 A 的 α 已被 B 更新为 3), <code>β = +∞</code>。</li>
<li>搜索第一个子节点：值 = 2。<ul>
<li>C 作为 Min 节点，当前值 <code>V = min(2, ...) = 2</code>。</li>
<li><strong>检查剪枝条件：<code>V (2) &lt;= α (3)</code>？ 2 <= 3 -> 成立！触发 Beta 剪枝！</strong></li></ul></li>
<li><strong>为什么能剪？</strong><ul>
<li>父节点 A (Max) 的当前 α 是 3（已知至少能从 B 节点得到 3）。</li>
<li>节点 C (Min) 的第一个子节点值已经是 2。</li>
<li>因为 C 是 Min 节点，它最终返回给 A 的值 <strong>≤ 2</strong>（即使第二个子节点是 8，Min 也会选 2 返回；如果第二个子节点小于 2，Min 会选更小的返回）。</li>
<li>因此，C 返回的值 <strong>≤ 2 < 3 (A 的 α)</strong>。</li>
<li>对于父节点 A (Max) 来说，它要在子节点 B、C、D 中选最大值。B 返回了 1，C 最多返回 ≤ 2 (&lt;3)，即使 D 返回一个很大的值（比如 100），A 也能通过其他路径知道至少能得 3（α=3）。所以，C 节点返回的值（≤2）<strong>不可能比 A 当前已知的 α(3) 更大</strong>，也就不可能成为 A 的最优选择。</li></ul></li>
<li><strong>动作：</strong> 剪掉节点 C 的第二个子节点（值为 8），<strong>不计算它！</strong> C 直接返回当前已知值 2 给 A。</li>
<li>更新 A：A 收到 C 的值 2。A 当前值取 max(当前值, 2) = max(3, 2) = 3。A 的 α 保持为 3。</li></ul></li>
<li><p><strong>搜索节点 D (Min):</strong></p>
<ul>
<li>初始化：<code>α = 3</code>, <code>β = +∞</code> (从父节点 A 继承)。</li>
<li>搜索第一个子节点：值 = 4。<ul>
<li>D 作为 Min 节点，当前值 <code>V = min(4, ...) = 4</code>。</li>
<li>检查剪枝条件：<code>4 &lt;= α(3)</code>？ 4 <= 3？ <strong>不成立</strong>（4 > 3）。继续搜索。</li></ul></li>
<li>搜索第二个子节点：值 = 6。<ul>
<li>D 找到 <code>min(4, 6) = 4</code>。</li>
<li>将 <code>V = 4</code> 返回给父节点 A。</li></ul></li>
<li>更新 A：A 收到 D 的值 4。A 最终值取 <code>max(1 (B), 2 (C), 4 (D)) = 4</code>。<strong>A 选择走向 D 节点</strong>。</li></ul></li>
</ol>
<p><strong>关键结果：</strong> 通过剪枝，我们<strong>跳过了计算 C 节点的第二个子节点（值为 8）和 D 节点的部分计算（在计算第一个子节点后仍需计算第二个，因为未触发剪枝）</strong>。最终结果（A=4）与完整遍历极小极大树的结果完全一致（Max 选 D，Min 在 D 下选 4）。效率得到了提升！</p>
<h3 id="四、威力与技巧">四、威力与技巧</h3>
<ul>
<li><strong>效率提升：</strong> Alpha-Beta 剪枝的效果极其显著。在<strong>最优顺序</strong>（最可能引发剪枝的顺序）下，它可以将极小极大算法需要搜索的节点数从 <code>O(b^d)</code> 减少到 <code>O(b^(d/2))</code>。这意味着搜索深度可以<strong>加倍</strong>！例如，原来能搜 6 层，现在可能搜到 12 层，棋力大幅提升。</li>
<li><strong>关键：节点顺序！</strong> 剪枝效率高度依赖子节点被访问的顺序：<ul>
<li><strong>Max 节点：</strong> 优先搜索<strong>估值最高</strong>（或最有希望最高）的子节点。这能让 α 快速增大，更容易在后续 Min 节点触发 Beta 剪枝 (<code>V &lt;= α</code>)。</li>
<li><strong>Min 节点：</strong> 优先搜索<strong>估值最低</strong>（或最有希望最低）的子节点。这能让 β 快速减小，更容易在后续 Max 节点触发 Alpha 剪枝 (<code>V &gt;= β</code>)。</li></ul></li>
<li><strong>启发式排序：</strong> 实践中，使用<strong>启发式评估函数</strong>对子节点进行快速排序，预估它们的“好坏”，以接近最优顺序，最大化剪枝效果。</li>
<li><strong>其他优化：</strong> Alpha-Beta 是基础，常与其他技术结合：<ul>
<li><strong>迭代加深（Iterative Deepening）：</strong> 先浅层搜索确定好顺序，再用此顺序进行更深的搜索。</li>
<li><strong>置换表（Transposition Table）：</strong> 存储已计算过的局面结果，避免重复计算。</li>
<li><strong>杀手启发（Killer Heuristic）：</strong> 记录在树中其他位置导致剪枝的好走法，优先尝试。</li>
<li><strong>历史启发（History Heuristic）：</strong> 统计历史上走法在引发剪枝方面的效果，优先尝试效果好（常引发剪枝）的走法。</li></ul></li>
</ul>
<h3 id="五、应用场景">五、应用场景</h3>
<p>Alpha-Beta 剪枝是经典博弈 AI 的核心算法，广泛应用于所有<strong>零和、完全信息、确定性</strong>的两人博弈中：</p>
<ul>
<li><strong>国际象棋（Chess）：</strong> Deep Blue 等早期顶尖AI的核心。</li>
<li><strong>围棋（Go）：</strong> 在蒙特卡洛树搜索（MCTS）兴起之前，是传统围棋AI的基础（尽管围棋分支因子巨大，单独使用效果有限）。</li>
<li><strong>西洋跳棋（Checkers / Draughts）：</strong> 首个被计算机完全解决的跳棋程序 Chinook 的核心。</li>
<li><strong>五子棋（Gomoku）、黑白棋（Reversi / Othello）、中国象棋、国际跳棋等：</strong> 几乎所有需要强搜索能力的棋类 AI。</li>
<li><strong>一些益智游戏和谜题求解。</strong></li>
</ul>
<h3 id="总结">总结</h3>
<p>Alpha-Beta 剪枝算法是计算机博弈论中一项优雅而强大的优化技术。它通过在极小极大搜索树的遍历过程中，动态维护 α（Max 的下界）和 β（Min 的上界）这两个边界值，并基于“不可能更好”或“不可能更差”的逻辑，安全地剪除那些<strong>不影响最终决策结果</strong>的子树分支。虽然其理论最优效率依赖于子节点搜索顺序，但在配合启发式排序和其他优化技术（如置换表、迭代加深）后，它能将博弈程序的搜索能力提升数倍，使其在复杂的策略游戏中展现出接近人类大师甚至超越人类的水平。理解 Alpha-Beta 剪枝，是打开经典博弈人工智能大门的一把关键钥匙。</p>]]></description><link>https://blog.gaoredu.com/article/54909b9f-e606-484e-89e4-e62437e01d55</link><guid isPermaLink="true">https://blog.gaoredu.com/article/54909b9f-e606-484e-89e4-e62437e01d55</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 30 May 2025 05:43:33 GMT</pubDate></item><item><title><![CDATA[深入剖析JavaScript的事件循环]]></title><description><![CDATA[<h1 id="事件循环">事件循环</h1>
<h2 id="浏览器的进程模型">浏览器的进程模型</h2>
<h3 id="何为进程？">何为进程？</h3>
<p>程序运行需要有它自己专属的内存空间，可以把这块内存空间简单的理解为进程</p>
<p><img src="https://api.gaoredu.com/public/uploads/2025-01-06/QK3DAE07M1M3F07RUQZV4E..png" alt="图片" /></p>
<p>每个应用至少有一个进程，进程之间相互独立，即使要通信，也需要双方同意。</p>
<h3 id="何为线程？">何为线程？</h3>
<p>有了进程后，就可以运行程序的代码了。</p>
<p>运行代码的「人」称之为「线程」。</p>
<p>一个进程至少有一个线程，所以在进程开启后会自动创建一个线程来运行代码，该线程称之为主线程。</p>
<p>如果程序需要同时执行多块代码，主线程就会启动更多的线程来执行代码，所以一个进程中可以包含多个线程。</p>
<p><img src="https://api.gaoredu.com/public/uploads/2025-01-06/QK3DAE07M1M3F07RUQZVBS..png" alt="图片" /></p>
<h3 id="浏览器有哪些进程和线程？">浏览器有哪些进程和线程？</h3>
<p><strong>浏览器是一个多进程多线程的应用程序</strong></p>
<p>浏览器内部工作极其复杂。</p>
<p>为了避免相互影响，为了减少连环崩溃的几率，当启动浏览器后，它会自动启动多个进程。</p>
<p><img src="https://api.gaoredu.com/public/uploads/2025-01-06/QK3DAE07M1M3F07RUQZVJ6..png" alt="图片" /></p>
<blockquote>
  <p>可以在浏览器的任务管理器中查看当前的所有进程</p>
</blockquote>
<p>其中，最主要的进程有：</p>
<ol>
<li><p>浏览器进程</p>
<p>主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。</p></li>
<li><p>网络进程</p>
<p>负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。</p></li>
<li><p><strong>渲染进程</strong>（本节课重点讲解的进程）</p>
<p>渲染进程启动后，会开启一个<strong>渲染主线程</strong>，主线程负责执行 HTML、CSS、JS 代码。</p>
<p>默认情况下，浏览器会为每个标签页开启一个新的渲染进程，以保证不同的标签页之间不相互影响。</p></li>
</ol>
<blockquote>
  <p>将来该默认模式可能会有所改变，有兴趣的同学可参见<a href="https://chromium.googlesource.com/chromium/src/+/main/docs/process_model_and_site_isolation.md#Modes-and-Availability">chrome官方说明文档</a></p>
</blockquote>
<h2 id="渲染主线程是如何工作的？">渲染主线程是如何工作的？</h2>
<p>渲染主线程是浏览器中最繁忙的线程，需要它处理的任务包括但不限于：</p>
<ul>
<li>解析 HTML</li>
<li>解析 CSS</li>
<li>计算样式</li>
<li>布局</li>
<li>处理图层</li>
<li>每秒把页面画 60 次</li>
<li>执行全局 JS 代码</li>
<li>执行事件处理函数</li>
<li>执行计时器的回调函数</li>
<li>……</li>
</ul>
<blockquote>
  <p>思考题：为什么渲染进程不适用多个线程来处理这些事情？</p>
</blockquote>
<p>要处理这么多的任务，主线程遇到了一个前所未有的难题：如何调度任务？</p>
<p>比如：</p>
<ul>
<li>我正在执行一个 JS 函数，执行到一半的时候用户点击了按钮，我该立即去执行点击事件的处理函数吗？</li>
<li>我正在执行一个 JS 函数，执行到一半的时候某个计时器到达了时间，我该立即去执行它的回调吗？</li>
<li>浏览器进程通知我“用户点击了按钮”，与此同时，某个计时器也到达了时间，我应该处理哪一个呢？</li>
<li>……</li>
</ul>
<p>渲染主线程想出了一个绝妙的主意来处理这个问题：排队</p>
<p><img src="http://mdrs.yuanjin.tech/img/202208092230847.png" alt="image-20220809223027806" /></p>
<ol>
<li>在最开始的时候，渲染主线程会进入一个无限循环</li>
<li>每一次循环会检查消息队列中是否有任务存在。如果有，就取出第一个任务执行，执行完一个后进入下一次循环；如果没有，则进入休眠状态。</li>
<li>其他所有线程（包括其他进程的线程）可以随时向消息队列添加任务。新任务会加到消息队列的末尾。在添加新任务时，如果主线程是休眠状态，则会将其唤醒以继续循环拿取任务</li>
</ol>
<p>这样一来，就可以让每个任务有条不紊的、持续的进行下去了。</p>
<p><strong>整个过程，被称之为事件循环（消息循环）</strong></p>
<h2 id="若干解释">若干解释</h2>
<h3 id="何为异步？">何为异步？</h3>
<p>代码在执行过程中，会遇到一些无法立即处理的任务，比如：</p>
<ul>
<li>计时完成后需要执行的任务 —— <code>setTimeout</code>、<code>setInterval</code></li>
<li>网络通信完成后需要执行的任务 -- <code>XHR</code>、<code>Fetch</code></li>
<li>用户操作后需要执行的任务 -- <code>addEventListener</code></li>
</ul>
<p>如果让渲染主线程等待这些任务的时机达到，就会导致主线程长期处于「阻塞」的状态，从而导致浏览器「卡死」</p>
<p><img src="https://api.gaoredu.com/public/uploads/2025-01-06/QK3DAE07M1M3F07RUQZUX0..png" alt="图片" /></p>
<p><strong>渲染主线程承担着极其重要的工作，无论如何都不能阻塞！</strong></p>
<p>因此，浏览器选择<strong>异步</strong>来解决这个问题</p>
<p><img src="https://api.gaoredu.com/public/uploads/2025-01-06/QK3DAE07M1M3F07RUQZVQK..png" alt="图片" /></p>
<p>使用异步的方式，<strong>渲染主线程永不阻塞</strong></p>
<blockquote>
  <p>面试题：如何理解 JS 的异步？</p>
  <p>参考答案：</p>
  <p>JS是一门单线程的语言，这是因为它运行在浏览器的渲染主线程中，而渲染主线程只有一个。</p>
  <p>而渲染主线程承担着诸多的工作，渲染页面、执行 JS 都在其中运行。</p>
  <p>如果使用同步的方式，就极有可能导致主线程产生阻塞，从而导致消息队列中的很多其他任务无法得到执行。这样一来，一方面会导致繁忙的主线程白白的消耗时间，另一方面导致页面无法及时更新，给用户造成卡死现象。</p>
  <p>所以浏览器采用异步的方式来避免。具体做法是当某些任务发生时，比如计时器、网络、事件监听，主线程将任务交给其他线程去处理，自身立即结束任务的执行，转而执行后续代码。当其他线程完成时，将事先传递的回调函数包装成任务，加入到消息队列的末尾排队，等待主线程调度执行。</p>
  <p>在这种异步模式下，浏览器永不阻塞，从而最大限度的保证了单线程的流畅运行。</p>
</blockquote>
<h3 id="js为何会阻碍渲染？">JS为何会阻碍渲染？</h3>
<p>先看代码</p>
<pre><code class="html language-html">&lt;h1&gt;Mr.Yuan is awesome!&lt;/h1&gt;
&lt;button&gt;change&lt;/button&gt;
&lt;script&gt;
  var h1 = document.querySelector('h1');
  var btn = document.querySelector('button');

  // 死循环指定的时间
  function delay(duration) {
    var start = Date.now();
    while (Date.now() - start &lt; duration) {}
  }

  btn.onclick = function () {
    h1.textContent = '袁老师很帅！';
    delay(3000);
  };
&lt;/script&gt;
</code></pre>
<p>点击按钮后，会发生什么呢？</p>
<p><见具体演示></p>
<h3 id="任务有优先级吗？">任务有优先级吗？</h3>
<p>任务没有优先级，在消息队列中先进先出</p>
<p>但<strong>消息队列是有优先级的</strong></p>
<p>根据 W3C 的最新解释:</p>
<ul>
<li>每个任务都有一个任务类型，同一个类型的任务必须在一个队列，不同类型的任务可以分属于不同的队列。<br />
在一次事件循环中，浏览器可以根据实际情况从不同的队列中取出任务执行。</li>
<li>浏览器必须准备好一个微队列，微队列中的任务优先所有其他任务执行<br />
<a href="https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint">https://html.spec.whatwg.org/multipage/webappapis.html#perform-a-microtask-checkpoint</a></li>
</ul>
<blockquote>
  <p>随着浏览器的复杂度急剧提升，W3C 不再使用宏队列的说法</p>
</blockquote>
<p>在目前 chrome 的实现中，至少包含了下面的队列：</p>
<ul>
<li>延时队列：用于存放计时器到达后的回调任务，优先级「中」</li>
<li>交互队列：用于存放用户操作后产生的事件处理任务，优先级「高」</li>
<li>微队列：用户存放需要最快执行的任务，优先级「最高」</li>
</ul>
<blockquote>
  <p>添加任务到微队列的主要方式主要是使用 Promise、MutationObserver</p>
  <p>例如：</p>
<pre><code class="js language-js">// 立即把一个函数添加到微队列
Promise.resolve().then(函数)
</code></pre>
  <p>浏览器还有很多其他的队列，由于和我们开发关系不大，不作考虑</p>
  <p>面试题：阐述一下 JS 的事件循环</p>
  <p>参考答案：</p>
  <p>事件循环又叫做消息循环，是浏览器渲染主线程的工作方式。</p>
  <p>在 Chrome 的源码中，它开启一个不会结束的 for 循环，每次循环从消息队列中取出第一个任务执行，而其他线程只需要在合适的时候将任务加入到队列末尾即可。</p>
  <p>过去把消息队列简单分为宏队列和微队列，这种说法目前已无法满足复杂的浏览器环境，取而代之的是一种更加灵活多变的处理方式。</p>
  <p>根据 W3C 官方的解释，每个任务有不同的类型，同类型的任务必须在同一个队列，不同的任务可以属于不同的队列。不同任务队列有不同的优先级，在一次事件循环中，由浏览器自行决定取哪一个队列的任务。但浏览器必须有一个微队列，微队列的任务一定具有最高的优先级，必须优先调度执行。</p>
  <p>面试题：JS 中的计时器能做到精确计时吗？为什么？</p>
  <p>参考答案：</p>
  <p>不行，因为：</p>
  <ol>
  <li>计算机硬件没有原子钟，无法做到精确计时</li>
  <li>操作系统的计时函数本身就有少量偏差，由于 JS 的计时器最终调用的是操作系统的函数，也就携带了这些偏差</li>
  <li>按照 W3C 的标准，浏览器实现计时器时，如果嵌套层级超过 5 层，则会带有 4 毫秒的最少时间，这样在计时时间少于 4 毫秒时又带来了偏差</li>
  <li>受事件循环的影响，计时器的回调函数只能在主线程空闲时运行，因此又带来了偏差</li>
  </ol>
</blockquote>]]></description><link>https://blog.gaoredu.com/article/7cec588c-ce14-4e4f-960c-67404759136f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7cec588c-ce14-4e4f-960c-67404759136f</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 05 Jan 2025 16:16:29 GMT</pubDate></item><item><title><![CDATA[jQuery框架源码解析与实现]]></title><description><![CDATA[<h3 id="实现一个类似于jquery功能的轻量级框架">实现一个类似于jQuery功能的轻量级框架</h3>
<p>在现代前端开发中，jQuery仍然是一个经典且强大的工具库，但有时候，出于性能优化或自定义功能的需求，我们可能需要实现一个轻量级的框架来满足特定的需求。本文将带你一步一步实现一个类似于jQuery功能的轻量级框架，称之为<code>Xframe</code>。</p>
<h4 id="一、项目结构与设计思路">一、项目结构与设计思路</h4>
<h5 id="1-项目结构">1. 项目结构</h5>
<p>我们的项目将分为几个主要模块：</p>
<ul>
<li><strong>主框架</strong>：用于获取DOM元素集合并支持链式调用。</li>
<li><strong>公共框架</strong>：包含字符串处理、数组操作、数据类型检测等通用功能。</li>
<li><strong>事件框架</strong>：实现事件绑定和解绑功能。</li>
<li><strong>CSS框架</strong>：提供CSS类操作、元素显示隐藏、尺寸获取等功能。</li>
<li><strong>属性框架</strong>：操作DOM元素的属性。</li>
<li><strong>内容框架</strong>：操作DOM元素的内容（HTML、文本、值）。</li>
<li><strong>动画框架</strong>：实现简单的动画效果。</li>
</ul>
<h5 id="2-设计思路">2. 设计思路</h5>
<ul>
<li><strong>链式调用</strong>：通过返回一个对象实例本身来支持链式调用。</li>
<li><strong>扩展性</strong>：使用<code>extend</code>方法允许动态添加方法。</li>
<li><strong>模块化</strong>：每个功能模块都封装在单独的闭包中，以减少全局变量的污染。</li>
</ul>
<h4 id="二、实现主框架">二、实现主框架</h4>
<p>首先，我们需要实现一个基础的框架，能够获取DOM元素并支持链式调用。</p>
<pre><code class="javascript language-javascript">(function (w) {
    var xframe = function (selector, context) {
        return this.init.apply(this, [selector, context]);
    };

    xframe.prototype.init = function (selector, context) {
        this.length = 0;
        if (typeof selector === 'string') {
            var nodeList = (context || document).querySelectorAll(selector);
            this.length = nodeList.length;
            for (var i = 0; i &lt; this.length; i++) {
                this[i] = nodeList[i];
            }
        } else if (selector.nodeType) {
            this[0] = selector;
            this.length = 1;
        }
        return this;
    };

    var $$ = function (selector, context) {
        if (typeof selector === 'function') {
            w.onload = selector;
        } else {
            return new xframe(selector, context);
        }
    };

    $$.extend = function () {
        var len = arguments.length, target = null, i = 1, key;
        if (len === 0) return;
        if (len === 1) {
            target = xframe.prototype;
            i--;
        } else {
            target = arguments[0];
        }
        for (; i &lt; len; i++) {
            for (key in arguments[i]) {
                target[key] = arguments[i][key];
            }
        }
        return target;
    };

    w.xframe = w.$ = $$;
})(window);
</code></pre>
<h4 id="三、实现功能模块">三、实现功能模块</h4>
<h5 id="1-公共框架">1. 公共框架</h5>
<p>公共框架包含一些基础的功能，如字符串处理、数组操作等。这里仅给出结构，具体实现可根据需求编写。</p>
<pre><code class="javascript language-javascript">(function (xframe) {
    // 字符串处理模块
    xframe.extend(xframe, {
        // 实现 ltrim, rtrim, trim 等方法
    });

    // 数组相关模块
    xframe.extend(xframe, {
        // 实现数组操作方法
    });

    // 数据类型检验模块
    xframe.extend(xframe, {
        isNumber: function (obj) {
            return typeof obj === 'number' &amp;&amp; !isNaN(obj);
        },
        // 实现其他数据类型检测方法
    });
})(xframe);
</code></pre>
<h5 id="2-事件框架">2. 事件框架</h5>
<p>事件框架实现事件绑定和解绑功能。</p>
<pre><code class="javascript language-javascript">(function (xframe) {
    xframe.extend({
        on: function (event, handler) {
            return this.each(function (index, element) {
                element.addEventListener(event, handler);
            });
        },
        // 实现 off 方法
    });
})(xframe);
</code></pre>
<h5 id="3-css框架">3. CSS框架</h5>
<p>CSS框架提供CSS类操作、元素显示隐藏、尺寸获取等功能。</p>
<pre><code class="javascript language-javascript">(function (xframe) {
    xframe.extend({
        css: function (property, value) {
            return this.each(function (index, element) {
                element.style[property] = value;
            });
        },
        show: function () {
            return this.css('display', '');
        },
        hide: function () {
            return this.css('display', 'none');
        },
        // 实现其他CSS相关方法
    });
})(xframe);
</code></pre>
<h5 id="4-属性框架">4. 属性框架</h5>
<p>属性框架提供操作DOM元素属性的方法。</p>
<pre><code class="javascript language-javascript">(function (xframe) {
    xframe.extend({
        attr: function (name, value) {
            if (value !== undefined) {
                return this.each(function (index, element) {
                    element.setAttribute(name, value);
                });
            } else {
                return this[0] ? this[0].getAttribute(name) : null;
            }
        },
        addClass: function (className) {
            return this.each(function (index, element) {
                element.classList.add(className);
            });
        },
        removeClass: function (className) {
            return this.each(function (index, element) {
                element.classList.remove(className);
            });
        },
    });
})(xframe);
</code></pre>
<h5 id="5-内容框架">5. 内容框架</h5>
<p>内容框架提供操作DOM元素内容的方法。</p>
<pre><code class="javascript language-javascript">(function (xframe) {
    xframe.html = function (htmlString) {
        if (htmlString !== undefined) {
            return this.each(function (index, element) {
                element.innerHTML = htmlString;
            });
        } else {
            return this[0] ? this[0].innerHTML : null;
        }
    };

    xframe.text = function (textString) {
        if (textString !== undefined) {
            return this.each(function (index, element) {
                element.textContent = textString;
            });
        } else {
            return this[0] ? this[0].textContent : null;
        }
    };

    xframe.val = function (value) {
        if (value !== undefined) {
            return this.each(function (index, element) {
                element.value = value;
            });
        } else {
            return this[0] ? this[0].value : null;
        }
    };
})(xframe);
</code></pre>
<h5 id="6-动画框架">6. 动画框架</h5>
<p>动画框架实现简单的动画效果。这里只给出结构，具体实现可根据需求编写。</p>
<pre><code class="javascript language-javascript">(function () {
    function Animate() {
        // 动画实现
    }

    Animate.prototype = {
        // 动画方法
    };

    // 将Animate绑定到xframe上
    xframe.animate = function (options) {
        return new Animate(this, options);
    };
})();
</code></pre>
<h4 id="四、总结">四、总结</h4>
<p>通过以上步骤，我们实现了一个类似于jQuery功能的轻量级框架<code>Xframe</code>。它包含了获取DOM元素、事件处理、CSS操作、属性操作、内容操作以及动画功能。你可以根据自己的需求，进一步完善和扩展这个框架。</p>
<p><code>Xframe</code>不仅可以帮助你理解jQuery的底层实现原理，还可以作为一个轻量级的选择，满足你项目中特定的需求。希望这篇文章对你有所帮助，祝你在前端开发的道路上越走越远！</p>]]></description><link>https://blog.gaoredu.com/article/31b39014-f30f-46e6-b595-f5674cd411dc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/31b39014-f30f-46e6-b595-f5674cd411dc</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 23 Dec 2024 15:51:58 GMT</pubDate></item><item><title><![CDATA[Next.js SEO优化方案全解析]]></title><description><![CDATA[<blockquote>
  <p>在现代Web开发中，搜索引擎优化（SEO）是提高网站可见性和流量的重要手段。Next.js作为一个功能强大的React框架，凭借其内置的SEO支持以及丰富的工具和策略，成为构建高性能、SEO友好的Web应用的首选框架之一。本文将深入探讨Next.js的SEO优化方案，并通过代码示例展示具体实现方法。</p>
</blockquote>
<h4 id="一、nextjs的seo优势">一、Next.js的SEO优势</h4>
<p>Next.js提供了多种内置功能，使得开发者能够轻松实现SEO优化。这些功能包括但不限于：</p>
<ol>
<li><strong>自动处理<code>&lt;head&gt;</code>标签</strong>：Next.js提供了<code>Head</code>组件，允许开发者动态管理页面的元信息，如标题、描述、canonical等。</li>
<li><strong>预渲染技术</strong>：Next.js支持静态生成（Static Generation, SG）和服务器端渲染（Server-Side Rendering, SSR），这两种技术都能提供完整的HTML结构供搜索引擎爬虫抓取，从而提升SEO排名。</li>
<li><strong>基于文件的路由系统</strong>：Next.js使用基于文件的路由系统，使得创建干净且对SEO友好的URL变得容易。</li>
<li><strong>next-seo库</strong>：next-seo是一个专门为Next.js设计的库，它提供了一组React组件，允许开发者轻松地将与SEO相关的元标记添加到页面中。</li>
</ol>
<h4 id="二、nextjs-seo优化方案">二、Next.js SEO优化方案</h4>
<h5 id="1-使用head组件管理页面元信息">1. 使用<code>Head</code>组件管理页面元信息</h5>
<p>Next.js的<code>Head</code>组件允许开发者在页面中设置和管理<code>&lt;head&gt;</code>标签，这些标签对于搜索引擎来说非常重要。通过<code>Head</code>组件，可以设置页面的标题、描述信息以及关键词等，从而吸引搜索引擎和用户的关注，提升网站在搜索结果中的点击率。</p>
<pre><code class="jsx language-jsx">import Head from 'next/head';

const HomePage = () =&gt; (
  &lt;&gt;
    &lt;Head&gt;
      &lt;title&gt;Home Page&lt;/title&gt;
      &lt;meta name="description" content="This is the description of the Home Page" /&gt;
    &lt;/Head&gt;
    &lt;h1&gt;Welcome to the Home Page!&lt;/h1&gt;
  &lt;/&gt;
);

export default HomePage;
</code></pre>
<h5 id="2-使用next-seo库添加元标记">2. 使用next-seo库添加元标记</h5>
<p>next-seo是一个流行的库，它允许开发者轻松地将与SEO相关的元标记添加到Next.js应用程序中。搜索引擎使用这些标签（如标题和描述标签）来了解页面内容并将其显示在搜索结果中。</p>
<p>首先，需要安装next-seo库：</p>
<pre><code class="bash language-bash">npm install next-seo
# 或者
yarn add next-seo
</code></pre>
<p>然后，在页面中导入并使用next-seo组件：</p>
<pre><code class="jsx language-jsx">import Head from 'next/head';
import { DefaultSeo, SEO } from 'next-seo';

const Home = () =&gt; {
  return (
    &lt;div&gt;
      &lt;Head&gt;
        &lt;title&gt;My Next.js App&lt;/title&gt;
      &lt;/Head&gt;
      &lt;SEO
        title="My Next.js App"
        description="This is my Next.js app, it's awesome!"
        openGraph={{
          title: 'My Next.js App',
          description: 'This is my Next.js app, it\'s awesome!',
          url: 'https://mynextjsapp.com',
          images: [
            {
              url: 'https://mynextjsapp.com/og-image.jpg',
              alt: 'My Next.js App',
            },
          ],
          site_name: 'My Next.js App',
        }}
      /&gt;
      &lt;p&gt;Welcome to my Next.js app!&lt;/p&gt;
    &lt;/div&gt;
  );
};

export default Home;
</code></pre>
<p>在这个示例中，我们使用了<code>SEO</code>组件来设置页面的标题、描述以及OpenGraph标签。同时，<code>Head</code>组件中也设置了标题标签，这是Next.js中添加元标签的标准方式。</p>
<h5 id="3-优化url结构">3. 优化URL结构</h5>
<p>合理的URL结构能提升搜索引擎对网站的认可度，从而带来更好的排名和流量。Next.js使用基于文件的路由系统，使得创建干净且对SEO友好的URL变得容易。此外，Next.js还支持动态路由，允许开发者创建具有良好结构的URL。</p>
<pre><code class="jsx language-jsx">import { useRouter } from 'next/router';

const Post = () =&gt; {
  const router = useRouter();
  const { id } = router.query;
  return &lt;p&gt;Post: {id}&lt;/p&gt;;
};

export default Post;
</code></pre>
<p>在这个示例中，我们创建了一个动态路由页面<code>Post</code>，通过<code>useRouter</code>钩子获取路由参数<code>id</code>，并将其显示在页面中。</p>
<h5 id="4-内容质量和关键词优化">4. 内容质量和关键词优化</h5>
<p>除了技术层面的优化，还需要关注网站的内容质量和关键词优化。Next.js的静态生成和服务端渲染能够帮助实现高质量的内容展示，而在内容中合理地布局关键词，并进行内部链接的优化，也是提升网站SEO的重要策略。</p>
<h5 id="5-使用预渲染技术提升性能">5. 使用预渲染技术提升性能</h5>
<p>Next.js提供了静态生成和服务器端渲染两种预渲染技术，这两种技术都能提供完整的HTML结构供搜索引擎爬虫抓取，从而提升SEO排名。同时，预渲染技术还能显著提升页面加载速度和服务器资源利用率。</p>
<ul>
<li><strong>静态生成</strong>：适用于内容相对固定、更新频率较低的页面。</li>
</ul>
<pre><code class="jsx language-jsx">export const getStaticProps = async () =&gt; {
  const posts = await fetchPostsFromApi(); // 获取静态数据
  return {
    props: { posts },
    revalidate: 60, // 可选，指定数据刷新间隔（秒）
  };
};

function HomePage({ posts }) {
  // 页面渲染逻辑
}
</code></pre>
<ul>
<li><strong>服务器端渲染</strong>：适用于需要实时数据、个性化内容或动态路由的应用场景。</li>
</ul>
<pre><code class="jsx language-jsx">export const getServerSideProps = async (context) =&gt; {
  const currentUserId = context.req.user?.id; // 从请求上下文中获取当前用户ID
  const personalizedData = await fetchPersonalizedData(currentUserId); // 获取实时数据
  return {
    props: { personalizedData },
  };
};

function UserProfilePage({ personalizedData }) {
  // 页面渲染逻辑
}
</code></pre>
<h5 id="6-图片优化">6. 图片优化</h5>
<p>在网站开发中，图片通常是占用较大资源的内容。Next.js提供了<code>Image</code>组件来进行图片优化，包括懒加载、响应式加载等策略，以提升页面的加载速度和性能表现。</p>
<pre><code class="jsx language-jsx">import Image from 'next/image';

function BlogPost({ post }) {
  return (
    &lt;&gt;
      &lt;Image
        src={post.featuredImage.url}
        alt={post.title}
        width={800}
        height={450}
        layout="responsive"
      /&gt;
      {/* 页面内容 */}
    &lt;/&gt;
  );
}
</code></pre>
<h5 id="7-代码分割和懒加载">7. 代码分割和懒加载</h5>
<p>Next.js支持代码分割和按需加载，通过动态导入和懒加载的方式，可以将页面和组件进行分割，按需加载，以减少初始加载时的资源压力，提升页面的响应速度。</p>
<pre><code class="jsx language-jsx">const SomeComponent = React.lazy(() =&gt; import('../components/SomeComponent'));

function MyPage() {
  return (
    &lt;div&gt;
      &lt;Suspense fallback={&lt;div&gt;Loading...&lt;/div&gt;}&gt;
        &lt;SomeComponent /&gt;
      &lt;/Suspense&gt;
    &lt;/div&gt;
  );
}
</code></pre>
<h5 id="8-缓存策略">8. 缓存策略</h5>
<p>通过合理地设置HTTP缓存策略、使用CDN加速等手段，可以有效地提升网站的访问速度和性能表现，为用户提供更好的体验。</p>
<h4 id="三、总结">三、总结</h4>
<p>Next.js凭借其强大的静态生成、服务器端渲染以及对SEO的深度支持，已成为构建高性能、高SEO友好Web应用的首选框架之一。通过合理的URL结构、页面标题和描述、内容质量和关键词优化，以及图片优化、代码分割和懒加载、缓存策略等手段，可以提升网站在搜索引擎中的排名，以及网站的加载速度和用户体验。这些策略都是基于Next.js丰富的特性和工具而提供的，可以帮助开发者构建性能优秀、SEO友好的Web应用。</p>
<p>在Next.js的SEO优化过程中，next-seo库是一个不可或缺的工具，它使得添加和管理SEO元标记变得更加容易和高效。同时，Next.js的预渲染技术、动态路由、图片优化等功能也为SEO优化提供了强有力的支持。</p>
<p>作为开发者，我们应该充分利用Next.js的这些功能和工具，不断优化和提升网站的SEO效果，从而为网站带来更多的流量和曝光机会。希望本文能够为你的Next.js SEO优化之路提供一些有用的启示和帮助。</p>]]></description><link>https://blog.gaoredu.com/article/8b832f1c-a90c-47c4-97fb-886f96b307f7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8b832f1c-a90c-47c4-97fb-886f96b307f7</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 22 Dec 2024 15:32:54 GMT</pubDate></item><item><title><![CDATA[Windows和Mac电脑的局域网文件共享方法]]></title><description><![CDATA[<h2 id="背景">背景</h2>
<p>平时学习的时候，我是用两个不同系统的设备，第一个是我的Macbook（聊微信。。），第二个是实验室的Windows台式机（学习，嘿嘿）。但是经常需要两个设备相互之间传文件，刚开始使用网盘（one drive），后来发现还是不够方便，有一天突然在b站上看到了一个方法，感觉我好像符合这个方法的条件，所以自己也试了一下，结果发现更加方便了！</p>
<p>要求：需要你的设备在同一个局域网内（假如有路由器，你的设备就是在同一个局域网里了）</p>
<p>苹果设备之间传文件用隔空投送即可。<br />
下面的是Windows共享文件夹的操作，实现Windows和苹果设备的文件传输</p>
<h2 id="方法">方法</h2>
<p>在Windows中某个盘里（例如我是E盘）创建一个文件夹-》右键属性-》共享-》选择用户；这时候有个问题，首先确定你的用户对这个文件夹有所有的读写改的权限，如果没有的话，在安全这个位置修改；<br />
<img src="https://api.gaoredu.com/public/uploads/2024-12-15/2PTIHZDNAI8YPSHNNYJ64I..png" alt="图片" /></p>
<p>接下来在Mac中打开Finder-》左上角前往-》连接服务器；<br />
<img src="https://api.gaoredu.com/public/uploads/2024-12-15/2PTIHZDNAI8YPSHNNYJ67I..png" alt="图片" /></p>
<p>输入你Windows的ip地址-》填写用户名和密码-》这样就可以看到共享的文件夹了！<br />
<img src="https://api.gaoredu.com/public/uploads/2024-12-15/2PTIHZDNAI8YPSHNNYJ6AI..png" alt="图片" /><br />
完成！</p>
<p>对了，注意！！！一定要在同个网段内才能共享哦！</p>]]></description><link>https://blog.gaoredu.com/article/eaa525b6-bde9-4b93-8104-e2a95e7c4e6a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eaa525b6-bde9-4b93-8104-e2a95e7c4e6a</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 15 Dec 2024 08:47:08 GMT</pubDate></item><item><title><![CDATA[rem 与 em：CSS中的相对单位深度解析]]></title><description><![CDATA[<h3 id="rem-与-em：css中的相对单位深度解析">rem 与 em：CSS中的相对单位深度解析</h3>
<p>在Web开发中，字体大小的控制是至关重要的。它不仅影响着网页的可读性，还直接关系到整体的设计美感。在CSS中，我们有两种主要的相对单位来设置字体大小：rem和em。尽管它们看起来相似，但实际上，它们的工作原理和应用场景有着显著的差异。今天，我们就来深入了解一下这两个单位。</p>
<h4 id="一、rem：全局的相对单位">一、rem：全局的相对单位</h4>
<p><strong>定义</strong>：<br />
rem，全称“root em”，是一个相对于HTML文档的根元素（即<html>标签）的字体大小的单位。这意味着，无论你在文档的哪个位置，使用rem设置的字体大小都会基于根元素的字体大小进行计算。</p>
<p><strong>工作原理</strong>：<br />
假设根元素的字体大小设置为16px（这是许多浏览器的默认值），那么1rem就等于16px。如果你将某个元素的字体大小设置为2rem，那么它的字体大小就会是32px（16px * 2）。</p>
<p><strong>应用场景</strong>：<br />
rem单位非常适合用于全局的字体大小设置。通过调整根元素的字体大小，你可以轻松地改变整个网站的字体大小，而无需逐个修改每个元素的字体大小。这使得rem成为响应式设计中的理想选择，因为你可以根据设备的屏幕尺寸动态地调整根元素的字体大小，从而改变整个网站的字体大小。</p>
<h4 id="二、em：局部的相对单位">二、em：局部的相对单位</h4>
<p><strong>定义</strong>：<br />
em是一个相对于其父元素的字体大小的单位。这意味着，使用em设置的字体大小会根据其父元素的字体大小进行计算。</p>
<p><strong>工作原理</strong>：<br />
如果父元素的字体大小为16px，那么1em就等于16px。如果你将某个子元素的字体大小设置为2em，那么它的字体大小就会是父元素字体大小的两倍，即32px。如果父元素的字体大小发生了变化，那么子元素使用em设置的字体大小也会相应地发生变化。</p>
<p><strong>应用场景</strong>：<br />
em单位更适合用于局部的字体大小设置，特别是当你需要相对于父元素的字体大小进行设置时。例如，在创建文本层级时，你可以使用不同的em值来设置不同层级的字体大小，从而创建更加灵活和可伸缩的布局。</p>
<h4 id="三、rem与em的对比">三、rem与em的对比</h4>
<ol>
<li><strong>全局与局部</strong>：</li>
</ol>
<ul>
<li>rem是全局的相对单位，它基于根元素的字体大小进行计算。</li>
<li>em是局部的相对单位，它基于父元素的字体大小进行计算。</li>
</ul>
<ol>
<li><strong>可读性和一致性</strong>：</li>
</ol>
<ul>
<li>使用rem可以更容易地实现全局字体大小的一致性，因为所有使用rem设置的字体大小都会基于同一个根元素进行计算。</li>
<li>使用em可以创建更加灵活和可伸缩的布局，但需要注意父元素字体大小对子元素字体大小的影响。</li>
</ul>
<ol>
<li><strong>响应式设计</strong>：</li>
</ol>
<ul>
<li>rem更适合用于响应式设计，因为你可以通过调整根元素的字体大小来轻松地改变整个网站的字体大小。</li>
<li>虽然em也可以用于响应式设计，但通常需要更多的计算和调整。</li>
</ul>
<h4 id="四、使用注意事项">四、使用注意事项</h4>
<ul>
<li>在使用rem时，需要确保根元素的字体大小被正确设置，以便整个网站的字体大小能够保持一致。</li>
<li>在使用em时，需要注意父元素的字体大小对子元素字体大小的影响，以避免出现意外的视觉效果。</li>
<li>在进行复杂的布局和样式设计时，可以结合使用rem和em来创建更加灵活和可伸缩的布局。</li>
</ul>
<h4 id="五、总结">五、总结</h4>
<p>rem和em都是CSS中用于设置字体大小的相对单位，但它们的工作原理和应用场景有所不同。选择使用哪个单位取决于你的具体需求和设计目标。通过了解它们的差异和优势，你可以更好地控制网页的字体大小，从而创建更加美观和可读的网页。</p>]]></description><link>https://blog.gaoredu.com/article/fdf090eb-ca41-4482-82ce-c1a598a1e147</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fdf090eb-ca41-4482-82ce-c1a598a1e147</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Dec 2024 08:38:50 GMT</pubDate></item><item><title><![CDATA[免费的在线图片截图加电脑手机外壳外框工具]]></title><description><![CDATA[<blockquote>
  <p>在线手机电脑样机，屏幕截图在线模拟生成器，无需下载就可以快速替换手机、电脑屏幕，制作图片加手机电脑外壳外框的效果。在线工具使用非常简单只要上传图片，调整相应的参数设置即可生成对应的加手机电脑外壳的效果。如果你需要制作网站产品等展示图片，可以使用在线手机电脑样机生成器制作出精美的展示图片。</p>
</blockquote>
<h2 id="1dimmy">1.Dimmy</h2>
<p>Dimmy是一个可以在线把屏幕截图或软件界面等图片放到各种设备上查看展示效果的工具，只要上传图片后，Dimmy就会自动适配到网站提供的所有设备模型中，模拟设备支持笔记本电脑、PC机、各种型号的智能手机、平板电脑，包括Macbook、Surface Book、iMac、iPhone、Google Pixel、Nokia、iPad 和HTC Nexus等。</p>
<p>不错，稍微有点老。</p>
<h2 id="2mockuphone-推荐">2.MockUPhone (推荐)</h2>
<p>MockUPhone是一个免费工具，帮助你包装在不同的移动设备应用程序截图。Android支持iPhone模型，iPad模型，模型和电视模型</p>
<p>目前使用了还听好用的。</p>
<h2 id="3pixeltrue-mockup-generator">3.Pixeltrue Mockup Generator</h2>
<p>自由和简单的装置模型生成器，创造美丽的产品模型只需几次点击!完全免费的。点击上面的开始。5设备类型你会有足够的材料来为您的项目创建漂亮的产品模型和营销活动。</p>
<h2 id="4shotsnapp">4.Shotsnapp</h2>
<p>Shotsnapp是一个可以一键生成高逼格样机神器，轻松将您的应用程序界面或者网页设计作品变成漂亮的实体模型。办公人导航分享的Shotsnapp提供了各种设备模板，比如苹果手机、平板电脑、Mac笔记本电脑、PC电脑、智能手表等等样机设备，根据自己的需要修改界面背景图，可以直接使用Unsplash漂亮的图片素材作为背景外观，通过选择精美的字体加上优美的文案完成样机设计作品。</p>
<h2 id="5deviceshots">5.Deviceshots</h2>
<p>Deviceshots是一个能够帮助我们轻松制作出精美的高分辨率样机图片，比如UI设计师需要将作品展示在苹果iphone上，通过上传UI界面图轻松就能生成超高清的样机模型。办公人导航网分享的Deviceshots除了支持手机设备之外，还有平板ipad、笔记本Macbook、手表等。可以自定义修改大小，背景及文字内容等。制作完成后可以免费下载JPG、PNG或SVG格式图片。</p>
<h2 id="6qurb">6.QURB</h2>
<p>QURB是一款能让截图画面变得更有质感的Mockup产生器。办公人导航分享的Qurb工具可以让你为画面加入苹果手机、平板电脑或MacBook外框，整体呈现出逼真精美的模型，最后储存为png透明背景的图片格式。内置：iPhoneX/XS/Max、GalaxyNote8、iPhone8、iPhone8Plus、iPhone5s、iPhone5c、iPadMini和MacBookPro的免费模型。</p>
<h2 id="7mockupphotos">7.mockup.photos</h2>
<p>Mockup Photos 是一个在线样机效果展示平台，用户可以通过浏览器轻松实现样机效果，无需使用Photoshop或其他工具进行编辑。该网站拥有超过1570个免费可用的样机模型。用户可以直接访问网站，通过下拉浏览或拖动到页面底部的方式寻找所需的样机。Mockup Photos 需要录后下载样机图片。其操作过程非常简单，甚至可以直接输入网址，网站会自动截图并填充样机，实现完全傻瓜式操作。</p>]]></description><link>https://blog.gaoredu.com/article/3d6f7e89-d3e6-4709-85b1-3f33ad2f2b19</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3d6f7e89-d3e6-4709-85b1-3f33ad2f2b19</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Dec 2024 05:07:28 GMT</pubDate></item><item><title><![CDATA[ReactPress 服务端部署流程]]></title><description><![CDATA[<h3 id="环境准备">环境准备</h3>
<pre><code class="bash language-bash">$ git clone --depth=1 https://github.com/fecommnity/reactpress.git
$ cd reactpress
$ npm i -g pnpm
$ pnpm i
</code></pre>
<h3 id="配置文件">配置文件</h3>
<p>项目启动后会加载根目录下的 <code>.env</code> 配置文件，请确保MySQL数据库服务和下面的配置保持一致，并提前创建好 <code>reactpress</code> 数据库</p>
<pre><code class="js language-js">DB_HOST=127.0.0.1 // 数据库地址
DB_PORT=3306 // 端口
DB_USER=reactpress // 用户名
DB_PASSWD=reactpress // 密码
DB_DATABASE=reactpress // 数据库
</code></pre>
<p>环境准备好后，执行启动命令：</p>
<pre><code class="bash language-bash">$ pnpm run build
</code></pre>
<h3 id="启动服务">启动服务</h3>
<pre><code class="bash language-bash">$ pnpm run pm2
</code></pre>
<p>至此，ReactPress 服务就启动成功了。</p>
<h3 id="代码更新启动">代码更新启动</h3>
<p>当ReactPress代码更新后，可以按照如下Shell重新启动服务：</p>
<pre><code class="js language-js"># 更新代码
git checkout master
git pull

# 安装依赖&amp;构建
pnpm install
pnpm run build

# 启动进程
pm2 delete @reactpress/server
pm2 delete @reactpress/client
pnpm run pm2

# 开机启动
pm2 startup
pm2 save
</code></pre>
<p>以上就是ReactPress生成环境的完整部署流程。</p>]]></description><link>https://blog.gaoredu.com/article/6f76f13f-ce0e-41fe-8dde-d46204f7c01d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6f76f13f-ce0e-41fe-8dde-d46204f7c01d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 01 Dec 2024 13:33:14 GMT</pubDate></item><item><title><![CDATA[阮一峰推荐工具：基于React + antd + NestJS + NextJS + MySQL 的简洁兼时尚的博客网站]]></title><description><![CDATA[<h2 id="前言">前言</h2>
<blockquote>
  <p>近期，阮一峰在<a href="https://www.ruanyifeng.com/blog/2024/11/weekly-issue-325.html">科技爱好者周刊第 325 期</a>中推荐了一款开源工具——ReactPress，ReactPress一个基于 Next.js 的博客和 CMS 系统，可查看 <a href="https://blog.gaoredu.com/">demo</a>站点。（@<a href="https://github.com/fecommunity/reactpress">fecommunity</a> 投稿）</p>
</blockquote>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-24/RB88NO19NMJGHY35OXTQHO..png" alt="2024-11-24/RB88NO19NMJGHY35OXTQHO..png" /></p>
<p>在数字化时代，内容创作与发布已成为连接读者与作者的重要桥梁。而在这个过程中，一个高效、灵活且功能丰富的发布平台显得尤为重要。近期，阮一峰在科技爱好者周刊中推荐了一款开源工具——ReactPress，它凭借其出色的性能和多样化的功能，吸引了众多开发者和内容创作者的目光。</p>
<p>此项目是基于 React + antd + NestJS + NextJS + MySQL  的，项目已经开源，项目地址在 github 上，喜欢的，欢迎给个 star 。<br />
项目地址：<a href="https://github.com/fecommunity/reactpress">https://github.com/fecommunity/reactpress</a></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8XVA..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8XVA..png" /></p>
<p>此项目是用于构建博客网站的，包含前台展示、管理后台和后端。</p>
<blockquote>
  <p>此项目是基于 React + antd + NestJS + NextJS + MySQL  的，项目已经开源，项目地址在 github 上，喜欢的，欢迎给个 star 。<br />
  项目地址：<a href="https://github.com/fecommunity/reactpress">https://github.com/fecommunity/reactpress</a></p>
</blockquote>
<ul>
<li><p>前台&amp;管理后台展示: <a href="https://github.com/fecommunity/reactpress/tree/master/client">https://github.com/fecommunity/reactpress/tree/master/client</a></p></li>
<li><p>后端：<a href="https://github.com/fecommunity/reactpress/tree/master/server">https://github.com/fecommunity/reactpress/tree/master/server</a></p></li>
<li><p>ReactPress在线演示站点：<a href="https://blog.gaoredu.com/">https://blog.gaoredu.com/</a></p></li>
<li><p>前台&amp;管理后台展示: <a href="https://github.com/fecommunity/reactpress/tree/master/client">https://github.com/fecommunity/reactpress/tree/master/client</a></p></li>
<li><p>后端：</p></li>
</ul>
<h2 id="1-效果图">1. 效果图</h2>
<h3 id="11-前台展示">1.1 前台展示</h3>
<h4 id="pc-端">pc 端</h4>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8ZQ7..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8ZQ7..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8ZWA..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8ZWA..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ902D..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ902D..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ908G..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ908G..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ90EJ..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ90EJ..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ90KM..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ90KM..png" /></p>
<h4 id="移动端适配">移动端适配</h4>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8Y1D..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8Y1D..png" /></p>
<h3 id="管理后台">管理后台</h3>
<p>管理后台是在蚂蚁金服用户开源的 antd 5.0 基础上进行开发的。<br />
<img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8Y7G..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8Y7G..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8YDJ..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8YDJ..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8YJM..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8YJM..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8YPP..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8YPP..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8YVS..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8YVS..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8Z1V..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8Z1V..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8ZE1..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8ZE1..png" /></p>
<p><img src="https://api.gaoredu.com/public/uploads/2024-11-10/KQFCPOSHPESKXJGYLZ8ZK4..png" alt="2024-11-10/KQFCPOSHPESKXJGYLZ8ZK4..png" /></p>
<h2 id="2-体验地址">2. 体验地址</h2>
<p>网站首页：<a href="https://blog.gaoredu.com/">https://blog.gaoredu.com/</a><br />
管理后台：<a href="https://blog.gaoredu.com/admin">https://blog.gaoredu.com/admin</a></p>
<h2 id="3-计划">3. 计划</h2>
<p>这次是一个完整的全栈式开发，只要部署了这个项目的代码，是完全可以搭建好博客网站的。</p>
<h3 id="环境准备">环境准备</h3>
<pre><code class="bash language-bash">$ git clone --depth=1 https://github.com/fecommnity/reactpress.git
$ cd reactpress
$ npm i -g pnpm
$ pnpm i
</code></pre>
<h3 id="配置文件">配置文件</h3>
<p>项目启动后会加载根目录下的 <code>.env</code> 配置文件，请确保MySQL数据库服务和下面的配置保持一致，并提前创建好 <code>reactpress</code> 数据库</p>
<pre><code class="js language-js">DB_HOST=127.0.0.1 // 数据库地址
DB_PORT=3306 // 端口
DB_USER=reactpress // 用户名
DB_PASSWD=reactpress // 密码
DB_DATABASE=reactpress // 数据库
</code></pre>
<p>环境准备好后，执行启动命令：</p>
<pre><code class="bash language-bash">$ pnpm run dev
</code></pre>
<p>打开浏览器访问 <a href="http://127.0.0.1:3001">http://127.0.0.1:3001</a></p>
<h2 id="4-收获与感触">4. 收获与感触</h2>
<p>学而不用，基本等于没学，因为最近一直在做自己的个人博客网站，所以好久没更新技术文章了；而且是利用业余时间做的，所以经过差不多两个月的搬砖，现在网站终于都上线了。<br />
开发网站的这段时间里，每天晚上几乎都搬砖到接近 11 点，周末的时间大多也在搬砖，每天写完文章，也快 12 点了，搬砖不易啊，喜欢或者觉得不错的，欢迎到 github 上给个 star，谢谢。</p>
<h2 id="5-文档教程">5. 文档教程</h2>
<ul>
<li>项目地址： <a href="https://github.com/fecommunity/reactpress">https://github.com/fecommunity/reactpress</a></li>
<li>next.js 源码：<a href="https://github.com/vercel/next.js">https://github.com/vercel/next.js</a></li>
<li>nest.js 源码：<a href="https://github.com/nestjs/nest">https://github.com/nestjs/nest</a></li>
</ul>]]></description><link>https://blog.gaoredu.com/article/8a975001-95a7-41f2-8408-6676028970e5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8a975001-95a7-41f2-8408-6676028970e5</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 10 Nov 2024 10:54:21 GMT</pubDate></item><item><title><![CDATA[什么是ReactPress？]]></title><description><![CDATA[<h1>ReactPress</h1>
<p>ReactPress 是一套集成文章发表、页面创建、知识库管理、博客后台管理等功能于一体的博客系统。</p>
<h2 id="✨-特性">✨ 特性</h2>
<ul>
<li>📦 技术栈：基于 <code>React</code> + <code>MySQL</code> + <code>NestJS</code> + <code>NextJS</code> 构建</li>
<li>🌈 组件化：基于 <code>antd</code> 的交互语言和视觉风格</li>
<li>🌍 国际化：支持中英文切换，国际化配置管理能力</li>
<li>🌞 黑白主题：支持亮色和暗黑模式主题自由切换</li>
<li>🖌️ 创作管理：内置 <code>MarkDown</code> 编辑器，支持文章写文章、分类目录管理，标签管理</li>
<li>📃 页面管理：支持自定义新页面</li>
<li>💬 评论管理：支持内容评论管理</li>
<li>📷️ 媒体管理：支持文件本地上传和 <code>OSS</code> 文件上传</li>
<li>…</li>
</ul>
<h2 id="⌨️-本地开发">⌨️ 本地开发</h2>
<h3 id="环境准备">环境准备</h3>
<pre><code class="bash language-bash">$ git clone --depth=1 https://github.com/fecommnity/reactpress.git
$ cd reactpress
$ npm i -g pnpm
$ pnpm i
</code></pre>
<h3 id="配置文件">配置文件</h3>
<p>项目启动后会加载根目录下的 <code>.env</code> 配置文件，请确保MySQL数据库服务和下面的配置保持一致，并提前创建好 <code>reactpress</code> 数据库</p>
<pre><code class="js language-js">DB_HOST=127.0.0.1 // 数据库地址
DB_PORT=3306 // 端口
DB_USER=admin // 用户名
DB_PASSWD=admin // 密码
DB_DATABASE=reactpress // 数据库
</code></pre>
<p>环境准备好后，执行启动命令：</p>
<pre><code class="bash language-bash">$ pnpm run dev
</code></pre>
<p>打开浏览器访问 <a href="http://127.0.0.1:3001">http://127.0.0.1:3001</a></p>
<h2 id="🔗-链接">🔗 链接</h2>
<ul>
<li><a href="https://github.com/fecommunity/reactpress">首页</a></li>
<li><a href="https://gaoredu.com">高热度网</a></li>
<li><a href="https://github.com/fecommunity/reactpress/issues">报告问题</a></li>
<li><a href="https://github.com/fecommunity/reactpress/pulls">参与共建</a> </li>
<li><a href="https://github.com/vercel/next.js">next.js 源码</a></li>
<li><a href="https://github.com/nestjs/nest">nest.js 源码</a></li>
</ul>
<blockquote>
  <p>强烈推荐阅读 <a href="https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way">《提问的智慧》</a>、<a href="https://github.com/seajs/seajs/issues/545">《如何向开源社区提问题》</a> 和 <a href="http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html">《如何有效地报告 Bug》</a>、<a href="https://zhuanlan.zhihu.com/p/25795393">《如何向开源项目提交无法解答的问题》</a>，更好的问题更容易获得帮助。</p>
</blockquote>
<h2 id="👥-社区互助">👥 社区互助</h2>
<p>如果您在使用的过程中碰到问题，可以通过下面几个途径寻求帮助，同时我们也鼓励资深用户通过下面的途径给新人提供帮助。<br />
<img style="width:30%" src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG23.jpg"></p>
<ul>
<li><p>通过 WeChat 联系，可通过搜素微信号 <code>red_tea_v2</code> 或扫码加入 ，并备注来源。</p></li>
<li><p>通过 GitHub Discussions 提问时，建议使用 <code>Q&amp;A</code> 标签。</p></li>
<li><p>通过 Stack Overflow 或者 Segment Fault 提问时，建议加上 <code>reactpress</code> 标签。</p></li>
</ul>
<ol>
<li><a href="https://github.com/ant-design/ant-design/discussions">GitHub Discussions</a></li>
<li><a href="http://stackoverflow.com/questions/tagged/antd">Stack Overflow</a>（英文）</li>
<li><a href="https://segmentfault.com/t/antd">Segment Fault</a>（中文）</li>
</ol>]]></description><link>https://blog.gaoredu.com/article/7989ac48-ebe9-442d-9ce9-09cb97cc9166</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7989ac48-ebe9-442d-9ce9-09cb97cc9166</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 03 Nov 2024 13:07:31 GMT</pubDate></item><item><title><![CDATA[【计算机网络】Ajax]]></title><description><![CDATA[<h1 id="ajax">Ajax</h1>
<h2 id="1-介绍一下ajax并代码实现">1. 介绍一下ajax并代码实现</h2>
<h3 id="11-基本概念">1.1 基本概念</h3>
<blockquote>
<p> avaScript 和XML（Asynchronous JavaScript And XML）。简单点说，就是使用 XMLHttpRequest 对象与服务器通信。 它可以使用JSON，XML，HTML和text文本等格式发送和接收数据。AJAX最吸引人的就是它的“异步”特性，也就是说他可以在不重新刷新页面的情况下与服务器通信，交换数据，或更新页面。</p>
</blockquote>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/Guide/AJAX">Ajax | MDN</a></p>
<h3 id="12-创建一个简单的ajax">1.2 创建一个简单的Ajax</h3>
<ul>
<li><p>创建 XMLHttpRequest 对象</p>
<pre><code class="language-js">if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+ ...
 httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 6 and older
 httpRequest = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
}</code></pre>
</li>
<li><p>绑定onreadystatechange 事件</p>
<pre><code class="language-js">httpRequest.onreadystatechange = function(){
 // Process the server response here.
};</code></pre>
</li>
<li><p>向服务器发送请求</p>
<pre><code class="language-js">httpRequest.open(&#39;GET&#39;, &#39;http://www.example.org/some.file&#39;, true);
httpRequest.send();</code></pre>
</li>
</ul>
<p>完整的例子</p>
<pre><code class="language-js">function ajax(url, cb) {
  let xhr;
  if(window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } else {
    xhr = ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
  }
  xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 &amp;&amp; xhr.status == 200) {
      cb(xhr.responseText);
    }
  }
  xhr.open(&#39;GET&#39;, url, true);
  xhr.send();
}</code></pre>
<h3 id="13-httprequestreadystate的值熟记">1.3 httpRequest.readyState的值(熟记)</h3>
<ul>
<li>0 (未初始化) or (请求还未初始化)</li>
<li>1 (正在加载) or (已建立服务器链接)</li>
<li>2 (加载成功) or (请求已接受)</li>
<li>3 (交互) or (正在处理请求)</li>
<li>4 (完成) or (请求已完成并且响应已准备好)</li>
</ul>
<h3 id="14-访问服务端返回的数据">1.4 访问服务端返回的数据</h3>
<ul>
<li>httpRequest.responseText<ul>
<li>服务器以文本字符的形式返回</li>
</ul>
</li>
<li>httpRequest.responseXML<ul>
<li>以 XMLDocument 对象方式返回，之后就可以使用JavaScript来处理</li>
</ul>
</li>
</ul>
<h3 id="15-get-注意事项">1.5 GET 注意事项</h3>
<ul>
<li>如果不设置响应头 <code>Cache-Control: no-cache</code> 浏览器将会把响应缓存下来而且再也不无法重新提交请求。你也可以添加一个总是不同的 GET 参数，比如时间戳或者随机数 (详情见 <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache">bypassing the cache</a>)</li>
</ul>
<h3 id="16-post-请求">1.6 POST 请求</h3>
<blockquote>
<p>[!NOTE]
POST请求则需要设置<code>RequestHeader</code>告诉后台传递内容的编码方式以及在send方法里传入对应的值</p>
</blockquote>
<pre><code class="language-js">xhr.open(&quot;POST&quot;, url, true);
xhr.setRequestHeader(&quot;Content-Type&quot;: &quot;application/x-www-form-urlencoded&quot;);
xhr.send(&quot;key1=value1&amp;key2=value2&quot;);</code></pre>
<h3 id="17-ajax如何携带cookie面试加分">1.7 Ajax如何携带cookie(面试加分)</h3>
<ul>
<li>ajax会自动带上同源的cookie，不会带上不同源的cookie</li>
<li>可以通过前端设置withCredentials为true， 后端设置Header的方式让ajax自动带上不同源的cookie，但是这个属性对同源请求没有任何影响。会被自动忽略。</li>
</ul>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials">withCredentials | MDN</a></p>
<pre><code class="language-js">var xhr = new XMLHttpRequest();
xhr.open(&#39;GET&#39;, &#39;http://example.com/&#39;, true);
xhr.withCredentials = true;
xhr.send(null);</code></pre>
]]></description><link>https://blog.gaoredu.com/article/97b7bd33-89ab-4ff5-a961-f5c7da28a88d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/97b7bd33-89ab-4ff5-a961-f5c7da28a88d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 28 Oct 2024 18:58:30 GMT</pubDate></item><item><title><![CDATA[【HTML相关】HTML基础强化]]></title><description><![CDATA[<h1 id="html基础强化">HTML基础强化</h1>
<h2 id="1如何理解html？">1.如何理解HTML？</h2>
<ol>
<li>HTML类似于一份word“文档”</li>
<li>描述文档的“结构”</li>
<li>有区块和大纲</li>
</ol>
<h2 id="2对web标准的理解？">2.对WEB标准的理解？</h2>
<blockquote>
  <p>Web标准是由一系列标准组合而成。一个网页主要由三部分组成：结构层、表现层和行为层。</p>
</blockquote>
<p>对应的标准也分三方面：</p>
<ul>
<li>结构化标准语言主要包括XHTML和HTML以及XML，</li>
<li>表现层标准语言主要包括CSS，</li>
<li>行为标准主要包括对象模型，DOM、ECMAScript等</li>
</ul>
<h3 id="21-结构层标准">2.1 结构层标准</h3>
<blockquote>
  <p>结构化标准语言，就是W3C规定的主要包括HTML和XHTML以及XML，在页面body里面我们写入的标签都是为了页面的结构。</p>
</blockquote>
<ol>
<li>标签的书写，需要开始和结束。单便签除外；</li>
<li>块级元素不能放在p标签里面。li内可以包含div标签。</li>
<li>块元素里面可以放在块和内联，特殊的 p和 h1—h6里面不要放块元素，li和div可以放很多。因为这两个标签，本身就有容器的属性</li>
<li>内联里面要放内联，不要放块。（嵌套关系）</li>
<li>结构与表现分离</li>
<li>命名一定要规范</li>
</ol>
<h3 id="22-表现层标准">2.2 表现层标准</h3>
<blockquote>
  <p>表现标准语言主要包括CSS（Cascading Style Sheets）层叠式样式表，通过CSS样式表，W3C创建CSS标准的目的是以CSS取代HTML表格式布局、帧和其他表现的语言，通过CSS样式可以是页面的结构标签更具美感。</p>
</blockquote>
<ol>
<li>尽可能使用外部引入的方式，达到分离的目的</li>
<li>CSS选择器，优先级</li>
<li>代码简洁</li>
</ol>
<h3 id="23-行为层标准">2.3 行为层标准</h3>
<blockquote>
  <p>行为是指页面和用户具有一定的交互，同时页面结构或者表现发生变化，标准主要包括对象模型（如W3C DOM）、ECMAScript并要求这三部分分离。</p>
</blockquote>
<ul>
<li><p>DOM是Document Object Model文档对象模型的缩写。DOM解决了Netscaped的Javascript和Microsoft的Jscript之间的冲突，给予web设计师和开发者一个标准的方法，让他们来访问他们站点中的数据、脚本和表现层对像。</p></li>
<li><p>ECMAScript是ECMA(EuropeanComputer Manufacturers Association)制定的标准脚本语言（JAVAScript）</p></li>
</ul>
<h2 id="3对w3c的认识？">3.对W3C的认识？</h2>
<blockquote>
  <p>W3C对web标准提出了规范化的要求，也就是在实际编程中的一些代码规范。</p>
</blockquote>
<p>主要包含如下几点：</p>
<h3 id="31-对于结构的要求">3.1 对于结构的要求</h3>
<ul>
<li>1）标签字母要小写</li>
<li>2）标签要闭合</li>
<li>3）标签不允许随意嵌套</li>
</ul>
<h3 id="32-对于css和js的要求">3.2 对于css和js的要求</h3>
<ul>
<li>1）尽量使用外链css样式表和js脚本。使结构、表现和行为分为三块，符合规范。同时提高页面渲染速度，提高用户的体验。</li>
<li>2）样式尽量少用行间样式表，使结构与表现分离，标签的id和class等属性命名要做到见文知义，标签越少，加载越快，用户体验提高，代码维护简单，便于改版。</li>
<li>3）不需要变动页面内容，便可提供打印版本而不需要复制内容，提高网站易用性。</li>
</ul>
<h2 id="4什么是前端语义化？">4.什么是前端语义化？</h2>
<blockquote>
  <p>[!NOTE]<br />
  语义化就是是让机器可以读懂内容，web页面的解析是由搜索引擎来进行搜索，机器来解析。</p>
</blockquote>
<h3 id="41-标签是有语义的">4.1 标签是有语义的</h3>
<p>h1~h6、thead、ul、ol等标签，初期的语义化标签：程序员利用HTML标签的id和class属性，进一步对HTML标签进行描述，如对页脚HTML标签添加如id="footer"或者class="footer"的属性（值）（使用有语义的对于需要声明的变量和class，id）</p>
<h3 id="42-html5的语义标签">4.2 HTML5的语义标签</h3>
<p>w3C采用了header/footer; section（章节、页眉、页脚）/article（内容区域）; nav导航；aside 不重要的内容；em(emphasize)/strong增强; i(icon)制作图标</p>
<h2 id="5谈一下页面布局架构？">5.谈一下页面布局架构？</h2>
<ul>
<li>CSS布局：table布局，float布局，flex布局（瀑布流布局），inline-block布局</li>
<li>三大框架，页面架构</li>
</ul>
<h2 id="6html的版本问题？">6.HTML的版本问题？</h2>
<ol>
<li>HTML4/4.0.1(SGML)(标签允许不结束)</li>
<li>XHTML(XML)（标签必须结束，属性必须带引号，属性必须有值，标签属性必须有值）</li>
<li>HTML5（类似于HTML4的写法）</li>
</ol>
<blockquote>
  <p>[!NOTE]<br />
  关键点：HTML是一种基本的WEB网页设计语言，XHTML是一个基于XML的置标语言</p>
</blockquote>
<h2 id="7html5新增的内容有哪些？">7.HTML5新增的内容有哪些？</h2>
<ol>
<li>新的区块标签：section,article,nav,aside</li>
<li>表单增强：日期、时间、搜索（修改type的类型实现）；表单验证；placeholder</li>
<li>语义增强：header/footer; section/article; nav导航；aside 不重要的内容；em(emphasize)/strong增强; i(icon)制作图标</li>
</ol>
<h2 id="8html的元素分类？">8.HTML的元素分类？</h2>
<ul>
<li>块级元素block（方块形状，占据一整行）：div ul ol li dl dt dd h1 h2 h3 h4…p</li>
<li>行内元素inline(一行中的某个位置)：a b span img input select strong（强调的语气）</li>
<li>inline-block(行内，有宽高属性)：selection</li>
</ul>
<blockquote>
  <p>[!NOTE]<br />
  行内元素：a、b、span、img、input、strong、select、label、em、button、textarea<br />
  块级元素：div、ul、li、dl、dt、dd、p、h1-h6、blockquote<br />
  空元素:br、meta、hr、link、input、img</p>
</blockquote>
<h2 id="9html嵌套关系？">9.HTML嵌套关系？</h2>
<ol>
<li>块级元素可以包含行内元素</li>
<li>块级元素不一定能包含块级元素(p标签不能包含div标签)</li>
<li>行内元素“一般”不能包含块级元素（a包含div是可以的）</li>
</ol>
<h2 id="10html的默认样式？">10.HTML的默认样式？</h2>
<ol>
<li>默认样式的意义</li>
<li>默认样式代理的问题</li>
<li>CSS Reset 的作用</li>
</ol>
<pre><code class="css language-css">html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}
</code></pre>
<h2 id="11使用ajax方式来提交数据可以不使用form标签吗？">11.使用ajax方式来提交数据可以不使用form标签吗？</h2>
<ol>
<li>form标签可以使用submit, reset</li>
<li>使用form可以直接一次性获取所有的form窗体的数据属性</li>
<li>form可以较好地实现表单验证等功能</li>
</ol>
<h3 id="111-form表单提交">11.1 Form表单提交</h3>
<pre><code class="html language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;login test&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
    &lt;meta http-equiv="pragma" content="no-cache"&gt;
    &lt;meta http-equiv="cache-control" content="no-cache"&gt;
    &lt;meta http-equiv="expires" content="0"&gt;
    &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;
    &lt;meta http-equiv="description" content="login test"&gt;   
&lt;/head&gt;
&lt;body&gt;
&lt;div id="form-div"&gt;
    &lt;form id="form1" action="/users/login" method="post"&gt;
        &lt;p&gt;用户名：&lt;input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/&gt;&lt;/p&gt;
        &lt;p&gt;密　码：&lt;input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/&gt;&lt;/p&gt;
        &lt;p&gt;&lt;input type="submit" value="登录"&gt;&amp;nbsp&lt;input type="reset" value="重置"&gt;&lt;/p&gt;
    &lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="112-ajax提交">11.2 ajax提交</h3>
<pre><code class="html language-html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;login test&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
    &lt;meta http-equiv="pragma" content="no-cache"&gt;
    &lt;meta http-equiv="cache-control" content="no-cache"&gt;
    &lt;meta http-equiv="expires" content="0"&gt;
    &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt;
    &lt;meta http-equiv="description" content="ajax方式"&gt;
    &lt;script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
        function login() {
            $.ajax({
            //几个参数需要注意一下
                type: "POST",//方法类型
                dataType: "json",//预期服务器返回的数据类型
                url: "/users/login" ,//url
                data: $('#form1').serialize(),
                success: function (result) {
                    console.log(result);//打印服务端返回的数据(调试用)
                    if (result.resultCode == 200) {
                        alert("SUCCESS");
                    }
                    ;
                },
                error : function() {
                    alert("异常！");
                }
            });
        }
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="form-div"&gt;
    &lt;form id="form1" onsubmit="return false" action="##" method="post"&gt;
        &lt;p&gt;用户名：&lt;input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/&gt;&lt;/p&gt;
        &lt;p&gt;密　码：&lt;input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/&gt;&lt;/p&gt;
        &lt;p&gt;&lt;input type="button" value="登录" onclick="login()"&gt;&amp;nbsp;&lt;input type="reset" value="重置"&gt;&lt;/p&gt;
    &lt;/form&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<blockquote>
  <p>[!NOTE]<br />
  扩展思考：Form表单提交数据给一个非同源的网址，如在A网址(<a href="http://www.A.com)上直接向B网站(http://www.B.com)发送数据请求,">http://www.A.com)上直接向B网站(http://www.B.com)发送数据请求,</a> 为什么不会触发浏览器的同源策略限制呢？</p>
</blockquote>]]></description><link>https://blog.gaoredu.com/article/709039a2-6b80-4af5-8100-c2b4484baf44</link><guid isPermaLink="true">https://blog.gaoredu.com/article/709039a2-6b80-4af5-8100-c2b4484baf44</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 28 Oct 2024 00:54:09 GMT</pubDate></item><item><title><![CDATA[【JS相关】运行环境]]></title><description><![CDATA[<h1 id="运行环境">运行环境</h1>
<h2 id="41-页面加载过程">4.1 页面加载过程</h2>
<h3 id="411-从输入url到得到html的详细过程">4.1.1 从输入url到得到HTML的详细过程</h3>
<blockquote>
<p>[!NOTE]
参考计算机网络章节考点总结</p>
</blockquote>
<h3 id="412-windowonload和domcontentloaded的区别">4.1.2 window.onload和DOMContentLoaded的区别</h3>
<ol>
<li>onload: 会在页面上的全部资源加载完毕之后执行（包括图片、视频）</li>
<li>DOMContentLoaded：（会在页面的DOM渲染完成之后执行，此时页面图片、视频还可能没有加载完毕）</li>
<li>jQuery和zepto这些类似的类库都是使用DOMContentLoaded来实现的</li>
</ol>
<h3 id="413-浏览器加载资源的形式有哪些？">4.1.3 浏览器加载资源的形式有哪些？</h3>
<ol>
<li>输入url（或跳转页面）加载html---（eg: 输入<a href="http://www.baidu.com%EF%BC%89">http://www.baidu.com）</a></li>
<li>加载html中的静态资源（CSS，JS，图片等）</li>
</ol>
<h3 id="414-描述一下浏览器渲染页面的过程">4.1.4 描述一下浏览器渲染页面的过程</h3>
<ol>
<li>根据HTML结构生成DOM Tree（单个节点，没样式）</li>
<li>根据CSS生成CSSOM（CSS对象模型）</li>
<li>将DOM和CSSOM整合生成一个RenderTree（每个节点都有自己的样式）</li>
<li>根据RenderTree开始渲染和显示</li>
<li>遇到<strong>script</strong>标签的时候，会执行并阻塞渲染（渲染权交给了js）----JS加载完毕之后然后执行代码</li>
</ol>
<h3 id="415-css和js的位置问题？">4.1.5 CSS和JS的位置问题？</h3>
<h4 id="css">CSS</h4>
<ol>
<li>浏览器是自上而下进行解析的，防止出现多次渲染</li>
<li>CSS加载不会阻塞DOM树的解析，但是会阻塞DOM树的加载、css加载会阻塞后面js语句的执行</li>
</ol>
<h4 id="js">JS</h4>
<ol>
<li>可以让页面快速的展示，提升性能</li>
<li>可以在此处获取到页面上所有的标签</li>
</ol>
<h2 id="42-性能优化">4.2 性能优化</h2>
<h3 id="421-前端性能优化的方法有哪些">4.2.1 前端性能优化的方法有哪些</h3>
<ol>
<li>资源的合并和压缩（HTML，CSS，JS压缩混淆，文件合并）</li>
<li>图片资源的优化
图片压缩处理
CSS雪碧图
Image Inline（Base64编码）
使用SVG和webp格式的图片<h3 id="422-懒加载和预加载的区别和实现原理">4.2.2 懒加载和预加载的区别和实现原理?</h3>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>懒加载的实现：当js监听到该图片元素进入可视窗口时，即将自定义属性中的地址存储到src属性中</li>
</ul>
</blockquote>
</li>
</ol>
<blockquote>
<ul>
<li>预加载的实现：提前加载图片，当用户需要查看时可直接从本地缓存中渲染</li>
</ul>
</blockquote>
<ol>
<li>使用img标签</li>
<li>创建img对象</li>
<li>Ajax请求（跨域问题）</li>
</ol>
<h3 id="423-重绘和回流的区别？">4.2.3 重绘和回流的区别？</h3>
<blockquote>
<p>[!NOTE]
重绘：当render tree中的一些元素需要更新属性（只影响元素外观、风格，不影响布局）</p>
</blockquote>
<blockquote>
<p>回流：当render tree中的一部分因为元素的尺寸、布局、隐藏等盖面需要重新构建（页面布局和集合属性改变）</p>
</blockquote>
<h4 id="避免重绘和回流的两种方法">避免重绘和回流的两种方法</h4>
<ol>
<li>使用不会触发回流的标签（避免使用触发重绘、回流的CSS属性）</li>
<li>将重绘、回流的影响范围限制在单独的图层之内</li>
</ol>
<h4 id="开启浏览器自动创建图层的方法">开启浏览器自动创建图层的方法</h4>
<ol>
<li>transform:translatez(0)</li>
<li>z-index</li>
<li><strong>video</strong> 和 <strong>canvas</strong>标签</li>
</ol>
<h4 id="性能优化点：">性能优化点：</h4>
<ol>
<li>使用top会触发回流，translate不会（transform : translaeY(0)）</li>
<li>使用opacity替换visibility（visibility会触发重绘）</li>
<li>使用className替代style</li>
</ol>
<h2 id="43-安全问题">4.3 安全问题</h2>
<h3 id="431----前端的安全问题及预防措施">4.3.1    前端的安全问题及预防措施</h3>
<h4 id="xss攻击">XSS攻击</h4>
<p>利用用户的cookie进行恶意欺骗（cookie发送到外部服务器）[标签转义、白名单、黑名单过滤]</p>
<h4 id="csrf攻击">CSRF攻击</h4>
<p>论坛发送了一个删帖的API链接（图片），结果删除了自己的帖子。[恶意发帖、删帖]（验证码、token）</p>
<h4 id="二者区别">二者区别</h4>
<p>XSS是获取信息，不需要提前知道其他用户页面的代码和数据包。CSRF是代替用户完成指定的动作，需要知道其他用户页面的代码和数据包</p>
]]></description><link>https://blog.gaoredu.com/article/e6aebc28-a350-42cd-8418-29a09e623b1d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e6aebc28-a350-42cd-8418-29a09e623b1d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 26 Oct 2024 21:02:04 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】类型检测]]></title><description><![CDATA[<h3 id="实现一个类型判断函数">实现一个类型判断函数</h3>
<ol>
<li>判断null</li>
<li>判断基础类型</li>
<li>使用<code>Object.prototype.toString.call(target)</code>来判断<strong>引用类型</strong></li>
</ol>
<blockquote>
  <p>[!NOTE]<br />
  注意： 一定是使用<code>call</code>来调用，不然是判断的Object.prototype的类型</p>
</blockquote>
<p>之所以要先判断是否为基本类型是因为：虽然<code>Object.prototype.toString.call()</code>能判断出某值是：number/string/boolean，但是其实在包装的时候是把他们先转成了对象然后再判断类型的。 但是JS中包装类型和原始类型还是有差别的，因为对一个包装类型来说，typeof的值是object</p>
<pre><code class="javascript language-javascript">/**
 * 类型判断
 */
function getType(target) {
  //先处理最特殊的Null
  if(target === null) {
    return 'null';
  }
  //判断是不是基础类型
  const typeOfT = typeof target
  if(typeOfT !== 'object') {
    return typeOfT;
  }
  //肯定是引用类型了
  const template = {
    "[object Object]": "object",
    "[object Array]" : "array",
    "[object Function]": "function",
    // 一些包装类型
    "[object String]": "object - string",
    "[object Number]": "object - number",
    "[object Boolean]": "object - boolean"
  };
  const typeStr = Object.prototype.toString.call(target);
  return template[typeStr];
}
</code></pre>
<h1 id="升级版本">升级版本</h1>
<pre><code class="js language-js">// typeof可以检测基本数据类型
// Undefined, Null, Boolean, Number, String, Objec
// undefined, object, boolean, number, string, object

// 以下是11种：
var number = 1;          // [object Number]
var string = '123';      // [object String]
var boolean = true;      // [object Boolean]
var und = undefined;     // [object Undefined]
var nul = null;          // [object Null]
var obj = {a: 1}         // [object Object]
var array = [1, 2, 3];   // [object Array]
var date = new Date();   // [object Date]
var error = new Error(); // [object Error]
var reg = /a/g;          // [object RegExp]
var func = function a(){}; // [object Function]

function checkType() {
    for (var i = 0; i &lt; arguments.length; i++) {
        console.log(Object.prototype.toString.call(arguments[i]))
    }
}

checkType(number, string, boolean, und, nul, obj, array, date, error, reg, func)

console.log(Object.prototype.toString.call(Math)); // [object Math]
console.log(Object.prototype.toString.call(JSON)); // [object JSON]

function a() {
    console.log(Object.prototype.toString.call(arguments)); // [object Arguments]
}

a();

// TODO:Object.toString()的理解？
/*1. 如果 this 值是 undefined，就返回 [object Undefined]
  2. 如果 this 的值是 null，就返回 [object Null]
  3. 让 O 成为 ToObject(this) 的结果
  4. 让 class 成为 O 的内部属性 [[Class]] 的值
  5. 最后返回由 "[object " 和 class 和 "]" 三个部分组成的字符串*/

// TODO:封装一个通用的type API？
// v1: 基础版本
var class2type = {};

'Undefined Null String Number Boolean Object Function Array Date RegExp Error'
    .split(' ')
    .map(function (item) {
        // 开始建立映射关系
        class2type[`[object ${item}]`] = item.toLowerCase();
    })

function type(obj) {
    return typeof obj === 'object' || typeof obj === 'function'
        ? class2type[Object.prototype.toString.call(obj)] || 'object'
        : typeof obj;
}

// v2:在 IE6 中，null 和 undefined 会被 Object.prototype.toString 识别成 [object Object]！
// TODO: 解决IE6下的null和undefined 会被识别为[object Object]?
var class2type = {};
'Undefined Null String Number Boolean Object Function Array Date RegExp Error'
    .split(' ').map(function (item) {
    class2type[`[object ${item}]`] = item.toLowerCase();
})

/**
 * 查看type的基础类型
 * @param obj
 * @return {string|*}
 */
function type(obj) {
    // 开始解决ie下的兼容问题
    if (obj == null) {
        return obj + '';
    }
    return typeof obj === 'object' || obj === 'function'
            //  ES6 新增的 Symbol、Map、Set 等类型，它们并不在 class2type 列表中，所以使用 type 函数，返回的结果会是 object
            ? class2type[Object.prototype.toString.call(obj)] || 'object'
            : typeof obj;
}

/**
 * 查看obj是否为函数累类型
 * @param obj
 * @return {boolean}
 */
function isFunction(obj) {
    return type(obj) === 'function';
}


/**
 * 注意这里的isArray是一个函数，并不是一个函数执行的结果
 * @type {((arg: any) =&gt; arg is Array&lt;any&gt;) | (function(*=): boolean)}
 */
var isArray = Array.isArray || function (obj) {
    return type(obj) === 'array';
}


// TODO: plainObject, 就是该对象是通过 "{}" 或 "new Object" 创建的，该对象含有零个或者多个键值对?
// 存放toString的映射结果
var class2type = {};
// Object.prototype.toString
var toString = class2type.toString();
// Object.prototype.hasOwnProperty
var hasOwn = class2type.hasOwnProperty;

function isPlainObject(obj) {
    // 排除掉宿主对象 eg: toString.call(window) === '[objct window]'
    if (!obj || toString.call(obj) !== '[object Object]') {
        return false;
    }

    /**
     * Object.getPrototypeOf() 方法返回指定对象的原型（即, 内部[[Prototype]]属性的值）,如果没有继承属性，则返回 null 。
     * eg: obj.__proto__ === Object.protptype
     * @type {any}
     */
    var proto = Object.getPrototypeOf(obj);
    // 如果没有原型对象的话，eg:Object.create(null), 就是纯对象
    if (!proto) {
        return true;
    }

    // 通过new Object方式创建的对象
    // 判断 proto 是否有 constructor 属性，如果有就让 Ctor 的值为 proto.constructor
    var Constructor = hasOwn.call(proto, 'constructor') &amp;&amp; proto.constructor;

    // 判断Constructor是不是Object的构造函数
    return typeof Constructor === 'function' &amp;&amp; hasOwn.toString.call(Constructor) === hasOwn.toString.call(Object);
}


// TODO: EmptyObject如何判断？
function isEmptyObject(obj) {
    var name;
    // 看一下当前的这个obj对象有没有属性，如果有的话就返回false
    for (name in obj) {
        // 遍历的不仅仅是obj自身的属性，而且也遍历了obj原型上的属性
        return false;
    }
    return true;
}
// test
console.log(isEmptyObject({})); // true
console.log(isEmptyObject([])); // true
console.log(isEmptyObject(null)); // true
console.log(isEmptyObject(undefined)); // true
console.log(isEmptyObject(1)); // true
console.log(isEmptyObject('')); // true
console.log(isEmptyObject(true)); // true


// TODO: 判断是否为window对象？
// window对象的window属性指向其本身
function isWindow(obj) {
    return obj != null &amp;&amp; obj == obj.window;
}

// TODO: 判断是否为document对象？
function isDocument(obj) {
    return obj != null &amp;&amp; obj.nodeType == obj.DOCUMENT_NODE;
}

// TODO: 判断是不是DOM元素
function isDOMElement(obj) {
    // 这里需要强制把返回的结果转换为bool类型，eg:obj = undefined,!!undefined=r\true
    return !!(obj &amp;&amp; obj.nodeType === 1);
}


// TODO: isArrayLike如何实现？(可以判断数组和伪数组类型)
function isArrayLike(obj) {
    // 1. 先看obj有没有length属性
    var length = !!obj &amp;&amp; ('length' in obj) &amp;&amp; obj.length;
    var typeRes = type(obj);

    // 2. 排除掉函数和window对象, window也是有length属性的
    if (typeRes === 'function' || isWindow(obj)) {
        return false;
    }

    // 3. 开始处理结果
    return typeRes === 'array'                  // 1. 是数组类型
            || length === 0                     // 2. 长度为0(函数中的arguments参数)
            || typeof length === 'number'
            &amp;&amp; length &gt; 0
            &amp;&amp; (length - 1) in obj;             // 3. length 属性是大于 0 的数字类型，并且obj[length - 1]必须存在(符合条件的类数组对象是一定存在最后一个元素的)

}

// underscore 如何实现的？
function isArrayLike(collection) {
    var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
    var length = getLength(collection);
    return typeof length === 'number' &amp;&amp; length &gt;= 0 &amp;&amp; length &lt;= MAX_ARRAY_INDEX;
}
</code></pre>]]></description><link>https://blog.gaoredu.com/article/f1551be8-036d-4419-a53c-f152e09e8975</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f1551be8-036d-4419-a53c-f152e09e8975</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 24 Oct 2024 20:47:37 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】防抖节流实现]]></title><description><![CDATA[<h3 id="防抖-debounce">防抖 debounce</h3>
<blockquote>
<p>[!NOTE]
函数防抖就是在函数需要频繁触发的情况下，只有足够的空闲时间，才执行一次。 </p>
</blockquote>
<p><strong>典型应用</strong>:</p>
<ul>
<li>百度搜索框在输入稍有停顿时才更新推荐热词。</li>
<li>拖拽</li>
</ul>
<pre><code class="language-js">function debounce(handler, delay){

  delay = delay || 300;
  var timer = null;

  return function(){

    var _self = this,
        _args = arguments;

    clearTimeout(timer);
    timer = setTimeout(function(){
      handler.applay(_self, _args);
    }, delay);
  }
}</code></pre>
<h3 id="节流-throttle">节流 throttle</h3>
<blockquote>
<p>[!NOTE]
一个函数只有在大于执行周期时才执行，周期内调用不执行。好像水滴积攒到一定程度才会触发一次下落一样。</p>
</blockquote>
<p><strong>典型应用</strong>：</p>
<ul>
<li><p>抢券时疯狂点击，既要限制次数，又要保证先点先发出请求</p>
</li>
<li><p>窗口调整</p>
</li>
<li><p>页面滚动</p>
<pre><code class="language-js">function throttle(handler, wait){

wait = wait || 300;
var lastTime = 0;

return function(){
 var _self = this,
 _args = arguments;

 var nowTime = new Date().getTime();
 if((nowTime - lastTime) &gt; wait){
   handler.apply(_self, _args);
   lastTime = nowTime;
 }
}
}</code></pre>
</li>
</ul>
<h3 id="节流与防抖的本质">节流与防抖的本质</h3>
<p>以闭包的形式存在，通过对事件对应的回调函数进行包裹、以自由变量的形式缓存时间信息，最后用<strong>定时器</strong>或<strong>时间差</strong>来控制事件的触发频率。
<img src="../img/fdjl.png" alt="fdjl"></p>
]]></description><link>https://blog.gaoredu.com/article/81b2c90e-6044-433d-b590-a8d4826fee43</link><guid isPermaLink="true">https://blog.gaoredu.com/article/81b2c90e-6044-433d-b590-a8d4826fee43</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 24 Oct 2024 07:40:02 GMT</pubDate></item><item><title><![CDATA[【计算机网络】RESTful]]></title><description><![CDATA[<h1 id="restful">RESTful</h1>
<h2 id="1-谈一下你对restful的理解？">1. 谈一下你对RESTful的理解？</h2>
<blockquote>
<p>[!NOTE]
REST (Representational State Transfer)，中文意思是：表述性状态转移。 一组架构约束条件和原则，如果一个架构符合 REST 的约束条件和原则，我们就称它为 RESTful 架构。</p>
</blockquote>
<h3 id="11-restful基本概念">1.1 RESTful基本概念</h3>
<ul>
<li>在 REST 中，一切的内容都被认为是一种资源</li>
<li>每个资源都由 URI 唯一标识</li>
<li>使用统一的接口处理资源请求（POST/GET/PUT/DELETE/HEAD）</li>
<li>无状态（每次请求之前是无关联，没有 session ）</li>
</ul>
<h3 id="12-理解restful">1.2 理解RESTful</h3>
<p>下面我们结合REST原则，围绕资源展开讨论，从资源的定义、获取、表述、关联、状态变迁等角度，列举一些关键概念并加以解释。</p>
<ul>
<li>资源与URI</li>
<li>统一资源接口</li>
<li>资源的表述</li>
<li>资源的链接</li>
<li>状态的转移</li>
</ul>
<h4 id="121--资源和uri">1.2.1  资源和URI</h4>
<ul>
<li>使用 <code>/</code> 来表示资源的层级关系</li>
<li>使用 <code>?</code> 用来过滤资源</li>
<li>使用 <code>_</code> 或者 <code>-</code> 让URI的可读性更好</li>
<li><code>,</code> 或 <code>;</code> 可以用来表示同级资源的关系</li>
</ul>
<h4 id="122--统一资源接口">1.2.2  统一资源接口</h4>
<table>
<thead>
<tr>
<th>请求方法</th>
<th>描述</th>
</tr>
</thead>
<tbody><tr>
<td>GET</td>
<td>获取某个资源。 幂等（取多少次结果都没有变化）</td>
</tr>
<tr>
<td>POST</td>
<td>创建一个新的资源</td>
</tr>
<tr>
<td>PUT</td>
<td>替换某个已有的资源（更新操作） ， 幂等（更新多次只保存一个结果）</td>
</tr>
<tr>
<td>DELETE</td>
<td>删除某个资源</td>
</tr>
<tr>
<td>HEAD</td>
<td>主要用于确认 URL 的有效性以及资源更新的日期时间等</td>
</tr>
<tr>
<td>PATCH</td>
<td>新引入的，对PUT方法的补充，用来对已知资源进行局部更新</td>
</tr>
</tbody></table>
<h4 id="123-资源表述">1.2.3 资源表述</h4>
<blockquote>
<p>[!NOTE]
客户端获取的只是资源的表述而已。资源在外界的具体呈现，可以有多种表述(或成为表现、表示)形式，在客户端和服务端之间传送的也是资源的表述，而不是资源本身。文本资源可以采用 html、xml、json 等格式，图片可以使用 PNG 或 JPG 展现出来。</p>
</blockquote>
<p>资源的表述包括数据和描述数据的元数据，例如，HTTP 头 “Content-Type” 就是这样一个元数据属性。</p>
<p>那么客户端如何知道服务端提供哪种表述形式呢？</p>
<p>答案是可以通过 HTTP 内容协商，客户端可以通过 Accept 头请求一种特定格式的表述，服务端则通过 Content-Type 告诉客户端资源的表述形式。</p>
<p>MIME 类型</p>
<p>accept: text/xml html文件</p>
<p>Content-Type告诉客户端资源的表述形式</p>
<h4 id="124-资源的链接">1.2.4 资源的链接</h4>
<blockquote>
<p>[!NOTE]
超媒体即应用状态引擎（可以做多层链接）</p>
</blockquote>
<p><a href="https://api.github.com/repos/github">https://api.github.com/repos/github</a></p>
<pre><code>{
  &quot;message&quot;: &quot;Not Found&quot;,
  &quot;documentation_url&quot;: &quot;https://developer.github.com/v3&quot;
}</code></pre><h4 id="125-状态转移">1.2.5 状态转移</h4>
<p>服务器端不应该保存客户端状态。</p>
<p>应用状态 -&gt; 服务器端不保存应用状态</p>
<p>访问订单 根据接口去查询</p>
<p>访问商品 查询</p>
]]></description><link>https://blog.gaoredu.com/article/c69a97a7-5167-466e-832d-16c9dc19beb5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c69a97a7-5167-466e-832d-16c9dc19beb5</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 24 Oct 2024 04:27:18 GMT</pubDate></item><item><title><![CDATA[【性能优化】Webpack性能优化]]></title><description><![CDATA[<h1 id="webpack性能优化">Webpack性能优化</h1>
<h2 id="1-谈一下如何使用webpack进行性能优化？">1. 谈一下如何使用Webpack进行性能优化？</h2>
<blockquote>
<p>[!NOTE]</p>
</blockquote>
<ul>
<li>有哪些方式可以减少 Webpack 的打包时间</li>
<li>有哪些方式可以让 Webpack 打出来的包更小</li>
</ul>
<h3 id="11-减小打包后文件体积">1.1 减小打包后文件体积</h3>
<h4 id="111-按需加载">1.1.1 按需加载</h4>
<p>如果我们将页面全部打包进一个 JS 文件的话，虽然将多个请求合并了，但是同样也加载了很多并不需要的代码，耗费了更长的时间。那么为了首页能更快地呈现给用户，我们肯定是希望首页能加载的文件体积越小越好，这时候我们就可以使用按需加载，将每个路由页面单独打包为一个文件。</p>
<h4 id="112-tree-shaking">1.1.2 Tree Shaking</h4>
<p>Tree Shaking 可以实现删除项目中未被引用的代码，比如</p>
<pre><code class="language-js">// test.js
export const a = 1
export const b = 2
// index.js
import { a } from &#39;./test.js&#39;</code></pre>
<ol>
<li><p>对于以上情况，test 文件中的变量 b 如果没有在项目中使用到的话，就不会被打包到文件中。</p>
</li>
<li><p>如果你使用 Webpack 4 的话，开启生产环境就会自动启动这个优化功能。</p>
</li>
</ol>
<h4 id="113-scope-hoisting">1.1.3 Scope Hoisting</h4>
<blockquote>
<p>Scope Hoisting 会分析出模块之间的依赖关系，尽可能的把打包出来的模块合并到一个函数中去。</p>
</blockquote>
<p>比如我们希望打包两个文件</p>
<pre><code class="language-js">// test.js
export const a = 1
// index.js
import { a } from &#39;./test.js&#39;</code></pre>
<p>对于这种情况，我们打包出来的代码会类似这样</p>
<pre><code class="language-js">[
  /* 0 */
  function (module, exports, require) {
    //...
  },
  /* 1 */
  function (module, exports, require) {
    //...
  }
]</code></pre>
<p>但是如果我们使用 Scope Hoisting 的话，代码就会尽可能的合并到一个函数中去，也就变成了这样的类似代码</p>
<pre><code class="language-js">[
  /* 0 */
  function (module, exports, require) {
    //...
  }
]</code></pre>
<p>样的打包方式生成的代码明显比之前的少多了。如果在 Webpack4 中你希望开启这个功能，只需要启用 optimization.concatenateModules 就可以了。</p>
<pre><code class="language-js">module.exports = {
  optimization: {
    concatenateModules: true
  }
}</code></pre>
<h2 id="12-加快打包速度">1.2 加快打包速度</h2>
<h3 id="121-优化-loader">1.2.1 优化 Loader</h3>
<blockquote>
<p>[!NOTE]
对于 Loader 来说，影响打包效率首当其冲必属 Babel 了。因为 Babel 会将代码转为字符串生成 AST（抽象语法树），然后对 AST 继续进行转变最后再生成新的代码，项目越大，转换代码越多，效率就越低。当然了，我们是有办法优化的。</p>
</blockquote>
<p>首先我们可以<strong>减小 Loader 的文件搜索范围</strong></p>
<pre><code class="language-js">module.exports = {
  module: {
    rules: [
      {
        // js 文件才使用 babel
        test: /\.js$/,
        loader: &#39;babel-loader&#39;,
        // 只在 src 文件夹下查找
        include: [resolve(&#39;src&#39;)],
        // 不会去查找的路径
        exclude: /node_modules/
      }
    ]
  }
}</code></pre>
<p>还可以将 Babel 编译过的文件缓存起来，下次只需要编译更改过的代码文件即可，这样可以大幅度加快打包时间。</p>
<pre><code class="language-js">  loader: &#39;babel-loader?cacheDirectory=true&#39;</code></pre>
<h3 id="122-happypack">1.2.2 HappyPack</h3>
<blockquote>
<p>[!NOTE]
受限于 Node 是单线程运行的，所以 Webpack 在打包的过程中也是单线程的，特别是在执行 Loader 的时候，长时间编译的任务很多，这样就会导致等待的情况。</p>
</blockquote>
<p><strong>HappyPack 可以将 Loader 的同步执行转换为并行的</strong>，这样就能充分利用系统资源来加快打包效率了</p>
<pre><code class="language-js">module: {
  loaders: [
    {
      test: /\.js$/,
      include: [resolve(&#39;src&#39;)],
      exclude: /node_modules/,
      // id 后面的内容对应下面
      loader: &#39;happypack/loader?id=happybabel&#39;
    }
  ]
},
plugins: [
  new HappyPack({
    id: &#39;happybabel&#39;,
    loaders: [&#39;babel-loader?cacheDirectory&#39;],
    // 开启 4 个线程
    threads: 4
  })
]</code></pre>
<h3 id="123-dllplugin">1.2.3 DllPlugin</h3>
<blockquote>
<p>DllPlugin 可以将特定的类库提前打包然后引入。这种方式可以极大的减少打包类库的次数，只有当类库更新版本才有需要重新打包，并且也实现了将公共代码抽离成单独文件的优化方案。</p>
</blockquote>
<pre><code class="language-js">  // 单独配置在一个文件中
  // webpack.dll.conf.js
  const path = require(&#39;path&#39;)
  const webpack = require(&#39;webpack&#39;)
  module.exports = {
    entry: {
      // 想统一打包的类库
      vendor: [&#39;react&#39;]
    },
    output: {
      path: path.join(__dirname, &#39;dist&#39;),
      filename: &#39;[name].dll.js&#39;,
      library: &#39;[name]-[hash]&#39;
    },
    plugins: [
      new webpack.DllPlugin({
        // name 必须和 output.library 一致
        name: &#39;[name]-[hash]&#39;,
        // 该属性需要与 DllReferencePlugin 中一致
        context: __dirname,
        path: path.join(__dirname, &#39;dist&#39;, &#39;[name]-manifest.json&#39;)
      })
    ]
  }</code></pre>
<p>然后我们需要执行这个配置文件生成依赖文件，接下来我们需要使用 <strong>DllReferencePlugin</strong> 将依赖文件引入项目中</p>
<pre><code class="language-js">// webpack.conf.js
module.exports = {
  // ...省略其他配置
  plugins: [
    new webpack.DllReferencePlugin({
      context: __dirname,
      // manifest 就是之前打包出来的 json 文件
      manifest: require(&#39;./dist/vendor-manifest.json&#39;),
    })
  ]
}</code></pre>
<h4 id="124-代码压缩">1.2.4 代码压缩</h4>
<p>在 Webpack3 中，我们一般使用 UglifyJS 来压缩代码，但是这个是单线程运行的，为了加快效率，我们可以使用 webpack-parallel-uglify-plugin 来并行运行 UglifyJS，从而提高效率。</p>
<blockquote>
<p>[!NOTE]
Webpack4新特性：在 Webpack4 中，我们就不需要以上这些操作了，只需要将 mode 设置为 production 就可以默认开启以上功能。代码压缩也是我们必做的性能优化方案，当然我们不止可以压缩 JS 代码，还可以压缩 HTML、CSS 代码，并且在压缩 JS 代码的过程中，我们还可以通过配置实现比如删除 console.log 这类代码的功能。</p>
</blockquote>
<h4 id="125-一些小的优化点">1.2.5 一些小的优化点</h4>
<ul>
<li><code>resolve.extensions</code> 用来表明文件后缀列表，默认查找顺序是 [&#39;.js&#39;, &#39;.json&#39;]，如果你的导入文件没有添加后缀就会按照这个顺序查找文件。我们应该尽可能减少后缀列表长度，然后将出现频率高的后缀排在前面</li>
<li><code>resolve.alias</code>  可以通过别名的方式来映射一个路径，能让 Webpack 更快找到路径</li>
<li><code>module.noParse</code>  如果你确定一个文件下没有其他依赖，就可以使用该属性让 Webpack 不扫描该文件，这种方式对于大型的类库很有帮助</li>
</ul>
<h4 id="126-webpack长缓存优化">1.2.6 Webpack长缓存优化</h4>
<blockquote>
<p>[!NOTE]
浏览器在用户访问页面的时候，为了加快加载速度，对用户请求的静态资源都会进行存储，但是每次代码更新或者升级的时候，我们都需要浏览器去加载新的代码。最方便的方法就是引入新的文件名称，只下载新的代码块，不加载旧的代码块，这就是长缓存。</p>
</blockquote>
<h5 id="webpack3配置">Webpack3配置</h5>
<pre><code class="language-js">// foo.js
import react from &#39;react&#39;
console.lg(&#39;hello world&#39;)

//webpack.config.js
const path = require(&#39;path&#39;)
const webpack = require(&#39;webpack&#39;)
module.exports = {
    entry: {
        main: &#39;./src/foo&#39;,
        // 如果要把vendor和业务代码区分开
        // 独立的给vendor建一个entry就可以了
        vendor: [&#39;react&#39;]
    },

    output: {
        path: path.resolve(__dirname, &#39;dist&#39;),
        filename: &#39;[name].[chunkHash].js&#39;
    },
    plugins: [
        // 单个模块打包优化
        new webpack.optimize.CommonsChunkPlugin({
            name: &#39;vendor&#39;,
            minChunks: Infinity
        }),
        new webpack.optimize.CommonsChunkPlugin({
            name: &#39;manifest&#39;
        })
      // 引入新模块，模块顺序变化，vendor hash变化的打包优化
        new webpack.NamedChunksPlugin(),
        new webpack.NamedModulesPlugin(),
    ]   
}</code></pre>
<p>这时会有三个文件，vendor、main、manifest，这时再修改代码，再加一个！此时manifest和main发生变化，但是vendor没有发生变化，manifest发生变化是因为代码发生改变，要重新编译，这就达到了改变业务代码，但不改变vendor。</p>
<p>如果不用这种方法，就算vendor的代码不修改，打包出来的文件名的hash值也会发生改变。</p>
<h5 id="webpack4配置">Webpack4配置</h5>
<pre><code class="language-js">optimization: {
    splitChunks: {      // 打包 node_modules里的代码
        chunks: &#39;all&#39;
     },
     runtimeChunk: true,  // 打包 runtime 代码
}</code></pre>
<p>性能优化前后对比：vendor的hash值并没有发生改变。
<img src="../../img/webpack-%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96.png" alt="webpack性能优化"></p>
<p><strong>参考文章</strong></p>
<ul>
<li><a href="https://www.cnblogs.com/weihuan/p/9643095.html">https://www.cnblogs.com/weihuan/p/9643095.html</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/563613e9-91fd-49e4-9563-363f8b7afd39</link><guid isPermaLink="true">https://blog.gaoredu.com/article/563613e9-91fd-49e4-9563-363f8b7afd39</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 24 Oct 2024 02:28:27 GMT</pubDate></item><item><title><![CDATA[【总结】参考资料]]></title><description><![CDATA[<h1 id="参考资料">参考资料</h1>
<h2 id="前端工具">前端工具</h2>
<ul>
<li>Git<ol>
<li><a href="https://backlog.com/git-tutorial/cn/intro/intro1_1.html">入门篇</a></li>
<li><a href="https://backlog.com/git-tutorial/cn/stepup/stepup1_1.html">高级篇</a></li>
<li><a href="https://backlog.com/git-tutorial/cn/reference/">索引篇</a></li>
<li><a href="https://www.atlassian.com/git/tutorials/merging-vs-rebasing">原版</a></li>
<li><a href="https://github.com/geeeeeeeeek/git-recipes/wiki/1.1-%E6%9E%9C%E5%A3%B3%E4%B8%AD%E7%9A%84-Git">原版翻译</a></li>
<li><a href="https://github.com/cucygh/git-tips">Git 的奇技淫巧</a></li>
</ol>
</li>
<li>Webpack<ol>
<li><a href="https://doc.webpack-china.org/concepts/">文档</a></li>
<li><a href="https://doc.webpack-china.org/plugins/">插件</a></li>
</ol>
</li>
<li>Gulp<ul>
<li><a href="https://www.gulpjs.com.cn/">文档</a></li>
</ul>
</li>
<li>Grunt<ul>
<li><a href="http://www.gruntjs.net/">文档</a></li>
</ul>
</li>
<li>Rollup<ul>
<li><a href="http://www.rollupjs.com/">文档</a></li>
</ul>
</li>
<li>代码质量<ol>
<li><a href="https://mysticatea.github.io/vue-eslint-demo/">vue eslint</a></li>
<li><a href="https://htmlhint.io/">htmlhint</a></li>
<li><a href="https://stylelint.io/">stylelint</a></li>
</ol>
</li>
<li>http-server<ul>
<li><a href="https://www.npmjs.com/package/http-server">静态服务器</a></li>
</ul>
</li>
<li>ast<ul>
<li><a href="https://github.com/cucygh/AST-">业界 AST 库</a></li>
</ul>
</li>
<li>自动化测试<ul>
<li><a href="https://jestjs.io/zh-Hans/">jest</a></li>
</ul>
</li>
</ul>
<h2 id="前端框架">前端框架</h2>
<ul>
<li><p>Vue</p>
<ol>
<li><a href="https://cn.vuejs.org/">基本教程</a></li>
<li><a href="https://router.vuejs.org/">路由</a></li>
<li><a href="https://vuex.vuejs.org/">Vuex</a></li>
<li><a href="https://ssr.vuejs.org/">SSR</a></li>
<li><a href="https://zh.nuxtjs.org/">Nuxt.js</a></li>
<li><a href="http://hcysun.me/vue-design/">Vue 源码分析·免费</a></li>
</ol>
</li>
<li><p>React</p>
<ol>
<li><a href="https://doc.react-china.org/">文档</a></li>
<li><a href="http://cn.redux.js.org/">Redux 官方文档</a></li>
<li><a href="http://www.redux.org.cn/">Redux 中文社区</a></li>
<li><a href="https://zeit.co/blog/next4">Next.js</a></li>
<li><a href="http://nextjs.frontendx.cn/docs">Next.js 中文文档</a></li>
<li><a href="https://juejin.im/entry/59791d8f6fb9a03c391b557e">Next.js 掘金博客</a></li>
</ol>
</li>
<li><p>Angular</p>
<ul>
<li><a href="https://angular.cn/">官方文档</a></li>
</ul>
</li>
<li><p>Koa</p>
<blockquote>
<p>Express 升级后的框架，抽象设计更彻底，强大、自由、灵活</p>
</blockquote>
<ol>
<li><a href="https://koa.bootcss.com/">文档</a></li>
<li><a href="https://chenshenhai.github.io/koa2-note/">Koa2 进阶学习笔记</a></li>
<li><a href="https://github.com/ikcamp/koa2-tutorial">基于 Koa2 搭建 Node.js 实战项目教程</a></li>
</ol>
</li>
<li><p>Express</p>
<blockquote>
<p>Node.js 开发最容易上手的业务应用开发框架</p>
</blockquote>
<ul>
<li><a href="http://expressjs.com/zh-cn/">文档</a></li>
</ul>
</li>
</ul>
<h2 id="前端技术">前端技术</h2>
<ul>
<li>内存泄漏<ol>
<li><a href="https://github.com/cucygh/js-leakage-patterns?organization=cucygh&amp;organization=cucygh">JavaScript 内存泄露和 CSS 优化</a></li>
<li><a href="https://developers.google.com/web/tools/chrome-devtools/memory-problems/?hl=zh-cn">内存泄漏</a></li>
</ol>
</li>
<li>MDN官方文档<ul>
<li><a href="https://developer.mozilla.org/zh-CN/">MDN官方文档</a></li>
</ul>
</li>
</ul>
<h2 id="css-教程">CSS 教程</h2>
<ul>
<li>Less<ul>
<li><a href="http://less.bootcss.com/">文档</a></li>
</ul>
</li>
<li>Sass<ul>
<li><a href="http://sass.bootcss.com/docs/sass-reference/">文档</a></li>
</ul>
</li>
<li>CSS3 布局<ul>
<li><a href="http://zh.learnlayout.com/">学习布局</a></li>
</ul>
</li>
</ul>
<h2 id="javascript-教程">JavaScript 教程</h2>
<ul>
<li>ES6<ol>
<li><a href="http://es6-features.org/#Constants">权威教程:ECMAScript 6</a></li>
<li><a href="http://es6.ruanyifeng.com/">入门教程</a></li>
</ol>
</li>
<li>Node<ol>
<li><a href="http://nodejs.cn/">官方网站</a></li>
<li><a href="http://nodejs.cn/api/">官方教程</a></li>
</ol>
</li>
<li>ES3<ul>
<li><a href="http://www.runoob.com/js/js-tutorial.html">入门教程</a></li>
</ul>
</li>
<li>ES5<ol>
<li><a href="http://www.hahack.com/wiki/javascript-es5.html#es5-%E7%9A%84%E6%96%B0%E7%89%B9%E6%80%A7">ES5 新特性与 ES3 的对比</a></li>
<li><a href="http://pij.robinqu.me/JavaScript_Core/ECMAScript/es5.html">ES5 新特性博客</a></li>
</ol>
</li>
</ul>
<h2 id="服务端教程">服务端教程</h2>
<ul>
<li><a href="http://cnt1992.xyz/2016/03/18/simple-intro-to-nginx/">Nginx 入门</a></li>
<li><a href="http://tengine.taobao.org/book/#">Nginx 入门与精通（高级）</a></li>
<li><a href="https://nginxconfig.io/">Nginx 配置大全</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/fa079b0e-cce3-43c8-8de3-ce201dedd5dd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fa079b0e-cce3-43c8-8de3-ce201dedd5dd</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 21 Oct 2024 19:07:35 GMT</pubDate></item><item><title><![CDATA[【计算机网络】输入url请求细节]]></title><description><![CDATA[<h1 id="url请求细节">URL请求细节</h1>
<h2 id="1-从输入url到页面加载完成的过程？（高频考点）">1. 从输入URL到页面加载完成的过程？（高频考点）</h2>
<blockquote>
<p>[!NOTE]
涉及到浏览器缓存、TCP连接、浏览器渲染等知识。</p>
</blockquote>
<h3 id="11-基本流程">1.1 基本流程</h3>
<p><img src="../img/%E8%BE%93%E5%85%A5URL%E5%90%8E.png" alt="输入URL后.png"></p>
<ul>
<li>判断是否需要跳转(301)</li>
<li>从浏览器中读取缓存</li>
<li>DNS解析</li>
<li>TCP连接</li>
<li>HTTP请求发出</li>
<li>服务端处理请求，HTTP响应返回</li>
<li>浏览器拿到响应数据，解析响应内内容，把解析结果展示给用户</li>
</ul>
<h3 id="12-详细流程（重点掌握）">1.2 详细流程（重点掌握）</h3>
<ol>
<li>在浏览器地址栏输入URL</li>
<li>浏览器查看是否有<strong>强缓存</strong>，如果请求资源在缓存中并且新鲜，跳转到转码步骤<ol>
<li>如果资源未缓存，发起新请求</li>
<li>如果已缓存，检验是否足够新鲜，足够新鲜直接提供给客户端，否则与服务器进行验证。</li>
<li>检验新鲜通常有两个HTTP头进行控制<code>Expires</code>和<code>Cache-Control</code>：<ul>
<li>HTTP1.0提供Expires，值为一个绝对时间表示缓存新鲜日期</li>
<li>HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大新鲜时间</li>
</ul>
</li>
</ol>
</li>
<li>浏览器<strong>解析URL</strong>获取协议，主机，端口，path</li>
<li>浏览器<strong>组装一个HTTP（GET）请求报文</strong></li>
<li><strong>DNS解析</strong>，查找过程如下：<ol>
<li>浏览器缓存</li>
<li>本机缓存</li>
<li>hosts文件</li>
<li>路由器缓存</li>
<li>ISP DNS缓存</li>
<li>DNS查询（递归查询 / 迭代查询）</li>
</ol>
</li>
<li><strong>端口建立TCP链接</strong>，三次握手如下：<ol>
<li>客户端发送一个TCP的<strong>SYN=1，Seq=X</strong>的包到服务器端口</li>
<li>服务器发回<strong>SYN=1， ACK=X+1， Seq=Y</strong>的响应包</li>
<li>客户端发送<strong>ACK=Y+1， Seq=Z</strong></li>
</ol>
</li>
<li>TCP链接建立后<strong>发送HTTP请求</strong></li>
<li>服务器接受请求并解析，将请求转发到服务程序，如虚拟主机使用HTTP Host头部判断请求的服务程序</li>
<li>服务器检查<strong>HTTP请求头是否包含缓存验证信息</strong>如果验证缓存新鲜，返回<strong>304</strong>等对应状态码</li>
<li>处理程序读取完整请求并准备HTTP响应，可能需要查询数据库等操作</li>
<li>服务器将<strong>响应报文通过TCP连接发送回浏览器</strong></li>
<li>浏览器接收HTTP响应，然后根据情况选择<strong>关闭TCP连接或者保留重用，关闭TCP连接的四次握手如下</strong>：<ol>
<li>主动方发送<strong>Fin=1， Ack=Z， Seq= X</strong>报文</li>
<li>被动方发送<strong>ACK=X+1， Seq=Z</strong>报文</li>
<li>被动方发送<strong>Fin=1， ACK=X， Seq=Y</strong>报文</li>
<li>主动方发送<strong>ACK=Y， Seq=X</strong>报文</li>
</ol>
</li>
<li>浏览器检查响应状态吗：是否为1XX，3XX， 4XX， 5XX，这些情况处理与2XX不同</li>
<li>如果资源可缓存，<strong>进行缓存</strong></li>
<li>对响应进行<strong>解码</strong>（例如gzip压缩）</li>
<li>根据资源类型决定如何处理（假设资源为HTML文档）</li>
<li><strong>解析HTML文档，构件DOM树，下载资源，构造CSSOM树，执行js脚本</strong>，这些操作没有严格的先后顺序，以下分别解释</li>
<li><strong>构建DOM树</strong>：<ol>
<li><strong>Tokenizing</strong>：根据HTML规范将字符流解析为标记</li>
<li><strong>Lexing</strong>：词法分析将标记转换为对象并定义属性和规则</li>
<li><strong>DOM construction</strong>：根据HTML标记关系将对象组成DOM树</li>
</ol>
</li>
<li>解析过程中遇到图片、样式表、js文件，<strong>启动下载</strong></li>
<li>构建<strong>CSSOM树</strong>：<ol>
<li><strong>Tokenizing</strong>：字符流转换为标记流</li>
<li><strong>Node</strong>：根据标记创建节点</li>
<li><strong>CSSOM</strong>：节点创建CSSOM树</li>
</ol>
</li>
<li><strong><a href="https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-tree-construction">根据DOM树和CSSOM树构建渲染树</a></strong>:<ol>
<li>从DOM树的根节点遍历所有<strong>可见节点</strong>，不可见节点包括：1）<code>script</code>,<code>meta</code>这样本身不可见的标签。2)被css隐藏的节点，如<code>display: none</code></li>
<li>对每一个可见节点，找到恰当的CSSOM规则并应用</li>
<li>发布可视节点的内容和计算样式</li>
</ol>
</li>
<li><strong>js解析如下</strong>：<ol>
<li>浏览器创建Document对象并解析HTML，将解析到的元素和文本节点添加到文档中，此时<strong>document.readystate为loading</strong></li>
<li>HTML解析器遇到<strong>没有async和defer的script时</strong>，将他们添加到文档中，然后执行行内或外部脚本。这些脚本会同步执行，并且在脚本下载和执行时解析器会暂停。这样就可以用document.write()把文本插入到输入流中。<strong>同步脚本经常简单定义函数和注册事件处理程序，他们可以遍历和操作script和他们之前的文档内容</strong></li>
<li>当解析器遇到设置了<strong>async</strong>属性的script时，开始下载脚本并继续解析文档。脚本会在它<strong>下载完成后尽快执行</strong>，但是<strong>解析器不会停下来等它下载</strong>。异步脚本<strong>禁止使用document.write()</strong>，它们可以访问自己script和之前的文档元素</li>
<li>当文档完成解析，document.readState变成interactive</li>
<li>所有<strong>defer</strong>脚本会<strong>按照在文档出现的顺序执行</strong>，延迟脚本<strong>能访问完整文档树</strong>，禁止使用document.write()</li>
<li>浏览器<strong>在Document对象上触发DOMContentLoaded事件</strong></li>
<li>此时文档完全解析完成，浏览器可能还在等待如图片等内容加载，等这些<strong>内容完成载入并且所有异步脚本完成载入和执行</strong>，document.readState变为complete,window触发load事件</li>
</ol>
</li>
<li><strong>显示页面</strong>（HTML解析过程中会逐步显示页面）</li>
</ol>
<ul>
<li>补充知识：浏览器缓存包含两种类型，即强缓存（也叫本地缓存）和协商缓存</li>
<li>强缓存和协商缓存:<a href="https://www.cnblogs.com/wonyun/p/5524617.html">https://www.cnblogs.com/wonyun/p/5524617.html</a></li>
</ul>
<pre><code>获取资源形式    状态码    发送请求到服务器
强缓存     从缓存取     200（from cache）    否，直接从缓存取
协商缓存     从缓存取     304（not modified）    是，正如其名，通过服务器来告知缓存是否可用</code></pre>]]></description><link>https://blog.gaoredu.com/article/d8561d5e-7375-40f3-a997-4c42e8a6a373</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d8561d5e-7375-40f3-a997-4c42e8a6a373</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 21 Oct 2024 06:22:48 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】模板字符串的高级用法]]></title><description><![CDATA[<h1 id="模板字符串的高级用法">模板字符串的高级用法</h1>
<pre><code class="language-js">// 模板字符串的使用
let msg = `Hello \`World`
// 可以直接原样输出
let message01 = `
    &lt;ul&gt;
        &lt;li&gt;1&lt;/li&gt;
        &lt;li&gt;2&lt;/li&gt;
    &lt;/ul&gt;
`.trim();

// TODO: 模板字符串的嵌套
let arr = [{value: 1}, {value: 2}];
let message02 = `
    &lt;ul&gt;
        ${arr.map((item) =&gt; {
            return `
                &lt;li&gt;${item.value}&lt;/li&gt;
                    `
            }).join(&#39;&#39;)}
    &lt;/ul&gt;
`;

// TODO: 标签模板
function handleMessage(){

}

let x = &#39;Hi&#39;, y = &#39;Kevin&#39;;
var res = handleMessage`${x}, I am ${y}`;
console.log(res);

// TODO: 需求：实现message在书写的时候是换行的，输出字符是在一行？？？
let message03 = `
    Hi,
    Daisy!
    I am
    Kevin.
`;


function handleMessage(literals, ...values) {
    let res = &#39;&#39;;
    for (let i = 0; i &lt; values.length; i++) {
        res += literals[i];
        res += values[i];
    }

    res += literals[literals.length - 1];
    return res;
}

/**
 * 多行转换为一行文本
 * @param template 原始的模板字符串
 * @param expressions 模板字符串里面的表达式（计算后的结果）
 * @return {*}
 */
function oneLine(template, ...expressions) {
    console.log(template, expressions)
    let res = template.reduce((prev, next, i) =&gt; {
        // 默认从1开始
        console.log(i)
        let expression = expressions[i - 1];
        return prev + expression + next;
    })

    // 得到了已经和表达式合并之后的结果
    console.log(&#39;current res&#39;, res)

    // 将多个空白符如换行符、空格等替换成一个空格
    // res = res.replace(/(\s+)/g, &#39; &#39;);
    res = res.replace(/(\n\s*)/g, &#39; &#39;);
    // 去掉两边的空格
    res = res.trim();

    return res;
}
let msg01 = oneLine`
    Hi,
    ${1 + 1}
    Daisy!
    I am
    ${2 - 2}
    Kevin.
`;
console.log(msg01);



// 处理模板字符串中的函数处理结果
function includeArrays(template, ...expressions) {
    let result = template.reduce((prev, next, i) =&gt; {

        let expression = expressions[i - 1];

        if (Array.isArray(expression)) {
            expression = expression.join(&#39;&#39;);
        }

        return prev + expression + next;
    });

    result = result.trim();

    return result;
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/d11b528f-c3f4-4547-ad92-6d9d028ab96b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d11b528f-c3f4-4547-ad92-6d9d028ab96b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 19 Oct 2024 03:17:45 GMT</pubDate></item><item><title><![CDATA[【面经系列】腾讯面经]]></title><description><![CDATA[<h1 id="腾讯面经系列">腾讯面经系列</h1>
<ol>
<li>js基本数据类型</li>
<li>js的作用域</li>
<li>如何判断一个数组是数组</li>
<li>BOM 和 DOM的区别</li>
<li>有一个 字符串里面有很多is 请写一个方法只保留一个is          </li>
<li>问了sql注入和防御，我说我有点忘了，把话题转移到了xss</li>
<li>问了node 问了如何用experess搭建服务器</li>
<li>js 的event-loop</li>
<li>有3个-10--10之间的整数，写一个方法这三个数一共有多少可能想加等于10 </li>
<li>redux</li>
<li>react vue 的一些基础</li>
<li>说一下思路，如何把一个图片的地址，传到服务器，并保存在服务器 </li>
<li>用js中的正则表达式去掉两边的空格                           </li>
<li>堆和栈的区别</li>
<li>快排，怎么判断快排排好了</li>
<li>dom操作，怎么遍历所有dom节点，根div下有两div(A与B)，每个div下面又有两个span(A1,A2)与span(B1、B2)，怎么将spanA1与A2存在一个数组，B1与B2存在一个数组，树的遍历算法，这个题应该用深度优先还是广度优先，用什么数据结构。</li>
<li>tcp慢启动</li>
<li>tcp三次、四次握手</li>
<li>https握手，加密方式是对称还是非对称</li>
<li>强缓存、弱缓存</li>
<li>修改this的方法，apply和call区别</li>
<li>对JS闭包的理解</li>
<li>原型链</li>
<li>事件冒泡与捕获</li>
<li>原生ajax请求 带cookie</li>
<li>jsonp怎么反回后台数据</li>
<li>跨域后台怎么设置</li>
<li>es6 class怎么用es5实现</li>
<li>怎么实现动画，canvas动画与svg区别</li>
<li>css动画优化</li>
<li>promise原理怎么实现</li>
<li><code>水平垂直居中</code></li>
<li>从浏览器输入URL会发生什么</li>
<li>浏览器渲染 ，css、js会阻塞dom树加载吗</li>
<li>xss怎么防御</li>
<li>前端怎么实现富文本编辑器</li>
<li>PWA（Progressive Web App）</li>
<li>Service Worker</li>
<li>后台广播</li>
<li>http 长、短轮训</li>
<li>前端缓存，很长的数据缓存怎么选择</li>
<li>301与302区别，什么时候返回304</li>
<li>http1.1和http2.0的区别</li>
<li>CDN有没有了解</li>
<li>怎样判断Object和Array，Object有父对象么</li>
<li>CSS positon的属性有常见三个值 absolute fixed relative 这三个值有什么区别 是怎么用的，这三个跟文档流的关系？</li>
<li>两个单位em和rem，是怎么用的，有什么区别</li>
<li>js中的类数组</li>
<li>能不能改写一个数组的push方法，不是重写，也不是新写，保持原来的逻辑之外，再添加一个consle.log（arguements）在控制台打印出来，比如pushA。在工作台把A打印出来，push什么就打印什么。原来的逻辑不能改？</li>
<li>学习前端的方式有哪些？看哪些博客？看过哪些书？</li>
<li>JS如何改变函数上下文</li>
<li>bind/call/apply有什么区别？</li>
<li>bind调用时传入一个参数，此参数跟函数原有的参数什么关系？</li>
<li>CSS继承属性有哪些？列举3个</li>
<li>块级元素有哪些？</li>
<li>CSS position有哪些取值？</li>
<li>一个div,position设置为absolute,再用JS设置div.style.position=""，问这时div的表现？怎么去判断？</li>
<li>如何检测浏览器所支持的最小字体大小？</li>
<li>怎么做JS代码Error统计？</li>
<li>一张高清图片，怎么保证其在不同移动端设备上的显示效果？</li>
<li>html中一进入就一直页面缓冲不出来组件怎么办</li>
<li>怎么使用纯css实现一个三角形</li>
<li>html不同页面之间怎么共享数据</li>
<li>垃圾回收机制是怎么样</li>
<li>一个5升瓶子和一个6升瓶子怎么装3升水</li>
<li>为什么js是单线程？怎么解决</li>
<li>如何定义私有字段</li>
<li>git add commit 区别 commit到哪？</li>
<li>用过webpack吗？怎么用的？css文件</li>
<li>HTTP 如何标记缓存</li>
<li>etag和exprises 哪个用得比较多 为什么</li>
<li>35分时针分针夹角几度</li>
<li>实现一个input输入框，实现在一个arr数组查询命中和自动补齐效果</li>
<li>实现一个函数，完成超过范围的两个大整数相加功能</li>
<li>diff算法，树的深搜广搜</li>
<li>缓存机制，如何缓存图片</li>
<li>非递归便利二叉树</li>
<li>web性能优化</li>
<li>浏览器连接限制，编码怎么解决，http2.0</li>
<li>网络安全, xss, csrf</li>
<li>有一个数组，对这个数组按顺序进行异步处理，一个处理完才开始下一个，然后问用foreach行不行。</li>
<li>介绍发一个Ajax请求的链路全过程。IP地址怎样获取？</li>
<li>如何让一个cookie同时用于a.qq.com和b.qq.com？</li>
<li>有一个a.qq.com的图片发到百度贴吧上，会不会带上那个cookie？</li>
<li>快排原理，时间空间复杂度，为什么空间复杂度是log2n？</li>
<li>Vue响应式原理。</li>
<li>介绍项目，说其中的难点。</li>
<li>介绍归并排序原理。</li>
<li>说一下nodejs的原理（？？？不会，只说了事件驱动balabala）</li>
<li>https（又是https）</li>
<li>从海量十亿个数选最大的一百个，你有什么方法？</li>
<li>除了Vue还会什么？</li>
<li>React-router和路由的实现的方式有哪些？</li>
<li>移动端的适配问题？字体大小一致？</li>
<li>移动端的30ms点击延迟问题?如何解决？</li>
<li>node和ES6规范的差别？</li>
<li>module.exports和exports 的区别，与CommonJS的联系？</li>
<li>export 和 export default 的区别？</li>
<li>Canvas的性能如何优化？</li>
<li>JS的原型是什么？</li>
<li>webpack的底层实现原理，懒加载的配置</li>
<li>CSS雪碧图和Base64编码的选择？Base64编码原理？</li>
<li>get请求的url地址如何通过post方式发送？</li>
<li>浏览器的缓存策略？</li>
<li>将一个div容器移动到另外一个div容器的过程？</li>
<li>实现一个原生的ajax封装？</li>
<li>浏览器路由的实现方式有哪些?</li>
<li>输入URL到内容完全展示出来的过程？</li>
<li>HTTPS和HTTP的原理和区别？</li>
<li>Webpack和Gulp的区别</li>
<li>URL请求的过程</li>
<li>首页渲染问题如何优化, 前端的性能优化方式有哪些？</li>
<li>网站首页白屏错误如何排查？实时监控？</li>
<li>如何解决JS的回调地狱问题?</li>
<li>CSS的margin重叠问题如何解决？</li>
<li>mvvm  mvc；</li>
<li>单页应用 多页应用的优缺点；</li>
<li>前后分离 不分离 哪一个更安全 区别  页面的响应是前端还是后端；</li>
<li>typeScript；</li>
<li>this指针；</li>
<li>原型链；</li>
<li>https；</li>
<li>维持登录状态；</li>
<li>es6常用；</li>
<li>ccs3用过什么；</li>
<li>浏览器怎么适配；</li>
<li>你封装过什么组件；</li>
<li>js怎么优化；</li>
<li>工程化。webpack；</li>
<li>webpack工作原理；</li>
<li>和同事关系不好，怎么办；</li>
<li>一个5升  一个6升  空瓶子  怎么弄出来2l水；</li>
<li>上海高铁到杭州 杭州飞机到老家 现在高铁晚点了  怎么办  （今天必须回家）；</li>
<li>react生命周期</li>
<li>url的整个过程，越多越好；</li>
<li>跨域的方式，越多越好；</li>
<li>web优化的方式，越多越好；</li>
<li>react生命周期，和vue比较，要求多说；</li>
<li>rsa算法，esa算法；</li>
<li>linux查看进程的命令；</li>
<li>一个很大的数据集包括192.168.0.1 -24/32/30 给一个ip地址怎么知道在不在这个数据集中；</li>
<li>给一亿个长度不一样的字符串，怎么判断一个随机长度的字符串在不在这个里面（字典树）；</li>
<li>给一堆整数，怎么判断这个整数在不在这一堆数里面（位图）；</li>
<li>一个表有姓名年龄课程，sql数据库找每个人的最高成绩，课程名，姓名。</li>
<li>说一下url；</li>
<li>xss怎么预防；</li>
<li>http说一下；</li>
<li>get post区别；</li>
<li>tcp三次握手和四次分手，都有什么标志；</li>
<li>pv uv是啥；</li>
<li>h5用过什么；</li>
<li>xml json区别；</li>
<li>web优化；</li>
<li>mysql引擎；</li>
<li>浏览器引擎有什么；</li>
<li>页面渲染的过程；</li>
<li>http劫持怎么预防；</li>
<li>ngnix反向代理服务器</li>
</ol>]]></description><link>https://blog.gaoredu.com/article/f21d0bf7-53d9-42d6-b492-9ae05236a58b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f21d0bf7-53d9-42d6-b492-9ae05236a58b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 17 Oct 2024 19:24:35 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】模拟实现私有变量]]></title><description><![CDATA[<h1 id="模拟实现私有变量（面试加分项）">模拟实现私有变量（面试加分项）</h1>
<pre><code class="language-js">// 私有变量的实现
// v1. 基础实现
class Example {
    constructor(name){
        this._private = name;
    }

    getName(){
        return this._private;
    }
}

let ex = new Example(&#39;private1&#39;);
console.log(ex.getName(), ex._private);  // private private
let ex1 = new Example(&#39;private2&#39;);
console.log(ex1.getName(), ex1._private);  // private private

// TODO: 主要问题
// 1. 外部可以访问和修改
// 2. 语言没有配合的机制，for In可以枚举出来
// 3. 命名冲突



// v2. 使用闭包来实现
// v2.1
class Example02 {
    constructor(name){
        let _private = &#39;&#39;;
        _private = name;

        this.getName = function () {
            return _private;
        }
    }
}
let ex01 = new Example02(&#39;private1&#39;);
console.log(ex01.getName(), ex01._private);  // private private
let ex02 = new Example02(&#39;private2&#39;);
console.log(ex02.getName(), ex02._private);  // private private

// 优点：1. 没有命名冲突， 2.外部无法直接访问和修改
// TODO: 缺点
// 1. constructor 的逻辑变得复杂。构造函数应该只做对象初始化的事情，现在为了实现私有变量，必须包含部分方法的实现，代码组织上略不清晰。
// 2. 方法存在于实例，而非原型上，子类也无法使用 super 调用
// 3. 构建增加一点点开销

// v2.2 代码优化
const Example03 = (function () {
    let _private = &#39;&#39;;

    class Example03 {
        constructor() {
           _private = &#39;private&#39;;
        }

        getName(){
            return _private;
        }
    }

    return Example03;
})();

let ex3 = new Example03();
console.log(ex3.getName(), ex3._private) // private undefined
// 优点： 1. 没有命名冲突， 2. 外部无法访问和修改
// TODO: 缺点：1. 写法复杂 2. 构建开销


// v3. 使用Symbol来实现
const Example4 = (function () {
    // 每个Symbol实际上都是唯一的
    let _private = Symbol(&#39;private&#39;);

    class Example4 {
        constructor(props) {
            this[_private] = &#39;private&#39;;
        }

        getName(){
            return this[_private];
        }
    }

    return Example4;
})();

// 优点： 1.没有命名冲突 2.外部无法访问和修改 3. 没有性能损失
// 缺点： 写法稍微复杂，兼容性还好



// v4. 使用WeakMap实现
const _private = new WeakMap();

class Example5 {
    constructor(){
        _private.set(this, &#39;private&#39;);
    }

    getName(){
        return _private.get(this);
    }
}

let ex5 = new Example5();
console.log(ex5.getName(), ex5.name)

// 上面的代码封装
const Example5 = (function () {
    const _private = new WeakMap();

    class Example5{
        constructor(){
            _private.set(this, &#39;private&#39;);
        }

        getName(){
            return _private.get(this);
        }
    }

    return Example5;
})();


// v5. 最新提案
class Point {
    #x;
    #y;

    constructor(x, y){
        this.#x = x;
        this.#y = y;
    }

    equals(point){
        return this.#x === point.#x &amp;&amp; this.#y === point.#y;
    }
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/e1fe2bb9-d079-4a30-9611-700392f45c76</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e1fe2bb9-d079-4a30-9611-700392f45c76</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 13 Oct 2024 22:55:06 GMT</pubDate></item><item><title><![CDATA[【NodeJS相关】EventLoop]]></title><description><![CDATA[<h1 id="eventloop">EventLoop</h1>
<h2 id="1-eventloop的执行流程图">1. EventLoop的执行流程图</h2>
<pre><code class="language-js">  ┌───────────────────────┐
┌─&gt;│        timers         │&lt;————— 执行 setTimeout()、setInterval() 的回调
│  └──────────┬────────────┘
|             |&lt;-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
│  ┌──────────┴────────────┐
│  │     pending callbacks │&lt;————— 执行由上一个 Tick 延迟下来的 I/O 回调（待完善，可忽略）
│  └──────────┬────────────┘
|             |&lt;-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
│  ┌──────────┴────────────┐
│  │     idle, prepare     │&lt;————— 内部调用（可忽略）
│  └──────────┬────────────┘     
|             |&lt;-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
|             |                   ┌───────────────┐
│  ┌──────────┴────────────┐      │   incoming:   │ - (执行几乎所有的回调，除了 close callbacks 以及 timers 调度的回调和 setImmediate() 调度的回调，在恰当的时机将会阻塞在此阶段)
│  │         poll          │&lt;─────┤  connections, │ 
│  └──────────┬────────────┘      │   data, etc.  │ 
│             |                   |               | 
|             |                   └───────────────┘
|             |&lt;-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
|  ┌──────────┴────────────┐      
│  │        check          │&lt;————— setImmediate() 的回调将会在这个阶段执行
│  └──────────┬────────────┘
|             |&lt;-- 执行所有 Next Tick Queue 以及 MicroTask Queue 的回调
│  ┌──────────┴────────────┐
└──┤    close callbacks    │&lt;————— socket.on(&#39;close&#39;, ...)</code></pre>
<ol>
<li>setTimeout/setInterval 属于 timers 类型；</li>
<li>setImmediate 属于 check 类型；</li>
<li>socket 的 close 事件属于 close callbacks 类型；</li>
<li>其他 MacroTask 都属于 poll 类型。</li>
<li>process.nextTick 本质上属于 MicroTask，但是它先于所有其他 MicroTask 执行；</li>
<li>所有 MicroTask 的执行时机，是不同类型 MacroTask 切换的时候。</li>
<li>idle/prepare 仅供内部调用，我们可以忽略。</li>
<li>pending callbacks 不太常见，我们也可以忽略。</li>
</ol>
<h2 id="2-执行机制">2. 执行机制</h2>
<ol>
<li>先执行所有类型为 timers 的 MacroTask，然后执行所有的 MicroTask（注意 NextTick 要优先哦）；</li>
<li>进入 poll 阶段，执行几乎所有 MacroTask，然后执行所有的 MicroTask；</li>
<li>再执行所有类型为 check 的 MacroTask，然后执行所有的 MicroTask；</li>
<li>再执行所有类型为 close callbacks 的 MacroTask，然后执行所有的 MicroTask；</li>
<li>至此，完成一个 Tick，回到 timers 阶段；
……
如此反复，无穷无尽……
<img src="../../img/node-event-loop.png" alt="执行机制"></li>
</ol>
<h3 id="21-实例理解">2.1 实例理解</h3>
<pre><code class="language-js">const macroTaskList = [
  [&#39;task1&#39;],
  [&#39;task2&#39;, &#39;task3&#39;],
  [&#39;task4&#39;],
]

for (let macroIndex = 0; macroIndex &lt; macroTaskList.length; macroIndex++) {
  const microTaskList = macroTaskList[macroIndex]

  for (let microIndex = 0; microIndex &lt; microTaskList.length; microIndex++) {
    const microTask = microTaskList[microIndex]

    // 添加一个微任务
    if (microIndex === 1) microTaskList.push(&#39;special micro task&#39;)

    // 执行任务
    console.log(microTask)
  }

  // 添加一个宏任务
  if (macroIndex === 2) macroTaskList.push([&#39;special macro task&#39;])
}


// 输出结果：
// &gt; task1
// &gt; task2
// &gt; task3
// &gt; special micro task
// &gt; task4
// &gt; special macro task</code></pre>
<h3 id="22-执行细节分析">2.2 执行细节分析</h3>
<h4 id="221-试分析下面程序的执行结果">2.2.1 试分析下面程序的执行结果</h4>
<pre><code class="language-js">console.log(1)
setTimeout(function() {
    console.log(2)
})

Promise.resolve()
    .then(function() {
        console.log(3)
    })

console.log(4)</code></pre>
<h4 id="222-执行流程分析">2.2.2 执行流程分析</h4>
<blockquote>
<p>stack(执行栈)、Micro(微任务)、Macro（宏任务）</p>
</blockquote>
<ol>
<li><p>初始状态： stack:[], Micro: [], Macro: [script]。执行栈为空, 微任务为空, 宏任务队列中有一个整体的 script代码 </p>
</li>
<li><p>主线程开始执行, 遇到console.log(1), 首先会打印 1 </p>
</li>
<li><p>继续向下执行,遇到 setTimeout异步任务,就将其加入到Macro(宏任务)队列中。等待执行 </p>
</li>
<li><p>继续向下执行, 遇到 Promise.resolve也是一个异步任务,单它是微任务,将其加入 Micro(微任务)队列中,等待着行 </p>
</li>
<li><p>解析console.log(4), 并且打印4。 当主线程执行完打印的结果依次是 1 和 4。</p>
</li>
<li><p>这时候主线程就会问 任务(异步)队列,有没有微任务要执行,将所有的 Micro(微任务)加入执行栈执行, 打印结果 3</p>
</li>
<li><p>微任务执行完了, 就开始下一轮事件循环, 将第一个 Macro(宏任务)压入执行栈执行, 再次打印 2。 </p>
</li>
</ol>
<p><img src="../../img/node-eventloop.png" alt="EventLoop"></p>
<h2 id="3-谈一下宏任务与微任务的区别？（面试重点）">3. 谈一下宏任务与微任务的区别？（面试重点）</h2>
<blockquote>
<p>[!NOTE]
面试常考点，关键在于理解EventLoop的机制，以及宏任务和微任务的底层原理。</p>
</blockquote>
<h3 id="31-宏任务">3.1 宏任务</h3>
<ul>
<li><strong>setTimeout</strong></li>
<li><strong>setInterval</strong></li>
<li><strong>setImmediate</strong></li>
<li><strong>requestAnimationFrame</strong></li>
</ul>
<p>常见的宏任务: setTimeout、setInterval、setImmediate、 script中整体的代码、 I/O操作、 UI渲染等。</p>
<h3 id="32-微任务">3.2 微任务</h3>
<ul>
<li><strong>process.nextTick</strong></li>
<li><strong>MutationObserver</strong></li>
<li><strong>Promise.then catch finally</strong></li>
</ul>
<p>常见的微任务有: process.nextTick、Promise和 MutationObserver监听DOM的变化。</p>
<h3 id="33-微任务和宏任务的区别">3.3 微任务和宏任务的区别</h3>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>微任务进入主线程执行是一队一队的, 而宏任务进入主线程是一个一个的。</li>
<li>微任务是在主线程空闲时批量执行, 宏任务是在事件循环下一轮的最开始执行</li>
</ul>
</blockquote>
<hr>
<p>参考文章：</p>
<ul>
<li><p><a href="https://www.jianshu.com/p/deedcbf68880">https://www.jianshu.com/p/deedcbf68880</a></p>
</li>
<li><p><a href="https://www.cnblogs.com/qiqingfu/p/10664549.html">https://www.cnblogs.com/qiqingfu/p/10664549.html</a></p>
</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/e3cd0a43-5bac-4719-ba8f-9cb4e2f658cb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e3cd0a43-5bac-4719-ba8f-9cb4e2f658cb</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 12 Oct 2024 10:28:09 GMT</pubDate></item><item><title><![CDATA[【JS相关】函数]]></title><description><![CDATA[<h1 id="函数">函数</h1>
<h2 id="1-js编译解析的流程">1. JS编译解析的流程</h2>
<h3 id="11-js运行分三步">1.1 JS运行分三步</h3>
<p>语法分析（通篇扫描是否有语法错误），预编译（发生在函数执行的前一刻），解释执行（一行行执行）。</p>
<h3 id="12-预编译执行分五步">1.2 预编译执行分五步</h3>
<ol>
<li><p>创建AO对象（Activation Object  执行期上下文）</p>
</li>
<li><p>找形参和变量声明，将变量和形参名作为AO属性名，值为undefined. 变量声明提升（变量放到后面也不会报错，只是未定义类型）如：console.log(a);var a=10;结果undenfined;</p>
</li>
<li><p>将实参值和形参统一（传参）</p>
</li>
<li><p>在函数体里面找到函数声明{函数声明整体提升（相当于放到程序最前面）}</p>
</li>
<li><p>值赋予函数体，执行（声明函数和变量的部分直接不看了）</p>
</li>
</ol>
<h2 id="2-函数作用域和作用域链">2. 函数作用域和作用域链</h2>
<h3 id="21-函数作用域">2.1 函数作用域</h3>
<blockquote>
<p>每个javascript函数都是一个对象，对象中有的属性可以访问，有的不能，这些属性仅供javascript引擎存取，如[[scope]]。</p>
</blockquote>
<p>[[scope]]就是函数的作用域，其中存储了执行期上下文的集合。</p>
<p><strong>执行期上下文</strong>： 当函数执行时，会创建一个称为执行期上下文的内部对象（AO）。一个执行期上下文定义了一个函数执行时的环境，函数每次执行时对应的执行期上下文都是独一无二的，所以多次调用一个函数会导致创建多个执行期上下文，当函数执行完毕，它所产生的执行上下文被销毁。</p>
<h3 id="22-作用域链">2.2 作用域链</h3>
<p><code>[[scope]]</code>中所存储的执行期上下文对象的集合，这个集合呈链式链接，我们称这种链式链接为作用域链。查找变量时，要从作用域链的顶部开始查找。Activation Object（AO）到Global Object（GO）。</p>
<p><img src="../../img/function.png" alt="function">
<img src="../../img/define.png" alt="a定义">
<img src="../../img/run.png" alt="a run">
<img src="../../img/bdefine.png" alt="b define">
<img src="../../img/brun.png" alt="b run"></p>
<h3 id="23-闭包">2.3 闭包</h3>
<blockquote>
<p>[!NOTE]
当内部函数被保存到外部时，将会生成闭包。生成闭包后，内部函数依旧可以访问其所在的外部函数的变量。</p>
</blockquote>
<blockquote>
<p>闭包问题的解决方法：立即执行函数、let</p>
</blockquote>
<h4 id="231-详细解释">2.3.1 详细解释</h4>
<ol>
<li><p>当函数执行时，会创建一个称为<strong>执行期上下文的内部对象（AO）</strong>，执行期上下文定义了一个函数执行时的环境。</p>
</li>
<li><p>函数还会获得它所在作用域的<strong>作用域链</strong>，是存储函数能够访问的所有执行期上下文对象的集合，即这个函数中能够访问到的东西都是沿着作用域链向上查找直到全局作用域。</p>
</li>
<li><p>函数每次执行时对应的执行期上下文都是独一无二的，当函数执行完毕，函数都会失去对这个作用域链的引用，JS的垃圾回收机制是采用引用计数策略，如果一块内存不再被引用了那么这块内存就会被释放。</p>
</li>
<li><p>但是，当闭包存在时，即内部函数保留了对外部变量的引用时，这个作用域链就不会被销毁，此时内部函数依旧可以访问其所在的外部函数的变量，这就是闭包。</p>
</li>
</ol>
<h4 id="232-闭包的应用">2.3.2 闭包的应用</h4>
<blockquote>
<p>先看两个例子，两个例子都打印5个5</p>
</blockquote>
<pre><code class="language-js">for (var i = 0; i &lt; 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 100)
}</code></pre>
<pre><code class="language-js">function test() {
   var a = [];
   for (var i = 0; i &lt; 5; i++) {
         a[i] = function () {
            console.log(i);
         }
   }
   return a;
}

var myArr = test();
for(var j=0;j&lt;5;j++)
{
   myArr[j]();
}</code></pre>
<blockquote>
<p>解决方法： 使用立即执行函数</p>
</blockquote>
<pre><code class="language-js">for (var i = 0; i &lt; 5; i++) {
   ;(function(i) {
      setTimeout(function timer() {
         console.log(i)
      }, i * 100)
   })(i)
}</code></pre>
<pre><code class="language-js">function test(){
   var arr=[];
   for(i=0;i&lt;10;i++)
   {
      (function(j){
         arr[j]=function(){
         console.log(j);
         }
      })(i)
   }
   return arr;
}

var myArr=test();
for(j=0;j&lt;10;j++)
{
   myArr[j]();
}</code></pre>
<h4 id="233-闭包-封装私有变量">2.3.3 闭包-封装私有变量</h4>
<pre><code class="language-js">function Counter() {
   let count = 0;
   this.plus = function () {
      return ++count;
   }
   this.minus = function () {
      return --count;
   }
   this.getCount = function () {
      return count;
   }
}

const counter = new Counter();
counter.puls();
counter.puls();
console.log(counter.getCount())</code></pre>
<h2 id="3-作用域与变量声明提升">3. 作用域与变量声明提升?</h2>
<ol>
<li>在 JavaScript 中，函数声明与变量声明会被 JavaScript 引擎隐式地提升到当前作用域的顶部 </li>
<li>声明语句中的赋值部分并不会被提升，只有名称被提升</li>
<li>函数声明的优先级高于变量，如果变量名跟函数名相同且未赋值，则函数声明会覆盖变量声明</li>
<li>如果函数有多个同名参数，那么最后一个参数（即使没有定义）会覆盖前面的同名参数</li>
</ol>
<h2 id="4-构造函数，new时发生了什么？">4. 构造函数，new时发生了什么？</h2>
<pre><code class="language-javascript">   var obj  = {}; 
   obj.__proto__ = Base.prototype;
   Base.call(obj);  </code></pre>
<ol>
<li>创建一个新的对象 obj;</li>
<li>将这个空对象的<strong>proto</strong>成员指向了Base函数对象prototype成员对象</li>
<li>Base函数对象的this指针替换成obj, 相当于执行了Base.call(obj);</li>
<li>如果构造函数显示的返回一个对象，那么则这个实例为这个返回的对象。 否则返回这个新创建的对象</li>
</ol>
<h2 id="5-函数参数是对象会发生什么问题？">5. 函数参数是对象会发生什么问题？</h2>
<pre><code class="language-javascript">function test(person) {
  person.age = 26
  person = {
    name: &#39;yyy&#39;,
    age: 30
  }

  return person
}
const p1 = {
  name: &#39;hy&#39;,
  age: 25
}
const p2 = test(p1)
console.log(p1) // -&gt; {name: &quot;hy&quot;, age: 20}
console.log(p2) // -&gt; {name: &quot;yyy&quot;, age: 30}</code></pre>
<p><code>person = {}</code> 这一步操作就将应用与原来的分离了
<img src="../../img/addressChange.png" alt="地址改变"></p>
<h2 id="6-javascript-中，调用函数有哪几种方式？">6. JavaScript 中，调用函数有哪几种方式？</h2>
<ol>
<li>方法调用模式 Foo.foo(arg1, arg2);</li>
<li>函数调用模式 foo(arg1, arg2);</li>
<li>构造器调用模式 (new Foo())(arg1, arg2);</li>
<li>call/applay 调用模式 Foo.foo.call(that, arg1, arg2);</li>
<li>bind 调用模式 Foo.foo.bind(that)(arg1, arg2)();</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/ba342562-8124-4730-aaa4-525eff5909b0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ba342562-8124-4730-aaa4-525eff5909b0</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 12 Oct 2024 07:15:37 GMT</pubDate></item><item><title><![CDATA[【计算机网络】WebSocket]]></title><description><![CDATA[<h1 id="websocket的实现原理">WebSocket的实现原理</h1>
<h2 id="1介绍一下websocket和通信过程？">1.介绍一下websocket和通信过程？</h2>
<h3 id="11-基本概念">1.1 基本概念</h3>
<blockquote>
<p>[!NOTE]
Websocket是应用层第七层上的一个应用层协议，它必须依赖 HTTP 协议进行一次握手 ，握手成功后，数据就直接从 TCP 通道传输，与 HTTP 无关了。即：websocket分为握手和数据传输阶段，即进行了HTTP握手 + 双工的TCP连接。</p>
</blockquote>
<h3 id="12-通信过程">1.2 通信过程</h3>
<p>下面我们分别来看一下这两个阶段的具体实现原理：</p>
<h4 id="121-握手阶段">1.2.1 握手阶段</h4>
<p>客户端发送消息：</p>
<pre><code class="language-js">GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13
服务端返回消息：

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这里值得注意的是Sec-WebSocket-Accept的计算方法：
base64(hsa1(sec-websocket-key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11))
如果这个Sec-WebSocket-Accept计算错误浏览器会提示：Sec-WebSocket-Accept dismatch
如果返回成功，Websocket就会回调onopen事件</code></pre>
<h4 id="122-传输阶段">1.2.2 传输阶段</h4>
<blockquote>
<p>[!NOTE]
Websocket的数据传输是frame形式传输的，比如会将一条消息分为几个frame，按照先后顺序传输出去。</p>
</blockquote>
<p>这样做会有几个好处：</p>
<ul>
<li>a、大数据的传输可以分片传输，不用考虑到数据大小导致的长度标志位不足够的情况。</li>
<li>b、和http的chunk一样，可以边生成数据边传递消息，即提高传输效率。</li>
</ul>
<p><strong>websocket传输使用的协议参数说明如下</strong>：</p>
<blockquote>
<p>FIN：1位，用来表明这是一个消息的最后的消息片断，当然第一个消息片断也可能是最后的一个消息片断；</p>
</blockquote>
<blockquote>
<p>RSV1, RSV2, RSV3: 分别都是1位，如果双方之间没有约定自定义协议，那么这几位的值都必须为0,否则必须断掉WebSocket连接；</p>
</blockquote>
<blockquote>
<p>Opcode: 4位操作码，定义有效负载数据，如果收到了一个未知的操作码，连接也必须断掉，以下是定义的操作码：</p>
</blockquote>
<ul>
<li>%x0 表示连续消息片断</li>
<li>%x1 表示文本消息片断</li>
<li>%x2 表未二进制消息片断</li>
<li>%x3-7 为将来的非控制消息片断保留的操作码</li>
<li>%x8 表示连接关闭</li>
<li>%x9 表示心跳检查的ping</li>
<li>%xA 表示心跳检查的pong</li>
<li>%xB-F 为将来的控制消息片断的保留操作码</li>
</ul>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li><strong>Mask</strong>: 1位，定义传输的数据是否有加掩码,如果设置为1,掩码键必须放在masking-key区域，客户端发送给服务端的所有消息，此位的值都是1；</li>
</ol>
</blockquote>
<blockquote>
<ol start="2">
<li><strong>Payload length</strong>: 传输数据的长度，以字节的形式表示：7位、7+16位、或者7+64位。如果这个值以字节表示是0-125这个范围，那这个值就表示传输数据的长度；如果这个值是126，则随后的两个字节表示的是一个16进制无符号数，用来表示传输数据的长度；如果这个值是127,则随后的是8个字节表示的一个64位无符合数，这个数用来表示传输数据的长度。多字节长度的数量是以网络字节的顺序表示。负载数据的长度为扩展数据及应用数据之和，扩展数据的长度可能为0,因而此时负载数据的长度就为应用数据的长度。</li>
</ol>
</blockquote>
<blockquote>
<ol start="3">
<li><strong>Masking-key</strong>: 0或4个字节，客户端发送给服务端的数据，都是通过内嵌的一个32位值作为掩码的；掩码键只有在掩码位设置为1的时候存在。</li>
</ol>
</blockquote>
<blockquote>
<ol start="4">
<li><strong>Payload data</strong>: (x+y)位，负载数据为扩展数据及应用数据长度之和。</li>
</ol>
</blockquote>
<blockquote>
<ol start="5">
<li><strong>Extension data</strong>: x位，如果客户端与服务端之间没有特殊约定，那么扩展数据的长度始终为0，任何的扩展都必须指定扩展数据的长度，或者长度的计算方式，以及在握手时如何确定正确的握手方式。如果存在扩展数据，则扩展数据就会包括在负载数据的长度之内。</li>
</ol>
</blockquote>
<blockquote>
<ol start="7">
<li><strong>Application data</strong>: y位，任意的应用数据，放在扩展数据之后，应用数据的长度=负载数据的长度-扩展数据的长度。</li>
</ol>
</blockquote>
<h2 id="2-websocket传输文件的思路？（加分项）">2. Websocket传输文件的思路？（加分项）</h2>
<ol>
<li>服务器端侦听某端口，接受WebSocket请求，后面可用nginx作反向代理，外部看到的将是80端口</li>
<li>客户端连接服务器的WebSocket地址，连接成功后，首先传送一个NEW_FILE的数据包，里面带上要传输的文件名</li>
<li>服务器端收到NEW_FILE包后，解析出文件名，并创建目标文件，再回复ACK_NEW_FILE的数据包</li>
<li>客户端收到ACK_NEW_FILE的数据包后，检查回应的code，如是成功码，则启动一个线程，该线程负责将源文件的数据封装成多个FILE_DATA数据包，传送这些FILE_DATA数据至服务器端</li>
<li>服务器端接收FILE_DATA数据包，解析出里面的文件数据，将文件数据写入文件</li>
<li>客户端发送完源文件数据后，再传送一个FILE_END数据包，该文件包中带上源文件的MD5值</li>
<li>服务器端收到FILE_END数据包后，比对源文件的MD5值与目标文件的MD5值，如相同，则认为传输成功，并返回ACK_FILE_END数据包，里面带上成功码</li>
<li>客户端收到ACK_FILE_END数据包，检查回应的code，如是成功码，则认为传输成功，否则认为传输失败</li>
</ol>
<h2 id="3-websocket是什么样的协议，具体有什么优点？">3. Websocket是什么样的协议，具体有什么优点？</h2>
<h3 id="31-基本介绍">3.1 基本介绍</h3>
<ol>
<li><p>首先，Websocket是一个持久化的协议，相对于HTTP这种非持久的协议来说。简单的举个例子吧，用目前应用比较广泛的PHP生命周期来解释。</p>
</li>
<li><p>HTTP的生命周期通过 Request 来界定，也就是一个 Request 一个 Response ，那么在 HTTP1.0 中，这次HTTP请求就结束了。</p>
</li>
<li><p>在HTTP1.1中进行了改进，使得有一个keep-alive，也就是说，在一个HTTP连接中，可以发送多个Request，接收多个Response。但是请记住 Request = Response ， 在HTTP中永远是这样，也就是说一个request只能有一个response。而且这个response也是被动的，不能主动发起。</p>
</li>
<li><p>Websocket是基于HTTP协议的，或者说借用了HTTP的协议来完成一部分握手。</p>
<h3 id="32-细节介绍">3.2 细节介绍</h3>
<p>首先我们来看个典型的 Websocket 握手（借用Wikipedia的。。）</p>
</li>
</ol>
<pre><code>    GET /chat HTTP/1.1
    Host: server.example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
    Sec-WebSocket-Protocol: chat, superchat
    Sec-WebSocket-Version: 13</code></pre><p>Origin: <a href="http://example.com">http://example.com</a></p>
<p>熟悉HTTP的童鞋可能发现了，这段类似HTTP协议的握手请求中，多了几个东西。我会顺便讲解下作用。</p>
<p><strong>Upgrade: websocket</strong>
<strong>Connection: Upgrade</strong>
这个就是Websocket的核心了，告诉 Apache 、 Nginx 等服务器：注意啦，我发起的是Websocket协议，快点帮我找到对应的助理处理~不是那个老土的HTTP。</p>
<p>Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13</p>
<p>首先， Sec-WebSocket-Key 是一个 Base64 encode 的值，这个是浏览器随机生成的，告诉服务器：泥煤，不要忽悠窝，我要验证尼是不是真的是Websocket助理。</p>
<p>然后， Sec_WebSocket-Protocol 是一个用户定义的字符串，用来区分同URL下，不同的服务所需要的协议。简单理解：今晚我要服务A，别搞错啦~</p>
<p>最后， Sec-WebSocket-Version 是告诉服务器所使用的 Websocket Draft（协议版本），在最初的时候，Websocket协议还在 Draft 阶段，各种奇奇怪怪的协议都有，而且还有很多期奇奇怪怪不同的东西，什么Firefox和Chrome用的不是一个版本之类的，当初Websocket协议太多可是一个大难题。。不过现在还好，已经定下来啦<del>大家都使用的一个东西</del> 脱水： 服务员，我要的是13岁的噢→_→</p>
<p>然后服务器会返回下列东西，表示已经接受到请求， 成功建立Websocket啦！</p>
<p>HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
这里开始就是HTTP最后负责的区域了，告诉客户，我已经成功切换协议啦~</p>
<p>Upgrade: websocket
Connection: Upgrade
依然是固定的，告诉客户端即将升级的是 Websocket 协议，而不是mozillasocket，lurnarsocket或者shitsocket。</p>
<p>然后， Sec-WebSocket-Accept 这个则是经过服务器确认，并且加密过后的 Sec-WebSocket-Key 。 服务器：好啦好啦，知道啦，给你看我的ID CARD来证明行了吧。。</p>
<p>后面的， Sec-WebSocket-Protocol 则是表示最终使用的协议。</p>
<p>至此，HTTP已经完成它所有工作了，接下来就是完全按照Websocket协议进行了。具体的协议就不在这阐述了。</p>
]]></description><link>https://blog.gaoredu.com/article/af0b1304-0952-4be7-8b5c-26d84d8e47fb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/af0b1304-0952-4be7-8b5c-26d84d8e47fb</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 Oct 2024 06:53:14 GMT</pubDate></item><item><title><![CDATA[【计算机网络】跨域]]></title><description><![CDATA[<h1 id="跨域问题">跨域问题</h1>
<h2 id="1跨域问题的产生原因？">1.跨域问题的产生原因？</h2>
<h3 id="11-同源策略">1.1 同源策略</h3>
<ul>
<li>端口相同</li>
<li>域名相同</li>
<li>协议相同</li>
</ul>
<p>例子：<code>http://www.example.com/dir/page.html</code> 这个网址，协议是<code>http</code>，域名是<code>www.example.com</code>，端口是<code>80</code></p>
<blockquote>
<p>[!NOTE]
同源政策的目的，是为了保证用户信息的安全，防止恶意的网站窃取数据。<strong>是浏览器做的努力</strong></p>
</blockquote>
<h3 id="12-同源策略限制范围">1.2 同源策略限制范围</h3>
<ul>
<li>Cookie、LocalStorage 和 IndexDB 无法读取<ul>
<li>DOM 无法获得</li>
<li>AJAX 请求不能发送</li>
</ul>
</li>
</ul>
<h2 id="2-跨域通信的解决方法？">2 跨域通信的解决方法？</h2>
<h3 id="21-cros跨域资源请求">2.1 CROS跨域资源请求</h3>
<blockquote>
<p>[!NOTE]
CORS(Cross-origin resource sharing)跨域资源请求: 浏览器在请求一个跨域资源的时候，如果是跨域的Ajax请求，他会在请求头中加一个<code>origin</code>字段，但他是不知道这个资源服务端是否允许跨域请求的。浏览器会发送到服务端，如果服务器返回的头中没有<code>&#39;Access-Control-Allow-Origin&#39;: &#39;对应网址或 * &#39;</code> 的话，那么浏览器就会把请求内容给忽略掉，并且在控制台报错</p>
</blockquote>
<h4 id="211-cors限制">2.1.1 CORS限制</h4>
<p>允许的请求方法</p>
<ul>
<li>GET</li>
<li>POST</li>
<li>HEAD</li>
</ul>
<p>允许的Content-Type</p>
<ul>
<li>text/plain</li>
<li>multipart/form-data</li>
<li>application/x-www-form-ulencoded</li>
</ul>
<p>其他类型的请求方法和Content-Type需要通过<strong>预请求验证</strong>后然后才能发送</p>
<h4 id="212-cors预请求">2.1.2 CORS预请求</h4>
<blockquote>
<p>[!NOTE]
跨域资源共享标准新增了一组 HTTP 首部字段，允许服务器声明哪些源站有权限访问哪些资源。另外，规范要求，对那些可能对服务器数据产生副作用的 HTTP 请求方法（特别是 GET 以外的 HTTP 请求，或者搭配某些 MIME 类型的 POST 请求），浏览器必须首先使用 OPTIONS 方法发起一个预检请求。</p>
</blockquote>
<p>服务器在HTTP header中加入允许请求的方法和Content-Type后，其他指定的方法和Content-Type就可以成功请求了</p>
<pre><code>&#39;Access-Control-Allow-Headers&#39;: &#39;允许Content-Type&#39;
&#39;Access-Control-Allow-Methods&#39;: &#39;允许的请求方法&#39;
&#39;Access-Control-Max-Age&#39;: &#39;预请求允许其他方法和类型传输的时间&#39;</code></pre><h3 id="22-jsonp跨域">2.2 JSONP跨域</h3>
<h4 id="221-基本概念">2.2.1 基本概念</h4>
<blockquote>
<p>[!NOTE]
浏览器上虽然有同源限制，但是像 srcipt标签、link标签、img标签、iframe标签，这种<strong>在标签上通过src地址来加载一些内容的时候浏览器是允许进行跨域请求的</strong>。</p>
</blockquote>
<h4 id="222-跨域原理">2.2.2 跨域原理</h4>
<ol>
<li>创建一个script标签，这个script标签的src就是请求的地址；</li>
<li>这个script标签插入到DOM中，浏览器就根据src地址访问服务器资源</li>
<li>返回的资源是一个文本，但是因为是在script标签中，浏览器会执行它</li>
<li>而这个文本恰好是函数调用的形式，即函数名（数据），浏览器会把它当作JS代码来执行即调用这个函数</li>
<li>只要提前约定好这个函数名，并且这个函数存在于window对象中，就可以把数据传递给处理函数。</li>
</ol>
<h3 id="23-hash值跨域通信">2.3 Hash值跨域通信</h3>
<blockquote>
<p>[!NOTE]
背景：在页面A下提供iframe或frame嵌入了跨域的页面B</p>
</blockquote>
<p>容器页面 -&gt; 嵌入页通信：</p>
<p>在A页面中改变B的url中的hash值，B不会刷新，但是B可以用过<code>window.onhashchange</code>事件监听到hash变化</p>
<h3 id="24-postmessage通信">2.4 postMessage通信</h3>
<pre><code class="language-js">// 窗口A中
window.postMessage(&#39;data&#39;, &#39;http://A.com&#39;);
// 窗口B中
window.addEventListener(&#39;message&#39;, function(event) {
  console.log(event.origin);    // http://A.com
  console.log(event.source);    // A 对象window引用
  console.log(event.data);      // 数据
})</code></pre>
<h3 id="25-websoket-跨域通信">2.5 WebSoket 跨域通信</h3>
<pre><code class="language-js">var ws = new WebSocket(&#39;wss://echo.websoket.org&#39;) //这个是后端端口

ws.onopen = function(evt) {
  ws.send(&#39;some message&#39;)
}

ws.onmessage = function (evt) {
  console.log(evt.data);
}

ws.onclose = function(evt){
  console.log(&#39;连接关闭&#39;);
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/b53238b1-7517-42d9-adca-02b732859d8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b53238b1-7517-42d9-adca-02b732859d8d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 Oct 2024 00:29:04 GMT</pubDate></item><item><title><![CDATA[【前端面试题】NodeJS]]></title><description><![CDATA[<h1 id="nodejs">NodeJS</h1>
<h2 id="1----对node的优点和缺点提出了自己的看法：">1.    对Node的优点和缺点提出了自己的看法：</h2>
<p>*（优点）因为Node是基于事件驱动和无阻塞的，所以非常适合处理并发请求，
因此构建在Node上的代理服务器相比其他技术实现（如Ruby）的服务器表现要好得多。
此外，与Node代理服务器交互的客户端代码是由javascript语言编写的，
因此客户端和服务器端都用同一种语言编写，这是非常美妙的事情。
*（缺点）Node是一个相对新的开源项目，所以不太稳定，它总是一直在变，
而且缺少足够多的第三方库支持。看起来，就像是Ruby/Rails当年的样子。</p>
<h2 id="2----需求：实现一个页面操作不会整页刷新的网站，并且能在浏览器前进、后退时正确响应。给出你的技术实现方案？">2.    需求：实现一个页面操作不会整页刷新的网站，并且能在浏览器前进、后退时正确响应。给出你的技术实现方案？</h2>
<p>至少给出自己的思路（url-hash,可以使用已有的一些框架history.js等）</p>
<h2 id="3----nodejs的适用场景？">3.    Node.js的适用场景？</h2>
<p>1)、实时应用：如在线聊天，实时通知推送等等（如socket.io）
2)、分布式应用：通过高效的并行I/O使用已有的数据
3)、工具类应用：海量的工具，小到前端压缩部署（如grunt），大到桌面图形界面应用程序
4)、游戏类应用：游戏领域对实时和并发有很高的要求（如网易的pomelo框架）
5)、利用稳定接口提升Web渲染能力
6)、前后端编程语言环境统一：前端开发人员可以非常快速地切入到服务器端的开发（如著名的纯Javascript全栈式MEAN架构）</p>
<h2 id="4----如果会用node知道route-middleware-cluster-nodemon-pm2-server-side-rendering么">4.    (如果会用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?</h2>
<p>Nodejs相关概念的理解程度</p>
<h2 id="5----解释一下-backbone-的-mvc-实现方式？">5.    解释一下 Backbone 的 MVC 实现方式？</h2>
<p>流行的MVC架构模式</p>
<h2 id="6----什么是前端路由什么时候适合使用前端路由-前端路由有哪些优点和缺点">6.    什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?</h2>
<p>熟悉前后端通信相关知识</p>
]]></description><link>https://blog.gaoredu.com/article/e34f02ab-9396-48d5-8ab7-7c400b811d33</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e34f02ab-9396-48d5-8ab7-7c400b811d33</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 27 Sep 2024 10:19:44 GMT</pubDate></item><item><title><![CDATA[【Web安全】XSS攻击]]></title><description><![CDATA[<h1 id="xss-跨站脚本攻击">XSS 跨站脚本攻击</h1>
<h2 id="1-介绍一下xss攻击的原理和危害？">1. 介绍一下XSS攻击的原理和危害？</h2>
<h3 id="11-基本原理">1.1 基本原理</h3>
<blockquote>
<p>[!NOTE]
XSS ( Cross Site Scripting ) 是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点，进而添加一些代码，嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。</p>
</blockquote>
<h3 id="12-xss攻击的危害">1.2 XSS攻击的危害</h3>
<ol>
<li>获取页面数据</li>
<li>获取cookie</li>
<li>劫持前端逻辑</li>
<li>发送请求</li>
<li>偷取网站任意数据</li>
<li>偷取用户资料</li>
<li>偷取用户密码和登陆态</li>
<li>欺骗用户</li>
</ol>
<h3 id="13-xss攻击分类">1.3 XSS攻击分类</h3>
<h4 id="131--反射型">1.3.1  反射型</h4>
<blockquote>
<p>通过url参数直接注入。</p>
</blockquote>
<p>发出请求时，XSS代码出现在URL中，作为输入提交到服务器端，服务端解析后返回，XSS代码随响应内容一起传回给浏览器，最后浏览器执行XSS代码。这个过程像一次反射，故叫做反射型XSS。</p>
<p><strong>举个例子</strong></p>
<p>一个链接，里面的query字段中包含一个script标签，这个标签的src就是恶意代码，用户点击了这个链接后会先向服务器发送请求，服务器返回时也携带了这个XSS代码，然后浏览器将查询的结果写入Html，这时恶意代码就被执行了。</p>
<p>并不是在url中没有包含script标签的网址都是安全的，可以使用<a href="dwz.com">短网址</a>来让网址变得很短。</p>
<h4 id="132-存储型">1.3.2 存储型</h4>
<blockquote>
<p>[!NOTE]
存储型XSS会被保存到数据库，在其他用户访问（前端）到这条数据时，这个代码会在访问用户的浏览器端执行。</p>
</blockquote>
<p><strong>举个例子</strong></p>
<p>比如攻击者在一篇文章的评论中写入了script标签，这个评论被保存数据库，当其他用户看到这篇文章时就会执行这个脚本。</p>
<h3 id="14-xss攻击注入点">1.4 XSS攻击注入点</h3>
<ul>
<li>HTML节点内容<ul>
<li>如果一个节点内容是动态生成的，而这个内容中包含用户输入。</li>
</ul>
</li>
<li>HTML属性<ul>
<li>某些节点属性值是由用户输入的内容生成的。那么可能会被封闭标签后添加script标签。</li>
</ul>
</li>
</ul>
<pre><code class="language-html">&lt;img src=&quot;${image}&quot;/&gt;
&lt;img src=&quot;1&quot; onerror=&quot;alert(1)&quot; /&gt;</code></pre>
<ul>
<li>Javascript代码<ul>
<li>JS中包含由后台注入的变量或用户输入的信息。<pre><code class="language-js">var data = &quot;#{data}&quot;;
var data = &quot;hello&quot;; alert(1);&quot;&quot;;</code></pre>
</li>
</ul>
</li>
<li>富文本</li>
</ul>
<h2 id="2-xss-防御方法有哪些？">2. XSS 防御方法有哪些？</h2>
<blockquote>
<p>[!NOTE]
对于 XSS 攻击来说，通常有两种方式可以用来防御。</p>
<ul>
<li>转义字符</li>
<li>CSP 内容安全策略</li>
</ul>
</blockquote>
<h3 id="21-转义字符">2.1 转义字符</h3>
<ul>
<li><p>普通的输入 - 编码</p>
<ul>
<li>对用户输入数据进行HTML Entity编码（使用转义字符）</li>
<li>&quot;</li>
<li>&amp;</li>
<li>&lt;</li>
<li>&gt;</li>
<li>空格</li>
</ul>
</li>
<li><p>富文本 - 过滤（黑名单、白名单）</p>
<ul>
<li>移除上传的DOM属性，如onerror等</li>
<li>移除用户上传的style节点、script节点、iframe节点等</li>
</ul>
</li>
<li><p>较正</p>
<ul>
<li>避免直接对HTML Entity解码</li>
<li>使用DOM Parse转换，校正不配对的DOM标签和属性</li>
</ul>
</li>
</ul>
<h4 id="211-对于会在dom中出现的字符串（用户数据）">2.1.1 对于会在DOM中出现的字符串（用户数据）</h4>
<p> &lt; 转义为 &amp;lt;</p>
<blockquote>
<p>转义为 &amp;gt;</p>
</blockquote>
<h4 id="212-对于可能出现在dom元素属性上的数据">2.1.2 对于可能出现在DOM元素属性上的数据</h4>
<p> &quot; 转义为 &amp;quot;
 &#39; 转义为 &amp;9039;
 空格转义为 &amp;nbsp; 但这可能造成多个连续的空格，也可以不对空格转义，但是一定要为属性加双引号</p>
<p> &amp; 这个字符如果要转义，那么一定要放在转移函数的第一个来做</p>
<h4 id="213-避免js中的插入">2.1.3 避免JS中的插入</h4>
<pre><code class="language-js">var data = &quot;#{data}&quot;;
var data = &quot;hello&quot;; alert(1);&quot;&quot;;</code></pre>
<p>因为是用引号将变量包裹起来的，而且被攻击也因为引号被提前结束，所以要做的就是将引号转义</p>
<pre><code>先 \\ -&gt; \\\\
再 &quot; -&gt; \\&quot;</code></pre><h3 id="22-富文本">2.2 富文本</h3>
<h4 id="221-按照黑名单过滤script等">2.2.1 按照黑名单过滤script等</h4>
<blockquote>
<p>[!NOTE]
但是html标签中能执行html代码的属性太多了，比如onclick, onhover,onerror, <code>&lt;a href=&quot;jacascript:alert(1)&quot;&gt;</code></p>
</blockquote>
<pre><code class="language-js">function xssFilter = function (html) {
  html = html.replace(/&lt;\s*\/?script\s*&gt;/g, &#39;&#39;);
  html = html.repalce(/javascript:[^&#39;&quot;]/g, &#39;&#39;);
  html = html.replace(/onerror\s*=\s*[&#39;&quot;]?[^&#39;&quot;]*[&#39;&quot;]?/g, &#39;&#39;);
  //....
  return html;
}</code></pre>
<h5 id="2211-按照白名单过滤">2.2.1.1 按照白名单过滤</h5>
<blockquote>
<p>[!NOTE]
只允许某些标签和属性存在</p>
</blockquote>
<blockquote>
<p>做法：将HTML解析成树状结构，对于这个DOM树，一个一个的去看是否存在合法的标签和属性，如果不是就去掉。</p>
</blockquote>
<blockquote>
<p>使用cheerio就可以快速的解析DOM</p>
</blockquote>
<pre><code class="language-js">function xssFilter (html) {

  const cheerio = require(&#39;cheerio&#39;);
  const $ = cheerio.load(html);

  //白名单
  const whiteList = {&#39;img&#39;: [&#39;src&#39;]}

  $(&#39;*&#39;).each((index, elem) =&gt; {
    if(!whiteList[elem.name]) {
      $(elem).remove();
      return;
    }
    for(let attr in elem.attribs) {
      if(whiteList[elem.name].indexOf(attr) === -1) {
        $(elem).attr(attr, null);
      }
    }
  })
  return html;
}</code></pre>
<h5 id="2212-使用npm包来简化操作">2.2.1.2 使用npm包来简化操作</h5>
<p><a href="https://github.com/leizongmin/js-xss/blob/master/README.zh.md">xss文档</a></p>
<h3 id="23-csp-内容安全策略">2.3 CSP 内容安全策略</h3>
<blockquote>
<p>[!NOTE]
CSP 本质上就是建立白名单，开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则，如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。</p>
</blockquote>
<p>通常可以通过两种方式来开启 CSP：</p>
<ul>
<li>设置 HTTP Header 中的 Content-Security-Policy</li>
<li>设置 meta 标签的方式 <code>&lt;meta http-equiv=&quot;Content-Security-Policy&quot;&gt;</code></li>
</ul>
<p>以设置 HTTP Header 来举例</p>
<ul>
<li>只允许加载本站资源<pre><code>Content-Security-Policy: default-src ‘self’</code></pre></li>
<li>图片只允许加载 HTTPS 协议<pre><code>Content-Security-Policy: img-src https://*</code></pre></li>
<li>允许加载任何来源框架<pre><code>Content-Security-Policy: child-src &#39;none&#39;</code></pre></li>
</ul>
<p><strong>参考文章</strong></p>
<ul>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP">CSP</a> ( Content Security Policy )</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/f2a93ed1-f891-4923-bf50-0373e778122f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f2a93ed1-f891-4923-bf50-0373e778122f</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 27 Sep 2024 08:04:27 GMT</pubDate></item><item><title><![CDATA[【CSS相关】CSS布局]]></title><description><![CDATA[<h1 id="css布局">CSS布局</h1>
<h2 id="1实现两栏三栏布局的方法">1.实现两栏/三栏布局的方法?</h2>
<ol>
<li>表格布局</li>
<li>float + margin布局</li>
<li>inline-block布局</li>
<li>flexbox布局（兼容性的问题）</li>
</ol>
<h3 id="11-基础布局">1.1 基础布局</h3>
<pre><code class="html language-html">&lt;style&gt;
    * {
        margin: 0;
        padding: 0;
    }
    .layout {
        margin-top: 10px;
    }
    .layout div{
        min-height: 100px;
    }
&lt;/style&gt;
&lt;body&gt;
  &lt;!--1.浮动的方式来实现布局--&gt;
  &lt;section class="layout float"&gt;
      &lt;style&gt;
          .layout.float .left {
              float: left;
              width: 300px;
              background-color: #48adff;
          }
          .layout.float .main {
              background-color: #ff4344;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;浮动两栏布局&lt;/h1&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--2.定位的方式来实现布局--&gt;
  &lt;section class="layout absolute"&gt;
      &lt;style&gt;
          .layout.absolute .left-main {
              width: 100%;
          }
          .layout.absolute .left {
              left : 0;
              width: 300px;
              background-color: #48adff;
              position: absolute;
          }
          .layout.absolute .main {
              /*默认是以正常文档流的方式来展现的*/
              background-color: #ff4344;
              margin-left: 300px;
              right: 0;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;绝对定位两栏布局&lt;/h1&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--3.flex布局的实现--&gt;
  &lt;section class="layout flex"&gt;
      &lt;style&gt;
          .layout .left-main {
              display: flex;
          }
          .layout .left {
              width: 300px;
              background-color: #48adff;
          }
          .layout .main {
              flex: 1;
              background-color: #ff4344;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;flex两栏布局&lt;/h1&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--4.table布局的实现--&gt;
  &lt;section class="layout table"&gt;
      &lt;style&gt;
          .layout .left-main {
              display: table;
              width: 100%;
          }
          .layout .left {
              display : table-cell;
              width: 300px;
              background-color: #48adff;
          }
          .layout .main {
              background-color: #ff255f;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;table两栏布局&lt;/h1&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--5.grid布局--&gt;
  &lt;section class="layout grid"&gt;
      &lt;style&gt;
          .layout.grid .left-main {
              display: grid;
          }
          .layout.grid .left-main {
              grid-template-rows : 100px;
              /*按照顺序指定盒子的宽度*/
              grid-template-columns : 300px  auto;
          }
          .layout.grid .left {
              background-color: #48adff;
          }
          .layout.grid .main {
              background-color: #ff4344;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;grid两栏布局&lt;/h1&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
              &lt;p&gt;两栏布局的中间部分&lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;
&lt;/body&gt;
</code></pre>
<h3 id="12-圣杯布局">1.2 圣杯布局</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;title&gt;实现三栏水平布局之圣杯布局&lt;/title&gt;
    &lt;style type="text/css"&gt;
      /*基本样式*/
      .left, .right, .main {
        min-height: 300px;
      }
      .left {
        width: 200px;
        background-color:thistle;
      }
      .main {
        background-color: #999;
      }
      .right {
        width: 300px;
        background-color: violet;
      }
      /* 圣杯布局关键代码 */
      .left, .main, .right {
        float: left;
        position: relative;
      }
      .main {
        width: 100%;
      }
      .container {
        padding-left: 200px;
        padding-right: 300px;
      }
      .left {
        margin-left: -100%;
        left: -200px;
      }
      .right {
        margin-left: -300px;
        right: -300px;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="container"&gt;
      &lt;div class="main"&gt;main&lt;/div&gt;
      &lt;div class="left"&gt;left&lt;/div&gt;
      &lt;div class="right"&gt;right&lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="13-双飞翼布局">1.3 双飞翼布局</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;双飞翼布局&lt;/title&gt;
    &lt;style&gt;
      .left,
      .right,
      .main {
        min-height: 200px;
      }
      .left {
        width: 200px;
        background-color: thistle;
      }
      .main {
        background: #999;
      }
      .right {
        width: 300px;
        background-color: violet;
      }
      /* 双飞翼布局重点 */
      .left,
      .main,
      .right {
        float: left;
      }
      .main {
        width: 100%;
      }
      .main-inner {
        margin-left: 200px;
        margin-right: 300px;
      }
      .left {
        margin-left: -100%;
      }
      .right {
        margin-left: -300px;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="main"&gt;&lt;div class="main-inner"&gt;中心区&lt;/div&gt;&lt;/div&gt;
    &lt;div class="left"&gt;left&lt;/div&gt;
    &lt;div class="right"&gt;right&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h2 id="2absolutefixedstaticsticky定位">2.absolute/fixed/static/sticky定位?</h2>
<ol>
<li>前者相对于最近的absolute/relative</li>
<li>后者相对于屏幕进行定位</li>
<li>fixed是相对于屏幕的可视区域的，也会直接脱离于文档流独立存在的</li>
<li>元素未滚动，在当前可视区域他的top值不生效，只有margin生效，滚动起来后margin失效，top值生效</li>
</ol>
<pre><code class="html language-html">&lt;style type="text/css"&gt;
  p{
  font-size:11pt;
  color:#363636;
  text-indent:2em;
  }
  .parent{
  width:500px;
  height:150px;
  margin-top:20px;
  margin-left:20px;
  border:solid 1px #555555;
  background:#aaaaaa;
  }
  .parent div{
  width:100px;
  height:80px;
  float:left;
  background:#708090;
  border:dashed 1px #008B8B;
  font-size:12pt;
  font-weight:bold;
  color:#104E8B;
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;!--相对定位!--&gt;
  &lt;h2&gt;relative&lt;/h2&gt;
  &lt;p&gt;相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位，它将出现在它所在的位置上。然后，可以通过设置垂直或水平位置，让这个元素“相对于”它的起点进行移动。&lt;/p&gt;
  &lt;div class="parent"&gt;
  &lt;div&gt;child 1&lt;/div&gt;
  &lt;div style="position:relative;left:20px;top:20px;"&gt;child 2&lt;/div&gt;
  &lt;div&gt;child 3&lt;/div&gt;
  &lt;/div&gt;

&lt;!--绝对定位!--&gt;
&lt;h2&gt;absolute&lt;/h2&gt;
&lt;p&gt;绝对定位的元素的位置相对于最近的已定位祖先元素，如果元素没有已定位的祖先元素，那么它的位置相对于最初的包含块。
对于定位的主要问题是要记住每种定位的意义。&lt;/p&gt;
&lt;p&gt;绝对定位是“相对于”最近的已定位祖先元素，如果不存在已定位的祖先元素，那么“相对于”最初的包含块。所以如果要设定元素与其父元素的绝对位置定位就必须设定父元素的定位。&lt;/p&gt;
&lt;p&gt;注释：根据用户代理的不同，最初的包含块可能是画布或 HTML 元素。&lt;/p&gt;
&lt;div class="parent" style="position:relative;"&lt;!--如果该处不定位，那么child5框的定位是相对于最初的包含块!--&gt;&gt;
&lt;div&gt;child 4&lt;/div&gt;
&lt;div style="position:absolute;left:20px;top:20px;"&gt;child 5&lt;/div&gt;
&lt;div&gt;child 6&lt;/div&gt;
&lt;/div&gt;

&lt;!--相对定位!--&gt;
&lt;h2&gt;fixed&lt;/h2&gt;
&lt;p&gt;元素框的表现类似于将 position 设置为 absolute，不过其包含块是视窗本身。&lt;/p&gt;
&lt;div class="parent"&gt;
&lt;div&gt;child 7&lt;/div&gt;
&lt;div style="position:fixed;right:20px;top:20px;"&gt;child 8&lt;/div&gt;
&lt;div&gt;child 9&lt;/div&gt;
&lt;/div&gt;

&lt;!--相对定位!--&gt;
&lt;h2&gt;static&lt;/h2&gt;
&lt;p&gt;元素框正常生成。块级元素生成一个矩形框，作为文档流的一部分，行内元素则会创建一个或多个行框，置于其父元素中。&lt;/p&gt;
&lt;div class="parent"&gt;
&lt;div&gt;child 10&lt;/div&gt;
&lt;div style="position:static;right:20px;top:20px;"&gt;child 11&lt;/div&gt;
&lt;div&gt;child 12&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
</code></pre>
<h2 id="3什么是层叠上下文？如何形层叠上下文？层叠顺序是怎样的？">3.什么是层叠上下文？如何形层叠上下文？层叠顺序是怎样的？</h2>
<pre><code class="html language-html">&lt;style&gt;
    .father-green {
        width:500px;
        height:300px;
        background-color:green;
    }
    .son-red {
        width:200px;
        height:100px;
        background-color:red;
        display:inline-block;
    }
    .subson-yellow {
        height:50px;
        width:200px;
        background-color: yellow;

    }
    .son-purple {
        width: 200px;
        height:100px;
        background-color:purple;
        display:inline-block;
        margin-left:-50px;
    }
    .mather-pink {
        width: 300px;
        height:100px;
        background-color:pink;
    }
    .daughter-blue {
        width:100px;
        height:50px;
        background-color:blue;
        margin-top:-20px;
    }
&lt;/style&gt;
&lt;body&gt;
    &lt;div class="father-green"&gt;
        &lt;div class="son-red"&gt;
            &lt;div class="subson-yellow"&gt;
                我是孙子辈的我是孙子辈的我是孙子辈的
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="son-purple"&gt;
            我是第二个子元素
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="mather-pink"&gt;&lt;div class="daughter-blue"&gt;daughter-blue&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;    
</code></pre>
<p><img src="../../img/css-层叠上下文.png" alt="页面显示的层级关系" /></p>
<h3 id="31-形成层叠上下文的方法？">3.1 形成层叠上下文的方法？</h3>
<ul>
<li>根元素 <html></html></li>
<li>position值为 absolute|relative，且 z-index值不为 auto</li>
<li>position 值为 fixed|sticky</li>
<li>z-index 值不为 auto 的flex元素，即：父元素 display:flex|inline-flex</li>
<li>opacity 属性值小于 1 的元素</li>
<li>transform 属性值不为 none的元素</li>
<li>mix-blend-mode 属性值不为 normal 的元素</li>
<li>filter、 perspective、 clip-path、 mask、 mask-image、 mask-border、 motion-path 值不为none 的元素</li>
<li>perspective 值不为 none 的元素</li>
<li>isolation 属性被设置为 isolate 的元素</li>
<li>will-change 中指定了任意 CSS 属性，即便你没有直接指定这些属性的值</li>
<li>-webkit-overflow-scrolling 属性被设置 touch的元素</li>
</ul>
<blockquote>
  <p>[!NOTE]</p>
  <ul>
  <li>层叠上下文可以包含在其他层叠上下文中，并且一起组建了一个有层级的层叠上下文</li>
  <li>每个层叠上下文完全独立于它的兄弟元素，当处理层叠时只考虑子元素，这里类似于BFC</li>
  <li>每个层叠上下文是自包含的：当元素的内容发生层叠后，整个该元素将会在父级叠上下文中按顺序进行层叠</li>
  </ul>
</blockquote>
<h3 id="32-css层叠上下优先级">3.2 CSS层叠上下优先级</h3>
<p><img src="../../img/css-层叠上下文优先级.png" alt="层叠上下优先级顺序" /></p>
<ul>
<li>1.形成堆叠上下文环境的元素的背景与边框</li>
<li>2.拥有负 z-index 的子堆叠上下文元素 （负的越高越堆叠层级越低）</li>
<li>3.正常流式布局，非 inline-block，无 position 定位（static除外）的子元素</li>
<li>4.无 position 定位（static除外）的 float 浮动元素</li>
<li>5.正常流式布局， inline-block元素，无 position 定位（static除外）的子元素（包括 display:table 和 display:inline ）</li>
<li>6.拥有 z-index:0 的子堆叠上下文元素</li>
<li>7.拥有正 z-index: 的子堆叠上下文元素（正的越低越堆叠层级越低）</li>
</ul>
<h3 id="33-层叠上下文的堆叠顺序？">3.3 层叠上下文的堆叠顺序？</h3>
<p><img src="../../img/css-层叠上下文2.png" alt="层叠上下文的堆叠顺序" /></p>
<blockquote>
  <p>[!NOTE]<br />
  总结：层叠上下文（border/background）&lt; 负z-index &lt; block块状盒子 &lt; 浮动的盒子 &lt; inline/inline-block水平盒子 &lt; z-index:auto 或者 z-index:0 &lt; 正z-index（定位并设定了正的z-index值，z-index值越大 层级越高）</p>
</blockquote>
<h2 id="4如何解决inline-block-的间隙问题？">4.如何解决inline-block 的间隙问题？</h2>
<h3 id="41-字符间距问题">4.1 字符间距问题</h3>
<pre><code class="html language-html">&lt;style&gt;
*{
        margin: 0;
        padding: 0;
    }
    ul{
        list-style: none;
    }
    li{
        display: inline-block;
        width: 100px;
        height: 100px;
        background: red;    
    }
&lt;/style&gt;
&lt;ul&gt;
    &lt;li&gt;111&lt;/li&gt;
    &lt;li&gt;222&lt;/li&gt;
    &lt;li&gt;333&lt;/li&gt;
    &lt;li&gt;444&lt;/li&gt;
    &lt;li&gt;555&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p><img src="../../img/css-字符间距问题.jpg" alt="CSS字符间距问题" /></p>
<h3 id="42-解决方法">4.2 解决方法</h3>
<ul>
<li>1.解决方法1：直接删除换行符（IE1像素残留）</li>
<li>2.设置父元素的font-size为0，在子元素重新设置字体大小（低版本safari 兼容性）</li>
<li>3.父元素 设置font-size：0 ；letter-spacing：-3px ，子元素重新设置font-size（推荐方案）</li>
</ul>
<h2 id="5bfc是什么？如何清除浮动？">5.BFC是什么？如何清除浮动？</h2>
<blockquote>
  <p>BFC：浮动元素和绝对定位元素，非块级盒子的块级容器（例如 inline-blocks, table-cells, 和 table-captions），以及overflow值不为“visiable”的块级盒子，都会为他们的内容创建新的BFC（块级格式上下文）。它是指一个独立的块级渲染区域，只有Block-level BOX参与，该区域拥有一套渲染规则来约束块级盒子的布局，且与区域外部无关</p>
</blockquote>
<h3 id="51-如何触发bfc">5.1 如何触发BFC?</h3>
<ul>
<li>float的值不为none</li>
<li>overflow的值不为visible</li>
<li>display的值为inline-block、table-cell、table-caption</li>
<li>position的值为absolute或fixed</li>
</ul>
<h3 id="52-bfc布局规则">5.2 BFC布局规则</h3>
<ol>
<li>内部的Box会在垂直方向，一个接一个地放置。</li>
<li>Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的<strong>margin会发生重叠（高频考点）</strong></li>
<li>每个元素的margin box的左边， 与包含块border box的左边相接触(对于从左往右的格式化，否则相反)。即使存在浮动也是如此。</li>
<li>BFC的区域不会与float box重叠。</li>
<li>BFC就是页面上的一个隔离的独立容器，容器里面的子元素不会影响到外面的元素。反之也如此。</li>
<li>计算BFC的高度时，浮动元素也参与计算</li>
</ol>
<h3 id="53-如何清除浮动？">5.3 如何清除浮动？</h3>
<ol>
<li>原因：浮动的元素不会占据父元素的布局空间（父元素布局不会管浮动元素）</li>
<li>清除方式： 让盒子负责自己的布局：</li>
</ol>
<h4 id="531-添加额外标签">5.3.1 添加额外标签</h4>
<pre><code class="html language-html">&lt;div class="main left"&gt;.main{float:left;}&lt;/div&gt;
&lt;div class="side left"&gt;.side{float:right;}&lt;/div&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="footer"&gt;.footer&lt;/div&gt;
</code></pre>
<h4 id="532-父元素设置-overflow：hidden">5.3.2 父元素设置 overflow：hidden</h4>
<pre><code class="html language-html">&lt;div class="wrap" id="float3" style="overflow:hidden; *zoom:1;"&gt;
&lt;h2&gt;3)父元素设置 overflow &lt;/h2&gt;
&lt;div class="main left"&gt;.main{float:left;}&lt;/div&gt;
&lt;div class="side left"&gt;.side{float:right;}&lt;/div&gt;
&lt;/div&gt;
&lt;div class="footer"&gt;.footer&lt;/div&gt;
</code></pre>
<h4 id="533-使用after-伪元素">5.3.3 使用:after 伪元素</h4>
<pre><code class="html language-html">&lt;style type="text/css"&gt;
 .clearfix:after {  
   content: ".";
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;  
    }  
.clearfix {
  display: inline-block;
  *zoom:1;
  }  /* for IE/Mac */  
&lt;/style&gt;
&lt;!--[if IE]&gt;
 &lt;style type="text/css"&gt;
 .clearfix {zoom: 1;/* triggers hasLayout */  display: block;/* resets display for IE/Win */} &lt;/style&gt;
&lt;![endif]--&gt;
</code></pre>
<h4 id="534-双伪元素清除法推荐">5.3.4 双伪元素清除法(推荐)</h4>
<pre><code class="css language-css">.clearfix:before,.clearfix:after{
   content:"";
   display:table;
}
.clearfix:after{
  clear:both;
}
.clearfix{
  *zoom:1;
}
</code></pre>
<h2 id="6如何适配移动端？">6.如何适配移动端？</h2>
<h3 id="61-viewport进行缩放">6.1 viewport进行缩放</h3>
<pre><code class="html language-html">&lt;meta name="viewport" content="width=device-width,initial-scale=1"&gt;
</code></pre>
<h3 id="62-使用rem">6.2 使用rem</h3>
<p>rem是什么(CSS3新增)，初始值：1rem=16px？<br />
rem（font size of the root element）是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位</p>
<blockquote>
  <p>[!NOTE]<br />
  rem(1rem = 16px) / viewport（固定宽度） / media query（屏幕大小自适应）</p>
</blockquote>
<h3 id="63-设计上（响应式方法）">6.3 设计上（响应式方法）</h3>
<p>隐藏（移动端隐藏元素） 折行（横排变纵排） 自适应（留下自适应的空间）（media query）</p>
<h3 id="64-固定宽度做法">6.4 固定宽度做法</h3>
<p>定宽布局（版心）</p>
<h2 id="7em和rem的区别？">7.em和rem的区别？</h2>
<ol>
<li>rem 单位翻译为像素值是由 html 元素的字体大小决定的。 此字体大小会被浏览器中字体大小的设置影响，除非显式重写一个具体单位。</li>
<li>em 单位转为像素值，取决于他们使用的字体大小。 此字体大小受从父元素继承过来的字体大小，除非显式重写与一个具体单位</li>
</ol>
<h2 id="8垂直居中的6中实现方式？">8.垂直居中的6中实现方式？</h2>
<h3 id="81-方法一：基于视口的垂直居中">8.1 方法一：基于视口的垂直居中</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;垂直居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      overflow: hidden;
      width: 1000px;
      height: 500px;
      background: #999;
    }
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;


      /* 1vh = 1% * 视口高度 */
      margin: 50vh auto;
      transform: translateY(-50%);
    }

  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;
        基于视口的垂直居中&lt;br /&gt;
        不要求原生有固定的宽高。&lt;br /&gt;
        但是这种居中是在整个页面窗口内居中，不是基于父元素&lt;br /&gt;

      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="82-方法二：定宽居中">8.2 方法二：定宽居中</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;垂直居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      position: absolute;
      top: 50%;
      left: 50%;
      margin-left: -9rem;
      margin-top: -5rem;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="center"&gt;
        要求原生有固定的宽高。&lt;br/&gt;
        position: absolute;&lt;br/&gt;
        top和left 为 50%;&lt;br/&gt;
        margin上为高的一半&lt;br/&gt;
        margin左为宽的一半&lt;br/&gt;
    &lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="83-方法三：calc居中">8.3 方法三：calc居中</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;垂直居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      position: absolute;
      top: calc(50% - 5em);
      left: calc(50% - 9em);
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="center"&gt;
        要求原生有固定的宽高。&lt;br/&gt;
        position: absolute;&lt;br/&gt;
        top 为 calc(50% 剪 一半高)
        left 为 calc(50% 剪 一半宽)
    &lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="84-方法四：transform居中">8.4 方法四：transform居中</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;垂直居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="center"&gt;
        不要求原生有固定的宽高。&lt;br/&gt;
        position: absolute;&lt;br/&gt;
        top和left 为 50%;&lt;br/&gt;
        transform: translate(-50%, -50%);
    &lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="85-方法五：flex居中方法1">8.5 方法五：flex居中方法1</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;垂直居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      width: 1000px;
      height: 600px;
      background: #999;

      display: flex;
    }
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      margin: auto;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;
        使用flex居中&lt;br/&gt;
        父元素 display: flex; &lt;br/&gt;
        居中块： margin: auto;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="86-方法六-flex居中方法2">8.6 方法六: flex居中方法2</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;垂直居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      width: 1000px;
      height: 600px;
      background: #999;

      display: flex;
      /* 盒子横轴的对齐方式 */
      justify-content: center;
      /* 盒子纵轴的对齐方式 */
      align-items: center;
    }
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;
        使用flex居中&lt;br/&gt;
        父元素 display: flex; &lt;br/&gt;
        justify-content: center;&lt;br/&gt;
        align-items: center;&lt;br/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h2 id="9水平居中的4种实现方式？">9.水平居中的4种实现方式？</h2>
<h3 id="91-方法一：text-align的center属性">9.1 方法一：text-align的center属性</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;水平元素居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      text-align: center;
      height: 1000px;
    }
    .center {
      display: inline-block;
      width: 500px;
      height: 200px;

      background: orange;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;如果需要居中的元素为常规流中 inline / inline-block 元素，为父元素设置 text-align: center;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="92-方法二：margin的auto属性">9.2 方法二：margin的auto属性</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;水平元素居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      width: 100%;
      height: 500px;

      text-align: center; /* 3 */
    }
    .center {
      width: 500px;
      text-align: left; 
      margin: 0 auto; 

      background-color: orange;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;
          父元素上设置 text-align: center;&lt;br /&gt;
          居中元素上margin 为 auto。
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="93-方法三：绝对定位">9.3 方法三：绝对定位</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;水平元素居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      width: 80%;
      height: 500px;
      background: #888;

      position: relative;
    }
    .center {
      width: 500px;
      position: absolute;
      left: 50%;
      margin-left: -250px;

      background-color: orange;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;如果元素positon: absolute; 那么 0）设置父元素postion: relative 1）为元素设置宽度，2）偏移量设置为 50%，3）偏移方向外边距设置为元素宽度一半乘以-1&lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h3 id="94-方法四：相对定位">9.4 方法四：相对定位</h3>
<pre><code class="html language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt;水平元素居中&lt;/title&gt;
  &lt;/head&gt;
  &lt;style&gt;
    .wrapper {
      width: 80%;
      height: 500px;
      background: #888;
    }
    .center {
      width: 500px;
      position: relative;
      left: 50%;
      margin-left: -250px;

      background-color: orange;
    }
  &lt;/style&gt;
  &lt;body&gt;
    &lt;div class="wrapper"&gt;
      &lt;div class="center"&gt;如果元素positon: relative。 那么 1）为元素设置宽度，2）偏移量设置为 50%，3）偏移方向外边距设置为元素宽度一半乘以-1&lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<h2 id="10-居中问题要点总结">10 居中问题要点总结</h2>
<h3 id="101-被居中元素宽高固定">10.1 被居中元素宽高固定</h3>
<h4 id="1011-绝对定位margin">10.1.1 绝对定位+margin</h4>
<p>top和left 为 50%， margin的left和top为自身宽高一半</p>
<pre><code class="css language-css">.center {
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -9rem;
  margin-top: -5rem;
}
</code></pre>
<h4 id="1012-绝对定位calc">10.1.2 绝对定位+calc</h4>
<p>top和lefe为父元素一半剪自身一半</p>
<pre><code class="css language-css">.center {
  position: absolute;
  top: calc(50% - 5em);
  left: calc(50% - 9em);
}
</code></pre>
<h3 id="102-被居中元素宽高不定">10.2 被居中元素宽高不定</h3>
<h5 id="1021-transform变换">10.2.1 transform变换</h5>
<p>使用CSS3 的 <code>transform</code>将位置在中心点平移自身宽高一半</p>
<pre><code class="css language-css">.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
</code></pre>
<h4 id="1022-flex布局auto">10.2.2 flex布局+auto</h4>
<pre><code class="css language-css">.wrapper {
  display: flex;
}
.center {
  margin: auto;
}
</code></pre>
<h4 id="1023-flex布局align">10.2.3 flex布局+align</h4>
<p>父元素指定子元素居中。</p>
<pre><code class="css language-css">.wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
}
</code></pre>
<h3 id="103-在浏览器窗口中居中">10.3 在浏览器窗口中居中</h3>
<h4 id="1031-基于视口的垂直居中">10.3.1 基于视口的垂直居中</h4>
<p>不要求原生有固定的宽高，但是这种居中是在整个页面窗口内居中，不是基于父元素</p>
<pre><code class="css language-css">.center{
  margin: 50vh auto;
  transform: translateY(-50%);
}
</code></pre>]]></description><link>https://blog.gaoredu.com/article/f98b66a3-62cc-4b95-88fc-f4b630573ccb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f98b66a3-62cc-4b95-88fc-f4b630573ccb</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 24 Sep 2024 23:19:33 GMT</pubDate></item><item><title><![CDATA[【计算机网络】缓存]]></title><description><![CDATA[<h1 id="缓存">缓存</h1>
<h2 id="1-介绍一下http的缓存？（面试重点）">1. 介绍一下HTTP的缓存？（面试重点）</h2>
<blockquote>
<p>[!NOTE]
Http 的缓存主要利用 header 里的Cache-control 和 ETag</p>
</blockquote>
<h3 id="11-cache-control">1.1 Cache-control</h3>
<p><code>Cache-control</code>主要包含以及几个字段：</p>
<ul>
<li>public<ul>
<li>指HTTP请求返回的资源在所经过的所有路径包括一些中间代理服务器以及发出这个请求的客户端浏览器都可以进行缓存</li>
</ul>
</li>
<li>private<ul>
<li>代表发起请求的浏览器才可以进行缓存</li>
</ul>
</li>
<li>no-cache<ul>
<li>指可以存缓存，但是每次使用都需要去服务端验证</li>
</ul>
</li>
<li>no-store<ul>
<li>本地和代理服务器都不允许去缓存</li>
</ul>
</li>
<li>no-transform<ul>
<li>不允许代理/缓存服务器转换文件格式</li>
</ul>
</li>
</ul>
<p>到期</p>
<ul>
<li>max-age=&lt;seconds&gt;<ul>
<li>缓存到期时间</li>
</ul>
</li>
<li>s-maxage=&lt;seconds&gt;<ul>
<li>代理服务器专用</li>
</ul>
</li>
<li>max-stale=&lt;seconds&gt;<ul>
<li>指示客户机可以使用超出max-age时间的响应</li>
</ul>
</li>
</ul>
<p>重新验证</p>
<ul>
<li>must-revalidate<ul>
<li>设置了max-age的资源过期后必须到源服务端验证资源是否还可用</li>
</ul>
</li>
<li>proxy-revalidate<ul>
<li>（缓存服务器用）设置了max-age的资源过期后必须到源服务端验证资源是否还可用</li>
</ul>
</li>
</ul>
<h3 id="12-etag">1.2 ETag</h3>
<blockquote>
<p>[!NOTE]
<code>ETag</code>:即用来进行对比缓存，Etag 是服务端资源的一个标识码</p>
</blockquote>
<p>当客户端发送第一次请求时服务端会下发当前请求资源的标识码 Etag，下次再请求时，客户端则会通过 header 里的 If-None-Match 将这个标识码 Etag 带上，服务端将客户端传来的 Etag 与最新的资源 Etag 做对比，如果一样，则表示资源没有更新，返回 304。</p>
<h3 id="13-缓存方案">1.3 缓存方案</h3>
<h4 id="131-需求">1.3.1 需求</h4>
<p>有的静态资源会设置一个较长的缓存时间，但是我们希望用户还是能使用最新的资源。</p>
<h4 id="132-解决方案">1.3.2 解决方案</h4>
<p>在打包完成的文件名上加上一串哈希码，这个哈希码是根据内容进行的哈希计算。
所以，如果你的内容文件没有变，那么这个hash码不会变，即这个静态资源的url没有变。 而如果内容有变，那么hash码也会变，浏览器就会去请求新的资源请求。</p>
<h4 id="133-普通的缓存机制重点理解">1.3.3 普通的缓存机制(重点理解)</h4>
<p><img src="../img/browser-cache.jpg" alt="浏览器缓存"></p>
<h3 id="14-资源验证">1.4 资源验证</h3>
<blockquote>
<p>[!NOTE]
如果给Cache-Control设置了no-cache后，每次要使用资源时浏览器都要到服务器验证缓存是否过期。 如果直接使用缓存，返回码：<strong>304</strong></p>
</blockquote>
<p>如何验证资源是否过期：</p>
<ul>
<li><p>Last-Modified（上次修改时间）</p>
<ul>
<li>配合 If-Modified-Since 或 If-Unmodified-Since 使用</li>
<li>如果请求的资源头中有Last-Modified这个头，这个头指定了一个时间。那么浏览器重新访问资源时就会带上If-Modified-Since这个头，其时间是Last-Modified的时间，服务器就会拿这个时间去对比上次修改的时间，然后告诉浏览器是否可以直接使用。</li>
</ul>
</li>
<li><p>Etag （数据签名）</p>
<ul>
<li>资源会依据它的内容产生一个唯一的数据签名，如果资源有更新，那么Etag就会发生变化。</li>
<li>配合 If-Match 或 If-None-Match 使用</li>
</ul>
</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/de11cef5-3461-4aa6-ab08-a32f3ecff610</link><guid isPermaLink="true">https://blog.gaoredu.com/article/de11cef5-3461-4aa6-ab08-a32f3ecff610</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 23 Sep 2024 23:44:28 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】求数组最大值和最小值]]></title><description><![CDATA[<h1 id="求数组最大值和最小值">求数组最大值和最小值</h1>
<pre><code class="language-js">// 如何求出数组的最大值和最小值？

Math.max(true, 0) // 1
Math.max(true, &#39;2&#39;, null) // 2
Math.max(1, undefined) // NaN
Math.max(1, {}) // NaN

var min = Math.min();   // Infinity
var max = Math.max();   // Infinity
console.log(min &gt; max);

// v1: 原始方法
function max(arr) {
    let max = arr[0];
    for (let i = 0, len = arr.length; i &lt; len; i++) {
        max = Math.max(max, arr[i]);
    }
    return max;
}


// v2: 使用reduce
function max(arr) {
    return arr.reduce((prev, next) =&gt; {
        return Math.max(prev, next);
    });

    return arr.reduce((prev, next) =&gt; {
        return prev &gt; next ? prev : next;
    });
}

// v3: 使用eval, 由于Math.max支持多个参数来进行比较，可以把数组转换为多个参数
// 原因：使用eval里面的字符串实际上是发生了一个隐式转换，[1, 2, 3] ==&gt; 1, 2, 3
// 相当于是 eval(&quot;Math.max(6,4,1,8,2,11,23)&quot;);
function max(arr) {
    return eval(`Math.max(${arr})`)
}

// v4: 使用apply来实现
function max(arr) {
    return Math.max.apply(null, arr);
}

// v5: 使用ES6..., 可以把一个数组转换为参数序列
function max(arr) {
    return Math.max(...arr);
}

function max(arr) {
    return Reflect.apply(Math.max, Math, arr);
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/c23909de-ec95-4535-939e-053c50140549</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c23909de-ec95-4535-939e-053c50140549</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 23 Sep 2024 16:50:32 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】异步问题]]></title><description><![CDATA[<h3 id="promise与settimeout-判断执行顺序">promise与setTimeout 判断执行顺序</h3>
<p>promise和setTimeout都会将事件放入异步队列，但setTimeout即便是写0，也会有4ms的延迟</p>
<pre><code class="language-js">console.log(&#39;begin&#39;);

setTimeout(() =&gt; {

  console.log(&#39;setTimeout 1&#39;);

  Promise.resolve()
    .then(() =&gt; {
      console.log(&#39;promise 1&#39;);
      setTimeout(() =&gt; {
          console.log(&#39;setTimeout2&#39;);
      });
    })
    .then(() =&gt; {
      console.log(&#39;promise 2&#39;);
    });

  new Promise(resolve =&gt; {
    console.log(&#39;a&#39;);
    resolve();
  }).then(() =&gt; {
    console.log(&#39;b&#39;);
  });

}, 0);
console.log(&#39;end&#39;);</code></pre>
<p>答案</p>
<pre><code>begin
end
setTimeout 1
a
promise 1
b
promise 2
setTimeout2</code></pre><h3 id="async函数的使用">async函数的使用</h3>
<pre><code class="language-js">function repeat(func, times, wait) {

}
// 输入
const repeatFunc = repeat(alert, 4, 3000);

// 输出
// 会alert4次 helloworld, 每次间隔3秒
repeatFunc(&#39;hellworld&#39;);
// 会alert4次 worldhellp, 每次间隔3秒
repeatFunc(&#39;worldhello&#39;)</code></pre>
<p>我自己的实现，没有成功。这种实现是setTimeout新建了两个，然而只清理了一个。</p>
<pre><code class="language-js">function repeat(func, times, wait) {
  var timer = null;
  var count = 0;
  return function(...args) {
    timer = setInterval(function() {
      func.apply(null, args);
      count ++;
      console.log(&#39;count&#39;, count, &quot;times&quot;, times)
      if( count &gt;= times) {
        clearInterval(timer);
      }
    }, wait);
  }
}
// 输入
const repeatFunc = repeat(console.log, 4, 3000);
// 输出
// 会alert4次 helloworld, 每次间隔3秒
repeatFunc(&#39;hellworld&#39;);
// 会alert4次 worldhellp, 每次间隔3秒
repeatFunc(&#39;worldhello&#39;);</code></pre>
<p>正确解法：使用 async/await来实现</p>
<pre><code class="language-js">async function wait(seconds) {
    return new Promise((res) =&gt; {
        setTimeout(res, seconds);
    });
}

function repeat(func, times, s) {
    return async function (...args) {
        for (let i = 0; i &lt; times; i++) {
            func.apply(null, args);
            await wait(s);
        }
    };
}

let log = console.log
let repeatFunc = repeat(log,4,3000)
repeatFunc(&#39;HelloWorld&#39;)
repeatFunc(&#39;WorldHello&#39;)</code></pre>
<h3 id="async执行练习">async执行练习</h3>
<ul>
<li>await后面的才是异步的，之前都是同步的</li>
</ul>
<pre><code class="language-js">async function async1() {
  console.log(&#39;async1 start&#39;);  // 2
  await async2();
  console.log(&#39;async1 end&#39;);    // 6
}

async function async2() {     
  console.log(&#39;async2&#39;);        // 3
}

console.log(&#39;script start&#39;);    //  1

setTimeout(function() {
  console.log(&#39;setTimeout&#39;);    // 8
}, 0);

async1();

new Promise(function(resolve) {
  console.log(&#39;promise1&#39;);      // 4
    resolve();
  }).then(function() {
      console.log(&#39;promise2&#39;);  // 7
  });

console.log(&#39;script end&#39;);      // 5</code></pre>
<h2 id="看代码，写结果">看代码，写结果</h2>
<pre><code class="language-js">async function async1() {
console.log(&#39;async1 start&#39;)
await async2()
console.log(&#39;async1 end&#39;)
}

async function async2() {
console.log(&#39;async2&#39;)
}

console.log(&#39;script start&#39;)
setTimeout(function() {
console.log(&#39;setTimeout&#39;)
}, 0)

async1();

new Promise( function( resolve ) {
console.log(&#39;promise1&#39;)
resolve();
} ).then( function() {
console.log(&#39;promise2&#39;)
} )

console.log(&#39;script end&#39;)</code></pre>
<p><a href="https://blog.csdn.net/qq_41681425/article/details/85775077">解题思路</a></p>
]]></description><link>https://blog.gaoredu.com/article/a5b8d9cc-2adc-4e4a-8e4c-0eab88580b70</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a5b8d9cc-2adc-4e4a-8e4c-0eab88580b70</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 22 Sep 2024 16:32:54 GMT</pubDate></item><item><title><![CDATA[9步骤完成Linux 环境安装Git环境]]></title><description><![CDATA[<p>1、安装 git 安装包 </p>
<pre><code class="language-shell">wget  https://github.com/git/git/archive/v2.22.0.tar.gz；</code></pre>
<p>2、开始解压下载好的文件；</p>
<pre><code class="language-shell"> tar -zxvf  v2.22.0.tar.gz</code></pre>
<p>3、安装编译源码所需依赖，耐心等待安装，出现提示输入 y 即可；</p>
<pre><code class="language-shell"> yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker </code></pre>
<p>4、如果，你之前安装过 git，那么需要先移除之前版本的 git，出现提示，直接 y 即可；</p>
<pre><code class="language-shell">yum remove git</code></pre>
<p>5、进入解压后的文件夹 执行如下命令，等待编译即可；</p>
<pre><code class="language-shell">cd git-2.22.0
make prefix=/usr/local/git all</code></pre>
<p>6、安装 Git 至 /usr/local/git 路径，命令为；</p>
<pre><code class="language-shell"> make prefix=/usr/local/git install</code></pre>
<p>7. 添加环境变量，打开环境变量配置文件   vim /etc/profile：</p>
<pre><code class='language-default'>vim /etc/profile</code></pre>
<p> 在最后添加:</p>
<pre><code class='language-default'>PATH=$PATH:/usr/local/git/bin 
export PATH </code></pre>
<p>8、记得刷新配置文件；</p>
<pre><code class='language-default'>source  /etc/profile</code></pre>
<p>9、git --version，查看自己安装的 git 版本，结束！</p>
]]></description><link>https://blog.gaoredu.com/article/dfa1ff7b-8a95-402c-8a40-d6e271610ef9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dfa1ff7b-8a95-402c-8a40-d6e271610ef9</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 21 Sep 2024 15:00:04 GMT</pubDate></item><item><title><![CDATA[【JS相关】开发环境]]></title><description><![CDATA[<h1 id="开发环境">开发环境</h1>
<h2 id="31-git操作">3.1 Git操作</h2>
<h3 id="311-git的基本命令有哪些">3.1.1 Git的基本命令有哪些</h3>
<pre><code class="language-js">git add .
git checkout xxx
git commit -m &#39;xxx&#39;
git push origin master
git pull origin master
git branch
git checkout -b xxx / git checkout xxx(文件名)
git merge xxx
git diff
--------------git多人协作：
git branch                   查看当前分支
git checkout -v dev          创建新的分支
git checkout dev             切换当前分支
git push origin dev          提交代码到dev分支（修改bug…
git checkout matser          切换到已有的分支
git merge dev                合并dev分支到master分支
git push origin master       推送修改的内容到远程仓库
</code></pre>
<h3 id="312-git-rebase和git-merge的区别？">3.1.2 git rebase和git merge的区别？</h3>
<p><strong>git merge</strong>：将两个分支，合并提交为一个新提交，并且新提交有2个parent。把公共分支和你当前的commit 合并在一起，形成一个新的 commit 提交</p>
<p><strong>git rebase</strong>：会取消分支中的每个提交，并把他们临时存放，然后把当前分支更新到最新的origin分支，最后再吧所有提交应用到分支上。</p>
<h3 id="313-git上线回滚的流程？">3.1.3 git上线回滚的流程？</h3>
<p>上线流程：</p>
<ol>
<li>将测试完成的代码提交到git版本库的master分支</li>
<li>将当前服务器的代码全部打包并记录版本号，备份</li>
<li>将master分支的代码提交覆盖到线上服务器，生效新的版本号
回滚流程：</li>
<li>将当前服务器的代码打包并记录版本号，备份</li>
<li>【将备份的上一个版本号解压，覆盖到线上服务器】，生成新的版本号</li>
</ol>
<h2 id="32-模块化">3.2 模块化</h2>
<h3 id="321-谈一下你对js模块化的理解">3.2.1 谈一下你对JS模块化的理解</h3>
<h3 id="322-amd和commonjs规范的区别和使用场景">3.2.2 AMD和CommonJS规范的区别和使用场景</h3>
<p>AMD规范：</p>
<ol>
<li>require.js requirejs.org</li>
<li>全局定义了define函数</li>
<li>全局定义了require函数</li>
<li>依赖JS会自动、异步加载
CommonJS规范：</li>
<li>这是nodejs的模块化规范，现在被广泛应用于前端</li>
<li>前端开发依赖的插件和库，都可以从npm中获取</li>
<li>构建工具的高度自动化，使得使用npm的成本非常低</li>
<li>CommonJS不会异步加载JS，而是同步一次性加载进来
使用场景：</li>
<li>需要异步加载JS，使用AMD</li>
<li>使用了npm之后建议使用commonjs规范</li>
</ol>
<h2 id="33-构建工具">3.3 构建工具</h2>
<h3 id="331-webpack的基本配置流程">3.3.1 Webpack的基本配置流程</h3>
<blockquote>
<p>[!NOTE]
主要是掌握Webpack的基本配置，包括文件的打包和压缩、CSS文件的处理和模块化、图片文件的处理以及一些开发环境的常用配置和性能优化知识点，理解打包的底层实现原理。</p>
<ul>
<li>具体配置可参考：<a href="https://www.jianshu.com/p/11e8f9668c0e">https://www.jianshu.com/p/11e8f9668c0e</a></li>
</ul>
</blockquote>
<h3 id="332-gulp的基本配置流程，与webpack的区别？">3.3.2 Gulp的基本配置流程，与webpack的区别？</h3>
<blockquote>
<p>[!NOTE]
需要掌握基本的配置流程和打包过程，底层实现原理。</p>
</blockquote>
<pre><code class="language-js">const gulp = require(&#39;gulp&#39;);
const sass = require(&#39;gulp-sass&#39;);
const browserSync = require(&quot;browser-sync&quot;).create(), //自动刷新
    reload = browserSync.reload;
const filter = require(&#39;gulp-filter&#39;);
// gulp-filter 包， 以确保只有 *.css 文件响应 .reload - 这样一来，
// 您还是会得到CSS注入，而不是整个页面重载。
const useref = require(&#39;gulp-useref&#39;); //合并JS
const uglify = require(&#39;gulp-uglify&#39;); //js压缩
const minifyCSS = require(&#39;gulp-minify-css&#39;); //压缩css

var gulpIf = require(&#39;gulp-if&#39;);

var del = require(&#39;del&#39;);

var runSequence = require(&#39;run-sequence&#39;);//组织任务执行顺序,未使用

var rename = require(&#39;gulp-rename&#39;);//重命名

var watch=require(&#39;gulp-watch&#39;);//监视

var minifyHtml = require(&quot;gulp-minify-html&quot;);//压缩html

var babel = require(&quot;gulp-babel&quot;);
// npm install --save-dev gulp-babel@7 babel-core babel-preset-env

var jshint = require(&quot;gulp-jshint&quot;);//js检查
var imagemin = require(&#39;gulp-imagemin&#39;);//压缩图片文件
var pngquant = require(&#39;imagemin-pngquant&#39;); //png图片压缩插件
var connect=require(&#39;gulp-connect&#39;);//引入gulp-connect模块 浏览器刷新
var cache = require(&#39;gulp-cache&#39;);//压缩图片可能会占用较长时间，使用 gulp-cache 插件可以减少重复压缩。
var RevAll = require(&quot;gulp-rev-all&quot;);//md5后缀

gulp.task(&#39;html&#39;,function(){//编译html
    return gulp.src(&#39;app/*.html&#39;)
    .pipe(gulp.dest(&#39;app/dist&#39;))
    .pipe(connect.reload());
})

gulp.task(&#39;css&#39;,function(){//编译scss
    return gulp.src(&#39;app/scss/**/*.scss&#39;)
    .pipe(sass())//编译scss
    // .pipe(gulp.dest(&#39;app/css&#39;)) //当前对应css文件
    .pipe(gulp.dest(&#39;app/dist/css&#39;)) //当前对应css文件
    .pipe(connect.reload());//更新
})

gulp.task(&#39;js&#39;,function(){//编译ES6并且压缩
    return gulp.src(&#39;app/js/**/*.js&#39;)
    .pipe(jshint())//检查代码
    .pipe(babel({//编译ES6
        presets: [&#39;es2015&#39;]
    }))
    .pipe(uglify())//压缩js
    .pipe(gulp.dest(&#39;app/dist/js&#39;))
    .pipe(connect.reload());
})

gulp.task(&#39;fonts&#39;, function() {
    return gulp.src(&#39;app/fonts/**/*&#39;)
        .pipe(gulp.dest(&#39;app/dist/fonts&#39;))
})

gulp.task(&#39;images&#39;, function() {
    return gulp.src(&#39;app/images/**/*.+(png|jpg|jpeg|gif|svg)&#39;)
        // Caching images that ran through imagemin
        .pipe(cache(imagemin({//压缩图片文件
        interlaced: true,
        })))
        .pipe(gulp.dest(&#39;dist/images&#39;))
});

gulp.task(&#39;clean:app/dist&#39;, function() {//删除之前生成的文件
    return del([&#39;app/dist&#39;]);
});

gulp.task(&#39;clean:dist&#39;, function() {//异步清理除dist目录图片以外的文件
     return del([&#39;app/dist/**/*&#39;, &#39;!dist/images&#39;, &#39;!dist/images/**/*&#39;]);
});

gulp.task(&#39;minFs&#39;, function() {//压缩文件
    return gulp.src(&#39;app/dist/*.html&#39;)
        .pipe(useref())//合并js
        .pipe(
            gulpIf(&#39;*.js&#39;,uglify())//压缩js
        )
        .pipe(gulpIf(&#39;*.css&#39;, minifyCSS()))//压缩css
        .pipe(RevAll.revision({//不被重命名
            dontRenameFile:[/^\/favicon.ico$/g, &quot;.html&quot;]
        }))  
        .pipe(gulp.dest(&#39;dist&#39;));
});

gulp.task(&#39;connect:app&#39;,function(){
    connect.server({
        root:&#39;app&#39;,//根目录
        // ip:&#39;192.168.11.62&#39;,//默认localhost:8080
        livereload:true,//自动更新
        port:9998//端口
    })
})

gulp.task(&#39;connect:dist&#39;,function(cb){
    connect.server({
        root:&#39;app&#39;,//根目录
        // ip:&#39;192.168.11.62&#39;,//默认localhost:8080
        livereload:true,//自动更新
        port:9999//端口
    })
    cb()//执行回调，表示这个异步任务已经完成，起通作用,这样会执行下个任务
})

gulp.task(&#39;watchs&#39;,function(){//监听变化执行任务
    //当匹配任务变化才执行相应任务
    gulp.watch(&#39;app/*.html&#39;,gulp.series(&#39;html&#39;));
    gulp.watch(&#39;app/scss/**/*.scss&#39;,gulp.series(&#39;css&#39;));
    gulp.watch(&#39;app/js/**/*.js&#39;,gulp.series(&#39;js&#39;));
    gulp.watch(&#39;app/fonts/**/*&#39;,gulp.series(&#39;fonts&#39;));
    gulp.watch(&#39;app/images/**/*&#39;,gulp.series(&#39;images&#39;));
})

//gulp.series|4.0 依赖顺序执行
//gulp.parallel|4.0 多个依赖嵌套&#39;html&#39;,&#39;css&#39;,&#39;js&#39;并行

//下面1和2分别运行

//1.自动监测文件变化并刷新浏览器

//初始生成app/dist目录
gulp.task(&#39;init&#39;,gulp.series(&#39;clean:app/dist&#39;,gulp.parallel(&#39;html&#39;,&#39;css&#39;,&#39;js&#39;,&#39;fonts&#39;,&#39;images&#39;)));

//启动任务connect:app服务，并监控变化
gulp.task(&#39;run&#39;,gulp.series(&#39;init&#39;,&#39;connect:app&#39;,&#39;watchs&#39;));

//2.生成打包文件
gulp.task(&#39;build&#39;,gulp.series(&#39;clean:dist&#39;,gulp.parallel(&#39;init&#39;),&#39;minFs&#39;));

//启动任务connect:dist服务，生成打包文件后，监控其变化
gulp.task(&#39;serve&#39;,gulp.series(&#39;connect:dist&#39;,&#39;build&#39;,&#39;clean:app/dist&#39;,&#39;watchs&#39;));</code></pre>
<h2 id="34-linux环境基本命令">3.4 Linux环境基本命令</h2>
<blockquote>
<p>可参见开发环境下的Linux面试题相关章节。</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/970bd03f-c587-4b8d-8a9d-8ce545d2cd7d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/970bd03f-c587-4b8d-8a9d-8ce545d2cd7d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Sep 2024 03:26:21 GMT</pubDate></item><item><title><![CDATA[【JS相关】md]]></title><description><![CDATA[<h1 id="js面试题总结">JS面试题总结</h1>
<h2 id="变量"><a href="%E5%8F%98%E9%87%8F%E7%B1%BB%E5%9E%8B%E5%92%8C%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2.md">变量</a></h2>
]]></description><link>https://blog.gaoredu.com/article/e96315e6-2b80-475b-85c3-7232a8847048</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e96315e6-2b80-475b-85c3-7232a8847048</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 09 Sep 2024 22:02:03 GMT</pubDate></item><item><title><![CDATA[【CSS相关】Bootstrap]]></title><description><![CDATA[<h1 id="bootstrap">Bootstrap</h1>
<h2 id="1bootstrap-的优缺点？">1.Bootstrap 的优缺点？</h2>
<ul>
<li>优点：CSS代码结构合理，现成的代码可以直接使用（响应式布局）</li>
<li>缺点：定制流程较为繁琐，体积大</li>
</ul>
<h2 id="2如何实现响应式布局？">2.如何实现响应式布局？</h2>
<ul>
<li>原理：通过media query设置不同分辨率的class</li>
<li>使用：为不同分辨率选择不同的class</li>
</ul>
<h2 id="3如何定制自己的bootstrap样式">3.如何定制自己的bootstrap样式?</h2>
<ol>
<li>使用CSS同名类覆盖（门槛低，见效快，可能会有bug）</li>
<li>修改源码重新构建（一次性彻底解决）<br />
            [<br />
                bootstrap.scss是入口文件，修改这个文件内容之后，使用node-sass重新编译scss文件<br />
                node-sass --output-style expanded bootstrap/custom/scss/bootstrap.scss &gt; bootstrap/custom/dist/css/bootstrap.css<br />
            ]</li>
<li>引用Scss源文件，修改变量(类似于预处理器的使用方式, 徐亚什么模块引入什么模块，会更加灵活，推荐)<br />
            [<br />
                1. 创建一个自己的custom.scss文件<br />
                <code>
                    $primary: greed;
                    @import './botstrap-custom/scss/bootstrap.scss'
</code><br />
            ]</li>
</ol>
<h2 id="4如何实现一个响应式布局框架？">4.如何实现一个响应式布局框架？</h2>
<blockquote>
  <p>[!NOTE]<br />
  面试常考考点，要求模拟实现boostrap的底层实现原理。</p>
</blockquote>
<p>上面的[!NOTE]是行匹配模式，默认情况下支持类型NOTE，TIP，WARNING和DANGER。</p>
<h3 id="41-js的模拟实现">4.1 JS的模拟实现</h3>
<pre><code class="html language-html">&lt;style&gt;
    .container{
　　　　height: 40px;
       margin: 0 auto;
       background-color: rebeccapurple;
   }
&lt;/style&gt;
&lt;div class="container"&gt;&lt;/div&gt;
&lt;script&gt;
    window.addEventListener("load", function () {
        // 1. 获取容器
        let container = document.querySelector(".container");
        let clientW = 0;
        resize();
        // 2. 监听窗口的大小变化
        window.addEventListener("resize", resize);
        function resize() {
            // 2.1 获取改变后的宽度
            clientW = window.innerWidth;
            // 2.2 判断
            if(clientW &gt;= 1200){ // 超大屏幕
                container.style.width = "1170px";
            }else if(clientW &gt;= 992){ // 大屏幕
                container.style.width = "970px";
            }else if(clientW &gt;= 768){ // 小屏幕
                container.style.width = "750px";
            }else { // 超小屏幕
                container.style.width = "100%";
            }
        }
    });
&lt;/script&gt;
</code></pre>
<h3 id="42-css的模拟实现">4.2 CSS的模拟实现</h3>
<pre><code class="html language-html">&lt;style&gt;
        .container{
            height: 40px;
            margin: 0 auto;
            background-color: rebeccapurple;
        }

        /*媒体查询*/
        @media screen  and (max-width: 768px){
            .container{
                width: 100%;
            }
        }
　　　　　
        @media screen  and (min-width: 768px) and (max-width: 992px){
            .container{
                width: 750px;
            }
        }
        @media screen  and (min-width: 992px) and (max-width: 1200px){
            .container{
                width: 970px;
            }
        }
        @media screen  and (min-width: 1200px){
            .container{
                width: 1170px;
            }
        }
&lt;/style&gt;
&lt;div class="container"&gt;&lt;/div&gt;
</code></pre>
<blockquote>
  <p>[!NOTE]<br />
  关键点：mediaQuery, 浮动，响应式布局，resize事件</p>
</blockquote>]]></description><link>https://blog.gaoredu.com/article/c7b7b0e6-3e58-44ac-a955-6f3059775169</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c7b7b0e6-3e58-44ac-a955-6f3059775169</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Sep 2024 21:58:18 GMT</pubDate></item><item><title><![CDATA[【性能优化】其他技术]]></title><description><![CDATA[<h1 id="虚拟滚动技术">虚拟滚动技术</h1>
<h2 id="1-插入几万个-dom，如何实现页面不卡顿？（面试加分项）">1. 插入几万个 DOM，如何实现页面不卡顿？（面试加分项）</h2>
<ol>
<li><p>肯定不能一次性把几万个 DOM 全部插入，这样肯定会造成卡顿，所以解决问题的重点应该是如何分批次部分渲染 DOM。部分人应该可以想到通过 <code>requestAnimationFrame</code> 的方式去循环的插入 DOM，其实还有种方式去解决这个问题：<strong>虚拟滚动</strong>（virtualized scroller）。</p>
</li>
<li><p>这种技术的原理就是只渲染可视区域内的内容，非可见区域的那就完全不渲染了，当用户在滚动的时候就实时去替换渲染的内容。</p>
</li>
</ol>
<p><img src="../../img/vScroll.png" alt="滚动"></p>
<ol start="3">
<li>从上图中我们可以发现，即使列表很长，但是渲染的 DOM 元素永远只有那么几个，当我们滚动页面的时候就会实时去更新 DOM，这个技术就能顺利解决这发问题。如果你想了解更多的内容可以了解下这个 <a href="https://github.com/bvaughn/react-virtualized">react-virtualized</a>。</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/ab33783e-8347-4f9d-9b8a-22d8f5627e37</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ab33783e-8347-4f9d-9b8a-22d8f5627e37</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 01 Sep 2024 21:08:57 GMT</pubDate></item><item><title><![CDATA[【流行框架】Vue相关]]></title><description><![CDATA[<h1 id="vue相关">Vue相关</h1>
<h2 id="1-v-bind和v-model的区别？">1. v-bind和v-model的区别？</h2>
<ol>
<li>v-bind用来绑定数据和属性以及表达式，缩写为&#39;：&#39;</li>
<li>v-model使用在表单中，实现双向数据绑定的，在表单元素外使用不起作用</li>
</ol>
<h2 id="2-vue-中三要素的是什么？">2. Vue 中三要素的是什么？</h2>
<h3 id="21-响应式">2.1 响应式</h3>
<pre><code class="language-js">    // 如何让实现响应式的呢？
    let obj = {};
    let name = &#39;zhangsan&#39;;
    Object.defineProperties(obj, name, {get : function() {
      console.log(&#39;name&#39; , name)
    }, set : function() {
        console.log(&#39;name&#39; , name)
    }})


    // 1. 关键是理解Object.defineProperty
    // 2. 将data的属性代理到vm上面的
    let mv = {};
        let data = {
            price: 100,
            name: &#39;zhangsan&#39;
        };
        for (let key in data) {
            (function (key) {
                Object.defineProperty(mv, key, {
                    get: function () {
                        console.log(&#39;get val&#39;);
                        return data[key];
                    },
                    set: function (val) {
                        console.log(&#39;set val&#39;);
                        data[key] = val;
                    }
                })
            })(key);
        }</code></pre>
<h3 id="22-vue中如何解析模板？">2.2 Vue中如何解析模板？</h3>
<h4 id="221-模板是什么？">2.2.1 模板是什么？</h4>
<pre><code class="language-html">    &lt;div id=&quot;app&quot;&gt;
        &lt;div&gt;
            &lt;input v-model=&quot;title&quot;&gt;
            &lt;button v-on:click=&quot;add&quot;&gt;submit&lt;/button&gt;
        &lt;/div&gt;
        &lt;ul&gt;
            &lt;li v-for=&quot;item in list&quot;&gt;{{item}}&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;</code></pre>
<pre><code class="language-js"> // 1(*****). 模板实际上就是一个字符串………………(vue中的模板的本质)
 // 2. 模板有逻辑，如v-if, v-for
 // 3. 与html格式很像，但是有很大的区别
 // 4. 最终还是要转换为html来显示
 // 5(*****). 模板最终必须转换成JS代码，因为：
 //   （1）有逻辑(v-if v-for)：必须用JS才能实现（图灵完备）
 //    (2) 转换成HTML来渲染页面，必须用JS才能实现
 //    (3) 因此，模板最终要转换成为一个JS函数（render函数）</code></pre>
<h4 id="23--render函数？">2.3  render函数？</h4>
<h6 id="231-with的用法">2.3.1 with的用法</h6>
<pre><code class="language-js">var obj = {
    name: &#39;zhangsan&#39;,
    age: 20,
    getAddress(){
        alert(&#39;shanghai&#39;);
    }
}

// 不使用with
function fn() {
  alert(obj.name);
  alert(obj.age);
  obj.getAddress();
}

// 使用with(代码不易维护！！！)
function fn1() {
  with(obj){
      alert(name);
      alert(age);
      getAddress();
  }
}

fn();
fn1();
</code></pre>
<h5 id="232-render函数的实现机制？">2.3.2 render函数的实现机制？</h5>
<pre><code class="language-js">&lt;div id=&#39;app&#39;&gt;
    &lt;p&gt;{{price}}&lt;/p&gt;
&lt;/div&gt;

// 使用with限制这个作用域里面的this
with(this) {
    return _c(                          // this._c
        &#39;div&#39;,
        {
            attrs: {&quot;id&quot; : &quot;app&quot;}       // id=app
        },
        [
            _c(&#39;p&#39;, [_v(_s(price))])    // this._c(&#39;p&#39;, [_v(_s(price))])
        ]
    )
}


// 实现一个自己的render函数
var vm = new Vue({
        el: &#39;#app&#39;,
        data: {
            price: 100
        }
    });

    function render() {
        with (vm) {
            return _c(
                &#39;div&#39;,
                {
                    attrs: {&#39;id&#39;: &#39;app&#39;}
                },
                [
                    _c(&#39;p&#39;, [_v(_s(price))])
                ]
            );
        }
    }

    function render() {
        return vm._c(
            &#39;div&#39;,
            {
                attrs: {&#39;id&#39;: &#39;app&#39;}
            },
            [
                // vm._v 转换为一个文本节点
                // vm._s 转换为一个字符串
                // vm._c 转换为一个DOM节点
                vm._c(&#39;p&#39;, [vm._v(vm._s(price))])
            ]

        );
    }</code></pre>
<h4 id="233-render函数与vdom">2.3.3 render函数与vdom?</h4>
<pre><code class="language-html">&lt;div id=&quot;app&quot;&gt;
        &lt;div&gt;
            &lt;input type=&quot;text&quot; v-model=&quot;title&quot;&gt;
            &lt;button @click=&quot;add&quot;&gt;submit&lt;/button&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;ul&gt;
                &lt;li v-for=&quot;item in list&quot;&gt;{{item}}&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;
    &lt;/div&gt;</code></pre>
<pre><code class="language-js">with (this) {
    // this 就是vm
    return _c(
        &#39;div&#39;,
        {attrs: {&quot;id&quot;: &quot;app&quot;}},
        [
            _c(&#39;div&#39;,
                [
                    _c(&#39;input&#39;, {
                        directives: [{
                            name: &quot;model&quot;,
                            rawName: &quot;v-model&quot;,
                            value: (title),
                            expression: &quot;title&quot;
                        }],
                        attrs: {&quot;type&quot;: &quot;text&quot;},
                        domProps: {&quot;value&quot;: (title)},
                        on: {
                            &quot;input&quot;: function ($event) {
                                if ($event.target.composing) return;
                                title = $event.target.value
                            }
                        }
                    }),
                    _v(&quot; &quot;),
                    _c(&#39;button&#39;,
                        {
                            on: {
                                &quot;click&quot;: add
                            }
                        },
                        [_v(&quot;submit&quot;)]
                    )
                ]
            ),
            _v(&quot; &quot;),
            _c(&#39;div&#39;,
                [
                    _c(
                        &#39;ul&#39;,
                        // 这里返回的是一个数组（li标签组成的数组）
                        _l((list), function (item) {
                            return _c(&#39;li&#39;, [_v(_s(item))])
                        }), 0
                    )
                ]
            )
        ]
    )
}

// view ---&gt;  data ---&gt; 使用input的事件绑定 ---&gt; 更新页面数据到data
// data ---&gt;  view ---&gt; defineProperty ---&gt;  同步数据到页面</code></pre>
<h4 id="234-vm_c是什么，render函数返回了什么？">2.3.4 vm._c是什么，render函数返回了什么？</h4>
<ol>
<li><p>vdom: 使用js模拟DOm结构</p>
</li>
<li><p>snabbdom: h函数和patch函数
 Vue中的v_c：就是相当于snabbdom函数的h函数
 patch函数：</p>
<pre><code class="language-js"> vm._update(vnode) {
     const prevNode = vm._vnode;
     vm._vnode = vnode;
     if (!prevNode) {
         // 首次渲染的时候
         vm.$el = vm.__patch__(vm.$el, vnode);
     }
     else{
         vm.$el = vm.__patch__(prevNode, vnode);
     }
 }

 // 开始更新vue组件（修改data的属性的时候，Object.defineProperty）
 function updateComponent() {
   vm._update(vm._render());
 }</code></pre>
</li>
</ol>
<p><strong>**</strong>（问题总结）</p>
<ul>
<li><ol>
<li>vue模板：字符串，有逻辑，嵌入JS变量……</li>
</ol>
</li>
<li><ol start="2">
<li>模板必须转换为JS代码（有逻辑的，渲染html，js变量）</li>
</ol>
</li>
<li><ol start="3">
<li>render函数是什么样子的</li>
</ol>
</li>
<li><ol start="4">
<li>render函数的执行结果是返回的vnode</li>
</ol>
</li>
<li><ol start="5">
<li>updateComponent</li>
</ol>
</li>
</ul>
<h2 id="3-vue的整个实现流程源码解读？？？（总结点）">3. Vue的整个实现流程源码解读？？？（总结点）</h2>
<h3 id="31-解析模板成render函数">3.1 解析模板成render函数</h3>
<pre><code class="language-html">    &lt;template&gt;&lt;/template&gt; ---&gt;&gt;&gt; render 函数</code></pre>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>with函数的使用</li>
<li>模板中的所有信息都被render函数包含</li>
<li>模板中用到的data中的属性，都变成了JS变量</li>
<li>模板中的v-model v-for v-on都变成了JS逻辑</li>
<li>render函数返回vnode</li>
</ul>
</blockquote>
<h3 id="32-响应式开始监听数据">3.2 响应式开始监听数据</h3>
<blockquote>
<ul>
<li>Object.defineProperty</li>
<li>将data的属性代理到vm上</li>
</ul>
</blockquote>
<pre><code class="language-js">    with(vm) {

    }</code></pre>
<h3 id="33-首次渲染，显示页面，且绑定依赖">3.3 首次渲染，显示页面，且绑定依赖</h3>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>初次渲染，执行updateComponent, 执行vm._render()</li>
<li>执行render函数，会访问到vm.list和vm.title属性</li>
<li>会被响应式的get方法监听到(Object.defineProperty)</li>
</ul>
</blockquote>
<pre><code class="language-js">    Object.defineProperty(mv, key, {
        get: function() {
          return data[key];
        }
    })</code></pre>
<blockquote>
<ul>
<li>执行updateComponent, 会执行vdom的patch方法</li>
<li>patch将vnode渲染成DOM，初次渲染完成</li>
</ul>
</blockquote>
<h3 id="34-为何要监听get-直接监听set不行吗？">3.4 为何要监听get, 直接监听set不行吗？</h3>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>data中有很多属性，有些会被用到，有些可能不被用到</li>
<li>被用到的会走到get, 不被用到的不会走到get</li>
<li>未走到get中的属性，set的时候我们也无需关心</li>
<li>避免不必要的重复渲染（关键点）</li>
</ul>
</blockquote>
<pre><code class="language-js">    vm._update(vnode) {
        const prevNode = vm._vnode;
        vm._vnode = vnode;
        if (!prevNode) {
            // 首次渲染的时候
            vm.$el = vm.__patch__(vm.$el, vnode);
        }
        else{
            vm.$el = vm.__patch__(prevNode, vnode);
        }
    }

    // 开始更新vue组件（修改data的属性的时候，Object.defineProperty）
    function updateComponent() {
      vm._update(vm._render());
    }</code></pre>
<h3 id="35-data属性变化，触发rerender函数">3.5 data属性变化，触发rerender函数</h3>
<pre><code class="language-js">    Object.defineProperty(mv, key, {
        set: function(newVal) {
          data[key] = newVal;
          // 开始执行
          updateComponnet()
        }
    })</code></pre>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>修改属性，被响应式的set监听到</li>
<li>set中执行updateComponnet</li>
<li>updateComponent重新执行vm._render()</li>
<li>生成的vnode和preVnode, 通过patch进行对比</li>
<li>渲染到html中去</li>
</ul>
</blockquote>
<h2 id="4-说一下从使用jquery和使用框架的区别？">4. 说一下从使用jQuery和使用框架的区别？</h2>
<ol>
<li>数据和视图的分离（代码解耦）---开房封闭原则</li>
<li>数据驱动视图，只关系数据变化，DOM操作被封装</li>
</ol>
<h2 id="5-说一下对mvvm的理解？">5. 说一下对MVVM的理解？</h2>
<ol>
<li>MVC</li>
<li>MVVM</li>
<li>关于ViewModel</li>
</ol>
<h2 id="6-vue中如何实现响应式的呢？">6. Vue中如何实现响应式的呢？</h2>
<ol>
<li>响应式</li>
<li>模板引擎</li>
<li>渲染（首次渲染，后面的渲染）</li>
</ol>
<blockquote>
<ul>
<li>Object.defineProperty</li>
<li>data的属性代理到vm上面（with）</li>
</ul>
</blockquote>
<h2 id="7-vue中是如何解析模板的呢？">7. Vue中是如何解析模板的呢？</h2>
<ol>
<li>模板的本质就是字符串（有逻辑）</li>
<li>模板必须要转换为JS代码</li>
<li>render函数的实现（返回的是一个vnode）</li>
<li>updateComponnet(patch函数)</li>
</ol>
<h2 id="8-说一下vue的整体实现流程？">8. 说一下Vue的整体实现流程？</h2>
<ol>
<li>解析模板成为render函数</li>
<li>响应式开始监听数据</li>
<li>首次渲染，显示页面，且绑定依赖</li>
<li>data属性数据发生变化，重新触发惹人的人、函数</li>
</ol>
<h2 id="9-vue的数据劫持以及操作数组的坑？">9. vue的数据劫持以及操作数组的坑？</h2>
<ol>
<li><p>给data添加新属性的时候vm.$set(vm.info,&#39;newKey&#39;,&#39;newValue&#39;)</p>
</li>
<li><p>data上面属性值是数组的时候，需要用数组的方法操作数组，而不能通过index或者length属性去操作数组，因为监听不到属性操作的动作。</p>
</li>
</ol>
<h2 id="10-谈一下对mvvm和mvc的理解？">10. 谈一下对mvvm和mvc的理解？</h2>
<ol>
<li>mvc其实是model view Model传统所有逻辑在controller,难以维护。用户输入 =&gt; 控制器 =&gt; 数据改变，如果数据变了需要获取dom，操作属性，再渲染到视图上。</li>
<li>mvvm其实是model view viewModel数据变化驱动视图。数据变了，不需要你获取dom，然后改变dom的内容。这边数据变了，vm负责监听，视图那边自动发生变化。最明显的是不需要document.querySelector之类的了。</li>
</ol>
<h2 id="11-vm的实质">11. vm的实质?</h2>
<blockquote>
<p>[!NOTE]
上面说了vm负责让数据变了，视图能自动发生变化。这么神奇魔术背后的原理是Object.defineProperty。其实就是属性的读取和设置操作都进行了监听，当有这样的操作的时候，进行某种动作。来一个demo玩下。</p>
</blockquote>
<pre><code class="language-js">    // 对obj上面的属性进行读取和设置监听
    let obj = {
        name:&#39;huahua&#39;,
        age:18
    }
    function observer(obj){
        if(typeof obj === &#39;object&#39;){
            for (const key in obj) {
                defineReactive(obj,key,obj[key])
            }
        }
    }
    // get的return的值才是最终你读取到的值。所以设的值是为读取准备的。
    // set传的参数是设置的值，注意这里不要有obj.name = newVal 这样又触发set监听，会死循环的。
    function defineReactive(obj,key,value){
        Object.defineProperty(obj,key,{
            get:function(){
                console.log(&#39;你在读取&#39;)
                // happy的话这边可以value++，这样你发现读取的值始终比设置的大一个，因为return就是读取到的值
                return value
            },
            set:function(newVal){
                console.log(&#39;数据更新了&#39;)
                value = newVal
            }

        })
    }
    observer(obj)
    obj.age = 2
    console.log(obj.age)</code></pre>
<h2 id="12-definereactive的实现响应式手写实现">12. defineReactive的实现(响应式手写实现)?</h2>
<blockquote>
<p>[!NOTE]
在浏览器执行的时候，控制台随手也可以obj.name=&quot;hua1&quot;类似的操作，发现都监听到了。但是如果更深一步，obj.name={firstname:&#39;hua&#39;,lastname:&#39;piaoliang&#39;};obj.name.lastname=&#39;o&#39;就不能监听到属性修改了。因为并没有将新的赋值对象监听其属性。所以函数需要改进。 </p>
</blockquote>
<p>需要在defineReactive的第一行加上observer(value)。设置值的时候如果是对象的话，也需要将这个对象数据劫持。同理，set那边也需要加这行。</p>
<h3 id="121-基础实现">12.1 基础实现</h3>
<pre><code class="language-js">    function defineReactive(obj,key,value){
       // 注意这里！！！！！！！
        observer(value)
        Object.defineProperty(obj,key,{
            get:function(){
                return value
            },
            set:function(newVal){
                // 注意这里！！！！！！！
                observer(newVal)
                console.log(&#39;数据更新了&#39;)
                value = newVal
            }

        })
    }</code></pre>
<h3 id="122-数组方法的劫持">12.2 数组方法的劫持</h3>
<p>如果obj.name=[1,2,3];obj.name.push(4)发现又没有通知了，这是因为Object.defineProperty不支持监听数组变化。所以需要重写数组上面的方法。</p>
<pre><code class="language-js">        // 把数组上大部分方法重写了，这里不一一列举。但是如果你 [1,2].length--，这是捕捉不到的
        let arr = [&#39;push&#39;,&#39;slice&#39;,&#39;split&#39;]
        arr.forEach(method=&gt;{
            let oldPush = Array.property[method]
            Array.property[method] = function(value){
                console.log(&#39;数据更新&#39;)
                oldPush.call(this, value)
            }
        })</code></pre>
<h3 id="123-vue-的双向绑定的原理是什么常考">12.3 vue 的双向绑定的原理是什么(常考)</h3>
<blockquote>
<p>vue.js 是采用数据劫持结合发布者-订阅者模式的方式，通过 Object.defineProperty()来劫持各个属性的 setter，getter，在数据变动时发布消息给订阅者，触发相应的监听回调。</p>
</blockquote>
<ol>
<li><p>第一步：需要 observe 的数据对象进行递归遍历，包括子属性对象的属性，都加上 setter 和 getter 这样的话，给这个对象的某个值赋值，就会触发 setter，那么就能监听到了数据变化</p>
</li>
<li><p>第二步：compile 解析模板指令，将模板中的变量替换成数据，然后初始化渲染页面视图，并将每个指令对应的节点绑定更新函数，添加监听数据的订阅者，一旦数据有变动，收到通知，更新视图</p>
</li>
<li><p>第三步：Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁，主要做的事情是:</p>
<ul>
<li>在自身实例化时往属性订阅器(dep)里面添加自己</li>
<li>自身必须有一个 update()方法</li>
<li>待属性变动 dep.notice()通知时，能调用自身的 update() 方法，并触发 Compile 中绑定的回调，则功成身退。</li>
</ul>
</li>
<li><p>第四步：MVVM 作为数据绑定的入口，整合 Observer、Compile 和 Watcher 三者，通过 Observer 来监听自己的 model 数据变化，通过 Compile 来解析编译模板指令，最终利用 Watcher 搭起 Observer 和 Compile 之间的通信桥梁，达到数据变化 -&gt; 视图更新；视图交互变化(input) -&gt; 数据 model 变更的双向绑定效果。</p>
</li>
</ol>
<h2 id="13-vue如何监听数组数据变化？">13. Vue如何监听数组数据变化？</h2>
<h3 id="131-vmset方法">13.1 vm.$set方法</h3>
<p>因为是一开始就数据劫持了。所以后来如果新绑定属性，是没有数据劫持的。如果需要调用 vm.$set(vm.info,&#39;newKey&#39;,&#39;newValue&#39;)，vm是vue的实例。</p>
<h3 id="132-使用数组的方法">13.2 使用数组的方法</h3>
<p>当属性值是数组，数组变化的时候，跟踪不到变化。因为数组虽然是对象，但是Object.defineProperty不支持数组，所以vue改写了数组的所有方法，当调用数组方法的时候，就调动变动事件。但是不能通过属性或者索引控制数组，比如length，index。</p>
<blockquote>
<p>[!NOTE]
总结：data上，绑定所有属性避免后期加新属性。如果是数组，只能通过数组方法修改数组。如下例子，控制台vm.arr--发现视图并不会变化，vm.arr.push(4)就能变化</p>
</blockquote>
<pre><code class="language-html">    &lt;div id=&quot;app&quot;&gt;{{msg}}{{arr}}&lt;/div&gt;
        &lt;script src=&quot;node_modules/vue/dist/vue.js&quot;&gt;&lt;/script&gt;
        &lt;script&gt;
        let vm = new Vue({
            el:&#39;#app&#39;,
            // template加上之后会替换掉#app这个标签
            // template:&#39;&lt;h1&gt;en&lt;/h1&gt;&#39;,
            data:{msg:&#39;msg&#39;,arr:[1,2,3]}
        })
        vm.msg = &#39;msg&#39;
        &lt;/script&gt;</code></pre>
<h2 id="14-vue-的优点和缺点是什么？">14. vue 的优点和缺点是什么？</h2>
<h3 id="141-优点">14.1 优点</h3>
<ol>
<li>低耦合。视图（View）可以独立于 Model 变化和修改，一个 ViewModel 可以绑定到不同的&quot;View&quot;上，当 View 变化的时候 Model 可以不变，当 Model 变化的时候 View 也可以不变。</li>
<li>可重用性。你可以把一些视图逻辑放在一个 ViewModel 里面，让很多 view 重用这段视图逻辑。</li>
<li>独立开发。开发人员可以专注于业务逻辑和数据的开发（ViewModel），设计人员可以专注于页面设计，使用 Expression Blend 可以很容易设计界面并生成 xml 代码。</li>
<li>可测试。界面素来是比较难于测试的，而现在测试可以针对 ViewModel 来写。</li>
</ol>
<h3 id="142-缺点（面试常考）">14.2 缺点（面试常考）</h3>
<ol>
<li>网站SEO问题</li>
<li>浏览器兼容性问题</li>
<li>海量数据节点的渲染问题</li>
</ol>
<h2 id="15-请详细说下你对-vue-生命周期的理解？">15. 请详细说下你对 vue 生命周期的理解？</h2>
<blockquote>
<p>总共分为 8 个阶段创建前/后，载入前/后，更新前/后，销毁前/后。</p>
</blockquote>
<ol>
<li>创建前/后： 在 <strong>beforeCreate</strong> 阶段，vue 实例的挂载元素 el 还没有, <strong>created</strong>阶段。</li>
<li>载入前/后：在 <strong>beforeMount</strong> 阶段，vue 实例的$el 和 data 都初始化了，但还是挂载之前为虚拟的 dom 节点，data.message 还未替换。在 <strong>mounted</strong> 阶段，vue 实例挂载完成，data.message 成功渲染。</li>
<li>更新前/后：当 data 变化时，会触发<strong>beforeUpdate</strong> 和 <strong>updated</strong>方法。</li>
<li>销毁前/后：在执行 <strong>destroy 方法后</strong>，对 data 的改变不会再触发周期函数，说明此时 vue 实例已经解除了事件监听以及和 dom 的绑定，但是 dom 结构依然存在</li>
</ol>
<h2 id="16-vue组件之间的传值？">16. Vue组件之间的传值？</h2>
<h3 id="161-父组件与子组件传值">16.1. 父组件与子组件传值</h3>
<pre><code class="language-html">//父组件通过标签上面定义传值
&lt;template&gt;
    &lt;Main :obj=&quot;data&quot;&gt;&lt;/Main&gt;
&lt;/template&gt;
&lt;script&gt;
    //引入子组件
    import Main form &quot;./main&quot;

    exprot default{
        name:&quot;parent&quot;,
        data(){
            return {
                data:&quot;我要向子组件传递数据&quot;
            }
        },
        //初始化组件
        components:{
            Main
        }
    }
&lt;/script&gt;


//子组件通过props方法接受数据
&lt;template&gt;
    &lt;div&gt;{{data}}&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
    exprot default{
        name:&quot;son&quot;,
        //接受父组件传值
        props:[&quot;data&quot;]
    }
&lt;/script&gt;</code></pre>
<h3 id="162-子组件向父组件传递数据">16.2 子组件向父组件传递数据</h3>
<pre><code class="language-html">//子组件通过$emit方法传递参数
&lt;template&gt;
   &lt;div v-on:click=&quot;events&quot;&gt;&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
    //引入子组件
    import Main form &quot;./main&quot;

    exprot default{
        methods:{
            events:function(){

            }
        }
    }
&lt;/script&gt;


//

&lt;template&gt;
    &lt;div&gt;{{data}}&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
    exprot default{
        name:&quot;son&quot;,
        //接受父组件传值
        props:[&quot;data&quot;]
    }
&lt;/script&gt;</code></pre>
<h2 id="17-vue路由相关问题">17. Vue路由相关问题</h2>
<h3 id="171-active-class-是哪个组件的属性？">17.1 active-class 是哪个组件的属性？</h3>
<p>vue-router 模块的 router-link 组件。</p>
<h3 id="172-嵌套路由怎么定义？">17.2 嵌套路由怎么定义？</h3>
<blockquote>
<p>在实际项目中我们会碰到多层嵌套的组件组合而成，但是我们如何实现嵌套路由呢？因此我们需要在 VueRouter 的参数中使用 children 配置，这样就可以很好的实现路由嵌套。
index.html，只有一个路由出口</p>
</blockquote>
<pre><code class="language-html">&lt;div id=&quot;app&quot;&gt;
    &lt;!-- router-view 路由出口, 路由匹配到的组件将渲染在这里 --&gt;
    &lt;router-view&gt;&lt;/router-view&gt;
&lt;/div&gt;</code></pre>
<p>main.js，路由的重定向，就会在页面一加载的时候，就会将 home 组件显示出来，因为重定向指向了 home 组件，redirect 的指向与 path 的必须一致。children 里面是子路由，当然子路由里面还可以继续嵌套子路由。</p>
<pre><code class="language-js">import Vue from &#39;vue&#39;
import VueRouter from &#39;vue-router&#39;
Vue.use(VueRouter)

//引入两个组件

import home from &quot;./home.vue&quot;
import game from &quot;./game.vue&quot;
//定义路由
const routes = [
    { path: &quot;/&quot;, redirect: &quot;/home&quot; },//重定向,指向了home组件
    {
        path: &quot;/home&quot;, component: home,
        children: [
            { path: &quot;/home/game&quot;, component: game }
        ]
    }
]
//创建路由实例
const router = new VueRouter({routes})

new Vue({
    el: &#39;#app&#39;,
    data: {
    },
    methods: {
    },
    router
})</code></pre>
<p>home.vue，点击显示就会将子路由显示在出来，子路由的出口必须在父路由里面，否则子路由无法显示。</p>
<h3 id="173-路由之间跳转？">17.3 路由之间跳转？</h3>
<ul>
<li>声明式（标签跳转） <code>&lt;router-link :to=&quot;index&quot;&gt;</code></li>
<li>编程式（ js 跳转） <code>router.push(&#39;index&#39;)</code></li>
</ul>
<h3 id="174-懒加载（按需加载路由）（常考）">17.4 懒加载（按需加载路由）（常考）</h3>
<blockquote>
<p>webpack 中提供了 require.ensure()来实现按需加载。以前引入路由是通过 import 这样的方式引入，改为 const 定义的方式进行引入。</p>
</blockquote>
<h4 id="1741-不进行页面按需加载引入方式">17.4.1 不进行页面按需加载引入方式</h4>
<pre><code class="language-js">import  home   from &#39;../../common/home.vue&#39;</code></pre>
<h4 id="1742-进行页面按需加载的引入方式">17.4.2 进行页面按需加载的引入方式</h4>
<pre><code class="language-js">const  home = r =&gt; require.ensure( [], () =&gt; r (require(&#39;../../common/home.vue&#39;)))</code></pre>
<h3 id="175-vue-router-有哪几种导航钩子">17.5 vue-router 有哪几种导航钩子?</h3>
<ol>
<li>全局导航钩子<ul>
<li>router.beforeEach(to, from, next),</li>
<li>router.beforeResolve(to, from, next),</li>
<li>router.afterEach(to, from ,next)</li>
</ul>
</li>
<li>组件内钩子<ul>
<li>beforeRouteEnter,</li>
<li>beforeRouteUpdate,</li>
<li>beforeRouteLeave</li>
</ul>
</li>
<li>单独路由独享组件<ul>
<li>beforeEnter</li>
</ul>
</li>
</ol>
<h2 id="18-vux相关问题">18. Vux相关问题</h2>
<h3 id="181-vuex-是什么？怎么使用？哪种功能场景使用它？">18.1 vuex 是什么？怎么使用？哪种功能场景使用它？</h3>
<blockquote>
<p>vue 框架中状态管理。在 main.js 引入 store，注入。新建了一个目录 store，….. export 。场景有：单页应用中，组件之间的状态。音乐播放、登录状态、加入购物车</p>
</blockquote>
<pre><code class="language-js">// 新建 store.js
import vue from &#39;vue&#39;
import vuex form &#39;vuex&#39;
vue.use(vuex)
export default new vuex.store({
    //...code
})

//main.js
import store from &#39;./store&#39;
...</code></pre>
<h3 id="182-vuex-有哪几种属性？">18.2 vuex 有哪几种属性？</h3>
<p>有 5 种，分别是 state、getter、mutation、action、module</p>
<h3 id="183-vuex-的-store-特性是什么">18.3 vuex 的 store 特性是什么</h3>
<ul>
<li>vuex 就是一个仓库，仓库里放了很多对象。其中 state 就是数据源存放地，对应于一般 vue 对象里面的 data</li>
<li>state 里面存放的数据是响应式的，vue 组件从 store 读取数据，若是 store 中的数据发生改变，依赖这相数据的组件也会发生更新</li>
<li>它通过 mapState 把全局的 state 和 getters 映射到当前组件的 computed 计算属性</li>
</ul>
<h3 id="184-vuex-的-getter-特性是什么">18.4 vuex 的 getter 特性是什么</h3>
<ul>
<li>getter 可以对 state 进行计算操作，它就是 store 的计算属性</li>
<li>虽然在组件内也可以做计算属性，但是 getters 可以在多给件之间复用</li>
<li>如果一个状态只在一个组件内使用，是可以不用 getters</li>
</ul>
<h3 id="185-vuex-的-mutation-特性是什么">18.5 vuex 的 mutation 特性是什么</h3>
<ul>
<li>action 类似于 muation, 不同在于：action 提交的是 mutation,而不是直接变更状态</li>
<li>action 可以包含任意异步操作</li>
</ul>
<h3 id="186-vue-中-ajax-请求代码应该写在组件的-methods-中还是-vuex-的-action-中">18.6 vue 中 ajax 请求代码应该写在组件的 methods 中还是 vuex 的 action 中</h3>
<p>如果请求来的数据不是要被其他组件公用，仅仅在请求的组件内使用，就不需要放入 vuex 的 state 里</p>
<p>如果被其他地方复用，请将请求放入 action 里，方便复用，并包装成 promise 返回</p>
<h3 id="187-不用-vuex-会带来什么问题">18.7 不用 vuex 会带来什么问题</h3>
<ul>
<li>可维护性会下降，你要修改数据，你得维护 3 个地方</li>
<li>可读性下降，因为一个组件里的数据，你根本就看不出来是从哪里来的</li>
<li>增加耦合，大量的上传派发，会让耦合性大大的增加，本来 Vue 用 Component 就是为了减少耦合，现在这么用，和组件化的初衷相背</li>
</ul>
<h3 id="188-vuex-原理">18.8 vuex 原理</h3>
<p>vuex 仅仅是作为 vue 的一个插件而存在，不像 Redux,MobX 等库可以应用于所有框架，vuex 只能使用在 vue 上，很大的程度是因为其高度依赖于 vue 的 computed 依赖检测系统以及其插件系统，</p>
<p>vuex 整体思想诞生于 flux,可其的实现方式完完全全的使用了 vue 自身的响应式设计，依赖监听、依赖收集都属于 vue 对对象 Property set get 方法的代理劫持。最后一句话结束 vuex 工作原理，vuex 中的 store 本质就是没有 template 的隐藏着的 vue 组件；</p>
<h3 id="189-扩展问题">18.9 扩展问题</h3>
<h4 id="1891-使用-vuex-只需执行-vueusevuex，并在-vue-的配置中传入一个-store-对象的示例，store-是如何实现注入的？">18.9.1 使用 Vuex 只需执行 Vue.use(Vuex)，并在 Vue 的配置中传入一个 store 对象的示例，store 是如何实现注入的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>Vue.use(Vuex) 方法执行的是 install 方法，它实现了 Vue 实例对象的 init 方法封装和注入，使传入的 store 对象被设置到 Vue 上下文环境的$store 中。因此在 Vue Component 任意地方都能够通过 this.$store 访问到该 store。</p>
<h4 id="1892--state-内部支持模块配置和模块嵌套，如何实现的？">18.9.2  state 内部支持模块配置和模块嵌套，如何实现的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>在 store 构造方法中有 makeLocalContext 方法，所有 module 都会有一个 local context，根据配置时的 path 进行匹配。所以执行如 dispatch(&#39;submitOrder&#39;, payload)这类 action 时，默认的拿到都是 module 的 local state，如果要访问最外层或者是其他 module 的 state，只能从 rootState 按照 path 路径逐步进行访问。</p>
<h4 id="1893-在执行-dispatch-触发-actioncommit-同理的时候，只需传入type-payload，action-执行函数中第一个参数-store-从哪里获取的？">18.9.3 在执行 dispatch 触发 action(commit 同理)的时候，只需传入(type, payload)，action 执行函数中第一个参数 store 从哪里获取的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>store 初始化时，所有配置的 action 和 mutation 以及 getters 均被封装过。在执行如 dispatch(&#39;submitOrder&#39;, payload)的时候，actions 中 type 为 submitOrder 的所有处理方法都是被封装后的，其第一个参数为当前的 store 对象，所以能够获取到 { dispatch, commit, state, rootState } 等数据。</p>
<h4 id="1894-vuex-如何区分-state-是外部直接修改，还是通过-mutation-方法修改的？">18.9.4 Vuex 如何区分 state 是外部直接修改，还是通过 mutation 方法修改的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>Vuex 中修改 state 的唯一渠道就是执行 commit(&#39;xx&#39;, payload) 方法，其底层通过执行 this._withCommit(fn) 设置_committing 标志变量为 true，然后才能修改 state，修改完毕还需要还原_committing 变量。外部修改虽然能够直接修改 state，但是并没有修改_committing 标志位，所以只要 watch 一下 state，state change 时判断是否_committing 值为 true，即可判断修改的合法性。</p>
<h4 id="1895-调试时的时空穿梭功能是如何实现的？">18.9.5 调试时的&quot;时空穿梭&quot;功能是如何实现的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>devtoolPlugin 中提供了此功能。因为 dev 模式下所有的 state change 都会被记录下来，&#39;时空穿梭&#39; 功能其实就是将当前的 state 替换为记录中某个时刻的 state 状态，利用 store.replaceState(targetState) 方法将执行 this._vm.state = state 实现。</p>
<h2 id="19-指令相关">19. 指令相关</h2>
<h3 id="191-自定义指令v-check-v-focus-的方法有哪些-它有哪些钩子函数-还有哪些钩子函数参数">19.1 自定义指令(v-check, v-focus) 的方法有哪些? 它有哪些钩子函数? 还有哪些钩子函数参数</h3>
<ul>
<li>全局定义指令：在 vue 对象的 directive 方法里面有两个参数, 一个是指令名称, 另一个是函数。</li>
<li>组件内定义指令：directives</li>
<li>钩子函数: bind(绑定事件出发)、inserted(节点插入时候触发)、update(组件内相关更新)</li>
<li>钩子函数参数： el、binding</li>
</ul>
<h3 id="192-说出至少-4-种-vue-当中的指令和它的用法">19.2 说出至少 4 种 vue 当中的指令和它的用法</h3>
<p>v-if(判断是否隐藏)、v-for(把数据遍历出来)、v-bind(绑定属性)、v-model(实现双向绑定)</p>
<h2 id="20-axios">20. axios</h2>
<h3 id="201-axios-是什么？怎么使用？描述使用它实现登录功能的流程">20.1 axios 是什么？怎么使用？描述使用它实现登录功能的流程</h3>
<blockquote>
<p>[!NOTE]
思路：使用Vue的router.beforeEach钩子函数结合axios的拦截器功能来实现。</p>
</blockquote>
<h3 id="202-axios与ajax-fetch的区别和优缺点？">20.2 axios与ajax, fetch的区别和优缺点？</h3>
<ul>
<li>参考文章：<a href="https://blog.csdn.net/qq_36407875/article/details/84642060">https://blog.csdn.net/qq_36407875/article/details/84642060</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/fcd7e8b9-fde9-4af5-8780-e51e6c446ca4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fcd7e8b9-fde9-4af5-8780-e51e6c446ca4</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 25 Aug 2024 18:23:30 GMT</pubDate></item><item><title><![CDATA[【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>本文介绍了通过 uniapp 技术实现了一套栀子手作在线购物商城系统。包含首页、分类、我的等常用功能入口。</p>
</blockquote>
<p><figure class="wp-block-image size-large is-resized"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="768" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-768x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1024"style="width:575px;height:auto"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-768x1024.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-768x1024.jpg</a> 768w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-225x300.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-225x300.jpg</a> 225w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-1152x1536.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-1152x1536.jpg</a> 1152w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-1536x2048.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-1536x2048.jpg</a> 1536w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-scaled.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG350-2-scaled.jpg</a> 1920w"sizes="(max-width: 768px) 100vw, 768px" /></figure/></p>
<h2 class="wp-block-heading">一、功能演示</h2>
<p>首页：包含了商品介绍，领劵中心和商品列表区域。</p>
<p>商品分类：支持不同的商品分类和商品搜素。</p>
<p>商品详情：包含了商品详细的描述信息，透出了分享、首页、客服等入口。</p>
<p>我的：包含了账户的常见的个人操作信息，知乎此领劵，在线客服，钱包管理等入口。</p>
<p>H5 端在线体验地址：<a href="https://wx.gaoredu.com/" target="_blank"  rel="nofollow">https://wx.gaoredu.com/</a></p>
<p>微信小程序：可以直接搜索“栀子手作”进入在线体验。</p>
<p><figure class="wp-block-image size-full"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="430" height="430" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/flower.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1026"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2024/08/flower.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/flower.jpg</a> 430w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/flower-300x300.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/flower-300x300.jpg</a> 300w"sizes="(max-width: 430px) 100vw, 430px" /></figure/></p>
<h2 class="wp-block-heading">二、开发流程</h2>
<h2 class="wp-block-heading">2.1 项目准备与搭建</h2>
<h3 class="wp-block-heading">1. 环境搭建</h3>
<p>首先，确保你已经安装了 Node.js 和 HBuilderX，因为 uniapp 的项目可以通过 HBuilderX 来方便地创建和管理。安装 HBuilderX 后，在官网（<a href="https://www.dcloud.io/hbuilderx.html%EF%BC%89%E4%B8%8B%E8%BD%BD%E5%B9%B6%E5%AE%89%E8%A3%85%E3%80%82" target="_blank" rel="noreferrer noopener" rel="nofollow">https://www.dcloud.io/hbuilderx.html）下载并安装。</a></p>
<h3 class="wp-block-heading">2. 创建 uniapp 项目</h3>
<p>启动 HBuilderX，点击菜单栏中的“文件”→“新建”→“项目”，选择“uni-app”类型，输入项目名称（如“huahuaMall”），选择项目保存路径，点击“创建”按钮。项目创建成功后，你会看到一个基本的项目结构，包括 <code>pages</code>、<code>static</code>、<code>components</code> 等目录。</p>
<h2 class="wp-block-heading">2.2 首页设计</h2>
<p>这里是栀子手作的小店的首页设计：</p>
<p><figure class="wp-block-image size-large"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="461" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-461x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1020"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-461x1024.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-461x1024.jpg</a> 461w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-135x300.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-135x300.jpg</a> 135w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-768x1707.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-768x1707.jpg</a> 768w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-691x1536.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-691x1536.jpg</a> 691w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-922x2048.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19-922x2048.jpg</a> 922w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG19.jpg</a> 1080w"sizes="(max-width: 461px) 100vw, 461px" /></figure/></p>
<h3 class="wp-block-heading">1. 页面布局</h3>
<p>首页是商城的门户，通常包含轮播图、搜索框、热门商品列表等功能模块。</p>
<ul class="wp-block-list">
<li><strong>轮播图 </strong>：使用<code>&lt;swiper></code> 和<code>&lt;swiper-item></code>组件展示。</li>
<li><strong>搜索框 </strong>：自定义一个搜索组件，可以放置在<code>&lt;view class="header"></code> 中。</li>
<li><strong>商品列表 </strong>：使用<code>&lt;view v-for="..."></code> 循环遍历商品数据，每个商品使用 <code>&lt;view class="product-item"></code> 展示。</li>
</ul>
<h3 class="wp-block-heading">2. 示例代码</h3>
<pre class="wp-block-code"><code class='language-default'>&lt;template>
  &lt;view class="container" :style="appThemeStyle">
    &lt;!-- 店铺页面组件 -->
    &lt;Page :items="items" />
    &lt;!-- 用户隐私保护提示（仅微信小程序）-->
    &lt;!-- #ifdef MP-WEIXIN -->
    &lt;PrivacyPopup :hideTabBar="true" />
    &lt;!-- #endif -->
  &lt;/view>
&lt;/template>

&lt;script>
  import {setCartTabBadge} from '@/core/app'
  import * as Api from '@/api/page'
  import Page from '@/components/page'
  import PrivacyPopup from '@/components/privacy-popup'

  const App = getApp()

  export default {
    components: {
      Page,
      PrivacyPopup
    },
    data() {
      return {
        // 页面参数
        options: {},
        // 页面属性
        page: {},
        // 页面元素
        items: &#91;]
      }
    },

    /**
     * 生命周期函数 -- 监听页面加载
     */
    onLoad(options) {
      // 当前页面参数
      this.options = options
      // 加载页面数据
      this.getPageData()},

    /**
     * 生命周期函数 -- 监听页面显示
     */
    onShow() {
      // 更新购物车角标
      setCartTabBadge()},

    methods: {

      /**
       * 加载页面数据
       * @param {Object} callback
       */
      getPageData(callback) {
        const app = this
        const pageId = app.options.pageId || 0
        Api.detail(pageId)
          .then(result => {
            // 设置页面数据
            const {data: { pageData} } = result
            app.page = pageData.page
            app.items = pageData.items
            // 设置顶部导航栏栏
            app.setPageBar()})
          .finally(() => callback &amp;&amp; callback())
      },

      /**
       * 设置顶部导航栏
       */
      setPageBar() {const { page} = this
        // 设置页面标题
        uni.setNavigationBarTitle({title: page.params.title})
        // 设置 navbar 标题、颜色
        uni.setNavigationBarColor({
          frontColor: page.style.titleTextColor === 'white' ? '#ffffff' : '#000000',
          backgroundColor: page.style.titleBackgroundColor
        })
      }

    },

    /**
     * 下拉刷新
     */
    onPullDownRefresh() {
      // 获取首页数据
      this.getPageData(() => {uni.stopPullDownRefresh()
      })
    },

    /**
     * 分享当前页面
     */
    onShareAppMessage() {
      const app = this
      const {page} = app
      return {
        title: page.params.shareTitle,
        path: "/pages/index/index?" + app.$getShareUrlParams()}
    },

    /**
     * 分享到朋友圈
     * 本接口为 Beta 版本，暂只在 Android 平台支持，详见分享到朋友圈 (Beta)
     * https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html
     */
    onShareTimeline() {
      const app = this
      const {page} = app
      return {
        title: page.params.shareTitle,
        path: "/pages/index/index?" + app.$getShareUrlParams()}
    }

  }
&lt;/script>

&lt;style lang="scss" scoped>
  .container {background: #fff;}
&lt;/style></code></pre>
<h2 class="wp-block-heading">2.3 分类页面设计</h2>
<p><figure class="wp-block-image size-large"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="461" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-461x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1021"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-461x1024.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-461x1024.jpg</a> 461w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-135x300.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-135x300.jpg</a> 135w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-768x1707.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-768x1707.jpg</a> 768w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-691x1536.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-691x1536.jpg</a> 691w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-922x2048.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20-922x2048.jpg</a> 922w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG20.jpg</a> 1080w"sizes="(max-width: 461px) 100vw, 461px" /></figure/></p>
<pre class="wp-block-code"><code class='language-default'>&lt;template>
  &lt;view class="container">
    &lt;!-- 搜索框 -->
    &lt;view class="search">
      &lt;search tips="搜索商品" @event="$navTo('pages/search/index')" />
    &lt;/view>

    &lt;!-- 一级分类 -->
    &lt;primary
      v-if="setting.style == PageCategoryStyleEnum.ONE_LEVEL_BIG.value || setting.style == PageCategoryStyleEnum.ONE_LEVEL_SMALL.value"
      :display="setting.style" :list="list" />

    &lt;!-- 二级分类 -->
    &lt;secondary v-if="setting.style == PageCategoryStyleEnum.TWO_LEVEL.value" :list="list" />

    &lt;!-- 分类 + 商品 -->
    &lt;commodity v-if="setting.style == PageCategoryStyleEnum.COMMODITY.value" ref="mescrollItem" :list="list" :setting="setting" />
  &lt;/view>
&lt;/template>

&lt;script>
  import MescrollCompMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp'
  import {setCartTabBadge} from '@/core/app'
  import SettingKeyEnum from '@/common/enum/setting/Key'
  import {PageCategoryStyleEnum} from '@/common/enum/store/page/category'
  import SettingModel from '@/common/model/Setting'
  import * as CategoryApi from '@/api/category'
  import Search from '@/components/search'
  import Primary from './components/primary'
  import Secondary from './components/secondary'
  import Commodity from './components/commodity'

  // 最后一次刷新时间
  let lastRefreshTime;

  export default {
    components: {
      Search,
      Primary,
      Secondary,
      Commodity
    },
    mixins: &#91;MescrollCompMixin],
    data() {
      return {
        // 枚举类
        PageCategoryStyleEnum,
        // 分类列表
        list: &#91;],
        // 分类模板设置
        setting: {},
        // 正在加载中
        isLoading: true
      }
    },

    /**
     * 生命周期函数 -- 监听页面加载
     */
    onLoad() {
      // 加载页面数据
      this.onRefreshPage()},

    /**
     * 生命周期函数 -- 监听页面显示
     */
    onShow() {
      // 每间隔 5 分钟自动刷新一次页面数据
      const curTime = new Date().getTime()
      if ((curTime - lastRefreshTime) > 5 * 60 * 1000) {this.onRefreshPage()
      }
    },

    methods: {

      // 刷新页面
      onRefreshPage() {
        // 记录刷新时间
        lastRefreshTime = new Date().getTime()
        // 获取页面数据
        this.getPageData()
        // 更新购物车角标
        setCartTabBadge()},

      // 获取页面数据
      getPageData() {
        const app = this
        app.isLoading = true
        Promise.all(&#91;
            // 获取分类模板设置
            // 优化建议: 可以将此处的 false 改为 true 启用缓存
            SettingModel.data(false),
            // 获取分类列表
            CategoryApi.list()])
          .then(result => {
            // 初始化分类模板设置
            app.initSetting(result&#91;0])
            // 初始化分类列表数据
            app.initCategory(result&#91;1])
          })
          .finally(() => app.isLoading = false)
      },

      /**
       * 初始化分类模板设置
       * @param {Object} result
       */
      initSetting(setting) {this.setting = setting&#91;SettingKeyEnum.PAGE_CATEGORY_TEMPLATE.value]
      },

      /**
       * 初始化分类列表数据
       * @param {Object} result
       */
      initCategory(result) {this.list = result.data.list},

    },

    /**
     * 设置分享内容
     */
    onShareAppMessage() {
      const app = this
      return {
        title: _this.templet.shareTitle,
        path: '/pages/category/index?' + app.$getShareUrlParams()}
    },

    /**
     * 分享到朋友圈
     * 本接口为 Beta 版本，暂只在 Android 平台支持，详见分享到朋友圈 (Beta)
     * https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html
     */
    onShareTimeline() {
      const app = this
      return {
        title: _this.templet.shareTitle,
        path: '/pages/category/index?' + app.$getShareUrlParams()}
    }

  }
&lt;/script>

&lt;style>
  page {background: #fff;}
&lt;/style>
&lt;style lang="scss" scoped>
  // 搜索框
  .search {
    position: fixed;
    top: var(--window-top);
    left: var(--window-left);
    right: var(--window-right);
    z-index: 9;
  }
&lt;/style></code></pre>
<p></p></p>
<h2 class="wp-block-heading">2.4 商品详情页面设计</h2>
<p><figure class="wp-block-image size-large"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="461" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-461x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1025"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-461x1024.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-461x1024.jpg</a> 461w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-135x300.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-135x300.jpg</a> 135w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-768x1707.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-768x1707.jpg</a> 768w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-691x1536.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-691x1536.jpg</a> 691w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-922x2048.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1-922x2048.jpg</a> 922w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG21-1.jpg</a> 1080w"sizes="(max-width: 461px) 100vw, 461px" /></figure/></p>
<p>相关代码演示：</p>
<pre class="wp-block-code"><code class='language-default'>&lt;template>
    &lt;view v-show="!isLoading" class="container" :style="appThemeStyle">
        &lt;!-- 商品图片轮播 -->
        &lt;SlideImage v-if="!isLoading" :video="goods.video" :videoCover="goods.videoCover"
            :images="goods.goods_images" />

        &lt;!-- 商品信息 -->
        &lt;view v-if="!isLoading" class="goods-info m-top20">
            &lt;!-- 价格、销量 -->
            &lt;view class="info-item info-item__top dis-flex flex-x-between flex-y-end">
                &lt;view class="block-left dis-flex flex-y-center">
                    &lt;!-- 商品售价 -->
                    &lt;text class="floor-price__samll">￥&lt;/text>
                    &lt;text class="floor-price">{{goods.goods_price_min}}&lt;/text>
                    &lt;!-- 会员价标签 -->
                    &lt;view v-if="goods.is_user_grade" class="user-grade">
                        &lt;text>会员价 &lt;/text>
                    &lt;/view>
                    &lt;!-- 划线价 -->
                    &lt;text v-if="goods.line_price_min > 0" class="original-price">￥{{goods.line_price_min}}&lt;/text>
                &lt;/view>
                &lt;view class="block-right dis-flex">
                    &lt;!-- 销量 -->
                    &lt;view class="goods-sales">
                        &lt;text>已售 {{goods.goods_sales}} 件 &lt;/text>
                    &lt;/view>
                &lt;/view>
            &lt;/view>
            &lt;!-- 标题、分享 -->
            &lt;view class="info-item info-item__name dis-flex flex-y-center">
                &lt;view class="goods-name flex-box">
                    &lt;text class="twoline-hide">{{goods.goods_name}}&lt;/text>
                &lt;/view>
                &lt;view class="goods-share__line">&lt;/view>
                &lt;view class="goods-share">
                    &lt;button class="share-btn dis-flex flex-dir-column" @click="onShowShareSheet()">
                        &lt;text class="share__icon iconfont icon-fenxiang">&lt;/text>
                        &lt;text class="f-24">分享 &lt;/text>
                    &lt;/button>
                &lt;/view>
            &lt;/view>
            &lt;!-- 商品卖点 -->
            &lt;view v-if="goods.selling_point" class="info-item info-item_selling-point">
                &lt;text>{{goods.selling_point}}&lt;/text>
            &lt;/view>
        &lt;/view>

        &lt;!-- 选择商品规格 -->
        &lt;view v-if="goods.spec_type == 20" class="goods-choice m-top20 b-f" @click="onShowSkuPopup(1)">
            &lt;view class="spec-list">
                &lt;view class="flex-box">
                    &lt;text class="col-8">选择：&lt;/text>
                    &lt;text class="spec-name" v-for="(item, index) in goods.specList"
                        :key="index">{{item.spec_name}}&lt;/text>
                &lt;/view>
                &lt;view class="f-26 col-9 t-r">
                    &lt;text class="iconfont icon-arrow-right">&lt;/text>
                &lt;/view>
            &lt;/view>
        &lt;/view>

        &lt;!-- 商品服务 -->
        &lt;Service v-if="!isLoading" :goods-id="goodsId" />

        &lt;!-- 商品 SKU 弹窗 -->
        &lt;SkuPopup v-if="!isLoading" v-model="showSkuPopup" :skuMode="skuMode" :goods="goods" @addCart="onAddCart" />

        &lt;!-- 商品评价 -->
        &lt;Comment v-if="!isLoading" :goods-id="goodsId" :limit="2" />

        &lt;!-- 商品描述 -->
        &lt;view v-if="!isLoading" class="goods-content m-top20">
            &lt;view class="item-title b-f">
                &lt;text>商品描述 &lt;/text>
            &lt;/view>
            &lt;view v-if="goods.content !=''" class="goods-content__detail b-f">
                &lt;mp-html :content="goods.content" />
            &lt;/view>
        &lt;/view>

        &lt;!-- 底部选项卡 -->
        &lt;view class="footer-fixed">
            &lt;view class="footer-container">
                &lt;!-- 导航图标 -->
                &lt;view class="foo-item-fast">
                    &lt;!-- 首页 -->
                    &lt;view class="fast-item fast-item--home" @click="onTargetHome">
                        &lt;view class="fast-icon">
                            &lt;text class="iconfont icon-shouye">&lt;/text>
                        &lt;/view>
                        &lt;view class="fast-text">
                            &lt;text>首页 &lt;/text>
                        &lt;/view>
                    &lt;/view>
                    &lt;!-- 客服 -->
                    &lt;customer-btn v-if="isShowCustomerBtn" :showCard="true" :cardTitle="goods.goods_name"
                        :cardImage="goods.goods_image">
                        &lt;view class="fast-item">
                            &lt;view class="fast-icon">
                                &lt;text class="iconfont icon-kefu1">&lt;/text>
                            &lt;/view>
                            &lt;view class="fast-text">
                                &lt;text>客服 &lt;/text>
                            &lt;/view>
                        &lt;/view>
                    &lt;/customer-btn>
                    &lt;!-- 购物车 -->
                    &lt;!-- &lt;view class="fast-item fast-item--cart" @click="onTargetCart">
            &lt;view v-if="cartTotal > 0" class="fast-badge fast-badge--fixed">{{cartTotal> 99 ? '99+' : cartTotal }}
            &lt;/view>
            &lt;view class="fast-icon">
              &lt;text class="iconfont icon-gouwuche">&lt;/text>
            &lt;/view>
            &lt;view class="fast-text">
              &lt;text>购物车 &lt;/text>
            &lt;/view>
          &lt;/view> -->
                &lt;/view>
                &lt;!-- 操作按钮 -->
                &lt;view class="foo-item-btn">
                    &lt;view class="btn-wrapper">
                        &lt;!-- &lt;view v-if="isEnableCart" class="btn-item btn-item-deputy" @click="onShowSkuPopup(2)">
              &lt;text>加入购物车 &lt;/text>
            &lt;/view> -->
                        &lt;view class="btn-item btn-item-main" @click="onShowSkuPopup(3)">
                            &lt;text>更多详情 &lt;/text>
                        &lt;/view>
                    &lt;/view>
                &lt;/view>
            &lt;/view>
        &lt;/view>

        &lt;!-- 快捷导航 -->
        &lt;!-- &lt;shortcut bottom="120rpx" /> -->

        &lt;!-- 分享菜单 -->
        &lt;share-sheet v-model="showShareSheet" :shareTitle="goods.goods_name" :shareImageUrl="goods.goods_image" />

        &lt;!-- 二维码扫码 -->
        &lt;u-modal v-model="showQrModal" :title="温馨提示">
            &lt;view class="qrcode">
                &lt;text>下单请长按二维码➕微信 &lt;/text>
                &lt;image src="../../static/qrcode.jpg" mode="widthFix" :show-menu-by-longpress="true"/>
            &lt;/view>
        &lt;/u-modal>
    &lt;/view>
&lt;/template>

&lt;script>
    import {getSceneData} from '@/core/app'
    import * as GoodsApi from '@/api/goods'
    import * as CartApi from '@/api/cart'
    import SettingModel from '@/common/model/Setting'
    import {GoodsTypeEnum} from '@/common/enum/goods'
    import ShareSheet from '@/components/share-sheet'
    import CustomerBtn from '@/components/customer-btn'
    import SlideImage from './components/SlideImage'
    import SkuPopup from './components/SkuPopup'
    import Comment from './components/Comment'
    import Service from './components/Service'

    export default {
        components: {
            ShareSheet,
            CustomerBtn,
            SlideImage,
            SkuPopup,
            Comment,
            Service
        },
        data() {
            return {
                // 正在加载
                isLoading: true,
                // 当前商品 ID
                goodsId: null,
                // 商品详情
                goods: {},
                // 购物车总数量
                cartTotal: 0,
                // 显示 / 隐藏 SKU 弹窗
                showSkuPopup: false,
                // 模式 1: 都显示 2: 只显示购物车 3: 只显示立即购买
                skuMode: 1,
                // 显示 / 隐藏分享菜单
                showShareSheet: false,
                // 是否支持加入购物车
                isEnableCart: false,
                // 是否显示在线客服按钮
                isShowCustomerBtn: false,
                // 是否展示 QrModal
                showQrModal: false,
            }
        },

        /**
         * 生命周期函数 -- 监听页面加载
         */
        async onLoad(options) {
            // 记录 query 参数
            this.onRecordQuery(options)
            // 加载页面数据
            this.onRefreshPage()
            // 是否显示在线客服按钮
            this.isShowCustomerBtn = await SettingModel.isShowCustomerBtn()},

        methods: {

            // 记录 query 参数
            onRecordQuery(query) {const scene = getSceneData(query)
                this.goodsId = query.goodsId ? parseInt(query.goodsId) : parseInt(scene.gid)
            },

            // 刷新页面数据
            onRefreshPage() {
                const app = this
                app.isLoading = true
                Promise.all(&#91;app.getGoodsDetail(), app.getCartTotal()])
                    .finally(() => app.isLoading = false)
            },

            // 获取商品信息
            getGoodsDetail() {
                const app = this
                return new Promise((resolve, reject) => {GoodsApi.detail(app.goodsId)
                        .then(result => {
                            app.goods = result.data.detail
                            if (app.goods.goods_type == GoodsTypeEnum.PHYSICAL.value) {app.isEnableCart = true}
                            resolve(result)
                        })
                        .catch(reject)
                })
            },

            // 获取购物车总数量
            getCartTotal() {
                const app = this
                return new Promise((resolve, reject) => {CartApi.total()
                        .then(result => {
                            app.cartTotal = result.data.cartTotal
                            resolve(result)
                        })
                        .catch(reject)
                })
            },

            // 更新购物车数量
            onAddCart(total) {this.cartTotal = total},

            /**
             * 显示 / 隐藏 SKU 弹窗
             * @param {skuMode} 模式 1: 都显示 2: 只显示购物车 3: 只显示立即购买
             */
            onShowSkuPopup(skuMode = 1) {
                // 下单请联系客服
                this.showQrModal = true;
                // uni.showModal({
                //  title: '温馨提示',
                //  content: '下单请联系客服或➕微信：zzsz68'
                // });
                // WARNING：如下临时注释
                // const app = this
                // if (app.isEnableCart) {
                //   app.skuMode = skuMode
                // } else {
                //   app.skuMode = 3
                // }
                // app.showSkuPopup = !app.showSkuPopup
            },

            // 显示隐藏分享菜单
            onShowShareSheet() {this.showShareSheet = !this.showShareSheet},

            // 跳转到首页
            onTargetHome(e) {this.$navTo('pages/index/index')
            },

            // 跳转到购物车页
            onTargetCart() {this.$navTo('pages/cart/index')
            },

        },

        /**
         * 分享当前页面
         */
        onShareAppMessage() {
            const app = this
            // 构建页面参数
            const params = app.$getShareUrlParams({goodsId: app.goodsId,})
            return {
                title: app.goods.goods_name,
                path: `/pages/goods/detail?${params}`
            }
        },

        /**
         * 分享到朋友圈
         * 本接口为 Beta 版本，暂只在 Android 平台支持，详见分享到朋友圈 (Beta)
         * https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html
         */
        onShareTimeline() {
            const app = this
            // 构建页面参数
            const params = app.$getShareUrlParams({goodsId: app.goodsId,})
            return {
                title: app.goods.goods_name,
                path: `/pages/goods/detail?${params}`
            }
        }
    }
&lt;/script>

&lt;style>
    page {background: #fafafa;}
&lt;/style>
&lt;style lang="scss" scoped>
    @import "./detail.scss";
&lt;/style></code></pre>
<h2 class="wp-block-heading">2.4 我的页面设计</h2>
<p><figure class="wp-block-image size-large"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="461" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-461x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1023"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-461x1024.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-461x1024.jpg</a> 461w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-135x300.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-135x300.jpg</a> 135w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-768x1707.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-768x1707.jpg</a> 768w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-691x1536.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-691x1536.jpg</a> 691w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-922x2048.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22-922x2048.jpg</a> 922w, <a href="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22.jpg">https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG22.jpg</a> 1080w"sizes="(max-width: 461px) 100vw, 461px" /></figure/></p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<pre class="wp-block-code"><code class='language-default'>&lt;template>
  &lt;view v-if="!isFirstload" class="container" :style="appThemeStyle">
    &lt;!-- 页面头部 -->
    &lt;view class="main-header" :style="{height: platform =='H5'?'260rpx':'320rpx', paddingTop: platform =='H5'?'0':'80rpx'}">
      &lt;image class="bg-image" src="/static/background/user-header2.png" mode="scaleToFill">&lt;/image>
      &lt;!-- 用户信息 -->
      &lt;view v-if="isLogin" class="user-info">
        &lt;view class="user-avatar" @click="handlePersonal()">
          &lt;avatar-image :url="userInfo.avatar_url" :width="100" />
        &lt;/view>
        &lt;view class="user-content">
          &lt;!-- 会员昵称 -->
          &lt;view class="nick-name oneline-hide" @click="handlePersonal()">{{userInfo.nick_name}}&lt;/view>
          &lt;!-- 会员等级 -->
          &lt;view v-if="$checkModule('user-grade') &amp;&amp; userInfo.grade_id > 0 &amp;&amp; userInfo.grade" class="user-grade">
            &lt;view class="user-grade_icon">
              &lt;image class="image"
                src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAA0lBMVEUAAAD/tjL/tzH/uDP/uC7/tjH/tzH/tzL/tTH+tTL+tjP/tDD/tTD+tzD/tjL/szD/uDH/tjL/tjL+tjD/tjT/szb/tzL/tTL+uTH+tjL/tjL/tjL/tTT/tjL/tjL+tjH/uTL/vDD/tjL/tjH/tzL9uS//tTL/nBr/sS7/tjH/ujL/szD/uTv+rzf/tzL+tzH+vDP+uzL+tjP+ry7+tDL9ki/7szf/sEX/tTL/tjL+tjL/tTH/tTT/tzH/tzL/tjP/sTX/uTP/wzX+rTn/vDX9vC8m8ckhAAAAOXRSTlMAlnAMB/vjxKWGMh0S6drMiVxPRkEY9PLy0ru0sKagmo5+dGtgVCMgBP716eXWyMGxqJGRe2o5KSmFNjaYAAABP0lEQVQ4y8XS13KDMBAF0AWDDe4t7r3ETu9lVxJgJ/n/X8rKAzHG5TE+Twz3zki7I/g/KXdghIbGJewrU4yzn08Ebgl6TuZzzuOC6W5es3HX6qsSz3NFShRU0MpucytDmOSpu3yULx3CA9RD1HjVedc0jSjqm6ZzhUjDsFDQhSp/OKj5GQvg0+ZCOixsbtDLAeTTOm/yGi8GyIphIVsgH737FEDV44LJa88IRKK/SetrwT9G/GUIr6vXjoy4GXn7+RboVXnghuSjaoGecwQxL2su3CwAKlO+QFoqxI4FMctHQhQd2OhxTu184jWUlI+rMTBTn1/IQcJHQ6GQdZ7pWiDaNdhTt330efISeiqYwQEzQpTlsURJLhzkEmpCPsERfeIUVyXr6MNuIyp5uziW6xURtt7hhGwzmMNJExfO4Bd9X0ZPqAxdNwAAAABJRU5ErkJggg==">
              &lt;/image>
            &lt;/view>
            &lt;view class="user-grade_name">
              &lt;text>{{userInfo.grade.name}}&lt;/text>
            &lt;/view>
          &lt;/view>
          &lt;!-- 会员无等级时显示手机号 -->
          &lt;view v-else class="mobile">{{userInfo.mobile}}&lt;/view>
        &lt;/view>
      &lt;/view>
      &lt;!-- 未登录 -->
      &lt;view v-else class="user-info" @click="handleLogin">
        &lt;view class="user-avatar">
          &lt;avatar-image :width="100" />
        &lt;/view>
        &lt;view class="user-content">
          &lt;view class="nick-name">未登录 &lt;/view>
          &lt;view class="login-tips">点击登录账号 &lt;/view>
        &lt;/view>
      &lt;/view>
    &lt;/view>

    &lt;!-- 绑定手机号 -->
    &lt;!-- &lt;view v-if="isLogin &amp;&amp; !userInfo.mobile &amp;&amp; setting&#91;SettingKeyEnum.REGISTER.value].isManualBind" class="my-mobile"
      @click="handleBindMobile()">
      &lt;view class="info">点击绑定手机号，确保账户安全 &lt;/view>
      &lt;view class="btn-bind">去绑定 &lt;/view>
    &lt;/view> -->

    &lt;!-- 我的钱包 -->
    &lt;view v-if="$checkModules(&#91;'market-recharge','market-points','market-coupon'])" class="my-asset">
      &lt;view class="asset-left flex-box dis-flex flex-x-around">
        &lt;view v-if="$checkModule('market-recharge')" class="asset-left-item" style="max-width: 200rpx;" @click="onTargetWallet">
          &lt;view class="item-value dis-flex flex-x-center">
            &lt;text class="oneline-hide">{{isLogin ? assets.balance : '--'}}&lt;/text>
          &lt;/view>
          &lt;view class="item-name dis-flex flex-x-center">
            &lt;text>账户余额 &lt;/text>
          &lt;/view>
        &lt;/view>
        &lt;view v-if="$checkModule('market-points')" class="asset-left-item" @click="onTargetPoints">
          &lt;view class="item-value dis-flex flex-x-center">
            &lt;text class="oneline-hide">{{isLogin ? assets.points : '--'}}&lt;/text>
          &lt;/view>
          &lt;view class="item-name dis-flex flex-x-center">
            &lt;text>{{setting&#91;SettingKeyEnum.POINTS.value].points_name }}&lt;/text>
          &lt;/view>
        &lt;/view>
        &lt;view v-if="$checkModule('market-coupon')" class="asset-left-item" @click="onTargetMyCoupon">
          &lt;view class="item-value dis-flex flex-x-center">
            &lt;text class="oneline-hide">{{isLogin ? assets.coupon : '--'}}&lt;/text>
          &lt;/view>
          &lt;view class="item-name dis-flex flex-x-center">
            &lt;text>优惠券 &lt;/text>
          &lt;/view>
        &lt;/view>
      &lt;/view>
      &lt;view v-if="$checkModule('market-recharge')" class="asset-right">
        &lt;view class="asset-right-item" @click="onTargetWallet">
          &lt;view class="item-icon dis-flex flex-x-center">
            &lt;text class="iconfont icon-qianbao">&lt;/text>
          &lt;/view>
          &lt;view class="item-name dis-flex flex-x-center">
            &lt;text>我的钱包 &lt;/text>
          &lt;/view>
        &lt;/view>
      &lt;/view>
    &lt;/view>

    &lt;!-- 绑定手机号 (第 2 种样式) -->
    &lt;!-- &lt;view class="my-mobile2" @click="handleBindMobile()">
      &lt;view class="info">点击绑定手机号，确保账户安全 &lt;/view>
      &lt;view class="btn-bind">去绑定 &lt;/view>
    &lt;/view> -->

    &lt;!-- 订单操作 -->
    &lt;!-- &lt;view class="order-navbar">
      &lt;view class="order-navbar-item" v-for="(item, index) in orderNavbar" :key="index" @click="onTargetOrder(item)">
        &lt;view class="item-icon">
          &lt;text class="iconfont" :class="&#91;`icon-${item.icon}`]">&lt;/text>
        &lt;/view>
        &lt;view class="item-name">{{item.name}}&lt;/view>
        &lt;view class="item-badge" v-if="item.count &amp;&amp; item.count > 0">
          &lt;text v-if="item.count &lt;= 99" class="text">{{item.count}}&lt;/text>
          &lt;text v-else class="text">99+&lt;/text>
        &lt;/view>
      &lt;/view>
    &lt;/view> -->

    &lt;!-- 我的服务 -->
    &lt;view class="my-service">
      &lt;view class="service-title">我的服务 &lt;/view>
      &lt;view class="service-content clearfix">
        &lt;block v-for="(item, index) in service" :key="index">
          &lt;view v-if="item.type =='link'&amp;&amp; item.enabled" class="service-item" @click="handleService(item)">
            &lt;view class="item-icon">
              &lt;text class="iconfont" :class="&#91;`icon-${item.icon}`]">&lt;/text>
            &lt;/view>
            &lt;view class="item-name">{{item.name}}&lt;/view>
            &lt;view class="item-badge" v-if="item.count &amp;&amp; item.count > 0">
              &lt;text v-if="item.count &lt;= 99" class="text">{{item.count}}&lt;/text>
              &lt;text v-else class="text">99+&lt;/text>
            &lt;/view>
          &lt;/view>
          &lt;!-- 在线客服 -->
          &lt;view v-if="item.type =='contact'&amp;&amp; item.enabled" class="service-item">
            &lt;customer-btn>
              &lt;view class="item-icon">
                &lt;text class="iconfont" :class="&#91;`icon-${item.icon}`]">&lt;/text>
              &lt;/view>
              &lt;view class="item-name">{{item.name}}&lt;/view>
            &lt;/customer-btn>
          &lt;/view>
        &lt;/block>
      &lt;/view>
    &lt;/view>

    &lt;!-- 退出登录 -->
    &lt;view v-if="isLogin" class="my-logout">
      &lt;view class="logout-btn" @click="handleLogout()">
        &lt;text>退出登录 &lt;/text>
      &lt;/view>
    &lt;/view>

  &lt;/view>
&lt;/template>

&lt;script>
  import store from '@/store'
  import {inArray} from '@/utils/util'
  import AvatarImage from '@/components/avatar-image'
  import CustomerBtn from '@/components/customer-btn'
  import {setCartTabBadge} from '@/core/app'
  import SettingKeyEnum from '@/common/enum/setting/Key'
  import StoreModel from '@/common/model/Store'
  import SettingModel from '@/common/model/Setting'
  import * as UserApi from '@/api/user'
  import * as OrderApi from '@/api/order'
  import {checkLogin, filterModules} from '@/core/app'

  // 订单操作
  const orderNavbar = &#91;
    {id: 'all', name: '全部订单', icon: 'qpdingdan'},
    {id: 'payment', name: '待支付', icon: 'daifukuan', count: 0},
    {id: 'delivery', name: '待发货', icon: 'daifahuo', count: 0},
    {id: 'received', name: '待收货', icon: 'daishouhuo', count: 0},
  ]

  /**
   * 我的服务
   * id: 标识; name: 标题名称; icon: 图标; type 类型(link 和 button); url: 跳转的链接
   */
  const service = &#91;
    // {id: 'address', name: '收货地址', icon: 'shouhuodizhi', type: 'link', url: 'pages/address/index'},
    {id: 'coupon', name: '领券中心', icon: 'lingquan', type: 'link', url: 'pages/coupon/index', moduleKey: 'market-coupon'},
    {id: 'myCoupon', name: '优惠券', icon: 'youhuiquan', type: 'link', url: 'pages/my-coupon/index', moduleKey: 'market-coupon'},
    // {id: 'refund', name: '退换 / 售后', icon: 'shouhou', type: 'link', url: 'pages/refund/index', count: 0},
    {id: 'contact', name: '在线客服', icon: 'kefu', type: 'contact'},
    {id: 'points', name: '我的积分', icon: 'jifen', type: 'link', url: 'pages/points/log', moduleKey: 'market-points'},
    // {id: 'orderCenter', name: '订单中心', icon: 'order-c', type: 'link', url: 'pages/order/center'},
    // {id: 'help', name: '我的帮助', icon: 'bangzhu', type: 'link', url: 'pages/help/index', moduleKey: 'content-help'},
  ]

  export default {
    components: {
      AvatarImage,
      CustomerBtn
    },
    data() {
      return {
        inArray,
        // 枚举类
        SettingKeyEnum,
        // 正在加载
        isLoading: true,
        // 首次加载
        isFirstload: true,
        // 是否已登录
        isLogin: false,
        // 系统设置
        setting: {},
        // 当前用户信息
        userInfo: {},
        // 账户资产
        assets: {balance: '--', points: '--', coupon: '--'},
        // 我的服务
        service,
        // 订单操作
        orderNavbar,
        // 当前用户待处理的订单数量
        todoCounts: {payment: 0, deliver: 0, received: 0}
      }
    },

    /**
     * 生命周期函数 -- 监听页面显示
     */
    onLoad(options) {},

    /**
     * 生命周期函数 -- 监听页面显示
     */
    onShow(options) {this.onRefreshPage()
    },

    methods: {

      // 刷新页面
      onRefreshPage() {
        // 更新购物车角标
        setCartTabBadge()
        // 判断是否已登录
        this.isLogin = checkLogin()
        // 获取页面数据
        this.getPageData()},

      // 获取页面数据
      getPageData(callback) {
        const app = this
        app.isLoading = true
        Promise.all(&#91;app.getSetting(), app.getUserInfo(), app.getUserAssets(), app.getTodoCounts()])
          .then(result => {
            app.isFirstload = false
            // 初始化我的服务数据
            app.initService()
            // 初始化订单操作数据
            app.initOrderTabbar()
            // 执行回调函数
            callback &amp;&amp; callback()})
          .catch(err => console.log('catch', err))
          .finally(() => app.isLoading = false)
      },

      // 初始化我的服务数据
      async initService() {
        const app = this
        const isShowCustomerBtn = await SettingModel.isShowCustomerBtn()
        const newService = &#91;]
        service.forEach(item => {
          // 默认开启
          item.enabled = true
          // 我的积分
          if (item.id === 'points') {item.name = '我的' + app.setting&#91;SettingKeyEnum.POINTS.value].points_name
          }
          // 企业微信客服
          if (item.id === 'contact' &amp;&amp; !isShowCustomerBtn) {item.enabled = false}
          // 数据角标
          if (item.count != undefined) {item.count = app.todoCounts&#91;item.id]
          }
          newService.push(item)
        })
        app.service = filterModules(newService)
      },

      // 初始化订单操作数据
      initOrderTabbar() {
        const app = this
        const newOrderNavbar = &#91;]
        orderNavbar.forEach(item => {if (item.count != undefined) {item.count = app.todoCounts&#91;item.id]
          }
          newOrderNavbar.push(item)
        })
        app.orderNavbar = newOrderNavbar
      },

      // 获取商城设置
      getSetting() {
        const app = this
        return new Promise((resolve, reject) => {SettingModel.data()
            .then(setting => {
              app.setting = setting
              resolve(setting)
            })
            .catch(reject)
        })
      },

      // 获取当前用户信息
      getUserInfo() {
        const app = this
        return new Promise((resolve, reject) => {!app.isLogin ? resolve(null) : UserApi.info({}, { load: app.isFirstload})
            .then(result => {
              app.userInfo = result.data.userInfo
              resolve(app.userInfo)
            })
            .catch(err => {if (err.result &amp;&amp; err.result.status == 401) {
                app.isLogin = false
                resolve(null)
              } else {reject(err)
              }
            })
        })
      },

      // 获取账户资产
      getUserAssets() {
        const app = this
        return new Promise((resolve, reject) => {!app.isLogin ? resolve(null) : UserApi.assets({}, { load: app.isFirstload})
            .then(result => {
              app.assets = result.data.assets
              resolve(app.assets)
            })
            .catch(err => {if (err.result &amp;&amp; err.result.status == 401) {
                app.isLogin = false
                resolve(null)
              } else {reject(err)
              }
            })
        })
      },

      // 获取当前用户待处理的订单数量
      getTodoCounts() {
        const app = this
        return new Promise((resolve, reject) => {!app.isLogin ? resolve(null) : OrderApi.todoCounts({}, { load: app.isFirstload})
            .then(result => {
              app.todoCounts = result.data.counts
              resolve(app.todoCounts)
            })
            .catch(err => {if (err.result &amp;&amp; err.result.status == 401) {
                app.isLogin = false
                resolve(null)
              } else {reject(err)
              }
            })
        })
      },

      // 跳转到登录页
      handleLogin() {!this.isLogin &amp;&amp; this.$navTo('pages/login/index')
      },

      // 跳转到绑定手机号页面
      handleBindMobile() {this.$navTo('pages/user/bind/index')
      },

      // 跳转到修改个人信息页
      handlePersonal() {this.$navTo('pages/user/personal/index')
      },

      // 退出登录
      handleLogout() {
        const app = this
        uni.showModal({
          title: '友情提示',
          content: '您确定要退出登录吗?',
          success(res) {if (res.confirm) {store.dispatch('Logout', {})
                .then(result => app.onRefreshPage())
            }
          }
        })
      },

      // 跳转到钱包页面
      onTargetWallet() {this.$navTo('pages/wallet/index')
      },

      // 跳转到订单页
      onTargetOrder(item) {this.$navTo('pages/order/index', { dataType: item.id})
      },

      // 跳转到我的积分页面
      onTargetPoints() {this.$navTo('pages/points/log')
      },

      // 跳转到我的优惠券页
      onTargetMyCoupon() {this.$navTo('pages/my-coupon/index')
      },

      // 跳转到服务页面
      handleService({url}) {this.$navTo(url)
      }

    },

    /**
     * 下拉刷新
     */
    onPullDownRefresh() {
      // 获取首页数据
      this.getPageData(() => {uni.stopPullDownRefresh()
      })
    },


  }
&lt;/script>

&lt;style lang="scss" scoped>
  .container {padding-bottom: 60rpx;}

  // 页面头部
  .main-header {
    // background-color: #FBF7EF;
    position: relative;
    width: 100%;
    height: 280rpx;
    background-size: 100% 100%;
    overflow: hidden;
    display: flex;
    align-items: center;
    padding-left: 30rpx;

    .bg-image {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 0;
    }

    .user-info {
      display: flex;
      height: 100rpx;
      z-index: 1;

      .user-content {
        display: flex;
        flex-direction: column;
        justify-content: center;
        margin-left: 30rpx;
        color: #c59a46;

        .nick-name {
          font-size: 34rpx;
          font-weight: bold;
          max-width: 300rpx;
        }

        .mobile {
          margin-top: 15rpx;
          font-size: 28rpx;
        }

        .user-grade {
          align-self: baseline;
          display: flex;
          align-items: center;
          background: #3c3c3c;
          margin-top: 12rpx;
          border-radius: 10rpx;
          padding: 4rpx 12rpx;

          .user-grade_icon .image {
            display: block;
            width: 32rpx;
            height: 32rpx;
          }

          .user-grade_name {
            margin-left: 5rpx;
            font-size: 26rpx;
            color: #EEE0C3;
          }

        }

        .login-tips {
          margin-top: 12rpx;
          font-size: 30rpx;
        }

      }
    }
  }

  // 角标组件
  .item-badge {
    position: absolute;
    top: 0;
    right: 55rpx;
    // background: $main-bg;
    background: #fa2209;
    color: #fff;
    border-radius: 100%;
    min-width: 38rpx;
    height: 38rpx;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 1rpx;
    font-size: 24rpx;
  }

  // 我的钱包
  .my-asset {
    display: flex;
    background: #fff;
    padding: 40rpx 0;

    .asset-right {
      width: 200rpx;
      border-left: 1rpx solid #eee;
    }

    .asset-right-item {
      text-align: center;
      color: #545454;

      .item-icon {font-size: 44rpx;}

      .item-name {
        margin-top: 14rpx;
        font-size: 28rpx;
      }

    }

    .asset-left-item {
      max-width: 183rpx;
      text-align: center;
      color: #666;
      padding: 0 16rpx;

      .item-value {
        font-size: 34rpx;
        color: $main-bg;
      }

      .item-name {
        margin-top: 14rpx;
        font-size: 28rpx;
      }

    }

  }

  // 订单操作
  .order-navbar {
    display: flex;
    margin: 20rpx auto 20rpx auto;
    padding: 20rpx 0 26rpx 0;
    width: 94%;
    box-shadow: 0 1rpx 5rpx 0px rgba(0, 0, 0, 0.05);
    font-size: 30rpx;
    border-radius: 5rpx;
    background: #fff;

    &amp;-item {
      position: relative;
      width: 25%;

      .item-icon {
        text-align: center;
        margin: 0 auto;
        padding: 10rpx 0;
        color: #545454;
        font-size: 44rpx;
      }

      .item-name {
        font-size: 28rpx;
        color: #545454;
        text-align: center;
        margin-right: 10rpx;
      }

    }
  }

  // 我的服务
  .my-service {
    margin: 22rpx auto 22rpx auto;
    padding: 22rpx 0;
    width: 94%;
    box-shadow: 0 1rpx 5rpx 0px rgba(0, 0, 0, 0.05);
    border-radius: 5rpx;
    background: #fff;

    .service-title {
      padding-left: 24rpx;
      margin-bottom: 20rpx;
      font-size: 30rpx;
    }

    .service-content {

      margin-bottom: -20rpx;

      .service-item {
        position: relative;
        width: 25%;
        float: left;
        margin-bottom: 30rpx;

        .item-icon {
          text-align: center;
          margin: 0 auto;
          padding: 14rpx 0;
          color: $main-bg;
          font-size: 44rpx;
        }

        .item-name {
          font-size: 28rpx;
          color: #545454;
          text-align: center;
        }

      }
    }
  }

  // 退出登录
  .my-logout {
    display: flex;
    justify-content: center;
    margin-top: 50rpx;

    .logout-btn {
      width: 60%;
      margin: 0 auto;
      font-size: 28rpx;
      color: #616161;
      border-radius: 20rpx;
      border: 1px solid #dcdcdc;
      padding: 16rpx 0;
      text-align: center;
    }
  }

  // 绑定手机号 样式 1
  .my-mobile {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16rpx 40rpx;
    background: #FCEBD1;

    .info {
      color: #cd8c0c;
      font-size: 28rpx;
    }

    .btn-bind {
      padding: 8rpx 24rpx;
      background-color: #EAB766;
      color: #fff;
      border-radius: 30rpx;
      font-size: 26rpx;
      text-align: center;
    }
  }

  // 绑定手机号 样式 2
  .my-mobile2 {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin: 20rpx auto 20rpx auto;
    padding: 12rpx 40rpx;
    width: 94%;
    box-shadow: 0 1rpx 5rpx 0px rgba(0, 0, 0, 0.05);
    font-size: 30rpx;
    border-radius: 5rpx;
    background: #fff;

    .info {
      // color: #cd8c0c;
      font-size: 26rpx;
    }

    .btn-bind {
      padding: 8rpx 24rpx;
      background-color: #EAB766;
      color: #fff;
      border-radius: 30rpx;
      font-size: 26rpx;
      text-align: center;
    }
  }
&lt;/style></code></pre>
<h2 class="wp-block-heading">三、项目总结</h2>
<p>由于篇幅原因，更多信息和源码可直接联系本人微信（red_tea_v2），代码和服务部署可以提供技术支持，其他问题可直接在文章下面评论。</p>
<figure class="wp-block-image size-large"><img title="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践"
             alt="【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践" loading="lazy" decoding="async" width="751" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG23-751x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-1027"srcset="https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG23-751x1024.jpg 751w, https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG23-220x300.jpg 220w, https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG23-768x1048.jpg 768w, https://www.gaoredu.com/wp-content/uploads/2024/08/WechatIMG23.jpg 950w"sizes="(max-width: 751px) 100vw, 751px" /></figure/></blockquote>]]></description><link>https://blog.gaoredu.com/article/0d35003e-ce48-49c1-8396-2c8cbba40113</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0d35003e-ce48-49c1-8396-2c8cbba40113</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 24 Aug 2024 10:28:56 GMT</pubDate></item><item><title><![CDATA[【JS相关】正则]]></title><description><![CDATA[<h1 id="正则表达式">正则表达式</h1>
<h2 id="1正则表达式基础">1.正则表达式基础</h2>
<h3 id="11-创建正则表达式">1.1 创建正则表达式</h3>
<h4 id="111-使用一个正则表达式字面量">1.1.1 使用一个正则表达式字面量</h4>
<pre><code class="language-js">const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;</code></pre>
<h4 id="112-调用regexp对象的构造函数">1.1.2 调用RegExp对象的构造函数</h4>
<pre><code class="language-js">const regex = new RegExp(pattern, [, flags])</code></pre>
<h4 id="113-特殊字符">1.1.3 特殊字符</h4>
<pre><code class="language-js"> - ^ 匹配输入的开始
 - $ 匹配输入的结束
 - \* 0次或多次  {0，}
 - \+ 1次或多次  {1，}
 - ?
   - 0次或者1次 {0,1}。
   - 用于先行断言
   - 如果紧跟在任何量词 *、 +、? 或 {} 的后面，将会使量词变为非贪婪
     - 对 &quot;123abc&quot; 用 /\d+/ 将会返回 &quot;123&quot;，
     - 用 /\d+?/,那么就只会匹配到 &quot;1&quot;。
 - . 匹配除换行符之外的任何单个字符
 - (x)  匹配 &#39;x&#39; 并且记住匹配项
 - (?:x)  匹配 &#39;x&#39; 但是不记住匹配项
 - x(?=y)  配&#39;x&#39;仅仅当&#39;x&#39;后面跟着&#39;y&#39;.这种叫做正向肯定查找。
 - x(?!y)  匹配&#39;x&#39;仅仅当&#39;x&#39;后面不跟着&#39;y&#39;,这个叫做正向否定查找。
 - x|y  匹配‘x’或者‘y’。
 - {n}  重复n次
 - {n, m}  匹配至少n次，最多m次
 - [xyz]   代表 x 或 y 或 z
 - [^xyz]  不是 x 或 y 或 z
 - \d  数字
 - \D  非数字
 - \s  空白字符，包括空格、制表符、换页符和换行符。
 - \S  非空白字符
 - \w  单词字符（字母、数字或者下划线）  [A-Za-z0-9_]
 - \W  非单字字符。[^A-Za-z0-9_]
 - \3  表示第三个分组
 - \b   词的边界
   - /\bm/匹配“moon”中得‘m’；
 - \B   非单词边界</code></pre>
<h3 id="12-使用正则表达式的方法">1.2 使用正则表达式的方法</h3>
<ul>
<li>exec    一个在字符串中执行查找匹配的RegExp方法，它返回一个数组（未匹配到则返回null）。</li>
<li>test    一个在字符串中测试是否匹配的RegExp方法，它返回true或false。</li>
<li>match    一个在字符串中执行查找匹配的String方法，它返回一个数组或者在未匹配到时返回null。</li>
<li>search    一个在字符串中测试匹配的String方法，它返回匹配到的位置索引，或者在失败时返回-1。</li>
<li>replace    一个在字符串中执行查找匹配的String方法，并且使用替换字符串替换掉匹配到的子字符串。</li>
<li>split    一个使用正则表达式或者一个固定字符串分隔一个字符串，并将分隔后的子字符串存储到数组中的String方法。</li>
</ul>
<h4 id="121-正则对象的三个方法">1.2.1 正则对象的三个方法</h4>
<pre><code class="language-js">        //①test()判断字符串中是否出现某个字符串，返回布尔值
        var re = /abc/;
        var str = &#39;00abc66&#39;;
        console.log(re.test(str));  // true
        //②exec()查找并返回字符串中指定的某个字符串，只匹配一次
        var re = /abc/;
        var str = &#39;a0bc88abc00abc&#39;;
        console.log(re.exec(str));  // [&quot;abc&quot;, index: 6, input: &quot;a0bc88abc00abc&quot;, groups: undefined]
        //③compile()方法用于改变正则匹配的内容
        var re = /ab/;
        var str = &quot;aabcdef&quot;;
        console.log(re.test(str));  //true
        re.compile(/bd/);
        console.log(re.test(str));  //false
        re.compile(&#39;66&#39;);
        console.log(re.test(str));  //false</code></pre>
<h4 id="122-字符串中与正则相关的方法">1.2.2 字符串中与正则相关的方法</h4>
<pre><code class="language-js">        //①search()方法，返回符合条件的字符串首次出现的位置（下标）
        var re = /abc/;
        var str = &#39;00abc66&#39;;
        console.log(str.search(re));        // 2
        //②match()方法，返回查找的结果，如果查询不到返回NULL
        console.log(str.match(re));         // [&quot;abc&quot;, index: 2, input: &quot;00abc66&quot;, groups: undefined]
        //③replace()方法，将匹配到的内容替换成指定内容
        console.log(str.replace(re, &quot;*&quot;));
        //④split()方法，将字符串分割成字符串数组
        console.log(str.split(re));</code></pre>
<h3 id="13-正则表达式子表达式相关">1.3 正则表达式子表达式相关</h3>
<h4 id="131-子表达式">1.3.1 子表达式</h4>
<p>在正则表达式中，通过一对圆括号括起来的内容，我们就称之为“子表达式”。如：var re = /\d(\d)\d/;</p>
<h4 id="132-捕获">1.3.2 捕获</h4>
<p>在正则表达式中，子表达式匹配到相应的内容时，系统会自动捕获这个行为，然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。</p>
<h4 id="133-反向引用">1.3.3 反向引用</h4>
<p>在正则表达式中，我们可以使用\n（n&gt;0，正整数，代表系统中的缓冲区编号）来获取缓冲区中的内容，我们把这个过程就称之为“反向引用”。</p>
<pre><code class="language-js">    var str = &quot;d1122jj7667h6868s9999&quot;;
    //查找AABB型的数字
    console.log(str.match(/(\d)\1(\d)\2/)); //1122
    //查找ABBA型的数字
    console.log(str.match(/(\d)(\d)\2\1/)); //7667
    //查找ABAB型的数字
    console.log(str.match(/(\d)(\d)\1\2/)); //6868
    //查找四个连续相同的数字
    console.log(str.match(/(\d)\1\1\1/));   //9999</code></pre>
<h3 id="14-限定符">1.4 限定符</h3>
<blockquote>
<p>[!NOTE]
限定符可以指定正则表达式的一个给定字符必须要出现多少次才能满足匹配。</p>
</blockquote>
<pre><code class="language-html">    *：匹配前面的子表达式零次或多次，0到多
    +：匹配前面的子表达式一次或多次，1到多
    ?：匹配前面的子表达式零次或一次，0或1
    {n}：匹配确定的 n 次 
    {n,}：至少匹配 n 次 
    {n,m}：最少匹配 n 次且最多匹配 m 次</code></pre>
<blockquote>
<p>[!WARNING]
注意：针对于{n,m}，正则在匹配到一个符合多种次数的字符串时，优先匹配次数多的，即能匹配到m次就不会匹配n次，这就是贪婪模式（默认）。</p>
</blockquote>
<blockquote>
<p>如果在其后加?即{n,m}?则会更改为非贪婪模式（惰性模式），则此时正则优先匹配n次。</p>
</blockquote>
<pre><code class="language-js">    var str = &quot;aa1a22a333a6a8a&quot;;
    console.log(str.match(/a\d*/));      //a
    console.log(str.match(/a\d+/));      //a1
    console.log(str.match(/a\d?/));      //a
    console.log(str.match(/a\d{3}/));    //a333
    console.log(str.match(/a\d{2,}/));   //a22
    console.log(str.match(/a\d{1,3}/));  //a1
    console.log(str.match(/a\d{1,3}?/)); //a1

    //贪婪模式加深理解，案例如下：
    //贪婪模式下最开始的&#39;a2就符合条件&#39;，但是它会返回&#39;a22&#39;
    //注意：它是在遇到一个同时符合多个次数条件的字符串时，取符合次数多字符串
    var str = &quot;a22aa1a333a6a8a&quot;;
    console.log(str.match(/a\d{1,3}/));   //a22
    console.log(str.match(/a\d{1,3}/g));  //a22 a1 a333 a6 a8
    console.log(str.match(/a\d{1,3}?/));  //a2
    console.log(str.match(/a\d{1,3}?/g)); //a2 a1 a3 a6 a8</code></pre>
<h3 id="15-定位符">1.5 定位符</h3>
<blockquote>
<p>[!NOTE]
定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。</p>
</blockquote>
<pre><code class="language-js">^ (脱字符)：匹配输入字符串的开始位置
$：匹配输入字符串的结束位置
\b：匹配一个单词边界
\B：匹配非单词边界</code></pre>
<h3 id="16-正则表达式的匹配模式（修饰符）">1.6 正则表达式的匹配模式（修饰符）</h3>
<blockquote>
<p>[!NOTE]
表示正则匹配的附加规则，放在正则模式的最尾部。修饰符可以单个使用，也可以多个一起使用。</p>
</blockquote>
<ul>
<li>①g全局匹配，找到所有匹配，而不是在第一个匹配后停止</li>
<li>②i匹配全部大小写</li>
<li>③m多行，将开始和结束字符（^和$）视为在多行上工作（也就是，分别匹配每一行的开始和结束（由\n或\r分割），而不只是只匹配整个输入字符串的最开始和最末尾处。</li>
<li>④s与m相反，单行匹配<pre><code class="language-js">  var re = /^[a-z]/gim;   //可组合使用</code></pre>
</li>
</ul>
<h3 id="17-转义字符">1.7 转义字符</h3>
<blockquote>
<p>[!NOTE]
因为在正则表达式中 . + \ 等属于表达式的一部分，但有时也需要匹配这些特殊字符，所以，需要使用反斜杠对特殊字符进行转义。</p>
</blockquote>
<pre><code class="language-js">   需要转义的字符：
   点号.
   小括号()
   中括号[]
   左斜杠/
   右斜杠\
   选择匹配符|

   * 
   ?
   {}
   + 
   $
   ^</code></pre>
<h2 id="2-正则练习题">2. 正则练习题</h2>
<h3 id="21-匹配结尾的数字">2.1 匹配结尾的数字</h3>
<pre><code class="language-js">/\d+$/g</code></pre>
<h3 id="22-统计空格个数">2.2 统计空格个数</h3>
<p>字符串内如有空格，但是空格的数量可能不一致，通过正则将空格的个数统一变为一个。</p>
<pre><code class="language-js">let reg = /\s+/g
str.replace(reg, &quot; &quot;);</code></pre>
<h3 id="23-判断字符串是不是由数字组成">2.3 判断字符串是不是由数字组成</h3>
<pre><code class="language-js">str.test(/^\d+$/);</code></pre>
<h3 id="24-电话号码正则">2.4 电话号码正则</h3>
<ul>
<li>区号必填为3-4位的数字</li>
<li>区号之后用“-”与电话号码连接电话号码为7-8位的数字</li>
<li>分机号码为3-4位的数字，非必填，但若填写则以“-”与电话号码相连接<pre><code class="language-js">/^\d{3,4}-\d{7,8}(-\d{3,4})?$/</code></pre>
</li>
</ul>
<h3 id="25-手机号码正则表达式">2.5 手机号码正则表达式</h3>
<p>正则验证手机号，忽略前面的0，支持130-139，150-159。忽略前面0之后判断它是11位的。</p>
<pre><code class="language-js">/^0*1(3|5)\d{9}$/</code></pre>
<h3 id="26-使用正则表达式实现删除字符串中的空格">2.6 使用正则表达式实现删除字符串中的空格</h3>
<pre><code class="language-js">funtion trim(str) {
  let reg = /^\s+|\s+$/g
  return str.replace(reg, &#39;&#39;);
}</code></pre>
<h3 id="27-限制文本框只能输入数字和两位小数点等等">2.7 限制文本框只能输入数字和两位小数点等等</h3>
<pre><code class="language-js">/^\d*\.\d{0,2}$/</code></pre>
<h3 id="28-只能输入小写的英文字母和小数点，和冒号，正反斜杠：">2.8 只能输入小写的英文字母和小数点，和冒号，正反斜杠(：./)</h3>
<pre><code class="language-js">/^[a-z\.:\/\\]*$/</code></pre>
<h3 id="29-替换小数点前内容为指定内容">2.9 替换小数点前内容为指定内容</h3>
<blockquote>
<p>例如：infomarket.php?id=197 替换为 test.php?id=197</p>
</blockquote>
<pre><code class="language-js">var reg = /^[^\.]+/;
var target = &#39;---------&#39;;
str = str.replace(reg, target)</code></pre>
<h3 id="210-只匹配中文的正则表达式">2.10 只匹配中文的正则表达式</h3>
<pre><code class="language-js">/[\u4E00-\u9FA5\uf900-\ufa2d]/ig</code></pre>
<h3 id="211-返回字符串的中文字符个数">2.11 返回字符串的中文字符个数</h3>
<blockquote>
<p>先去掉非中文字符，再返回length属性。</p>
</blockquote>
<pre><code class="language-js">function cLength(str){
  var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
  //匹配非中文的正则表达式
  var temp = str.replace(reg,&#39;&#39;);
  return temp.length;
}</code></pre>
<h3 id="212-正则表达式取得匹配ip地址前三段">2.12 正则表达式取得匹配IP地址前三段</h3>
<blockquote>
<p>只要匹配掉最后一段并且替换为空字符串就行了</p>
</blockquote>
<pre><code class="language-js">function getPreThrstr(str) {
  let reg = /\.\d{1,3}$/;
  return str.replace(reg,&#39;&#39;);
}</code></pre>
<h3 id="213-匹配ul标签之间的内容">2.13 匹配<strong>ul</strong>标签之间的内容</h3>
<pre><code class="language-js">/&lt;ul&gt;[\s\S]+?&lt;/ul&gt;/i</code></pre>
<h3 id="214-用正则表达式获得文件名">2.14 用正则表达式获得文件名</h3>
<blockquote>
<p>c:\images\tupian\006.jpg</p>
</blockquote>
<p>可能是直接在盘符根目录下，也可能在好几层目录下，要求替换到只剩文件名。
首先匹配非左右斜线字符0或多个，然后是左右斜线一个或者多个。</p>
<pre><code class="language-js">function getFileName(str){
  var reg = /[^\\\/]*[\\\/]+/g;
  // xxx\ 或是 xxx/
  str = str.replace(reg,&#39;&#39;);
  return str;
}</code></pre>
<h3 id="215-绝对路径变相对路径">2.15 绝对路径变相对路径</h3>
<blockquote>
<p>&quot;<a href="http://23.123.22.12/image/somepic.gif&quot;%E8%BD%AC%E6%8D%A2%E4%B8%BA%EF%BC%9A&quot;/image/somepic.gif&quot;">http://23.123.22.12/image/somepic.gif&quot;转换为：&quot;/image/somepic.gif&quot;</a></p>
</blockquote>
<pre><code class="language-js">var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,&quot;&quot;);</code></pre>
<h3 id="216-用户名正则">2.16 用户名正则</h3>
<blockquote>
<p>用于用户名注册，，用户名只 能用 中文、英文、数字、下划线、4-16个字符。</p>
</blockquote>
<pre><code class="language-js">/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/</code></pre>
<h3 id="217-匹配英文地址">2.17 匹配英文地址</h3>
<blockquote>
<p>规则如下:
包含 &quot;点&quot;, &quot;字母&quot;,&quot;空格&quot;,&quot;逗号&quot;,&quot;数字&quot;，但开头和结尾不能是除字母外任何字符。</p>
</blockquote>
<pre><code class="language-js">/^[a-zA-Z][\.a-zA-Z,0-9]*[a-zA-Z]$/</code></pre>
<h3 id="218-正则匹配价格">2.18 正则匹配价格</h3>
<p>开头数字若干位，可能有一个小数点，小数点后面可以有两位数字。</p>
<pre><code class="language-js">/^\d+(\.\d{2})?$/</code></pre>
<h3 id="219-身份证号码的匹配">2.19 身份证号码的匹配</h3>
<p>身份证号码可以是15位或者是18位，其中最后一位可以是X。其它全是数字</p>
<pre><code class="language-js">/^(\d{14}|\d{17})(X|x)$/</code></pre>
<h3 id="220-单词首字母大写">2.20 单词首字母大写</h3>
<blockquote>
<p>每单词首字大写，其他小写。如blue idea转换为Blue Idea，BLUE IDEA也转换为Blue Idea</p>
</blockquote>
<pre><code class="language-js">function firstCharUpper(str) {
  str = str.toLowerCase();
  let reg = /\b(\w)/g;
  return str.replace(reg, m =&gt; m.toUpperCase());
}</code></pre>
<h3 id="221-正则验证日期格式">2.21 正则验证日期格式</h3>
<blockquote>
<p>yyyy-mm-dd格式, 4位数字，横线，1或者2位数字，再横线，最后又是1或者2位数字。</p>
</blockquote>
<pre><code class="language-js">/^\d{4}-\d{1,2}-\d{1,2}$/</code></pre>
<h3 id="222-去掉文件的后缀名">2.22 去掉文件的后缀名</h3>
<blockquote>
<p><a href="http://www.abc.com/dc/fda.asp">www.abc.com/dc/fda.asp</a> 变为 <a href="http://www.abc.com/dc/fda">www.abc.com/dc/fda</a></p>
</blockquote>
<pre><code class="language-js">function removeExp(str) {
  return str.replace(/\.\w$/,&#39;&#39;)
}</code></pre>
<h3 id="223-验证邮箱的正则表达式">2.23 验证邮箱的正则表达式</h3>
<blockquote>
<p>开始必须是一个或者多个单词字符或者是-，加上@，然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合，可以有一个或者多个组合。</p>
</blockquote>
<pre><code class="language-js">/^[\w-]+@\w+\.\w+$/</code></pre>
<h3 id="224-正则判断标签是否闭合">2.24 正则判断标签是否闭合</h3>
<blockquote>
<p>标签可能有两种方式闭合，自闭和或者对称闭合的方式。</p>
</blockquote>
<pre><code class="language-js">/&lt;([a-z]+)(\s*\w*?\s*=\s*&quot;.+?&quot;)*(\s*?&gt;[\s\S]*?(&lt;\/\1&gt;)+|\s*\/&gt;)/i</code></pre>
<h3 id="225-正则判断是否为数字与字母的混合">2.25 正则判断是否为数字与字母的混合</h3>
<blockquote>
<p>不能小于12位，且必须为字母和数字的混合</p>
</blockquote>
<pre><code class="language-js">/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i</code></pre>
<h3 id="226-将阿拉伯数字替换为中文大写形式">2.26 将阿拉伯数字替换为中文大写形式</h3>
<pre><code class="language-js">function replaceReg(reg,str){
  let arr=[&quot;零&quot;,&quot;壹&quot;,&quot;贰&quot;,&quot;叁&quot;,&quot;肆&quot;,&quot;伍&quot;,&quot;陆&quot;,&quot;柒&quot;,&quot;捌&quot;,&quot;玖&quot;];
  let reg = /\d/g;
  return str.replace(reg,function(m){return arr[m];})
}</code></pre>
<h3 id="227-去掉标签的所有属性">2.27 去掉标签的所有属性</h3>
<pre><code class="language-html">&lt;td style=&quot;width: 23px; height: 26px;&quot; align=&quot;left&quot;&gt;***&lt;/td&gt;
变成没有任何属性的
&lt;td&gt;***&lt;/td&gt;</code></pre>
<blockquote>
<p>思路：非捕获匹配属性，捕获匹配标签，使用捕获结果替换掉字符串。正则如下：</p>
</blockquote>
<pre><code class="language-js">/(&lt;td)\s(?:\s*\w*?\s*=\s*&quot;.+?&quot;)*?\s*?(&gt;)/</code></pre>
<h3 id="228-驼峰表示">2.28 驼峰表示</h3>
<pre><code class="language-js">String.prototype.camelCase = function () {
        // .*?是非贪婪的匹配，点可以匹配任意字符，星号是前边的字符有0-n个均匹配，问号是则是0-1；
        // (^\w{1}): 用于匹配第一个首字母
        // (.*)：用于匹配任意个的前面的字符，.表示的就是任意字符

        // - param 1: 匹配到的字符串
        // - param 2: 匹配的的子字符串
        // - param 3: 匹配的子字符串
        // - param的位置
        // - param 5: 原始字符串 4: 匹配到的字符串在字符串中

        return this.replace(/(^\w{1})(.*)/g, function (match, g1, g2) {
            return g1.toUpperCase() + g2.toLowerCase();
        });
    }</code></pre>
<h3 id="229-模板字符串">2.29 模板字符串</h3>
<pre><code class="language-js">// str = &#39;name: @(name), age:@(age)&#39;
       // data = {name : &#39;xiugang&#39;, age : 18}
       /**
        * 实现一个简单的数据绑定
        * @param str
        * @param data
        * @return {*}
        */
       String.prototype.formateString = function (data) {
           return this.replace(/@\((\w+)\)/g, function (match, key) {
               // 注意这里找到的值必须返回出去(如果是undefined，就是没有数据)
               // 注意：判断一个值的类型是不是undefined，可以通过typeof判断
               console.log(typeof data[key] === &#39;undefined&#39;);
               return data[key] === &#39;undefined&#39; ? &#39;&#39; : data[key];
           });

       }</code></pre>
<h3 id="230-去掉两边的空格">2.30 去掉两边的空格</h3>
<pre><code class="language-js">/**
        * 去掉两边的空格
        * @param str
        * @return {*}
        */
       String.prototype.trim = function () {
           return this.replace(/(^\s*)|(\s*$)/g, &#39;&#39;);
       }</code></pre>
<h3 id="231-获取url参数-使用replace保存到一个数组里面，然后从数组里面取出数据">2.31 获取url参数: 使用replace保存到一个数组里面，然后从数组里面取出数据</h3>
<pre><code class="language-js">&#39;http://www.189dg.com/ajax/sms_query.ashx?undefined&amp;undefined&amp;undefined-06-27&amp;undefined-06-27&#39;
 url.replace(/(\w+)=(\w+)/g, function(a, b, c){
   console.log(a, b, c)
 })
action=smsdetail action smsdetail
sid=22 sid 22
stime=2014 stime 2014
etime=2014 etime 2014


// 封装为一个函数
var url = &quot;http://127.0.0.1/e/action/ShowInfo.php?classid=9&amp;id=2&quot;;
function parse_url(_url){
 var pattern = /(\w+)=(\w+)/ig;
 var parames = {};
 url.replace(pattern, function(a, b, c){
   parames[b] = c;
 });
 return parames;
}
var parames = parse_url(url);
alert(parames[&#39;classid&#39;] + &quot;, &quot; + parames[&#39;id&#39;]);</code></pre>
]]></description><link>https://blog.gaoredu.com/article/f2c8e5c7-0f24-4631-a161-7e15c6def73f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f2c8e5c7-0f24-4631-a161-7e15c6def73f</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 23 Aug 2024 17:39:40 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】数组去重]]></title><description><![CDATA[<h1 id="数组去重">数组去重</h1>
<pre><code class="language-js">// 数组去重方法总结
// v1. 双层循环去重
function unique(arr) {
    let res = [];
    // 外层循环遍历原始数组
    for (var i = 0, arrLen = arr.length; i &lt; arrLen; i++) {
        // 内层循环遍历res数组
        for (var j = 0, resLen = res.length; j &lt; resLen; j++) {
            if (arr[i] === res[j]) {
                break;
            }
        }
        // 关键点：遍历完毕之后，如果arr[i]是唯一的，那么必定满足j===resLen
        if (j === resLen) {
            res.push(arr[i]);
        }
    }
    return res;
}
// 优点： 兼容性好


// v2. indexOf去重
function unique(arr) {
    var res = [];
    for (var i = 0, len = arr.length; i &lt; len; i++) {
        var cur = arr[i];
        if (res.indexOf(cur) === -1) {
            res.push(cur);
        }
    }
    return res;
}
// 优点：使用indexOf可以简化内层循环


// v3. 先排序，然后去重
function unique(arr){
    var res = [];
    // 排序之后的数组
    var sortedArr = arr.concat().sort();
    // seen表示的是当前的比较项
    var seen;
    // v1
    /*for (var i = 0, len = sortedArr.length; i &lt; len; i++) {
        // 从第一个元素开始，比较相邻的元素是否相同
        if (!i  || seen !== sortedArr[i]) {
            res.push(sortedArr[i]);
        }
        seen = sortedArr[i];
    }*/

    // v2
    for (var i = 0, len = sortedArr.length; i &lt; len; i++) {
        // 最后一个和undefined比较
        if (sortedArr[i] !== sortedArr[i+1]) {
            res.push(sortedArr[i]);
        }
    }
    return res;

}

// v4. 封装一个unique的API【重点掌握】
function unique(arr, isSorted){
    var res = [];
    var seen = [];

    for (var i = 0, len = arr.length; i &lt; len; i++) {
        var value = arr[i];
        // 根据是否排序选择去重方式
        if (isSorted) {
            // 这个排序方法要学会
            if (!i || seen !== value) {
                res.push(value);
            }
            seen = value;
        }
        else if (res.indexOf(value) === -1) {
            res.push(value);
        }
    }
    return res;
}

// TODO: 如何把字母的大小写视为一致，比如&#39;a&#39;和&#39;A&#39;，保留一个就可以了?
// v5: 去重API增强
/**
 * 去重API增强
 * @param arr 表示要去重的数组，必填
 * @param isSorted 表示函数传入的数组是否已排过序，如果为 true，将会采用更快的方法进行去重
 * @param iteratee 传入一个函数，可以对每个元素进行重新的计算，然后根据处理的结果进行去重
 * @return {Array}
 */
function unique(arr, isSorted, iteratee){
    var res = [];
    var seen = [];

    for (var i = 0, len = arr.length; i &lt; len; i++) {
        var value = arr[i];
        // 处理iteratee参数
        var computed = iteratee ? iteratee(value, i, arr) : value;
        if (isSorted) {
            if (!i || seen !== value) {
                res.push(value);
            }
            // 更新为最新的computed数据(是经过iteratee这个函数处理之后的结果)
            seen = computed;
        }
        else if (iteratee) {
            // 处理iteratee的核心逻辑
            if (seen.indexOf(computed) === -1) {
                // seen里面放的是转换处理之后的数值
                seen.push(computed);
                // 结果里面放入的始终是数组的原始值，而不是经过转换之后的数值
                res.push(value);
            }
        } else if (res.indexOf(value) === -1) {
            // 常规去重方法
            res.push(value);
        }
    }
    return res;
}


// TODO: 使用filter函数简化外层循环？
// v6. filter简化去重逻辑
// 使用indexOf简化
function unique(arr){
    var res = arr.filter(function (item, index, self) {
        // indexOf实际上找到的是第一次出现的位置
        return self.indexOf(item) === index;
    });
    return res;
}

// 使用排序去重的方法
function unique(arr) {
    return arr.concat().sort().filter(function (item, index, self) {
        // 后面的一项和前面的项进行比较
        return !index || item !== self[index - 1];
    });
}


// v7. 使用Object键值对去重(推荐使用，可以去重所有的数据类型)
function unique(arr) {
    var obj = {};
    var res =  arr.filter(function (item) {
        // 问题1： 无法区分1和&#39;1&#39;
        // return obj.hasOwnProperty(item) ? false : (obj[item] = true);


        // 问题2: 无法区分{value: 1}和{value: 2}
        // { number1: true,
        //   stringa: true,
        //   stringA: true,
        //   number2: true,
        //   stringb: true,
        //   stringc: true,
        //   number3: true }
        // return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true);


        // 最终解决方案：使用JSON.stringfy, 先把对象序列化处理
        let temp = typeof item + JSON.stringify(item);
        return obj.hasOwnProperty(temp) ? false : (obj[temp] = true);
    });
    console.log(&#39;obj now:&#39;, obj)
    return res;
}


// v8: ES6去重大法
function unique(arr){
    return Array.from(new Set(arr));
}
// 代码简化1
function unique(arr){
    return [...new Set(arr)];
}
// 代码简化2
var unique = (a) =&gt; [...new Set(a)];

// 使用Map去重
function unique(arr){
    const seen = new Map();
    return arr.filter(a =&gt; !seen.has(a) &amp;&amp; seen.set(a, 1));
}



console.log(unique([1, 2, 3, 2, &#39;1&#39;]))
console.log(unique([1, &#39;1&#39;, 2, 3], true))
console.log(unique([1, 1, &#39;a&#39;, &#39;A&#39;, 2, &#39;b&#39;, &#39;c&#39;, 3, &#39;1&#39;, {value : 1}, {value: 2}, {value: 1}], false, function (item, index, arr) {
    return typeof item === &#39;string&#39; ? item.toLowerCase() : item;
}))

var array = [1, 1, &#39;1&#39;, &#39;1&#39;, null, null, undefined, undefined, new String(&#39;1&#39;), new String(&#39;1&#39;), /a/, /a/, NaN, NaN];
console.log(unique(array));
</code></pre>
]]></description><link>https://blog.gaoredu.com/article/bc7d4c3a-e0e7-4b29-ab3f-7e8879f44c0b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bc7d4c3a-e0e7-4b29-ab3f-7e8879f44c0b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 23 Aug 2024 07:23:32 GMT</pubDate></item><item><title><![CDATA[【NodeJS相关】中间件]]></title><description><![CDATA[<h1 id="nodejs-中间件">NOdeJS 中间件</h1>
<h2 id="1-中间件到底是个什么东西呢？">1. 中间件到底是个什么东西呢？</h2>
<blockquote>
<p>[!NOTE]
中间件其是一个函数，在响应发送之前对请求进行一些操作</p>
</blockquote>
<p><img src="../../img/node-%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%A8%A1%E5%9E%8B.png" alt="中间件模型"></p>
<pre><code class="language-js">    function middleware(req,res,next){
        // 做该干的事

        // 做完后调用下一个函数
        next();
    }</code></pre>
<p>这个函数有些不太一样，它还有一个next参数，而这个next也是一个函数，它表示函数数组中的下一个函数</p>
<h2 id="2-函数数组又是什么呢">2. 函数数组又是什么呢?</h2>
<blockquote>
<p>[!NOTE]
express内部维护一个函数数组，这个函数数组表示在发出响应之前要执行的所有函数，也就是中间件数组</p>
</blockquote>
<p>使用app.use(fn)后，传进来的fn就会被扔到这个数组里，执行完毕后调用next()方法执行函数数组里的下一个函数，如果没有调用next()的话，就不会调用下一个函数了，也就是说调用就会被终止</p>
<h2 id="3-如何实现一个中间件呢？">3. 如何实现一个中间件呢？</h2>
<pre><code class="language-js">    function express() {
      // 函数数组用于存放所有的中间件函数
      let fns = [];

      let app = function(req, res) {
        let i = 0;

        function next() {
          // 取出数组中的下一个函数
          let task = fns[i++];
          // 如果函数存在的u啊
          if (task) {
              // 就先去执行这个用户自定义的函数里面的业务逻辑(每次把当前的next继续向后传递)
              task(req, res, next);
          }
        }

        // 用户首次调用的执行第一个
        next();
      }

      // 使用use的时候就把用户指定的这个函数放入到一个函数数组里面去
      app.use = function(task) {
        fns.push(task);
      }

      return app;
    }</code></pre>
<h2 id="4-模拟实现一个异步按顺序执行的函数？（面试重点）">4. 模拟实现一个异步按顺序执行的函数？（面试重点）</h2>
<pre><code class="language-js">    function fn1(next) {
      next();
    }

    function fn2(next) {
      next();
    }

    function fn3(next) {
      next();
    }


    // 类似于一个异步的迭代器
    function nextRegister(...tasks) {
      let i = 0;


      function next() {
        let task = tasks[i];
        if (!task || typeof task !== &#39;function&#39;) {
            return ;
        }
        task(next);
      }

      // 第一次调用
      next();
    }

    // 开始注册三个异步函数
    nextRegister(fn1, fn2, fn3);</code></pre>
<h2 id="5-描述一下express或者koa的技术架构？">5. 描述一下express或者koa的技术架构？</h2>
<blockquote>
<p>[!NOTE]
关键在于解释清楚对路由中间件的理解，可以以koa的洋葱模型讲解为例。</p>
</blockquote>
<p><img src="../../img/koa-%E6%B4%8B%E8%91%B1%E6%A8%A1%E5%9E%8B.jpg" alt="洋葱模型"></p>
]]></description><link>https://blog.gaoredu.com/article/f646b6cb-dcf7-4435-80ca-151d676ae0d9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f646b6cb-dcf7-4435-80ca-151d676ae0d9</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 18 Aug 2024 14:05:41 GMT</pubDate></item><item><title><![CDATA[【前端面试题】移动APP开发]]></title><description><![CDATA[<h1 id="移动web开发面试题">移动Web开发面试题</h1>
<ol>
<li>如何实现移动端适配？</li>
<li>移动端300ms延迟和解决方法？</li>
<li>移动端点击穿透事件的原因和解决方法？</li>
<li>移动web开发现有的解决方案有哪些？</li>
<li>移动端常用类库及优缺点？</li>
<li>Zepto库和JQ区别？</li>
<li>移动端最小触控区域是多大？</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/f3750f47-d6a7-4217-a185-e0defc2c3df0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f3750f47-d6a7-4217-a185-e0defc2c3df0</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 16 Aug 2024 12:37:57 GMT</pubDate></item><item><title><![CDATA[【JS相关】JS基础知识]]></title><description><![CDATA[<h1 id="js基础知识">JS基础知识</h1>
<h2 id="1----变量类型和计算">1    变量类型和计算</h2>
<h3 id="11----值类型和引用类型的区别？">1.1    值类型和引用类型的区别？</h3>
<ol>
<li>值类型：每个变量都会存储各自的值。不会相互影响</li>
<li>引用类型：不同变量的指针执行了同一个对象（数组，对象，函数）</li>
</ol>
<h3 id="12----typeof可以及检测的数据类型有哪些？">1.2    typeof可以及检测的数据类型有哪些？</h3>
<blockquote>
<p>[!NOTE] </p>
<ul>
<li>基本数据类型：Undefined null bool string number</li>
<li>关键点：typeof只能区分值类型，不能区分引用类型</li>
</ul>
</blockquote>
<ol>
<li>JS中的基本数据类型：null, undefined, bool, string, number（typeof可以区分除了null以外的四种值类型）</li>
<li>typeof 6种类型：Object({},[],null), Undefined, Boolean, Number, Function, String</li>
<li>typeof可以区分值类型，typeof null = Object</li>
</ol>
<h3 id="13----js中和的区别？">1.3    JS中===和==的区别？</h3>
<h4 id="131-区别">1.3.1 区别?</h4>
<p>== 会进行强制类型转换之后再比较，=== 不会进行强制类型转换的</p>
<h4 id="132-应用场景">1.3.2 应用场景?</h4>
<ol>
<li>（用于判断对象属性是否存在）：if (obj == null)  ===&gt;&gt;&gt;  等价于if (obj == null || obj == undefined),可以简化代码，其他情形都使用===进行比较</li>
<li>用于判断函数的参数是否存在： function(a, b){ if(a == null) { // ... }}</li>
<li>对于函数内部或者是一个对象的参数进行判断只会出现undefined， 而不会报错（慎用）</li>
</ol>
<h4 id="133-其他">1.3.3 其他?</h4>
<p>js中类型转换为false的有哪些(6种)：null, undefined, NaN, &#39;&#39;, false, 0</p>
<h2 id="14----js中的内置函数有哪些？">1.4    JS中的内置函数有哪些？</h2>
<blockquote>
<p>[!NOTE]    </p>
<ul>
<li>内置函数： Object  Array Boolean Number String Function Date RegExp Error</li>
<li>内置对象：Math, JSON</li>
</ul>
</blockquote>
<h2 id="2-原型和原型链">2 原型和原型链</h2>
<h3 id="21----原型链的5条规则">2.1    原型链的5条规则</h3>
<ol>
<li>所有的引用类型（数组，对象，函数），都是具有对象特性的，即可以自由扩展属性（除了null以外）</li>
<li>所有的引用类型（数组、对象、函数），都有一个<strong>proto</strong> 属性（隐式原型），这个属性的值是一个普通对象</li>
<li>所有的函数，都有一个prototype属性（显式原型），这个属性值是一个普通的对象</li>
<li>所有的引用类型（数组、对象、函数），<strong>proto</strong>的属性值指向（完全相等）它的构造函数的“prototype”的属性值</li>
<li>当试图得到一个对象的某一个属性的时候，如果一个对象本身没有这个属性的话，就会去它的<strong>proto</strong>( 也就是它的构造函数中去寻找这个属性)</li>
</ol>
<h3 id="22----js中寻找对象属性的过程">2.2    JS中寻找对象属性的过程</h3>
<ol>
<li>当一个对象没有这个toString()这个属性的时候，就回去自己的隐式原型<strong>proto</strong>中去寻找这个属性，也就是去自己额构造函数的显示原型prototype中寻找这个属性（对象自身的隐式原型就是他的构造函数的显式原型）</li>
<li>发现FOO.prototype中也没有这个toString属性，这也是一个对象，name就去这个对象{}的<strong>proto</strong>中寻找toString()这个属性</li>
</ol>
<h3 id="23----instanceof的作用？">2.3    instanceof的作用？</h3>
<blockquote>
<p>是用于判断【引用类型】属于哪个【构造函数】的方法
[!NOTE]
总结：f.<strong>proto</strong> 一层一层向上寻找，能否找到FOO.prototype，找到为true，否则为false</p>
</blockquote>
<h3 id="24----写一个原型继承的例子">2.4    写一个原型继承的例子</h3>
<pre><code class="language-js">/**
     * 动物类
     * @constructor
     * */
    function Animal (name){
        this.name = name;
        this.eat = function () {
            console.log(&#39;My name is &#39;, name, &#39; I am eating Foods…………&#39;);
        }
    }

    /**
     * 小狗类
     * @constructor
     */
    function Dog(){
        this.bark = function () {
            console.log(&quot;I am a dog, I am barking……&quot;);
        }
    }

    // 如何让这个小狗继承这个Animal的属性呢？
    // 实现思路：每一个函数都有一个prototype属性，这个属性值是一个普通的对象
    Dog.prototype = new Animal();
    var dog = new Dog();
    // 这个小狗有eat() 这个属性吗？发现自身没有，那么就会去dog这个对象的__proto__里面去寻找，也就是他的构造函数Dog的prototype上面去寻找
    // 发现这个对象Dog构造函数的prototype的值是一个对象new Animal(), 这个对象里面是有eat这个属性的，因此就找到了
    dog.eat(); // My name is  undefined  I am eating Foods…………
    console.log(dog.__proto__ === Dog.prototype);       // tru</code></pre>
<h3 id="25----描述一下new一个对象的过程">2.5    描述一下new一个对象的过程</h3>
<blockquote>
<p>[!NOTE]    </p>
<ol>
<li>创建一个新对象</li>
<li>this指向这个新对象</li>
<li>执行代码（对this赋值）</li>
<li>返回this</li>
</ol>
</blockquote>
<pre><code class="language-js">  // v1
  function objectFactory() {
      var obj = new Object(),
          // 因为 shift 会修改原数组，所以 arguments 会被去除第一个参数
          Constructor = [].shift.call(arguments);     // 拿到伪数组中的第一个参数
      // 取出参数中的第一个参数，就是我们要传入的构造函数，建立继承关系
      obj.__proto__ = Constructor.prototype;
      Constructor.apply(obj, arguments);
      return obj;
  }

  // v2 : 还需要判断返回的值是不是一个对象，如果是一个对象，我们就返回这个对象，如果没有，我们该返回什么就返回什么。
  function objectFactory() {
      var obj = new Object(),
          Constructor = [].shift.call(arguments);
      // 建立继承关系(二者之间的关系)
      obj.__proto__ = Constructor.prototype;
      // 开始执行这个构造函数
      var ret = Constructor.apply(obj, arguments);
      // 看一下构造函数的返回值，是对象还是一个基本数据类型?
      return typeof ret === &#39;object&#39; ? ret : obj;
  }


  // v4：Object.create的原理
    // var obj = Object.create(Constructor.prototype);
    // 等价于：
    // var obj = new Object();
    // obj.__proto__ = Constructor.prototype;
    const _new = function () {
        var Constructor = [].shift.call(arguments);
        // 1. 创建一个对象，这个对象要继承与构造函数的原型对象
        var obj = Object.create(Constructor.prototype);
        // 2. 执行这个构造函数
        var ret = Constructor.apply(obj, arguments);
        return typeof ret === &#39;object&#39; ? ret || obj : obj;
    }

    // v5: 实现一个自己的new构造函数
    const _new = function() {
        // 从Object.prototype上克隆一个对象 
        var obj = new Object();
        // 取出来外部传入的构造器
        var Constructor = [].shift.call(arguments);

        // 使用一个中间的函数来维护原型的关系
        var F = function(){};
        F.prototype = Constructor.prototype;
        obj = new F();

        // 开始执行这个构造函数
        var res = Constructor.apply(obj, arguments);
        // 确保构造器总是返回一个对象(使用res || obj 的方式来防止返回null参数)
        return typeof res === &#39;object&#39; ? res || obj : obj;
    }</code></pre>
<h3 id="26----zepto或其他框架中是如何实现原型链的？">2.6    zepto或其他框架中是如何实现原型链的？</h3>
<pre><code class="language-js">var Zepto = (function(){
    var $,
        zepto = {}

    // ...省略N行代码...

    zepto.Z = function(dom, selector) {
      dom = dom || []
      dom.__proto__ = $.fn
      dom.selector = selector || &#39;&#39;
      return dom
    }

    zepto.init = function(selector, context) {
        var dom

        // 针对参数情况，分别对dom赋值

        // 最终调用 zepto.Z 返回的数据
        return zepto.Z(dom, selector)
    }

    $ = function(selector, context){
        return zepto.init(selector, context)
    }

    $.fn = {
        // 里面有若干个工具函数
    }

    // ...省略N行代码...

    return $
})()

window.Zepto = Zepto
window.$ === undefined &amp;&amp; (window.$ = Zepto)</code></pre>
<h2 id="3----作用域和闭包">3    作用域和闭包</h2>
<h3 id="31----函数表达式和函数声明的区别？">3.1    函数表达式和函数声明的区别？</h3>
<ol>
<li>函数声明中函数名是必须的，函数表达式中则是可选的。</li>
<li>用函数声明定义的函数，函数可以在函数声明之前调用，而用函数表达式定义的函数则只能在声明之后调用。</li>
</ol>
<pre><code class="language-js">var handsome=&#39;handsome&#39;;
function handsomeToUgly(){
    alert(handsome);
    var handsome=&#39;ugly&#39;;
    alert(handsome);
}
handsomeToUgly();

// 正常的解析编译流程如下：
var handsome=&#39;handsome&#39;;
function handsomeToUgly(){
    var handsome;
    alert(handsome);
    var handsome=&#39;ugly&#39;;
    alert(handsome);
}
handsomeToUgly();</code></pre>
<blockquote>
<p>[!NOTE]
总结：（ 根本原因在于解析器对于这两种定义方式读取的顺序不同：解析器会实现读取函数声明，即函数声明放在任意位置都可以被调用；而对于函数表达式，解析器只有在读到函数表达式所在那一行时才会开始执行）</p>
</blockquote>
<h3 id="32----对执行上下文的理解？">3.2    对执行上下文的理解？</h3>
<blockquote>
<p>[!NOTE]
执行上下文可以理解为当前代码的执行环境，它会形成一个作用域。JavaScript中的运行环境大概包括三种情况。</p>
</blockquote>
<ul>
<li><p>a. 全局环境：JavaScript代码运行起来会首先进入的环境</p>
</li>
<li><p>b. 函数环境：当函数被调用执行时，会进入被调用的函数中执行代码</p>
</li>
<li><p>c. eval（不推荐使用会对JS的执行效率产生影响）</p>
</li>
</ul>
<p>因此在一个JavaScript程序中，必定会产生多个执行上下文，JavaScript引擎会以栈的方式来处理它们，这个栈，我们称其为函数调用栈(call stack)。栈底永远都是全局上下文，而栈顶就是当前正在执行的上下文。当代码在执行过程中，遇到以上三种情况，都会生成一个执行上下文，放入栈中，而处于栈顶的上下文执行完毕之后，就会自动出栈。</p>
<pre><code class="language-js">function f1(){
    var n=999;
    function f2(){
        alert(n);
    }
    return f2;
}
var result=f1();
result(); // 999</code></pre>
<p>上面代码函数调用栈的过程：
<img src="../../img/js-%E6%89%A7%E8%A1%8C%E4%B8%8A%E4%B8%8B%E6%96%87.png" alt="JS执行上下文">
参考：<a href="https://www.cnblogs.com/ashen137/p/11422136.html">https://www.cnblogs.com/ashen137/p/11422136.html</a></p>
<h3 id="33----对this的理解？">3.3    对this的理解？</h3>
<ol>
<li>作为构造函数执行</li>
<li>作为对象属性执行</li>
<li>作为普通函数执行</li>
<li>call apply bind</li>
</ol>
<h4 id="331-settimeout、setinterval中的this">3.3.1 setTimeout、setInterval中的this</h4>
<pre><code class="language-js">var obj ={ 
    fn:function(){
        console.log(this);
    }
}
function fn2(){
    console.log(this);
}
setTimeout(obj.fn, 0);   //Window
setTimeout(fn2, 0);//Window
setInterval( obj.fn,1000 );//Window</code></pre>
<p>从上述例子中可以看到setTimeout,setInterval中函数内的this是指向了window对象，这是由于setTimeout()，setInterval()调用的代码运行在与所在函数完全分离的执行环境上。这会导致这些代码中包含的 this 关键字会指向 window (或全局)对象。</p>
<h3 id="332-严格模式下的this">3.3.2 严格模式下的this</h3>
<h4 id="（1）全局作用域中的this">（1）全局作用域中的this</h4>
<pre><code class="language-js">&quot;use strict&quot;
console.log(&quot;this === window&quot;,this === window);   //true</code></pre>
<p>在严格模式下的全局作用域中 this 指向window对象</p>
<h4 id="（2）全局作用域中函数中的this">（2）全局作用域中函数中的this</h4>
<pre><code class="language-js">&quot;use strict&quot;
function fn(){
    console.log(&#39;fn的this:&#39;+this);
    function fn2(){
        console.log(&#39;fn2的this:&#39;+this);
    }
    fn2();    
}
fn();

// fn的this:undefined
// fn2的this:undefined</code></pre>
<p>严格模式下： 在全局作用域中函数的 this 指向 undefined</p>
<h4 id="（3）对象的方法中的this">（3）对象的方法中的this</h4>
<pre><code class="language-js">&quot;use strict&quot;
let name = &#39;zhaosi&#39;;
let obj = {
    name: &#39;liuneng&#39;,
    fn:function(){
        console.log(this.name)
        console.log(this);
    }
}
obj.fn();
//  liuneng
// {name: &quot;liuneng&quot;, fn: ƒ}</code></pre>
<p>严格模式下，对象的函数中的this指向该对象</p>
<h4 id="（4）构造函数中的this">（4）构造函数中的this</h4>
<pre><code class="language-js">&quot;use strict&quot;
function Person( name){
    this.name = name;
    this.say = function(){
        console.log(&#39;my name is:&#39;+this.name);
        console.log(this);
    }
}
var lzx = new Person(&#39;lzx&#39;);
lzx.say();  
//my name is lzx
//Person { name:&quot;lzx&quot;, say:f } </code></pre>
<p>严格模式下，构造函数中的this指向new出来的对象</p>
<h4 id="（5）事件处理函数中的this">（5）事件处理函数中的this</h4>
<pre><code class="language-js">&quot;use strict&quot;
var oBtn = document.getElementById(&quot;btn&quot;);
oBtn.onclick = fn;
function fn(){
    console.log(this);
}
//&lt;button id=&quot;btn&quot;&gt;点击&lt;/button&gt;</code></pre>
<h3 id="333-箭头函数中的this">3.3.3 箭头函数中的this</h3>
<p>首先，箭头函数没有自己的this，箭头函数中的this是在定义函数的时候绑定，它会捕获其所在的上下文的this作为自己的this，而不像普通函数那样是在执行函数的时候绑定。</p>
<pre><code class="language-js"> var a = 10;
var obj = {
    a: 99,
    fn1:()=&gt;{ console.log(this.a) },
    fn2:function(){ console.log(this.a) }
}
obj.fn1(); //10
obj.fn2(); //99</code></pre>
<p>箭头函数this指向它定义时的上下文（在这里是window），而普通函数的this则指向调用它的对象
参考博文：<a href="https://blog.csdn.net/lizhengxv/article/details/84639342">https://blog.csdn.net/lizhengxv/article/details/84639342</a></p>
<h3 id="34----callapplybind的区别">3.4    call,apply,bind的区别</h3>
<h4 id="341-相同点">3.4.1 相同点</h4>
<p> 三个函数都会改变this的指向（调用这三个函数的函数内部的this）</p>
<h4 id="342-不同点">3.4.2 不同点</h4>
<p> 1)、bind会产生新的函数，（把对象和函数绑定死后，产生新的函数）</p>
<p> 2)、call和apply不会产生新的函数，只是在调用时，绑定一下而已。</p>
<p> 3)、call和apply的区别，第一个参数都是要绑定的this，apply第二个参数是数组（是函数的所有参数），call把apply的第二个参数单列出来。</p>
<h3 id="35----对js中作用域的理解？">3.5    对JS中作用域的理解？</h3>
<blockquote>
<p>[!NOTE]
注意点：JS是没有块级作用域的，只有函数和全局作用域</p>
</blockquote>
<h3 id="36----什么是自由变量和作用域链？">3.6    什么是自由变量和作用域链？</h3>
<blockquote>
<p>[!NOTE]
自由变量：当前作用域没有定义的变量，就是‘自由变量’, 这里的变量是一个aaaaa，发现这个函数作用域里面没有定义这个变量，就开始去父级作用域中寻找aaaaa这个变量（全局作用域中），发现还是没有找到这个变量的定义， 最终就会报错。</p>
</blockquote>
<blockquote>
<p>作用域链：实际上就是函数作用域中没有定义的变量，会去它的父级作用域中寻找的过程。</p>
</blockquote>
<pre><code class="language-js">// 实际开发中闭包的应用场景（判断用户传递的参数是否已经传递过来）
// 闭包主要应用于封装变量，收敛权限
function isFirstLoad() {
    // 这里的目的实际上就是把_list 封装为一个变量（自由变量）
    // 防止暴露为一个全局变量，外部无法拿到这个变量，外部是无法修改的，从而达到了一个封装变量的作用
    var _list = [];
    return function (id) {
        // _list 就是一个自由变量，而且全局只有这一个（函数作用域范围中这一个）
        if (_list.indexOf(id) &gt;= 0)
            return false;
        else
            _list.push(id);
        return true;
    }
}</code></pre>
<h3 id="37----闭包的使用场景有哪些？">3.7    闭包的使用场景有哪些？</h3>
<h4 id="371----函数作为返回值">3.7.1    函数作为返回值</h4>
<p>一个函数的返回值是一个函数，父级作用域是指，定义时候的作用域，而不是执行的作用域</p>
<h4 id="372-函数作为参数传递">3.7.2 函数作为参数传递</h4>
<p>【重点】：函数作用域中的自由变量会在声明的父级作用域中去寻找，而不是去执行的时候的作用域中去寻找变量</p>
<h3 id="38----创建10个a标签，点击的时候，弹出对应的序号">3.8    创建10个a标签，点击的时候，弹出对应的序号</h3>
<pre><code class="language-js">// 使用立即函数+闭包实现的
function createHrefElementsTwo() {
    for (var i = 0; i &lt; 10; i++) {
        // 一个函数就是一个作用域，这里相当于是创建了10个函数作用域，每一个作用域里面都是有自己的一歌变量i的，这是当用户需要这个自由变量的时候，
        // 就会直接去这个这个函数作用域范围内寻找这个变量，每一个里面就是一个单独的函数作用域
        (function (i) {
            // 这里面的就是单独的一个函数作用域
            var a = document.createElement(&#39;a&#39;);
            a.innerText = &#39;我是立即函数中的&#39; + i;
            a.href = &#39;#&#39;
            a.addEventListener(&#39;click&#39;, function (e) {
                e.preventDefault();
                // 分析：由这个for循环可以发现，这个i实际上是一个函数作用域的变量，这个i一直是变化的，当i等于9的时候，创建完毕最后一个元素，
                // 最后执行完毕i++, i的最终结果就是10，因此对于每一个a标签点击都是一个10
                alert(i);                   // 这里的i最后可以实现点击就弹出对应的编号吗？
            })
            document.body.appendChild(a);
            document.body.appendChild(document.createElement(&#39;br&#39;));
        })(i);      //  这里的i和这个里面的状态信息保持一致的
    }
}
</code></pre>
<h3 id="39----对函数curry化的理解？">3.9    对函数curry化的理解？</h3>
<blockquote>
<p>需求：要实现一个这样的加法函数，使得：add(1,2,3)(1)(2)(3)(4,5,6)(7,8)() === 42</p>
<ul>
<li>分析这个函数的特点: 当这个函数有参数的时候，返回的是一个函数</li>
<li>如果没有参数的时候，就会去执行这个函数，得到计算的结果</li>
</ul>
</blockquote>
<pre><code class="language-js">// 1. 函数curry化的实现：console.log(add(1, 2, 3)(1)(2)(3)(4, 5, 6)(7, 8)());//42
    function add() {
        // 思路：当传递参数的时候，开始计算；没有参数的时候，返回计算结果
        let _list = [];
        _list = _list.concat([].slice.call(arguments))
        return function () {
            let args = [].slice.call(arguments),
                len = args.length;
            // 这里也是需要接受参数的
            if (len !== 0) {
                // 说明用户又传递参数进来了
                // this.callee();
                // 把每次传递的数字全局记录下来
                _list = _list.concat(args);

                // 继续回调，返回一个函数
                // 这里返回一个函数(这里也是可以直接返回一个函数表达式的引用的)
                return arguments.callee;
            } else {
                // 开始遍历数组，计算结果, reduce 返回的也是一个最终的计算结果
                return _list.reduce((a, b) =&gt; {
                    return a + b
                })
            }
        }
    }

// 测试：
console.log(add(1, 2, 3)(1)(2)(3)(4, 5, 6)(7, 8)());
</code></pre>
<h3 id="310----如何实现一个bind函数？">3.10    如何实现一个bind函数？</h3>
<pre><code class="language-js">Function.prototype._bind = function () {
        // 思路：bind函数实际上每次返回的是一个函数
        // bind 函数的第一个参数是this的指向，其他参数是传递的参数
        // 1. 接受参数，解析this和args
        let _bindthis = arguments[0],
            _self = this,
            _args = [].slice.call(arguments).shift();        // 删除第0个元素之后剩余的元素数组


        return function () {
            // 处理用户传递的参数,arguments 就是用户传递给我的函数参数
            let args = arguments;
            console.log(&#39;用户传递的函数参数&#39;, args);
            // 修改this的指向, 没有修改之前，由于bind这个函数是fn调用的，因此this指向的是fn
            _self.apply(_bindthis, [].slice.call(args).concat(_args));
        }
    }
// 测试：
// 实际上第一个调用的函数参数在第二个函数参数也是可以直接一起使用的
    console.log(minus._bind({name: &#39;zhangsan&#39;}, 2)(7, 8));
</code></pre>
<h2 id="4----异步和单线程">4    异步和单线程</h2>
<h3 id="41----什么是异步？前端使用异步的场景有哪些？">4.1    什么是异步？前端使用异步的场景有哪些？</h3>
<pre><code class="language-js">console.log(100);
setTimeout(function () {            
    // 异步执行的代码不会阻塞下面代码的执行
        console.log(200);
}, 1000)
console.log(300);


// 上面的代码执行流程如下：
// 1. 执行第一行，输出100；
// 2. 执行setTimeout函数后，传入setTimeout里面的函数function(){console.log(200)}会被暂存起来（放入到事件队列里面），
//    不会立即执行该函数（单线程的特点，不会立即干两件事）；
// 3. 执行最后一行代码，输出100；
// 4. 等待所有的同步代码执行完毕之后，处于空闲状态的时候，会从事件队列中取出之前暂存的函数；
// 5. 发现暂存起来的setTimeout中的暂存函数，需要等待1s之后才会执行，该函数就会等待1s之后才会执行
// 使用异步的场景：
// 1. 定时任务： setTimeout, setInterval
// 2. 网络请求： ajax请求, 动态&lt;img&gt;加载
// 3. 事件绑定
// 同步和异步的区别：
// 同步会【阻塞】代码的执行，异步不会；alert是一个同步的例子，setTimeout是一个异步的例子
</code></pre>
<h3 id="42----如何实现一个自己的ajax？">4.2    如何实现一个自己的ajax？</h3>
<pre><code class="language-js">// 创建对象
    var xhr = new XMLHttpRequest();
    // 打开连接GET请求，请求地址，是否同步
    xhr.open(&#39;GET&#39;, &#39;/JS-Professional/data.json&#39;, false);
    xhr.onreadyStateChange = function () {
// readyState状态码：
        // 0- （未初始化）：还没有调用send（）方法
        // 1- （载入）：已经调用send（）方法，正在发送请求
        // 2- （载入完成）：send（）方法执行完成，已经接收到全部响应内容
        // 3. （交互）正在解析响应的内容
        // 4. （完成）响应内容解析完成，可以在客户端调用了

        // 2** - 表示成功处理请求，如200
        // 3** - 需要重定向，浏览器直接跳转，如301
        // 4** - 客户端请求错误，如404
        // 5** - 服务端错误，如500

        if (xhr.readyState === 4){
            //  此时表示请求已经发送成功(已经接受到服务端返回的信息)
            if (xhr.status === 200){
                console.log(&#39;请求发送成功&#39;, xhr.responseText)
            }
        }
    }
    xhr.send(null);
</code></pre>
<h2 id="5----其他知识点">5    其他知识点</h2>
<h3 id="51----如何获取2017-06-10-格式的日期？">5.1    如何获取2017-06-10 格式的日期？</h3>
<pre><code class="language-js">function formatDate(date) {
        var dt = date || new Date(),
            year = dt.getFullYear(),
            month = (dt.getMonth() + 1).toString(),
            day = dt.getDate().toString();
        month = month.length === 1 ? &#39;0&#39; + month : month;
        day = day.length === 1 ? &#39;0&#39; + day : day;
        return year + &#39;-&#39; + month + &#39;-&#39; + day;
    }
// 注意点：月是从0开始计数的
</code></pre>
<h3 id="52----如何获取一个长度一致的随机字符串？">5.2    如何获取一个长度一致的随机字符串？</h3>
<blockquote>
<p>[!NOTE]
思路：使用一个长度固定的字符串，如“00000000”作为后缀，然后进行字符串截取。</p>
</blockquote>
<pre><code class="language-js">// 获取一个长度一致的字符串的随机数字
function randomStr(str) {
    var random = str || Math.random();
    random = random + &#39;0000000000&#39;;     // 小技巧：防止程序报错
    random = random.slice(0, 10);
    return random;
}
randomStr();</code></pre>
<h3 id="53----写一个能遍历对象和数组通用的foreach函数">5.3    写一个能遍历对象和数组通用的forEach函数</h3>
<pre><code class="language-js">function forEach(obj, fn) {
        if (typeof obj === &#39;object&#39;) {
            // 对象遍历
            for (var key in obj) {
                // console.log(key, obj[key]);
                // 这里只去输出自己的属性，原型链上面的属性信息不用管（继承父类的属性信息是不会输出的）
                if (obj.hasOwnProperty(key))
                    fn(key, obj[key]);          // 直接执行这个函数
            }
        } else if (obj instanceof Array) {
            // 数组遍历
            obj.forEach(function (item, index) {
                fn(index, item);
            })
        }
    }
</code></pre>
<h3 id="54----数组中常用的方法有哪些？">5.4    数组中常用的方法有哪些？</h3>
<ol>
<li>forEach 遍历所有的元素</li>
<li>every 判断所有的元素是否都符合条件</li>
<li>some 判断是否至少有一个元素符合条件</li>
<li>sort 排序</li>
<li>map 对数组中的元素重新组装，生成一个新的数组</li>
<li>filter 过滤符合条件的元素</li>
</ol>
<blockquote>
<p>[!WARNING]
<strong>注意点</strong>:splice,concat,sprt是直接在原地操作数组的。</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/fab3f223-90e6-4f2c-a511-cdb12442a8cd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fab3f223-90e6-4f2c-a511-cdb12442a8cd</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 12 Aug 2024 01:00:38 GMT</pubDate></item><item><title><![CDATA[【JS相关】ES6专题系列]]></title><description><![CDATA[<h1 id="es6专题系列">ES6专题系列</h1>
<h2 id="1如何搭建es6的webpack开发环境？">1.如何搭建ES6的webpack开发环境？</h2>
<ol>
<li><p>安装Node环境
 node -v             // 10.14.1</p>
</li>
<li><p>安装NPM环境
 npm -v              // 6.4.1</p>
</li>
<li><p>安装babel
 npm install @babel/core babel-preset-es2015 babel-preset-latest</p>
</li>
<li><p>创建.babelrc文件
 npm install babel-cli -g
 babel --version<br> babel ./src/index.js            // 测试babel的编译结构</p>
</li>
<li><p>Webpack---模块化工具安装
 npm install webpack babel-loader  --save-dev    // 安装webpack，babel-loader</p>
</li>
<li><p>配置webpack.config.js</p>
</li>
<li><p>配置package.json中的scripts</p>
</li>
<li><p>运行n npm start    </p>
<h3 id="11-常见错误">1.1 常见错误</h3>
<pre><code class="language-js"> 0x01产生原因
 babel-loader和babel-core版本不对应所产生的，
 babel-loader 8.x对应babel-core 7.x
 babel-loader 7.x对应babel-core 6.x</code></pre>
<h3 id="12-安装环境注意事项">1.2 安装环境注意事项</h3>
<ul>
<li><ol>
<li>这里的安装的版本必须是@babel/core,否则会出现版本不兼容的错误</li>
</ol>
</li>
<li><ol start="2">
<li>建议先安装webpack，然后安装loader</li>
</ol>
</li>
</ul>
</li>
</ol>
<h2 id="2谈一下js的模块化？">2.谈一下JS的模块化？</h2>
<ol>
<li>最开始的时候JS是没有模块化的</li>
<li>AMD（Async module define）成为标准，require.js（CMD--common-module-define）</li>
<li>前端打包工具，使得nodejs模块化可以被使用 (Grunt, Gulp, Webpack……)</li>
<li>ES6的出现，想统一现在所有的模块化标准</li>
<li>nodejs（服务器端）积极支持，浏览器（需要打包为ES5/4）尚未统一</li>
<li>可以自造库lib，但是不要自造标准 </li>
</ol>
<h3 id="21-rollup的使用">2.1 rollup的使用</h3>
<ul>
<li><ol>
<li>功能单一，可集成，可扩展 </li>
</ol>
</li>
<li><ol start="2">
<li>rollup + gulp的结合</li>
</ol>
</li>
<li>安装
 npm install rollup rollup-plugin-node-resolve roll-up-plugin-babel babel-plugin-external-helpers babel-preset-latest --save-dev</li>
<li>配置 .babelrc</li>
<li>配置 rollup.config.js</li>
<li>修改 package.json scripts</li>
<li>运行命令：npm start</li>
</ul>
<h3 id="22-rollup特点">2.2 rollup特点</h3>
<ul>
<li>rollup功能单一，webpack功能强大</li>
<li>参考设计原则和《Linux/Unix设计思想》</li>
<li>工具要尽量功能单一，可以继集成，可扩展</li>
<li>可以使用gulp + rollup（主流框架VUE和React使用的就是rollup进行模块化的）   </li>
</ul>
<h2 id="3class和js普通构造函数的区别？">3.class和JS普通构造函数的区别？</h2>
<pre><code class="language-js">console.log(typeof MathHandle, typeof  MathHandle.prototype.constructor);   // function function
// 1. 构造函数的原型里面默认会有一个constructor属性，这个属性的值等于这个构造函数本身
console.log(MathHandle === MathHandle.prototype.constructor)        // true
console.log(MathHandle.prototype);
// 2. 所有实例的隐式原型__proto__和这个构造函数的显示原型prototype是相同的
console.log(m.__proto__ === MathHandle.prototype);      // true

console.log(&#39;-------------------------------------------------------------&#39;)
console.log(typeof MathHandler, typeof  MathHandler.prototype.constructor)         // &#39;function&#39;
console.log(MathHandler === MathHandler.prototype.constructor)  // true
console.log(MathHandler.prototype);
console.log(mm.__proto__=== MathHandler.prototype);</code></pre>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>class 在语法上更加贴合面向对象的写法</li>
</ol>
</blockquote>
<ol>
<li>class 实现继承更加易读，易理解</li>
<li>更加易于些java等后端语言的使用</li>
<li>class【本质】还是语法糖，实际上还是使用的是prototype</li>
</ol>
<h2 id="4-写实现一个promise">4. 写实现一个Promise?</h2>
<p>先看看Promise是怎么用的</p>
<pre><code class="language-js">new MyPromise((resolve, reject) =&gt; {
  setTimeout(() =&gt; {
    resolve(1)
  }, 0)
}).then(value =&gt; {
  console.log(value)
})</code></pre>
<p>在Promise的构造器中传入一个函数，这个函数有两个参数 resolve和reject，这两个参数都是Promise的回调函数，不需要自己写，在需要的时候调用就可以了，他们分别是成功的回调resolve和失败的回调reject。</p>
<h3 id="41-简易版-promise">4.1 简易版 Promise</h3>
<p><strong>第一步</strong>，先来搭建构建函数的大体框架</p>
<pre><code class="language-js">const PENDING = &#39;pending&#39;
const RESOLVED = &#39;resolved&#39;
const REJECTED = &#39;rejected&#39;

function MyPromise(fn){
  const that = this
  that.state = PENDING
  that.value = null
  that.resolvedCallbacks = []
  that.rejectedCallbacks = []
  // 待完善 resolve 和 reject 函数
  // 待完善执行 fn 函数
}</code></pre>
<ul>
<li>首先创建三个常量用于表示状态，对于经常使用的一些值应该通过常量来管理，便于开发及后期维护</li>
<li>在函数体内部首先创建常量that，因为代码可能会异步执行，用于获取正确的this对象</li>
<li>一开始Promise的状态是 pending</li>
<li>value 变量用于保存resolve或者reject中传入的值</li>
<li>resolvedCallbacks和rejectedCallback用于保存then中的回调，因为当执行完Promise时状态可能还是等待中，这时候应该把then中的回调保存起来用于状态改变时使用</li>
</ul>
<p><strong>第二步</strong>，完善resolve和reject函数，添加在 MyPromise 函数体内部</p>
<pre><code class="language-js">function resolve(value) {
  if(that.state === PENDING) {
    that.state = RESOLVED
    that.value = value
    that.resolvedCallbacks.map(cb =&gt; cb(that.value))
  }
}

function reject(value) {
  if(that.state === PENDING){
    that.state = REJECTED
    that.value = value;
    that.rejectedCallbacks.map(cb =&gt; cb(that.value));
  }
}</code></pre>
<ul>
<li>首先两个函数都得判断当前状态是否为等待中，因为规范规定只有等待态才可以改变状态</li>
<li>将当前状态更改为对应状态，并且将传入的值赋值给 value</li>
<li>遍历回调数组并执行</li>
</ul>
<p><strong>第四步</strong>，实现如何执行 Promise 中传入的函数了</p>
<pre><code class="language-js">try {
  fn(resolve, reject)
} catch (e) {
  reject(e)
}</code></pre>
<ul>
<li>实现很简单，执行传入的参数并且将之前两个函数当做参数传进去</li>
<li>要注意的是，可能执行函数过程中会遇到错误，需要捕获错误并且执行 reject 函数</li>
</ul>
<p><strong>第五步</strong>，实现较为复杂的 then 函数。</p>
<p>then函数是在Promise构造器中成功状态下调用的resolve方法的回调。</p>
<p>then函数是可以接收两个参数的，一个是用户自定义的成功处理，另一个是用户自定义的错误处理，第二个参数可不传。</p>
<pre><code class="language-js">MyPromise.prototype.then = function(onFulfilled, onRejected) {
  const that = this
  //对传入的两个参数做判断，如果不是函数将其转为函数
  onFulfilled =
    typeof onFulfilled === &#39;function&#39;
    ? onFulfilled
    : v =&gt; v  // onFulfilled = v =&gt; v
  onRejected =
    typeof onRejected === &#39;function&#39;
    ? onRejected
    : r =&gt; {
      throw r
    }

  if(that.state === PENDING) {
    that.resolvedCallbacks.push(onFulfilled)
    that.rejectedCallbacks.push(onRejected)
  }
  else if(that.state === RESOLVED) {
    onFulfilled(that.value)
  }
  else {
    onRejected(that.value)
  }
}</code></pre>
<ul>
<li>首先判断两个参数是否为函数类型，因为这两个参数是可选参数</li>
<li>当参数不是函数类型时，需要创建一个函数赋值给对应的参数，同时也实现了透传，比如如下代码<pre><code class="language-js">// 该代码目前在简单版中会报错
// 只是作为一个透传的例子
Promise.resolve(4).then().then((value) =&gt; console.log(value))</code></pre>
</li>
<li>接下来就是一系列判断状态的逻辑，当状态不是等待态时，就去执行相对应的函数。如果状态是等待态的话，就往回调函数中 push 函数，比如如下代码就会进入等待态的逻辑<ul>
<li>可参考：<a href="https://www.cnblogs.com/minigrasshopper/p/9141307.html">https://www.cnblogs.com/minigrasshopper/p/9141307.html</a></li>
</ul>
</li>
</ul>
<h2 id="5es6中常用的功能有哪些？">5.ES6中常用的功能有哪些？</h2>
<ol>
<li>let/const</li>
<li>多行字符串/模板变量</li>
<li>解构赋值</li>
<li>块级作用域？【重点理解】</li>
<li>函数默认参数</li>
<li>箭头函数（this指向问题）</li>
</ol>
<h3 id="51-var、let-及-const-区别？">5.1 var、let 及 const 区别？</h3>
<ul>
<li>var声明的变量会挂载在window上，而let和const不会</li>
<li>var声明变量存在变量提升，let和const不会</li>
<li>let、const 的作用范围是块级作用域，而var的作用范围是函数作用域</li>
<li>同一作用域下let和const不能声明同名变量，而var可以</li>
<li>同一作用域下在let和const声明前使用会存在暂时性死区</li>
<li>const<ul>
<li>一旦声明必须赋值,不能使用null占位</li>
<li>声明后不能再修改</li>
<li>如果声明的是复合类型数据，可以修改其属性</li>
</ul>
</li>
</ul>
<h3 id="52-proxy">5.2 Proxy</h3>
<blockquote>
<p>[!NOTE]
Proxy 是 ES6 中新增的功能，它可以用来自定义对象中的操作。 Vue3.0 中将会通过 Proxy 来替换原本的 Object.defineProperty 来实现数据响应式。</p>
</blockquote>
<pre><code class="language-js">let p = new Proxy(target, handler)</code></pre>
<p><code>target</code> 代表需要添加代理的对象，<code>handler</code> 用来自定义对象中的操作，比如可以用来自定义 set 或者 get 函数。</p>
<pre><code class="language-js">let onWatch = (obj, setBind, getLogger) =&gt; {
  let handler = {
    set(target, property, value, receiver) {
      setBind(value, property)
      return Reflect.set(target, property, value)
    },
    get(target, property, receiver) {
      getLogger(target, property)
      return Reflect.get(target, property, receiver)
    }
  }
  return new Proxy(obj, handler)
}

let obj = { a: 1 }
let p = onWatch(
  obj,
  (v, property) =&gt; {
    console.log(`监听到属性${property}改变为${v}`)
  },
  (target, property) =&gt; {
    console.log(`&#39;${property}&#39; = ${target[property]}`)
  }
)
p.a = 2 // 控制台输出：监听到属性a改变
p.a // &#39;a&#39; = 2</code></pre>
<blockquote>
<p>[!NOTE]
自定义 set 和 get 函数的方式，在原本的逻辑中插入了我们的函数逻辑，实现了在对对象任何属性进行读写时发出通知。</p>
</blockquote>
<blockquote>
<p>当然这是简单版的响应式实现，如果需要实现一个 Vue 中的响应式，需要我们在 get 中收集依赖，在 set 派发更新，之所以 Vue3.0 要使用 Proxy 替换原本的 API 原因在于 Proxy 无需一层层递归为每个属性添加代理，一次即可完成以上操作，性能上更好，并且原本的实现有一些数据更新不能监听到，但是 Proxy 可以完美监听到任何方式的数据改变，唯一缺陷可能就是浏览器的兼容性不好了。</p>
</blockquote>
<h3 id="53-数组方法">5.3 数组方法</h3>
<h4 id="531-map">5.3.1 map</h4>
<blockquote>
<p>[!NOTE]
map 作用是生成一个新数组，遍历原数组，将每个元素拿出来做一些变换然后返回一个新数组，原数组不发生改变。</p>
</blockquote>
<p>map 的回调函数接受三个参数，分别是当前索引元素，索引，原数组</p>
<pre><code class="language-js">var arr = [1,2,3];
var arr2 = arr.map(item =&gt; item + 1)    
arr   //[ 1, 2, 3 ]
arr2  // [ 2, 3, 4 ]</code></pre>
<pre><code class="language-js">[&#39;1&#39;,&#39;2&#39;,&#39;3&#39;].map(parseInt)
// -&gt; [ 1, NaN, NaN ]</code></pre>
<ul>
<li>第一个 parseInt(&#39;1&#39;, 0) -&gt; 1</li>
<li>第二个 parseInt(&#39;2&#39;, 1) -&gt; NaN</li>
<li>第三个 parseInt(&#39;3&#39;, 2) -&gt; NaN</li>
</ul>
<h4 id="532-filter">5.3.2 filter</h4>
<blockquote>
<p>[!NOTE]
filter 的作用也是生成一个新数组，在遍历数组的时候将返回值为 true 的元素放入新数组，我们可以利用这个函数删除一些不需要的元素</p>
</blockquote>
<p>filter 的回调函数接受三个参数，分别是当前索引元素，索引，原数组</p>
<h4 id="533-reduce">5.3.3 reduce</h4>
<blockquote>
<p>[!NOTE]
reduce 可以将数组中的元素通过回调函数最终转换为一个值。</p>
</blockquote>
<p>如果我们想实现一个功能将函数里的元素全部相加得到一个值，可能会这样写代码</p>
<pre><code class="language-js">const arr = [1, 2, 3]
let total = 0
for (let i = 0; i &lt; arr.length; i++) {
  total += arr[i]
}
console.log(total) //6</code></pre>
<p>但是如果我们使用 reduce 的话就可以将遍历部分的代码优化为一行代码</p>
<pre><code class="language-js">const arr = [1, 2, 3]
const sum = arr.reduce((acc, current) =&gt; acc + current, 0)
console.log(sum)</code></pre>
<p>对于 reduce 来说，它接受两个参数，分别是回调函数和初始值，接下来我们来分解上述代码中 reduce 的过程</p>
<ul>
<li>首先初始值为 0，该值会在执行第一次回调函数时作为第一个参数传入</li>
<li>回调函数接受四个参数，分别为累计值、当前元素、当前索引、原数组，后三者想必大家都可以明白作用，这里着重分析第一个参数</li>
<li>在一次执行回调函数时，当前值和初始值相加得出结果 1，该结果会在第二次执行回调函数时当做第一个参数传入</li>
<li>所以在第二次执行回调函数时，相加的值就分别是 1 和 2，以此类推，循环结束后得到结果 6。</li>
</ul>
<h3 id="54-es6中箭头函数与普通函数的区别？">5.4 Es6中箭头函数与普通函数的区别？</h3>
<ul>
<li>普通function的声明在变量提升中是最高的，箭头函数没有函数提升</li>
<li>箭头函数没有属于自己的this，arguments</li>
<li>箭头函数不能作为构造函数，不能被new，没有property</li>
<li>call和apply方法只有参数，没有作用域</li>
</ul>
<h3 id="55-promise">5.5 Promise</h3>
<p><code>Promise</code> 翻译过来就是承诺的意思，这个承诺会在未来有一个确切的答复，并且该承诺有三种状态，这个承诺一旦从等待状态变成为其他状态就永远不能更改状态了。</p>
<ul>
<li>等待中（pending）</li>
<li>完成了（resolved）</li>
<li>拒绝了（rejected）</li>
</ul>
<p>当我们在构造 Promise 的时候，构造函数内部的代码是立即执行的。</p>
<pre><code class="language-js">new Promise((resolve, reject) =&gt; {
  console.log(&#39;new Promise&#39;)
  resolve(&#39;success&#39;)
})
console.log(&#39;finifsh&#39;)

// 先打印new Promise， 再打印 finifsh</code></pre>
<p>Promise 实现了链式调用，也就是说每次调用 then 之后返回的都是一个 Promise，并且是一个全新的 Promise，原因也是因为状态不可变。如果你在 then 中 使用了 return，那么 return 的值会被 Promise.resolve() 包装。</p>
<pre><code class="language-js">Promise.resolve(1)
  .then(res =&gt; {
    console.log(res) // =&gt; 1
    return 2 // 包装成 Promise.resolve(2)
  })
  .then(res =&gt; {
    console.log(res) // =&gt; 2
  })</code></pre>
<p>当然了，Promise 也很好地解决了回调地狱的问题</p>
<pre><code class="language-js">ajax(url)
  .then(res =&gt; {
      console.log(res)
      return ajax(url1)
  }).then(res =&gt; {
      console.log(res)
      return ajax(url2)
  }).then(res =&gt; console.log(res))</code></pre>
<p>其实它也是存在一些缺点的，比如无法取消 Promise，错误需要通过回调函数捕获。</p>
<h3 id="56-async-和-await">5.6 async 和 await</h3>
<p>一个函数如果加上 async ，那么该函数就会返回一个 Promise</p>
<pre><code class="language-js">async function test() {
  return &quot;1&quot;
}
console.log(test())
// -&gt; Promise {&lt;resolved&gt;: &quot;1&quot;}</code></pre>
<p>async 就是将函数返回值使用 Promise.resolve() 包裹了下，和 then 中处理返回值一样，并且 await 只能配套 async 使用。</p>
<pre><code class="language-js">async function test() {
  let value = await sleep()
}</code></pre>
<p>async 和 await 可以说是异步终极解决方案了，相比直接使用 Promise 来说，优势在于处理 then 的调用链，能够更清晰准确的写出代码，毕竟写一大堆 then 也很恶心，并且也能优雅地解决回调地狱问题。</p>
<p>当然也存在一些缺点，因为 <strong>await 将异步代码改造成了同步代码</strong>，如果多个异步代码没有依赖性却使用了 await 会导致性能上的降低。</p>
<pre><code class="language-js">async function test() {
  // 以下代码没有依赖性的话，完全可以使用 Promise.all 的方式
  // 如果有依赖性的话，其实就是解决回调地狱的例子了
  await fetch(url)
  await fetch(url1)
  await fetch(url2)
}</code></pre>
<p>看一个使用 await 的例子：</p>
<pre><code class="language-js">let a = 0
let b = async () =&gt; {
  a = a + await 10
  console.log(&#39;2&#39;, a)
}
b()
a++
console.log(&#39;1&#39;, a)

//先输出  ‘1’, 1
//在输出  ‘2’, 10</code></pre>
<ul>
<li>首先函数 b 先执行，在执行到 await 10 之前变量 a 还是 0，因为 await 内部实现了 generator ，generator 会保留堆栈中东西，所以这时候 a = 0 被保存了下来</li>
<li>因为 await 是异步操作，后来的表达式不返回 Promise 的话，就会包装成 Promise.reslove(返回值)，然后会去执行函数外的同步代码</li>
<li>同步代码 a++ 与打印 a 执行完毕后开始执行异步代码，将保存下来的值拿出来使用，这时候 a = 0 + 10</li>
</ul>
<blockquote>
<p>[!NOTE]
上述解释中提到了 await 内部实现了 generator，其实 <strong>await 就是 generator 加上 Promise 的语法糖，且内部实现了自动执行 generator</strong>。</p>
</blockquote>
<h3 id="57-generator-生成器">5.7 Generator 生成器</h3>
<pre><code class="language-js">function *foo(x) {
  let y = 2 * (yield (x + 1))
  let z = yield (y / 3)
  return (x + y + z)
}
let it = foo(5)
console.log(it.next())   // =&gt; {value: 6, done: false}
console.log(it.next(12)) // =&gt; {value: 8, done: false}
console.log(it.next(13)) // =&gt; {value: 42, done: true}</code></pre>
<ul>
<li><p>首先 Generator 函数调用和普通函数不同，它会返回一个迭代器</p>
</li>
<li><p>当执行第一次 next 时，传参会被忽略，并且函数暂停在 yield (x + 1) 处，所以返回 5 + 1 = 6</p>
</li>
<li><p>当执行第二次 next 时，传入的参数等于上一个 yield 的返回值，如果你不传参，yield 永远返回 undefined。此时 let y = 2 * 12，所以第二个 yield 等于 2 * 12 / 3 = 8</p>
</li>
<li><p>当执行第三次 next 时，传入的参数会传递给 z，所以 z = 13, x = 5, y = 24，相加等于 42</p>
</li>
</ul>
<h3 id="58-生成器原理">5.8 生成器原理</h3>
<blockquote>
<p>[!NOTE]
当yeild产生一个值后，生成器的执行上下文就会从栈中弹出。但由于迭代器一直保持着队执行上下文的引用，上下文不会丢失，不会像普通函数一样执行完后上下文就被销毁</p>
</blockquote>
<h3 id="59-es-module">5.9 ES Module</h3>
<blockquote>
<p>[!NOTE]
ES Module 是原生实现的模块化方案，与 CommonJS 有以下几个区别</p>
</blockquote>
<ul>
<li>CommonJS 支持动态导入，也就是 require(${path}/xx.js)，后者目前不支持，但是已有提案</li>
<li>CommonJS 是同步导入，因为用于服务端，文件都在本地，同步导入即使卡住主线程影响也不大。而后者是异步导入，因为用于浏览器，需要下载文件，如果也采用同步导入会对渲染有很大影响</li>
<li>CommonJS 在导出时都是值拷贝，就算导出的值变了，导入的值也不会改变，所以如果想更新值，必须重新导入一次。但是 ES Module 采用实时绑定的方式，导入导出的值都指向同一个内存地址，所以导入值会跟随导出值变化</li>
<li>ES Module 会编译成 require/exports 来执行的</li>
</ul>
<pre><code class="language-js">// 引入模块 API
import XXX from &#39;./a.js&#39;
import { XXX } from &#39;./a.js&#39;
// 导出模块 API
export function a() {}
export default function() {}</code></pre>
<h2 id="6-箭头函数和普通函数的8点区别？">6. 箭头函数和普通函数的8点区别？</h2>
<h3 id="61-不能作为构造函数">6.1 不能作为构造函数</h3>
<p>箭头函数作为匿名函数,是不能作为构造函数的,不能使用new</p>
<h3 id="62-无arguments">6.2 无arguments</h3>
<p>箭头函数不绑定arguments,取而代之用rest参数…解决</p>
<pre><code class="language-js">function A(a){
    console.log(arguments); // 1
}

var BBB = (aaa)=&gt;{
    console.log(arguments); // 2
}

var CCC = (a, ...rest)=&gt;{
    console.log(a, &#39;-----&#39;, rest);         // 1, ---- [2 3 4]
}

A(1);
BBB(2);
CCC(1, 2, 3, 4);
</code></pre>
<h3 id="63-没有自己的this">6.3 没有自己的this</h3>
<p>箭头函数会捕获其所在上下文的 this 值，作为自己的 this 值</p>
<pre><code class="language-js">var obj = {
    a: 10,
    b: function(){
        console.log(this.a); //10
    },
    c: function() {
        // 在c方法里面return的这个箭头函数捕获的是c:function(){}这个环境的this，而这个环境的this是obj【找出块作用域的外部一层就是他的环境】
        return ()=&gt;{
            console.log(this.a); //10
        }
    }
}
obj.b();
obj.c()();
</code></pre>
<h3 id="64-this环境">6.4 this环境</h3>
<p>箭头函数当方法使用的时候没有定义this绑定</p>
<pre><code class="language-js">var obj = {
    a: 10,
    b: () =&gt; {
        // 因为箭头函数捕获的是obj{}这个对象的环境，然后这个环境的this指向的是window【找出块作用域的外部一层就是他的环境】
        console.log(this.a); //undefined
        console.log(this); //window
    },
    c: function() {
        console.log(this.a); //10
        console.log(this); //obj{...}
    }
}
obj.b();
obj.c();
</code></pre>
<h3 id="65-this不可以被修改">6.5 this不可以被修改</h3>
<p>使用call()和apply()调用, 通过 call() 或 apply() 方法调用一个函数时，只是传入了参数而已，对 this并没有什么影响</p>
<pre><code class="language-js">var obj = {
    a: 10,
    b: function(n){
        var f = (v) =&gt; v + this.a;
        /*function f(v) {
            return v+this.a;
        }*/
        return f(n);
    },
    c: function(n) {
        var f = (v) =&gt; v + this.a;
        var m = {a:20};
        return f.call(m,n);
    }
}

console.log(obj.b(1)); //11
console.log(obj.c(1)); //11
</code></pre>
<h3 id="66-箭头函数没有原型属性">6.6 箭头函数没有原型属性</h3>
<pre><code class="language-js">var a = ()=&gt;{
    return 1;
}

function b(){
    return 2;
}

console.log(a.prototype);//undefined
console.log(b.prototype);//object{...}
</code></pre>
<h3 id="67-不能当做generator函数">6.7 不能当做Generator函数</h3>
<p>箭头函数不能当做Generator函数,不能使用yield关键字</p>
<pre><code class="language-js">var a = ()
    // =&gt;1; //SyntaxError: Unexpected token =&gt;</code></pre>
<h3 id="68-箭头函数的this指向">6.8 箭头函数的this指向</h3>
<blockquote>
<p>箭头函数的this永远指向其上下文的 this，任何方法都改变不了其指向，如call(), bind(), apply(),普通函数的this指向调用它的那个对象</p>
</blockquote>
<pre><code class="language-js">var obj = {
    say: function () {
        // 箭头函数
        var f1 = () =&gt; {
            console.log(this); // obj
            setTimeout(() =&gt; {
                console.log(this); // obj
            })
        };
        f1();
    }
}

var obj = {
    say: function () {
        // 普通函数
        var f1 = function () {
            console.log(this);    // window, f1调用时,没有宿主对象,默认是window
            setTimeout(() =&gt; {
                console.log(this); // window
            })
        };
        f1();
    }</code></pre>
]]></description><link>https://blog.gaoredu.com/article/c0f5bff0-5fb4-4e17-83e2-c3849bd77c3e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c0f5bff0-5fb4-4e17-83e2-c3849bd77c3e</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 11 Aug 2024 14:31:48 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】搜索算法]]></title><description><![CDATA[<h1 id="二分搜索">二分搜索</h1>
<h2 id="递归实现">递归实现</h2>
<pre><code class="language-js">// 递归对区间[l, r]的元素使用二分查找算法
function __binarySearch(arr, l, r, e){
    // 1. 递归终止的条件
    if (l &gt; r) {
        return;
    }

    // 2. 开始对左右区间进行递归搜索
    var middle = Math.floor(l + (r - l) / 2);
    console.log(&#39;finding ……&#39;, middle, e, arr[middle]);
    if (e &lt; arr[middle]) {
        // 使用递归的方法进行二分查找的时候，需要将每次递归的时候的结果返回给下一个循环调用
        return __binarySearch(arr, l, middle - 1, e);

    } else if (e &gt; arr[middle]) {
        return __binarySearch(arr, middle + 1, r, e);
    } else {
        return middle;
    }

    // 找不到的情况的处理
    return -1;
}


function binarySearch(arr, e){
    // 实现二分查找算法(arr[0, arr.length - 1])
    return __binarySearch(arr, 0, arr.length - 1, e);
}

var arr = [1, 2, 3, 4, 5];
var res = binarySearch(arr, 5);
console.log(&#39;find ok : &#39;, res);

</code></pre>
<h2 id="非递归实现">非递归实现</h2>
<pre><code class="language-js">function binary_search(arr, key) {
    var low = 0,
        high = arr.length - 1;
    while(low &lt;= high){
        var mid = parseInt((high + low) / 2);
        if(key == arr[mid]) {
            return  mid;
        } else if(key &gt; arr[mid]) {
            low = mid + 1;
        } else if(key &lt; arr[mid]) {
            high = mid -1;
        } else{
            return -1;
        }
    }
};
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86];
var result = binary_search(arr, 10);
console.log(result); // 9</code></pre>
]]></description><link>https://blog.gaoredu.com/article/a9aab374-31a8-4917-92ac-b6836d0b4b75</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a9aab374-31a8-4917-92ac-b6836d0b4b75</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 10 Aug 2024 11:47:48 GMT</pubDate></item><item><title><![CDATA[【计算机网络】Nginx]]></title><description><![CDATA[<h1 id="nginx代理">nginx代理</h1>
<h2 id="1-介绍一下nginx代理的原理？">1. 介绍一下Nginx代理的原理？</h2>
<h3 id="11-代理的原理">1.1 代理的原理</h3>
<p>正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】，为了从原始服务器取得内容，用户A向代理服务器Z发送一个请求并指定目标(服务器B)，然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理</p>
<ul>
<li>正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】</li>
</ul>
<h3 id="12-反向代理的原理">1.2 反向代理的原理</h3>
<p>反向代理结论与正向代理正好相反，对于客户端而言它就像是原始服务器，并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求，接着反向代理将判断向何处(原始服务器)转交请求，并将获得的内容返回给客户端，就像这些内容原本就是它自己的一样</p>
<h3 id="13-nginx基本代理">1.3 nginx基本代理</h3>
<pre><code>server {
  listen        80;
  # 访问的域名
  server_name   test.com;
  # 代理请求
  location / {
    proxy_pass http://127.0.0.1:8888;
    # 设置HTTP头中修改host为test.com
    proxy_set_header Host $host;
  }
}</code></pre><h3 id="14-nginx配置缓存">1.4 nginx配置缓存</h3>
<pre><code># 写在server外
proxy_cache_path  cache levels=1:2 keys_zoom=my_cache:10m</code></pre><ul>
<li>cache<ul>
<li>文件夹名</li>
</ul>
</li>
<li>levels=1:2<ul>
<li>设置二级文件夹来存缓存，因为随着文件的越来越多查找速度会越来越慢</li>
</ul>
</li>
<li>keys_zoom=my_cache:10m<ul>
<li>申请10兆内存来缓存内容</li>
</ul>
</li>
</ul>
<pre><code>server {
  listen        80;
  server_name   test.com;
  location / {
    proxy_cache   my_cache; #在这里写缓存
    proxy_pass http://127.0.0.1:8888;
    proxy_set_header Host $host;
  }
}</code></pre>]]></description><link>https://blog.gaoredu.com/article/916e212b-39f3-4c00-b52d-4f3cb97d531a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/916e212b-39f3-4c00-b52d-4f3cb97d531a</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Aug 2024 16:36:39 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】this指向]]></title><description><![CDATA[<h1 id="this指向">this指向</h1>
<h3 id="头条一面">头条一面</h3>
<p>请分别写出下面题目的答案。</p>
<pre><code class="language-js">function Foo() {
    getName = function() {
        console.log(1);
    };
    return this;
}
Foo.getName = function() {
    console.log(2);
};
Foo.prototype.getName = function() {
    console.log(3);
};
var getName = function() {
    console.log(4);
};

function getName() {
    console.log(5);
}

//请写出以下输出结果：
Foo.getName();      //-&gt; 2    Foo对象上的getName() ，这里不会是3，因为只有Foo的实例对象才会是3，Foo上面是没有3的
getName();          //-&gt; 4    window上的getName，console.log(5)的那个函数提升后，在console.log(4)的那里被重新赋值
Foo().getName();    //-&gt; 1    在Foo函数中，getName是全局的getName，覆盖后输出 1（当前的这个函数在调用的时候才会执行里面的语句）
getName();          //-&gt; 1    window中getName();
new Foo.getName();  //-&gt; 2    Foo后面不带括号而直接 &#39;.&#39;，那么点的优先级会比new的高，所以把 Foo.getName 作为构造函数
new Foo().getName();//-&gt; 3    此时是Foo的实例，原型上会有输出3这个方法</code></pre>
<h4 id="函数表达式和函数声明的区分（函数提升比变量提升的优先级高）">函数表达式和函数声明的区分（函数提升比变量提升的优先级高）</h4>
<p>函数在运行的瞬间，生成一个活动对象（Active Object），简称AO</p>
<ul>
<li>参考博客：<a href="https://www.cnblogs.com/libin-1/p/6101185.html">https://www.cnblogs.com/libin-1/p/6101185.html</a></li>
<li>分析参数
函数接收形式参数，添加到AO的属性，并且这个时候值为undefine,例如AO.age=undefine
接收实参，添加到AO的属性，覆盖之前的undefine</li>
<li>分析变量声明，如var age;或var age=23;
如果上一步分析参数中AO还没有age属性，则添加AO属性为undefine，即AO.age=undefine
如果AO上面已经有age属性了，则不作任何修改</li>
<li>分析函数的声明，如果有function age(){}
把函数赋给AO.age ,覆盖上一步分析的值</li>
</ul>
<h3 id="箭头函数中的this-判断">箭头函数中的this 判断</h3>
<p>箭头函数里面的this是继承它作用域父级的this， 即声明箭头函数处的this</p>
<pre><code class="language-js">let a = {
  b: function() {
    console.log(this)
  },
  c: () =&gt; {
    console.log(this)
  }
}

a.b()   // a： 普通函数的this是在调用的时候决定的
a.c()   // window：箭头函数的this看外层的是否有函数， 如果有，外层函数的this就是内部箭头函数的this，如果没有，则this是window。

let d = a.b
d()     // window</code></pre>
<h3 id="this判断-下面输出为多少？">this判断 下面输出为多少？</h3>
<pre><code class="language-js">var name1 = 1;

function test() {
    let name1 = &#39;kin&#39;;
    let a = {
        name1: &#39;jack&#39;,
        fn: () =&gt; {
      var name1 = &#39;black&#39;
      console.log(this.name1)       // 看当前外部，有函数，外层的this就是内部的this，没有的话就是window(JS只有全局作用域和函数作用域)
    }
  }
    return a;
}

test().fn() // ?</code></pre>
<p>答案： 输出1</p>
<p>因为fn处绑定的是箭头函数，箭头函数并不创建this，它只会从自己的作用域链的上一层继承this。这里它的上一层是test()，非严格模式下test中this值为window。</p>
<ul>
<li>在非严格模式下，由于this必须是一个对象，所以就默认为指向全局对象window，在严格模式下this为undefined</li>
<li>如果在绑定fn的时候使用了function，那么答案会是 &#39;jack&#39;</li>
<li>如果第一行的 var 改为了 let，那么答案会是 undefind， 因为let不会挂到window上</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/d835260f-719b-4f39-933e-771abf229de7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d835260f-719b-4f39-933e-771abf229de7</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Jul 2024 20:17:32 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】call、bind、apply的实现]]></title><description><![CDATA[<h1 id="call-apply-bind的模拟实现">call, apply, bind的模拟实现</h1>
<h2 id="call的模拟实现">call的模拟实现</h2>
<pre><code class="language-js">    // 使用原生的ES3语法实现的call
    Function.prototype._call = function() {
      var context = context || window;
      context.fn = this;

      var args = [];
      for (var i = 1, len = arguments.length; i &lt; len; i++) {
            args.push(&#39;arguments[&#39;+ i +&#39;]&#39;)
      }
      var res = eval(&#39;context.fn(&#39;+ args +&#39;)&#39;);

      delete context.fn;
      return res;
    }

    // 使用ES6语法实现一个call
    Function.prototype._call = function() {
      let context = arguments[0];
      context.fn = this;

      let args = [];
      for (let i = 0, len = arguments.length; i &lt; len; i++) {
          args.push(arguments[i]);
      }

      // 把数组转换为一个伪数组
      let res = context.fn({...args});

      delete context.fn;
      return res;
    }</code></pre>
<h2 id="apply的模拟实现">apply的模拟实现</h2>
<pre><code class="language-js">    // 原生JS实现
    Function.prototype._apply = function(context, arr) {
      var context = Object(context) || window;
      context.fn = this;

      let res;
      if (!arr) {
          res = context.fn();
      }
      else {
          var args = [];
          for (var i = 0, len = arr.length; i &lt; len; i++) {
              args.push(&#39;arr[&#39;+i+&#39;]&#39;);
          }
          res = eval(&#39;context.fn(&#39;+args+&#39;)&#39;);
      }
      delete context.fn;
      return res;
    }

    // 使用ES6语法实现的apply
    Function.prototype._apply = function(context) {
      context = context || window;
      context.fn = this;

      let res;
      if (arguments[1]) {
          // array
          res = context.fn(...arguments[1]);
      }
      else {
          // none args
          res = context.fn();
      }

      delete context.fn;
      return res;
    }</code></pre>
<h2 id="bind的模拟实现">bind的模拟实现</h2>
<pre><code class="language-js">    // 原生JS 的实现
    Function.prototype._bind = function(context) {
        if (typeof this !== &#39;function&#39;) {
            throw new Error(&#39;error callback&#39;);
        }

        var self = this;
        var args = Array.prototype.slice.call(arguments, 1);
        // 注意：这里如果直接将 fBound.prototype = this.prototype
        // ，我们直接修改 fBound.prototype 的时候，也会直接修改绑定函数的 prototype。
        // 解决方案：这个时候，我们可以通过一个空函数来进行中转
        var fnOP = function() {};

        var fnBind = function() {
            var bindArgs = Array.prototype.slice.call(arguments);
            return self.apply(this instanceof fnOP
                            ? this
                            : context
                            , args.concat(bindArgs));
        }
        // 通过间接地去修改这个中间函数的原型对象，new 的方式来避免直接修改原型上面的属性和对象参数信息
        fnOP.prototype = this.prototype;
        // 这里不就是原型链继承的实现吗？
        fnBind.prototype = new fnOP();
        return fnBind;
    }

    // ES6的写法一
    Function.prototype._bind = function(context, ...args) {
      let self = this;
      return function() {
        self.apply(context, args.concat(Array.prototype.slice.call(arguments)));
      }
    }

    // ES6的写法二
    Function.prototype._bind = function(context) {
      context = context || window;
      let args = Array.prototype.slice.call(arguments, 1);
      let self = this;
      // 构建一个中间的函数，维护原型之间的关系
      let temp = function(){};
      let F = function() {
        self.apply(this instanceof temp
                    ? this
                    : context
                    , args.concat(Array.prototype.slice.call(arguments)))
      }
      // 通过中间函数维护原型关系
      temp.prototype = this.prototype;
      F.prototype = new temp();

      return F;
    }</code></pre>
]]></description><link>https://blog.gaoredu.com/article/eb11e87b-c36f-4871-80db-7da86877cb46</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eb11e87b-c36f-4871-80db-7da86877cb46</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jul 2024 12:16:09 GMT</pubDate></item><item><title><![CDATA[【面经系列】百度面经]]></title><description><![CDATA[<h1 id="百度面经系列">百度面经系列</h1>
<ol>
<li>react和vue的区别</li>
<li>JS的数据类型</li>
<li>null和undefined的区别</li>
<li>![]的结果</li>
<li>闭包的使用场景</li>
<li>微任务和宏任务</li>
<li>实现JSONP</li>
<li>手写节流</li>
<li>路由两种模式使用场景</li>
<li>数组和链表区别</li>
<li>链表的使用场景</li>
<li>实现点击按钮输出input中字符串的反转</li>
<li>PWA</li>
<li>跨域</li>
<li>缓存策略</li>
<li>缓存位置</li>
<li>前端安全</li>
<li>白屏的处理</li>
<li>按需加载</li>
<li>HTTP</li>
<li>闭包</li>
<li>websocket</li>
<li>socket</li>
<li>写一个函数判断页面两个矩形是否相交</li>
<li>介绍项目，介绍项目的难点与创新点</li>
<li>前端项目打包方式</li>
<li>项目前端方面引用技术</li>
<li>React的生命周期</li>
<li>React的虚拟DOM</li>
<li>事件循环（EventLoop）</li>
<li>解构赋值</li>
<li>箭头函数</li>
<li>Promise（写一个promise的实例）</li>
<li>写Promise.all的实现源码</li>
<li>跨域及实现的方式，及比较</li>
<li>同源策略在浏览器具体的表现</li>
<li>回流与重绘，以及如何避免</li>
<li>浏览器的缓存机制</li>
<li>介绍强缓存与协商缓存</li>
<li>对前端工程化方面的理解</li>
<li>介绍一个你自己的项目？</li>
<li>说一下Vue的缺点有哪些？</li>
<li>Eventloop循环说一下？</li>
<li>Node中的Worker说一下？Node中如何创建多个线程？Node中如何实现开启守护进程？</li>
<li>说一下Express的架构和实现原理？</li>
<li>说一下中间件的实现原理？</li>
<li>Express和Koa的区别呢？</li>
<li>说一下Diff算法的本质？abc, acb是如何改变的呢？</li>
<li>说一下红黑树和他的应用场景？</li>
<li>Nginx的应用场景说一下？</li>
<li>app.use和app.get的区别？</li>
<li>node的路由实现原理？</li>
<li>Node如何读取大数据量下的数据？</li>
<li>介绍一下项目，项目中的用到的一些技术</li>
<li>移动端的性能优化，rem的原理</li>
<li>点透事件：H5开发中可能遇到的特有的问题</li>
<li>项目后台用的技术栈是什么</li>
<li>跨域问题</li>
<li>常见的http状态码</li>
<li>$documnent.ready()  VS  window.onload() 两种方式的区别（哪个先执行）</li>
<li>ES6的新特性</li>
<li>箭头函数与普通函数的区别</li>
<li>let与var的区别</li>
<li>对vue熟悉吗？（不能算是熟悉，所以vue是硬伤）</li>
<li>vue的生命周期</li>
<li>对闭包的理解</li>
<li>常见的git命令</li>
<li>项目中所有人都在master分支上开发吗？还是都有自己的分支？</li>
<li>http状态码</li>
<li>输入一个URL的过程</li>
<li>es6，promise讲一下</li>
<li>冒泡算法、二分查找、快排，以及时间复杂度、最坏情况</li>
<li>同源策略</li>
<li>跨域</li>
<li>xss攻击和预防</li>
<li>import和link的区别</li>
<li>水平居中的方式，包括块和文本</li>
<li>css3的新特性，说一下单行文本溢出和多行文本溢出</li>
<li>less了解吗</li>
<li>设计模式，实现一个登录框，不让用户重复点击弹出多个登录框（使用单例模式）</li>
<li>原型链</li>
<li>优化方法</li>
<li>git提交冲突如何解决</li>
<li>实现一个repeat(str,count)函数，str是一个字符串，count是重复的次数。</li>
<li>三个盒子里有一块糖，你挑了一个盒子，然后拿走一个空盒子，问是否更换盒子？</li>
<li>一个为n的台阶，小明可以一次走一步、两步或者五步，问一共几种走法？</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/f55889d2-b3b3-42fe-958d-a44772f22493</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f55889d2-b3b3-42fe-958d-a44772f22493</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jul 2024 11:51:59 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】new的实现原理]]></title><description><![CDATA[<h1 id="new一个对象的原理是怎样的呢？">new一个对象的原理是怎样的呢？</h1>
<ol>
<li>用new Object() 的方式新建了一个对象 obj</li>
<li>取出第一个参数，就是我们要传入的构造函数。此外因为 shift 会修改原数组，所以 arguments 会被去除第一个参数</li>
<li>将 obj 的原型指向构造函数，这样 obj 就可以访问到构造函数原型中的属性</li>
<li>使用 apply，改变构造函数 this 的指向到新建的对象，这样 obj 就可以访问到构造函数中的属性</li>
<li>返回 obj</li>
</ol>
<pre><code class="language-js">// v1
  function objectFactory() {
      var obj = new Object(),
          // 因为 shift 会修改原数组，所以 arguments 会被去除第一个参数
          Constructor = [].shift.call(arguments);     // 拿到伪数组中的第一个参数
      // 取出参数中的第一个参数，就是我们要传入的构造函数，建立继承关系
      obj.__proto__ = Constructor.prototype;
      Constructor.apply(obj, arguments);
      return obj;
  }

  // v2 : 还需要判断返回的值是不是一个对象，如果是一个对象，我们就返回这个对象，如果没有，我们该返回什么就返回什么。
  function objectFactory() {
      var obj = new Object(),
          Constructor = [].shift.call(arguments);
      // 建立继承关系(二者之间的关系)
      obj.__proto__ = Constructor.prototype;
      // 开始执行这个构造函数
      var ret = Constructor.apply(obj, arguments);
      // 看一下构造函数的返回值，是对象还是一个基本数据类型?
      return typeof ret === &#39;object&#39; ? ret : obj;
  }


  // v4：Object.create的原理
    // var obj = Object.create(Constructor.prototype);
    // 等价于：
    // var obj = new Object();
    // obj.__proto__ = Constructor.prototype;
    const _new = function () {
        var Constructor = [].shift.call(arguments);
        // 1. 创建一个对象，这个对象要继承与构造函数的原型对象
        var obj = Object.create(Constructor.prototype);
        // 2. 执行这个构造函数
        var ret = Constructor.apply(obj, arguments);
        return typeof ret === &#39;object&#39; ? ret || obj : obj;
    }

    // v5: 实现一个自己的new构造函数
    const _new = function() {
        // 从Object.prototype上克隆一个对象 
        var obj = new Object();
        // 取出来外部传入的构造器
        var Constructor = [].shift.call(arguments);

        // 使用一个中间的函数来维护原型的关系
        var F = function(){};
        F.prototype = Constructor.prototype;
        obj = new F();

        // 开始执行这个构造函数
        var res = Constructor.apply(obj, arguments);
        // 确保构造器总是返回一个对象(使用res || obj 的方式来防止返回null参数)
        return typeof res === &#39;object&#39; ? res || obj : obj;
    }</code></pre>
]]></description><link>https://blog.gaoredu.com/article/f44f1a0d-1de4-43f4-90b1-90039d0e1562</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f44f1a0d-1de4-43f4-90b1-90039d0e1562</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jul 2024 05:56:01 GMT</pubDate></item><item><title><![CDATA[【前端面试题】JS基础]]></title><description><![CDATA[<h1 id="js基础知识">JS基础知识</h1>
<h2 id="1----javascript的typeof返回哪些数据类型">1.    javascript的typeof返回哪些数据类型</h2>
<pre><code class="language-js">   alert(typeof [1, 2]); //object
    alert(typeof &#39;leipeng&#39;); //string
    var i = true; 
    alert(typeof i); //boolean
    alert(typeof 1); //number
    var a; 
    alert(typeof a); //undefined
    function a(){;};
alert(typeof a) //function
typeof isNaN  function
检测数组的几种方式：
Array.isArray(arr);   es5
Object.toString.call([]) === ‘object Array’
arr instanceof Array
arr.constructor === Array</code></pre>
<h2 id="2----例举3种强制类型转换和2种隐式类型转换">2.    例举3种强制类型转换和2种隐式类型转换?</h2>
<p>强制（parseInt(),parseFloat(),Number()）
隐式（== ,!!）</p>
<h2 id="3----split-、join-的区别">3.    split() 、join() 的区别</h2>
<p>前者是切割成数组的形式，后者是将数组转换成字符串</p>
<h2 id="4----数组方法pop-push-unshift-shift">4.    数组方法pop() push() unshift() shift()</h2>
<p>Push()尾部添加 pop()尾部删除
Unshift()头部添加 shift()头部删除</p>
<h2 id="5----事件绑定和普通事件有什么区别">5.    事件绑定和普通事件有什么区别</h2>
<p>普通添加事件的方法：</p>
<pre><code class="language-js">var btn = document.getElementById(&quot;hello&quot;);
btn.onclick = function(){
    alert(1);
}
btn.onclick = function(){
    alert(2);
}
执行上面的代码只会alert 2 

事件绑定方式添加事件：
var btn = document.getElementById(&quot;hello&quot;);
btn.addEventListener(&quot;click&quot;,function(){
    alert(1);
},false);
btn.addEventListener(&quot;click&quot;,function(){
    alert(2);
},false);
执行上面的代码会先alert 1 再 alert 2
1.    普通添加事件的方法不支持添加多个事件，最下面的事件会覆盖上面的，而事件绑定（addEventListener）方式添加事件可以添加多个。
2.    普通事件绑定不支持DOM事件流，事件捕获-目标元素-事件冒泡（可以把事件绑定在不同的阶段去执行）
3.    addEventListener不兼容低版本IE，第三个参数默认为false，表示在事件冒泡阶段执行
普通事件无法取消；第三个参数为true的时候表示在事件捕获的阶段执行；不需要on前缀；
addEventLisntener还支持事件冒泡+事件捕获；
4.    addEventLisntener同一个元素绑定完全相同的事件并不会覆盖掉前面的事件
5.    attachEvent只支持事件冒泡，不支持事件捕获。</code></pre>
<h2 id="6----ie和dom事件流的区别">6.    IE和DOM事件流的区别</h2>
<p>1.执行顺序不一样、
2.参数不一样
3.事件加不加on
4.this指向问题</p>
<h2 id="7----ie和标准下有哪些兼容性的写法">7.    IE和标准下有哪些兼容性的写法</h2>
<p>Var ev = ev || window.event；   // 获取触发事件对象
Var target = ev.srcElement||ev.target  // 获取触发事件的源对象
document.documentElement.clientWidth || document.body.clientWidth</p>
<h2 id="8----call和apply的区别">8.    call和apply的区别</h2>
<p>call方法: 
语法：call(thisObj，Object1,Object2...)
定义：调用一个对象的一个方法，以另一个对象替换当前对象。
说明：
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
如果没有提供 thisObj 参数，那么 Global 对象被用作 thisObj。 </p>
<p>apply方法： 
语法：apply(thisObj，[argArray])
定义：应用某一对象的一个方法，用另一个对象替换当前对象。 
说明： 
如果 argArray 不是一个有效的数组或者不是 arguments 对象，那么将导致一个 TypeError。 
如果没有提供 argArray 和 thisObj 任何一个参数，那么 Global 对象将被用作 thisObj， 并且无法被传递任何参数。</p>
<h2 id="9----b继承a的方法">9.    b继承a的方法</h2>
<p>原型链继承
借用构造函数继承
原型+构造函数组合继承
寄生式继承</p>
<pre><code class="language-js">function A( age, name ){ 
  this.age = age; 
  this.name = name; 
} 

A.prototype.show = function(){ 
  alert(&#39;父级方法&#39;); 
} 

function B(age,name,job){ 
  A.apply( this, arguments ); 
  this.job = job; 
} 

B.prototype = new A();
var b = new A(14,&#39;侠客行&#39;); 
var a = new B(15,&#39;狼侠&#39;,&#39;侠客&#39;); </code></pre>
<h2 id="10----如何阻止事件冒泡和默认事件">10.    如何阻止事件冒泡和默认事件</h2>
<p>canceBubble()只支持IE,return false,stopPropagation()</p>
<h2 id="11----js创建对象的几种方式？">11.    JS创建对象的几种方式？</h2>
<p>对象字面量 / Object构造函数
构造函数
纯构造函数
空构造函数 + 原型
混合构造函数 + 原型
动态原型</p>
<pre><code class="language-js">// 动态原型的使用
    function Person(name, work) {
        this.name = name;

        // JS中通过if条件动态给一个对象添加属性或者方法的过程就是动态原型
        if (work) {
            Person.prototype.working = function () {
                console.log(&#39;我的工作是：&#39;, work);
            }
        }
    }
寄生构造函数
Object.create()</code></pre>
<h2 id="12----this指针，闭包，作用域">12.    this指针，闭包，作用域</h2>
<p>闭包： 收敛权限，避免变量全局污染；可以实现模块化（jQuery）</p>
<pre><code class="language-js">// 立即执行函数
    var common = (function () {
        var name = &#39;common module&#39;;
        function initPage() {
            console.log(name);
        }

        // 向外暴露一个对象
        return {
            initpage : initPage
        }
    })();

    common.initpage();
// 使用闭包函数实现点击弹出真实索引
    var lis = document.querySelectorAll(&#39;li&#39;);
    for (var i = 0; i &lt; lis.length; i++) {
        (function (i) {
            lis[i].addEventListener(&#39;click&#39;, function () {
                alert(i);
            })
        })(i);
    }</code></pre>
<h2 id="13----添加-删除-替换-插入到某个接点的方法">13.    添加 删除 替换 插入到某个接点的方法</h2>
<pre><code class="language-js">obj.appendChid()
obj.insertBefore()
obj.replaceChild()
obj.removeChild()</code></pre>
<h2 id="14----javascript的本地对象，内置对象和宿主对象">14.    javascript的本地对象，内置对象和宿主对象</h2>
<p>本地对象为array obj regexp等可以new实例化
内置对象为gload Math 等不可以实例化的
宿主对象为浏览器自带的document,window 等</p>
<h2 id="15----windowonload-和document-ready的区别">15.    window.onload 和document ready的区别</h2>
<p>window.onload 是在dom文档树加载完和所有文件加载完之后执行一个函数Document.ready原生种没有这个方法，jquery中有 $().ready(function),在dom文档树加载完之后执行一个函数（注意，这里面的文档树加载完不代表全部文件加载完）。
$(document).ready要比window.onload先执行
window.onload只能出来一次，$(document).ready可以出现多次</p>
<h2 id="16----和的不同">16.    ”==”和“===”的不同</h2>
<p>前者会自动转换类型
后者不会</p>
<h2 id="17----javascript的同源策略">17.    javascript的同源策略</h2>
<p>一段脚本只能读取来自于同一来源的窗口和文档的属性，这里的同一来源指的是主机名、议和端口号的组合。
Ajax跨域的实现，JSONP的底层实现原理，如何解决跨域请求</p>
<h2 id="18----javascript是一门什么样的语言，它有哪些特点？">18.    JavaScript是一门什么样的语言，它有哪些特点？</h2>
<p>没有标准答案。
javaScript一种直译式脚本语言，是一种动态类型、弱类型、基于原型的语言，内置支持类型。它的解释器被称为JavaScript引擎，为浏览器的一部分，广泛用于客户端的脚本语言，最早是在HTML网页上使用，用来给HTML网页增加动态功能。JavaScript兼容于ECMA标准，因此也称为ECMAScript。
基本特点
1．是一种解释性脚本语言（代码不进行预编译）。
2．主要用来向HTML（标准通用标记语言下的一个应用）页面添加交互行为。
3．可以直接嵌入HTML页面，但写成单独的js文件有利于结构和行为的分离。
4．跨平台特性，在绝大多数浏览器的支持下，可以在多种平台下运行（如Windows、Linux、Mac、Android、iOS等）。</p>
<h2 id="19----javascript的数据类型都有什么？">19.    JavaScript的数据类型都有什么？</h2>
<p>基本数据类型：String,boolean,Number,Undefined, Null
引用数据类型：Object(Array,Date,RegExp,Function)
那么问题来了，如何判断某变量是否为数组数据类型？
方法一.判断其是否具有“数组性质”，如slice()方法。可自己给该变量定义slice方法，故有时会失效
方法二.obj instanceof Array 在某些IE版本中不正确
方法三.方法一二皆有漏洞，在ECMA Script5中定义了新方法Array.isArray(), 保证其兼容性，最好的方法如下：</p>
<pre><code class="language-js">    if(typeof Array.isArray===&quot;undefined&quot;)
{
  Array.isArray = function(arg){
        return Object.prototype.toString.call(arg)===&quot;[object Array]&quot;
    };  
}</code></pre>
<h2 id="20----已知id的input输入框，希望获取这个输入框的输入值，怎么做？不使用第三方框架">20.    已知ID的Input输入框，希望获取这个输入框的输入值，怎么做？(不使用第三方框架)</h2>
<pre><code>document.getElementById(“ID”).value</code></pre><h2 id="21----希望获取到页面中所有的checkbox怎么做？不使用第三方框架">21.    希望获取到页面中所有的checkbox怎么做？(不使用第三方框架)</h2>
<pre><code class="language-js">    var domList = document.getElementsByTagName(‘input’)
var checkBoxList = [];
var len = domList.length;　　//缓存到局部变量
while (len--) {　　//使用while的效率会比for循环更高
　　if (domList[len].type == ‘checkbox’) {
    　　checkBoxList.push(domList[len]);
　　}
}</code></pre>
<h2 id="22----设置一个已知id的div的html内容为xxxx，字体颜色设置为黑色不使用第三方框架">22.    设置一个已知ID的DIV的html内容为xxxx，字体颜色设置为黑色(不使用第三方框架)</h2>
<pre><code class="language-js">var dom = document.getElementById(“ID”);
dom.innerHTML = “xxxx”
dom.style.color = “#000”</code></pre>
<h2 id="23----当一个dom节点被点击时候，我们希望能够执行一个函数，应该怎么做？">23.    当一个DOM节点被点击时候，我们希望能够执行一个函数，应该怎么做？</h2>
<p>直接在DOM里绑定事件：<div onclick=”test()”></div>
在JS里通过onclick绑定：xxx.onclick = test
通过事件添加进行绑定：addEventListener(xxx, ‘click’, test)
那么问题来了，Javascript的事件流模型都有什么？
“事件冒泡”：事件开始由最具体的元素接受，然后逐级向上传播
“事件捕捉”：事件由最不具体的节点先接收，然后逐级向下，一直到最具体的
“DOM事件流”：三个阶段：事件捕捉，目标阶段，事件冒泡</p>
<h2 id="24----看下列代码输出为何？解释原因。">24.    看下列代码输出为何？解释原因。</h2>
<pre><code class="language-js">var a;
alert(typeof a); // undefined
alert(b); // 报错</code></pre>
<p>解释：Undefined是一个只有一个值的数据类型，这个值就是“undefined”，在使用var声明变量但并未对其赋值进行初始化时，这个变量的值就是undefined。而b由于未声明将报错。注意未申明的变量和声明了未赋值的是不一样的。</p>
<h2 id="25----看下列代码输出什么？解释原因。">25.    看下列代码,输出什么？解释原因。</h2>
<pre><code class="language-js">var a = null;
alert(typeof a); //object</code></pre>
<p>解释：null是一个只有一个值的数据类型，这个值就是null。表示一个空指针对象，所以用typeof检测会返回”object”。</p>
<h2 id="26----看下列代码输出什么？解释原因。">26.    看下列代码,输出什么？解释原因。</h2>
<pre><code class="language-js">var undefined;
undefined == null; // true
1 == true;   // true
2 == true;   // false
0 == false;  // true
0 == &#39;&#39;;     // true
NaN == NaN;  // false
[] == false; // true
[] == ![];   // true</code></pre>
<p>•    undefined与null相等，但不恒等（===）
一个是number一个是string时，会尝试将string转换为number
尝试将boolean转换为number，0或1
尝试将Object转换成number或string，取决于另外一个对比量的类型
所以，对于0、空字符串的判断，建议使用 “===” 。“===”会先判断两边的值类型，类型不匹配时为false。
那么问题来了，看下面的代码，输出什么，foo的值为什么？</p>
<pre><code class="language-js">var foo = &quot;11&quot;+2-&quot;1&quot;;
console.log(foo);
console.log(typeof foo);   // number</code></pre>
<p>执行完后foo的值为111，foo的类型为number。</p>
<h2 id="27----看代码给答案。">27.    看代码给答案。</h2>
<pre><code class="language-js">var a = new Object();
a.value = 1;
b = a;
b.value = 2;
alert(a.value);</code></pre>
<p>答案：2（考察引用数据类型细节）</p>
<h2 id="28-已知数组var-stringarray--this-is-baidu-campus，alert出this-is-baidu-campus。">28. 已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”]，Alert出”This is Baidu Campus”。</h2>
<p>答案：alert(stringArray.join(“ ”))        // 注意中间的空格</p>
<h2 id="29----已知有字符串fooget-element-by-id写一个function将其转化成驼峰表示法getelementbyid。">29.    已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。</h2>
<pre><code class="language-js">    function combo(msg){
    var arr=msg.split(&quot;-&quot;);
    for(var i=1;i&lt;arr.length;i++){
        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);
    }
    msg=arr.join(&quot;&quot;);
    return msg;
}</code></pre>
<h2 id="30----var-numberarray--362415-（考察基础api）">30.    var numberArray = [3,6,2,4,1,5]; （考察基础API）</h2>
<p>1) 实现对该数组的倒排，输出[5,1,4,2,6,3]
numberArray.reverse()
2) 实现对该数组的降序排列，输出[6,5,4,3,2,1]
numberArray.sort(function(a,b){return b-a})</p>
<h2 id="31----输出今天的日期，以yyyy-mm-dd的方式，比如今天是2014年9月26日，则输出2014-09-26">31.    输出今天的日期，以YYYY-MM-DD的方式，比如今天是2014年9月26日，则输出2014-09-26</h2>
<pre><code class="language-js">var d = new Date();
// 获取年，getFullYear()返回4位的数字
var year = d.getFullYear();
// 获取月，月份比较特殊，0是1月，11是12月
var month = d.getMonth() + 1;
// 变成两位
month = month &lt; 10 ? &#39;0&#39; + month : month;
// 获取日
var day = d.getDate();
day = day &lt; 10 ? &#39;0&#39; + day : day;
alert(year + &#39;-&#39; + month + &#39;-&#39; + day);</code></pre>
<h2 id="32----将字符串idname中的id替换成10，name替换成tony-（使用正则表达式）">32.    将字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替换成10，{$name}替换成Tony （使用正则表达式）</h2>
<p>答案：&quot;<tr><td>{$id}</td><td>{$id}_{$name}</td></tr>&quot;.replace(/{$id}/g, &#39;10&#39;).replace(/{$name}/g, &#39;Tony&#39;);</p>
<h2 id="33----为了保证页面输出安全，我们经常需要对一些特殊的字符进行转义，请写一个函数escapehtml，将---进行转义">33.    为了保证页面输出安全，我们经常需要对一些特殊的字符进行转义，请写一个函数escapeHtml，将&lt;, &gt;, &amp;, “进行转义</h2>
<pre><code class="language-js">    function escapeHtml(str) {
return str.replace(/[&lt;&gt;”&amp;]/g, function(match) {
    switch (match) {
                   case “&lt;”:
                      return “&amp;lt;”;
                   case “&gt;”:
                      return “&amp;gt;”;
                   case “&amp;”:
                      return “&amp;amp;”;
                   case “\””:
                      return “&amp;quot;”;
      }
  });
}</code></pre>
<h2 id="34----foo--foobar-，这行代码是什么意思？为什么要这样写？">34.    foo = foo||bar ，这行代码是什么意思？为什么要这样写？</h2>
<p>答案：if(!foo) foo = bar; //如果foo存在，值不变，否则把bar的值赋给foo。
短路表达式：作为”&amp;&amp;”和”||”操作符的操作数表达式，这些表达式在进行求值时，只要最终的结果已经可以确定是真或假，求值过程便告终止，这称之为短路求值。</p>
<h2 id="35----看下列代码，将会输出什么变量声明提升">35.    看下列代码，将会输出什么?(变量声明提升)</h2>
<pre><code class="language-js">    var foo = 1;
(function(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
})()</code></pre>
<p>答案：输出undefined 和 2。上面代码相当于：</p>
<pre><code class="language-js">    var foo = 1;
(function(){
    var foo;
    console.log(foo); //undefined
    foo = 2;
    console.log(foo); // 2;   
})()</code></pre>
<p>函数声明与变量声明会被JavaScript引擎隐式地提升到当前作用域的顶部，但是只提升名称不会提升赋值部分。</p>
<h2 id="36----用js实现随机选取10100之间的10个数字，存入一个数组，并排序。">36.    用js实现随机选取10–100之间的10个数字，存入一个数组，并排序。</h2>
<pre><code class="language-js">    function randomNub(aArray, len, min, max) {
               if (len &gt;= (max - min)) {
                   return &#39;超过&#39; + min + &#39;-&#39; + max + &#39;之间的个数范围&#39; + (max - min - 1) + &#39;个的总数&#39;;
               }
               if (aArray.length &gt;= len) {
                   aArray.sort(function(a, b) {
                       return a - b
                   });
                   return aArray;
               }
               var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);
               for (var j = 0; j &lt; aArray.length; j++) {
                   if (nowNub == aArray[j]) {
                       randomNub(aArray, len, min, max);
                       return;
                   }
               }
               aArray.push(nowNub);
               randomNub(aArray, len, min, max);
               return aArray;
           }
var arr=[];
randomNub(arr,10,10,100);</code></pre>
<h2 id="37----把两个数组合并，并删除第二个元素。">37.    把两个数组合并，并删除第二个元素。</h2>
<pre><code class="language-js">var array1 = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;];
var bArray = [&#39;d&#39;,&#39;e&#39;,&#39;f&#39;];
var cArray = array1.concat(bArray);
cArray.splice(1,1);</code></pre>
<h2 id="38----怎样添加、移除、移动、复制、创建和查找节点（原生js，实在基础，没细写每一步）">38.    怎样添加、移除、移动、复制、创建和查找节点（原生JS，实在基础，没细写每一步）</h2>
<p>1）创建新节点
createDocumentFragment()    //创建一个DOM片段
createElement()   //创建一个具体的元素
createTextNode()   //创建一个文本节点
2）添加、移除、替换、插入
appendChild()      //添加
removeChild()      //移除
replaceChild()      //替换
insertBefore()      //插入
3）查找
getElementsByTagName()    //通过标签名称
getElementsByName()     //通过元素的Name属性的值
getElementById()        //通过元素Id，唯一性</p>
<h2 id="39----有这样一个url：httpitemtaobaocomitemhtma1b2cdxxxe，请写一段js程序提取url中的各个get参数参数名和参数个数不确定，将其按key-value形式返回到一个json结构中，如a1-b2-c-dxxx-eundefined。">39.    有这样一个URL：<a href="http://item.taobao.com/item.htm?a=1&amp;b=2&amp;c=&amp;d=xxx&amp;e%EF%BC%8C%E8%AF%B7%E5%86%99%E4%B8%80%E6%AE%B5JS%E7%A8%8B%E5%BA%8F%E6%8F%90%E5%8F%96URL%E4%B8%AD%E7%9A%84%E5%90%84%E4%B8%AAGET%E5%8F%82%E6%95%B0(%E5%8F%82%E6%95%B0%E5%90%8D%E5%92%8C%E5%8F%82%E6%95%B0%E4%B8%AA%E6%95%B0%E4%B8%8D%E7%A1%AE%E5%AE%9A)%EF%BC%8C%E5%B0%86%E5%85%B6%E6%8C%89key-value%E5%BD%A2%E5%BC%8F%E8%BF%94%E5%9B%9E%E5%88%B0%E4%B8%80%E4%B8%AAjson%E7%BB%93%E6%9E%84%E4%B8%AD%EF%BC%8C%E5%A6%82%7Ba:%E2%80%991%E2%80%B2">http://item.taobao.com/item.htm?a=1&amp;b=2&amp;c=&amp;d=xxx&amp;e，请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定)，将其按key-value形式返回到一个json结构中，如{a:’1′</a>, b:’2′, c:”, d:’xxx’, e:undefined}。</h2>
<p>答案：</p>
<pre><code class="language-js">    function serilizeUrl(url) {
    var urlObject = {};
    if (/\?/.test(url)) {
        var urlString = url.substring(url.indexOf(&quot;?&quot;) + 1);
        var urlArray = urlString.split(&quot;&amp;&quot;);
        for (var i = 0, len = urlArray.length; i &lt; len; i++) {
            var urlItem = urlArray[i];
            var item = urlItem.split(&quot;=&quot;);
            urlObject[item[0]] = item[1];
        }
        return urlObject;
    }
    return null;
}</code></pre>
<h2 id="40----正则表达式构造函数var-regnew-regexpxxx与正则表达字面量var-reg有什么不同？匹配邮箱的正则表达式？">40.    正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不同？匹配邮箱的正则表达式？</h2>
<p>答案：当使用RegExp()构造函数的时候，不仅需要转义引号（即\”表示”），并且还需要双反斜杠（即\表示一个\）。使用正则表达字面量的效率更高。 
邮箱的正则匹配：</p>
<pre><code class="language-js">    var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;</code></pre>
]]></description><link>https://blog.gaoredu.com/article/de46c77f-57dd-4f64-92a6-3e11c772ed77</link><guid isPermaLink="true">https://blog.gaoredu.com/article/de46c77f-57dd-4f64-92a6-3e11c772ed77</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 22 Jul 2024 10:14:32 GMT</pubDate></item><item><title><![CDATA[【流行框架】Angular相关]]></title><description><![CDATA[<h1 id="angular相关面试题">Angular相关面试题</h1>
<h2 id="1-ng-showng-hide-与-ng-if的区别？">1. ng-show/ng-hide 与 ng-if的区别？</h2>
<ol>
<li>ng-show/ng-hide实际上是通过display来进行隐藏和显示的。2. 而ng-if实际上控制dom节点的增删除来实现的。</li>
<li>因此如果我们是根据不同的条件来进行dom节点的加载的话，那么ng-if的性能好过ng-show.</li>
</ol>
<h2 id="2解释下什么是rootscrope以及和scope的区别？">2.解释下什么是$rootScrope以及和$scope的区别？</h2>
<p>通俗的说$rootScrope 页面所有$scope的父亲。</p>
<p>我们来看下如何产生$rootScope和$scope吧。</p>
<ol>
<li>step1:Angular解析ng-app然后在内存中创建$rootScope。</li>
<li>step2:angular回继续解析，找到{}表达式，并解析成变量。</li>
<li>step3:接着会解析带有ng-controller的div然后指向到某个controller函数。这个时候在这个controller函数变成一个$scope对象实例。</li>
</ol>
<h2 id="3-表达式-yourmodel是如何工作的？">3. 表达式 {{yourModel}}是如何工作的？</h2>
<p>它依赖于 $interpolation服务，在初始化页面html后，它会找到这些表达式，并且进行标记，于是每遇见一个{}，则会设置一个$watch。而$interpolation会返回一个带有上下文参数的函数，最后该函数执行，则算是表达式$parse到那个作用域上。</p>
<h2 id="4-angular中的digest周期是什么？">4. Angular中的digest周期是什么？</h2>
<p>每个digest周期中，angular总会对比scope上model的值，一般digest周期都是自动触发的，我们也可以使用$apply进行手动触发。</p>
<h2 id="5-如何取消-timeout-以及停止一个watch">5. 如何取消 $timeout, 以及停止一个$watch()?</h2>
<p>停止 $timeout我们可以用cancel：</p>
<pre><code class="language-js">var customTimeout = $timeout(function () {  
  // your code
}, 1000);

$timeout.cancel(customTimeout);
停掉一个$watch：

// .$watch() 会返回一个停止注册的函数
function that we store to a variable  
var deregisterWatchFn = $rootScope.$watch(‘someGloballyAvailableProperty’, function (newVal) {  
  if (newVal) {
    // we invoke that deregistration function, to disable the watch
    deregisterWatchFn();
    ...
  }
});</code></pre>
<h2 id="6-angular-directive中restrict-中分别可以怎样设置？scope中有什么区别？">6. Angular Directive中restrict 中分别可以怎样设置？scope中@,=,&amp;有什么区别？</h2>
<p>restrict中可以分别设置:</p>
<p>A匹配属性
E匹配标签
C匹配class
M 匹配注释
当然你可以设置多个值比如AEC,进行多个匹配。</p>
<p>在scope中，@,=,&amp;在进行值绑定时分别表示</p>
<p>@获取一个设置的字符串，它可以自己设置的也可以使用{{yourModel}}进行绑定的;
= 双向绑定，绑定scope上的一些属性；
&amp; 用于执行父级scope上的一些表达式，常见我们设置一些需要执行的函数</p>
<pre><code class="language-js">angular.module(&#39;docsIsolationExample&#39;, [])  
.controller(&#39;Controller&#39;, [&#39;$scope&#39;, function($scope) {
  $scope.alertName = function() {
      alert(&#39;directive scope &amp;&#39;);
  }
}])
.directive(&#39;myCustomer&#39;, function() {
  return {
    restrict: &#39;E&#39;,
    scope: {
      clickHandle: &#39;&amp;&#39;
    },
    template: &#39;&lt;button ng-click=&quot;testClick()&quot;&gt;Click Me&lt;/button&gt;&#39;,
    controller: function($scope) {

      $scope.testClick = function() {
        $scope.clickHandle();

      }  
    }
  };
});
&lt;div ng-app=&quot;docsIsolationExample&quot;&gt;  
&lt;div ng-controller=&quot;Controller&quot;&gt;  
  &lt;my-customer click-handle=&quot;alertName()&quot;&gt;&lt;/my-customer&gt;
&lt;/div&gt;  
 &lt;/div&gt;</code></pre>
<h2 id="7-列出至少三种实现不同模块之间通信方式？">7. 列出至少三种实现不同模块之间通信方式？</h2>
<p>Service</p>
<p>events,指定绑定的事件</p>
<p>使用 $rootScope</p>
<p>controller之间直接使用$parent, $$childHead等</p>
<p>directive 指定属性进行数据绑定</p>
<h2 id="8-有哪些措施可以改善angular-性能">8. 有哪些措施可以改善Angular 性能</h2>
<blockquote>
<p>[!NOTE]
官方提倡的，关闭debug,$compileProvider</p>
</blockquote>
<ol>
<li>使用一次绑定表达式即{{yourModel}}</li>
<li>减少watcher数量</li>
<li>在无限滚动加载中避免使用ng-repeat</li>
<li>使用性能测试的小工具去挖掘你的angular性能问题，我们可以使用简单的console.time()也可以借助开发者工具以及Batarang</li>
</ol>
<pre><code class="language-js">myApp.config(function ($compileProvider) {  
  $compileProvider.debugInfoEnabled(false);
});

console.time(&quot;TimerName&quot;);  
//your code
console.timeEnd(&quot;TimerName&quot;);  </code></pre>
<h2 id="9-你认为在angular中使用jquery好么？">9. 你认为在Angular中使用jQuery好么？</h2>
<ol>
<li><p>angular自带了很多api可以完全替代掉jQuery中常用的api，我们可以使用angular.element，$http,$timeout,ng-init等。</p>
</li>
<li><p>我们不妨再换个角度，如果业务需求，而对于一个新人（比较熟悉jQuery）的话，或许你引入jQuery可以让它在解决问题，比如使用插件上有更多的选择，当然这是通过影响代码组织来提高工作效率，随着对于angular理解的深入，在重构时会逐渐摒弃掉当初引入jquery时的一些代码。</p>
</li>
<li><p>所以我觉得两种框架说完全不能一起用肯定是错的，但是我们还是应该尽力去遵循angular的设计。</p>
</li>
</ol>
<h2 id="10-如何进行angular的单元测试">10. 如何进行angular的单元测试</h2>
<blockquote>
<p>[!NOTE]
我们可以使用karam＋jasmine 进行单元测试,我们通过ngMock引入angular app然后自行添加我们的测试用例。 一段简单的测试代码：</p>
</blockquote>
<pre><code class="language-js">describe(&#39;calculator&#39;, function () {

  beforeEach(module(&#39;calculatorApp&#39;));

  var $controller;

  beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
  }));

  describe(&#39;sum&#39;, function () {
        it(&#39;1 + 1 should equal 2&#39;, function () {
            var $scope = {};
            var controller = $controller(&#39;CalculatorController&#39;, { $scope: $scope });
            $scope.x = 1;
            $scope.y = 2;
            $scope.sum();
            expect($scope.z).toBe(3);
        });    
    });

});</code></pre>
<h2 id="11--请解释angular-2应用程序的生命周期hooks是什么？">11.  请解释Angular 2应用程序的生命周期hooks是什么？</h2>
<ol>
<li><p>Angular 2组件/指令具有生命周期事件。是由@angular/core管理的。</p>
</li>
<li><p>@angular/core会创建组件。渲染它。创建并呈现它的后代。当@angular/core的数据绑定属性更改时，处理就会更改，在从DOM中删除其模板之前，就会销毁掉它。Angular提供了一组生命周期hooks（特殊事件）。能够被分接到生命周期中，并在须要时执行操作。</p>
</li>
<li><p>构造函数会在全部生命周期事件之前执行。</p>
</li>
<li><p>每一个接口都有一个前缀为ng的hook方法。比如，ngOnint界面的OnInit方法，这种方法必须在组件中实现。 </p>
</li>
<li><p>一部分事件适用于组件/指令，而少数事件仅仅适用于组件。</p>
</li>
</ol>
<ul>
<li><p>ngOnChanges：当Angular设置其接收当前和上一个对象值的数据绑定属性时响应。</p>
</li>
<li><p>ngOnInit：在第一个ngOnChange触发器之后，初始化组件/指令。
这是最经常使用的方法。用于从后端服务检索模板的数据。</p>
</li>
<li><p>ngDoCheck：检測并在Angular上下文发生变化时执行。
每次更改检測执行时，会被调用。</p>
</li>
<li><p>ngOnDestroy：在Angular销毁指令/组件之前清除。取消订阅可观察的对象并脱离事件处理程序，以避免内存泄漏。</p>
</li>
</ul>
<p>组件特定hooks：</p>
<ul>
<li>ngAfterContentInit：组件内容已初始化完毕</li>
<li>ngAfterContentChecked：在Angular检查投影到其视图中的绑定的外部内容之后。</li>
<li>ngAfterViewInit：Angular创建组件的视图后。</li>
<li>ngAfterViewChecked：在Angular检查组件视图的绑定之后。</li>
</ul>
<h2 id="12--使用angular-2，和使用angular-1相比。有什么优势？">12.  使用Angular 2，和使用Angular 1相比。有什么优势？</h2>
<ol>
<li>Angular 2是一个平台，不仅是一种语言</li>
<li>更好的速度和性能</li>
<li>更简单的依赖注入</li>
<li>模块化。跨平台</li>
<li>具备ES6和Typescript的优点。</li>
<li>灵活的路由，具备延迟载入功能</li>
<li>更easy学习</li>
</ol>
<h2 id="13--angular-2中的路由工作原理是什么？">13.  Angular 2中的路由工作原理是什么？</h2>
<blockquote>
<p>路由是能够让用户在视图/组件之间导航的机制。Angular 2简化了路由，并提供了在模块级（延迟载入）下配置和定义的灵活性。 </p>
</blockquote>
<ol>
<li><p>Angular应用程序具有路由器服务的单个实例。而且每当URL改变时。对应的路由就与路由配置数组进行匹配。在成功匹配时，它会应用重定向，此时路由器会构建ActivatedRoute对象的树。同一时候包括路由器的当前状态。在重定向之前，路由器将通过执行保护（CanActivate）来检查是否同意新的状态。</p>
</li>
<li><p>Route Guard仅仅是路由器执行来检查路由授权的接口方法。</p>
</li>
<li><p>保护执行后，它将解析路由数据并通过将所需的组件实例化到<strong>router-outlet</strong>中来激活路由器状态。</p>
</li>
</ol>
<hr>
<p><strong>扩展阅读</strong></p>
<ol>
<li><a href="https://www.codeproject.com/Articles/1164813/Angular-Routing">https://www.codeproject.com/Articles/1164813/Angular-Routing</a> </li>
<li><a href="https://vsavkin.com/angular-2-router-d9e30599f9ea#.kt4z1v957">https://vsavkin.com/angular-2-router-d9e30599f9ea#.kt4z1v957</a></li>
</ol>
<h2 id="14--什么是事件发射器？它是怎样在angular-2中工作的？">14.  什么是事件发射器？它是怎样在Angular 2中工作的？</h2>
<ol>
<li><p>Angular 2不具有双向digest cycle。这是与Angular 1不同的。</p>
</li>
<li><p>在Angular2中，组件中发生的不论什么改变总是从当前组件传播到其全部子组件中。假设一个子组件的更改须要反映到其父组件的层次结构中，我们能够通过使用事件发射器api来发出事件。</p>
</li>
<li><p>简而言之，EventEmitter是在@ angular/core模块中定义的类。由组件和指令使用。用来发出自己定义事件。</p>
</li>
</ol>
<pre><code class="language-js">@output() somethingChanged = new EventEmitter();</code></pre>
<p>我们使用somethingChanged.emit（value）方法来发出事件。</p>
<p>这通经常使用在setter中，当类中的值被更改完毕时。</p>
<p>能够通过模块的不论什么一个组件，使用订阅方法来实现事件发射的订阅。</p>
<pre><code class="language-js">myObj.somethingChanged.subscribe(val) =&gt; this.myLocalMethod(val));</code></pre>
<hr>
<p><strong>扩展阅读</strong></p>
<ol>
<li><a href="http://stackoverflow.com/questions/36076700/what-is-the-proper-use-of-an-eventemitter">http://stackoverflow.com/questions/36076700/what-is-the-proper-use-of-an-eventemitter</a></li>
<li><a href="https://angular.io/docs/ts/latest/api/core/index/EventEmitter-class.HTML">https://angular.io/docs/ts/latest/api/core/index/EventEmitter-class.HTML</a></li>
</ol>
<h2 id="15--怎样在angular-2应用程序中使用codelyzer？">15.  怎样在Angular 2应用程序中使用codelyzer？</h2>
<blockquote>
<p>全部企业应用程序都会遵循一组编码惯例和准则。以更好的方式维护代码。Codelyzer是一个开源工具。用于执行和检查是否遵循了提前定义的编码准则。Codelyzer仅对Angular和TypeScript项目进行静态代码分析。</p>
</blockquote>
<ol>
<li><p>Codelyzer执行在tslint的顶部，其编码约定通常在tslint.json文件里定义。Codelyzer能够直接通过Angularcli或npm执行。</p>
</li>
<li><p>像Visual Studio Code和Atom这种编辑器也支持codelyzer，仅仅须要通过做一个主要的设置就能实现。</p>
</li>
<li><p>要在Visual Studio代码中设置codelyzer，我们能够在文件 - &gt;选项 - &gt;用户设置中加入tslint规则的路径。</p>
</li>
</ol>
<pre><code class="language-js">{

    &quot;tslint.rulesDirectory&quot;: &quot;./node_modules/codelyzer&quot;,

    &quot;typescript.tsdk&quot;: &quot;node_modules/typescript/lib&quot;

}</code></pre>
<ul>
<li><p>从cli中执行的代码：ng lint。</p>
</li>
<li><p>从npm中执行的代码： npm run lint</p>
</li>
</ul>
<hr>
<p><strong>扩展阅读</strong></p>
<ol>
<li><a href="https://github.com/mgechev/codelyzer">https://github.com/mgechev/codelyzer</a></li>
<li><a href="https://www.youtube.com/watch?v=bci-Z6nURgE">https://www.youtube.com/watch?v=bci-Z6nURgE</a></li>
</ol>
<h2 id="16--什么是延迟载入？怎样在angular-2中启用延迟载入？">16.  什么是延迟载入？怎样在Angular 2中启用延迟载入？</h2>
<blockquote>
<p>大多数企业应用程序包括用各式各样的用于特定业务案例的模块。</p>
</blockquote>
<ol>
<li><p>捆绑整个应用程序代码并完毕载入，会在初始调用时。产生巨大的性能开销。</p>
</li>
<li><p>延迟载入使我们仅仅载入用户正在交互的模块，而其余的模块会在执行时按需载入。</p>
</li>
<li><p>延迟载入通过将代码拆分成多个包并以按需载入的方式，来加速应用程序初始载入过程。</p>
</li>
<li><p>每一个Angular应用程序必须有一个叫AppModule的主模块。代码应该依据应用程序业务案例分为不同的子模块（NgModule）。</p>
</li>
</ol>
<p>启用延迟载入的Plunkr演示样例： </p>
<ol>
<li>我们不须要在根模块中导入或声明延迟载入模块。</li>
<li>将路由加入到顶层路由（app.routing.ts）并设置loadChildren。loadChildren会从根目录中获取绝对路3. 径。RouterModule.forRoot（）会获取routes数组并配置路由器。</li>
<li>在子模块中导入模块特定路由。</li>
<li>在子模块路由中，将路径指定为空字符串“”，也就是空路径。</li>
<li>RouterModule.forChild会再次採用路由数组为子模块组件载入并配置路由器。</li>
<li>然后，导出const路由：<pre><code class="language-js">ModuleWithProviders = RouterModule.forChild（routes）;</code></pre>
</li>
</ol>
<h2 id="17--在angular-2应用中，我们应该注意哪些安全威胁？">17.  在Angular 2应用中，我们应该注意哪些安全威胁？</h2>
<blockquote>
<p>就像不论什么其他client或Web应用程序一样，Angular 2应用程序也应该遵循一些基本准则来减轻安全风险。</p>
</blockquote>
<ol>
<li>避免为你的组件使用/注入动态HTML内容。</li>
<li>假设使用外部HTML，也就是来自数据库或应用程序之外的地方。那么就须要清理它。</li>
<li>不要将外部网址放在应用程序中，除非它是受信任的。避免网址重定向。除非它是可信的。</li>
<li>考虑使用AOT编译或离线编译。</li>
<li>通过限制api。选择使用已知或安全环境/浏览器的app来防止XSRF攻击。</li>
</ol>
<hr>
<p><strong>扩展阅读</strong></p>
<ul>
<li><a href="https://angular.io/docs/ts/latest/guide/security.HTML#!#best-practices">https://angular.io/docs/ts/latest/guide/security.HTML#!#best-practices</a></li>
</ul>
<h2 id="18--怎样优化angular-2应用程序来获得更好的性能？">18.  怎样优化Angular 2应用程序来获得更好的性能？</h2>
<blockquote>
<p>[!NOTE]
优化取决于应用程序的类型和大小以及更多因素。</p>
</blockquote>
<ol>
<li>考虑AOT编译。</li>
<li>确保应用程序已经经过了捆绑。uglify和tree shaking。</li>
<li>确保应用程序不存在不必要的import语句。</li>
<li>确保应用中已经移除了不使用的第三方库。</li>
<li>全部dependencies 和dev-dependencies都是明白分离的。</li>
<li>假设应用程序较大时，我会考虑延迟载入而不是全然捆绑的应用程序。</li>
</ol>
<hr>
<p><strong>扩展阅读</strong></p>
<ul>
<li><ol>
<li><a href="https://medium.com/@areai51/the-4-stages-of-perf-tuning-for-your-angular2-app-922ce5c1b294#.pw4m2srmr">https://medium.com/@areai51/the-4-stages-of-perf-tuning-for-your-angular2-app-922ce5c1b294#.pw4m2srmr</a></li>
</ol>
</li>
<li><ol start="2">
<li><a href="https://www.lucidchart.com/techblog/2016/05/04/angular-2-best-practices-change-detector-performance/">https://www.lucidchart.com/techblog/2016/05/04/angular-2-best-practices-change-detector-performance/</a></li>
</ol>
</li>
</ul>
<h2 id="19--怎样实现不出现编辑器警告的自己定义类型？">19.  怎样实现不出现编辑器警告的自己定义类型？</h2>
<blockquote>
<p>在大多数的情况下。第三方库都带有它的.d.ts 文件，用于类型定义。</p>
</blockquote>
<ol>
<li><p>在某些情况下，我们须要通过向现有类型提供一些更多的属性来扩展现有类型，或者假设我们须要定义其他类型以避免TypeScript警告。</p>
</li>
<li><p>假设我们须要扩展外部库的类型定义，一个好的做法是，我们并不是对node_modules或现有的typings目录进行修改，而是创建一个命名为“自己定义类型”的新目录。来存储全部的自己定义类型。</p>
</li>
<li><p>要定义应用程序（JavaScript / Typescript）对象的类型。我们应该在应用程序对应模块的models目录中，定义接口和实体类。</p>
</li>
<li><p>对于这些情况，我们能够通过创建我们自己的“ .d.ts”文件来实现定义或扩展类型。</p>
</li>
</ol>
<hr>
<p><strong>扩展阅读</strong></p>
<ul>
<li><a href="https://www.typescriptlang.org/docs/handbook/declaration-merging.HTML">https://www.typescriptlang.org/docs/handbook/declaration-merging.HTML</a></li>
<li><a href="https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files">https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files</a></li>
<li><a href="http://stackoverflow.com/questions/32948271/extend-interface-defined-in-d-ts-file">http://stackoverflow.com/questions/32948271/extend-interface-defined-in-d-ts-file</a></li>
</ul>
<h2 id="20-什么是shadow-dom？它怎样帮助angular-2更好地执行？">20. 什么是Shadow DOM？它怎样帮助Angular 2更好地执行？</h2>
<ol>
<li><p>Shadow DOM是HTML规范的一部分。它同意开发者封装自己的HTML标记，CSS样式和JavaScript。</p>
</li>
<li><p>Shadow DOM以及其他一些技术，使开发者能够像<audio>标签一样构建自己的一级标签。Web组件和API。总的来说，这些新的标签和API被称为Web组件。Shadow DOM通过提供了更好的关注分离，通过其他的HTML DOM元素实现了更少的样式与脚本的冲突。</p>
</li>
<li><p>由于shadow DOM本质上是静态的。同一时候也是开发者无法訪问的，所以它是一个非常好的候选对象。由于它缓存的DOM将在浏览器中呈现得更快，并提供更好的性能。此外。还能够相对非常好地管理shadow DOM。同一时候检測Angular 2应用的改变，而且能够有效地管理视图的又一次绘制。</p>
</li>
</ol>
<hr>
<p><strong>扩展阅读</strong></p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM">https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM</a></li>
<li><a href="https://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/">https://glazkov.com/2011/01/14/what-the-heck-is-shadow-dom/</a></li>
<li><a href="https://code.tutsplus.com/tutorials/intro-to-shadow-dom--net-34966">https://code.tutsplus.com/tutorials/intro-to-shadow-dom--net-34966</a></li>
</ul>
<h2 id="21-什么是aot编译？它有什么优缺点？">21. 什么是AOT编译？它有什么优缺点？</h2>
<blockquote>
<p>AOT编译代表的是Ahead Of Time编译，当中Angular编译器在构建时，会将Angular组件和模板编译为本机JavaScript和HTML。编译好的HTML和JavaScript将会部署到Webserver，以便浏览器能够节省编译和渲染时间。</p>
</blockquote>
<h3 id="211-优点">21.1 优点</h3>
<ol>
<li><p>更快的下载：由于应用程序已经编译。很多Angular编译器相关库就不再须要捆绑，应用程序包变得更小，所以该应用程序能够更快地下载。</p>
</li>
<li><p>更少的Http请求数：假设应用程序没有捆绑来支持延迟载入（或不论什么原因），对于每一个关联的HTML和CSS，都会有一个单独的server请求。可是预编译的应用程序会将全部模板和样式与组件对齐，因此到server的Http请求数量会更少。</p>
</li>
<li><p>更快的渲染：假设应用程序不是AOT编译，那么应用程序全然载入时，编译过程会发生在浏览器中。这须要等待下载全部必需的组件。然后等待编译器花费时间来编译应用程序。</p>
</li>
<li><p>在构建时检測错误：由于预先编译，能够检測到很多编译时错误，能够为应用程序提供更好的稳定性。</p>
</li>
</ol>
<h3 id="212-缺点">21.2 缺点</h3>
<ol>
<li>仅适用于HTML和CSS，其他文件类型须要前面的构建步骤</li>
<li>没有watch模式。必须手动完毕（bin / ngc-watch.js）并编译全部文件</li>
<li>须要维护AOT版本号的bootstrap文件（使用cli等工具时不须要）</li>
<li>在编译之前，须要清理步骤</li>
</ol>
<hr>
<p><strong>扩展阅读</strong></p>
<ul>
<li><a href="https://angular.io/docs/ts/latest/cookbook/aot-compiler.HTML">https://angular.io/docs/ts/latest/cookbook/aot-compiler.HTML</a></li>
</ul>
<h2 id="22-observables和promises的核心差别是什么？">22. Observables和Promises的核心差别是什么？</h2>
<h3 id="221-promise">22.1 Promise</h3>
<ol>
<li>返回单个值</li>
<li>不可取消</li>
</ol>
<h3 id="222-observables">22.2 Observables</h3>
<ol>
<li>能够使用多个值</li>
<li>可取消</li>
<li>支持map，filter，reduce和相似的操作符</li>
<li>ES 2016提议的功能</li>
<li>使用反应式扩展（RxJS）</li>
<li>依据时间的变化，数组成员能够异步获取</li>
</ol>
<ul>
<li>参考文章：<a href="https://www.cnblogs.com/mfmdaoyou/p/7389012.html">https://www.cnblogs.com/mfmdaoyou/p/7389012.html</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/a806d2a8-f767-42fb-aba7-baf9c20a90ba</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a806d2a8-f767-42fb-aba7-baf9c20a90ba</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Jul 2024 09:38:57 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】闭包问题]]></title><description><![CDATA[<h1 id="闭包问题">闭包问题</h1>
<h3 id="循环中赋值为引用的问题">循环中赋值为引用的问题</h3>
<pre><code class="language-js">for (var i = 1; i &lt; 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 1000)
}</code></pre>
<p>解决方法有3种</p>
<p>第一种，使用<code>立即执行函数</code>方式</p>
<pre><code class="language-js">for (var i = 1; i &lt; 5; i++) {
  (fuction(j){
    setTimeout(function timer() {
      console.log(j)
    }, j * 1000)
  })(i)
}</code></pre>
<p>第二种，使用ES6的<code>let</code></p>
<pre><code class="language-js">for (let i = 1; i &lt; 5; i++) {
  setTimeout(function timer() {
    console.log(i)
  }, i * 1000)
}</code></pre>
<p>第三种，使用<code>setTimeout的第三个参数</code></p>
<pre><code class="language-js">for (var i = 1; i &lt; 5; i++) {
  setTimeout(function timer(j) {
    console.log(j)
  }, i * 1000, i)
}</code></pre>
<h3 id="计数器">计数器</h3>
<p>实现一个foo函数 可以这么使用:</p>
<pre><code class="language-js">a = foo();b = foo();c = foo();
// a === 1;b === 2;c === 3;
foo.clear();d = foo(); //d === 1;</code></pre>
<pre><code class="language-js">function myIndex() {
    var index = 1;

    function foo(){
        return index++;
    }

    foo.clear = function() {
        index = 1;
    }
    return foo;
}

var foo = myIndex();</code></pre>
]]></description><link>https://blog.gaoredu.com/article/b81e252c-f8ff-411d-a372-9b540797a929</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b81e252c-f8ff-411d-a372-9b540797a929</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jul 2024 18:22:31 GMT</pubDate></item><item><title><![CDATA[【NodeJS相关】基础知识]]></title><description><![CDATA[<h1 id="nodejs基础知识">NodeJS基础知识</h1>
<h2 id="1-node的全局对象和全局变量">1. Node的全局对象和全局变量</h2>
<h3 id="11-全局对象：所有模块都可以调用的">1.1 全局对象：所有模块都可以调用的</h3>
<ol>
<li><p>global：表示Node所在的全局环境，类似于浏览器的window对象。</p>
</li>
<li><p>process：该对象表示Node所处的当前进程，允许开发者与该进程互动。</p>
</li>
<li><p>console：指向Node内置的console模块，提供命令行环境中的标准输入、标准输出功能。</p>
</li>
</ol>
<h3 id="12-全局函数">1.2 全局函数</h3>
<ol>
<li>定时器函数：共有4个，分别是setTimeout(), clearTimeout(), setInterval(), clearInterval()；</li>
<li>require：用于加载模块；</li>
<li>Buffer()：用于操作二进制数据。</li>
</ol>
<h3 id="13-全局变量">1.3 全局变量</h3>
<ol>
<li>__filename：指向当前运行的脚本文件名。</li>
<li>__dirname：指向当前运行的脚本所在的目录。</li>
</ol>
<h2 id="2-node的三大特点">2. Node的三大特点</h2>
<h3 id="21-单线程">2.1 单线程</h3>
<p>    Node.js不为每个客户连接创建一个新的线程，而仅仅使用一个线程。当有用户连接了，就触发一个内部事件，通过非阻塞I/O、事件驱动机制，让Node.js程序宏观上也是并行的。
        </p>
<h3 id="22-非阻塞io">2.2 非阻塞I/O  </h3>
<ol>
<li><p>由于Node.js中采用了非阻塞型I/O机制，因此在执行了访问数据库的代码之后，将立即转而执行其后面的代码，把数据库返回结果的处理代码放在回调函数中，从而提高了程序的执行效率。</p>
</li>
<li><p>当某个I/O执行完毕时，将以事件的形式通知执行I/O操作的线程，线程执行这个事件的回调函数。为了处理异步I/O，线程必须有事件循环，不断的检查有没有未处理的事件，依次予以处理。</p>
</li>
<li><p>阻塞模式下，一个线程只能处理一项任务，要想提高吞吐量必须通过多线程。而非阻塞模式下，一个线程永远在执行计算操作，这个线程的CPU核心利用率永远是100%。所以，这是一种特别有哲理的解决方案：与其人多，但是好多人闲着；还不如一个人玩命，往死里干活儿。</p>
</li>
</ol>
<h3 id="23-事件驱动event-driven">2.3 事件驱动event-driven</h3>
<ol>
<li><p>在Node中，在一个时刻，只能执行一个事件回调函数，但是在执行一个事件回调函数的中途，可以转而处理其他事件（比如，又有新用户连接了），然后返回继续执行原事件的回调函数，这种处理机制，称为“事件环”机制。</p>
</li>
<li><p>Node.js底层是C++（V8也是C++写的）。底层代码中，近半数都用于事件队列、回调函数队列的构建。</p>
</li>
</ol>
<h2 id="3-node技术架构">3. Node技术架构</h2>
<h3 id="31-node底层架构">3.1 Node底层架构</h3>
<blockquote>
<p>nodejs组成部分：v8 engine, libuv, builtin modules, native modules以及其他辅助服务。</p>
</blockquote>
<p><img src="../../img/node-%E6%9E%B6%E6%9E%84%E5%9B%BE.jpg" alt="Node架构图"></p>
<ul>
<li><p>v8 engine：主要有两个作用 
  1.虚拟机的功能，执行js代码（自己的代码，第三方的代码和native modules的代码）。
  2.提供C++函数接口，为nodejs提供v8初始化，创建context，scope等。</p>
</li>
<li><p>libuv：它是基于事件驱动的异步IO模型库，我们的js代码发出请求，最终由libuv完成，而我们所设置的回调函数则是在libuv触发。</p>
</li>
<li><p>builtin modules：它是由C++代码写成各类模块，包含了crypto，zlib, file stream etc 基础功能。（v8提供了函数接口，libuv提供异步IO模型库，以及一些nodejs函数，为builtin modules提供服务）。</p>
</li>
<li><p>native modules：它是由js写成，提供我们应用程序调用的库，同时这些模块又依赖builtin modules来获取相应的服务支持</p>
</li>
</ul>
<blockquote>
<p>[!NOTE]
总结：如果把nodejs看做一个黑匣子，起暴露给开发者的接口则是native modules，当我们发起请求时，请求自上而下，穿越native modules，通过builtin modules将请求传送至v8，libuv和其他辅助服务，请求结束，则从下回溯至上，最终调用我们的回调函数。</p>
</blockquote>
<h3 id="32-node函数调用机制">3.2 Node函数调用机制</h3>
<p><img src="../../img/node-%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8.png" alt="函数调用机制"></p>
<ol>
<li><p>v8执行js代码 server.listen()时，会通过一些基础服务到TCPWrap::listen(),TCPWrap是nodejs的內建模块，其通过libuv的api uv_listen()的方式，由libuv来完成异步调用。</p>
</li>
<li><p>图中1,2,3,4,5步骤标明了调用和返回的路径，这几步很快结束，留下callback TCPWrap::OnConnection()等着所需要的数据准备好后被调用。</p>
</li>
<li><p>libuv在得到所需要的请求后，会调用callback TCPWrap::OnConnection()，在该函数最后通过 tcp_wrap-&gt;MakeCallback(env-&gt;onconnection_string(), ARRAY_SIZE(argv), argv) 调用V8 engine中的JavaScript callback。</p>
</li>
<li><p>Node.js内建模块http其实是建立在模块net之上的。如果看net.js代码会发现，其通过 new TCP() 返回的类对象完成后续的TCP connect, bind, open等socket动作。</p>
</li>
<li><p>可以看到Node.js做的工作像是一座桥。左手V8，右手libuv，将2者有机连接在一起。例如HandleWrap::HandleWrap()中记录了V8 instance中的JavaScript对象以及TCPWrap对象。这样在TCPWrap::OnConnection()中可以拿到这两个对象，执行后续的callback调用。</p>
</li>
</ol>
<hr>
<p><strong>参考文章</strong></p>
<ul>
<li><a href="https://www.cnblogs.com/peiyu1988/p/8192066.html">https://www.cnblogs.com/peiyu1988/p/8192066.html</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/baf6cba2-63da-401a-ba09-7793b2c026d4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/baf6cba2-63da-401a-ba09-7793b2c026d4</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 18 Jul 2024 13:30:45 GMT</pubDate></item><item><title><![CDATA[【JS相关】组件化和React]]></title><description><![CDATA[<h1 id="组件化和react">组件化和React</h1>
<h2 id="1-说一下使用jquery和使用框架的区别？">1. 说一下使用jQuery和使用框架的区别？</h2>
<ol>
<li>数据和视图的分离，（jQuery数据和视图混在一起，代码耦合）-------开放封闭原则</li>
<li>以数据驱动视图（只关注数据变化，DOM操作被封装）</li>
</ol>
<h2 id="2说一下对mvvm的理解？">2.说一下对MVVM的理解？</h2>
<ol>
<li>先说MVC：Model, View, Controller（主要用于后端）</li>
<li>MVVM: Model, View, ViewModel[中间连接者，连接view和和model]</li>
<li>关于ViewModel</li>
</ol>
<h4 id="mvvm在react中对应关系">MVVM在React中对应关系</h4>
<hr>
<ul>
<li>1） M(odel)：对应组件的方法或生命周期函数中实现的业务逻辑和this.state中保存的本地数据，如果React集成了redux +react-redux，那么组件中的业务逻辑和本地数据可以完全被解耦出来单独存放当做M层，如业务逻辑放在Reducer和Action中。</li>
<li>2） V(iew)-M(odel)：对应组件中的JSX，它实质上是Virtual DOM的语法糖。React负责维护 Virtual DOM以及对其进行diff运算，而React-dom 会把Virtual DOM渲染成浏览器中的真实DOM</li>
<li>3） View：对应框架在浏览器中基于虚拟DOM生成的真实DOM（并不需要我们自己书写）以及我们书写的CSS</li>
<li>4）绑定器：对应JSX中的命令以及绑定的数据，如className={ this.props.xxx }、{this.props.xxx}等等</li>
</ul>
<h4 id="mvvm的双绑和单绑区别">MVVM的双绑和单绑区别</h4>
<hr>
<ul>
<li>1） 一般，只有UI表单控件才存在双向数据绑定，非UI表单控件只有单向数据绑定。</li>
<li>2） 单向数据绑定是指：M的变化可以自动更新到ViewModel，但ViewModel的变化需要手动更新到M（通过给表单控件设置事件监听）</li>
<li>3） 双向数据绑定是指念：M的变化可以自动更新到ViewModel，ViewModel的变化也可以自动更新到M</li>
<li>4） 双向绑定 = 单向绑定 + UI事件监听。双向和单向只不过是框架封装程度上的差异，本质上两者是可以相互转换的。</li>
<li>5） 优缺点：在表单交互较多的情况下，单向数据绑定的优点是数据更易于跟踪管理和维护，缺点是代码量较多比较啰嗦，双向数据绑定的优缺点和单向绑定正好相反。</li>
</ul>
<h2 id="3说一下对组件化的理解？">3.说一下对组件化的理解？</h2>
<ol>
<li>组件的封装<ul>
<li>a. 视图的封装</li>
<li>b. 数据的封装</li>
<li>c. 变化逻辑（数据驱动视图变化，setState）</li>
</ul>
</li>
<li>组件的复用<ul>
<li>a. 使用props来传递数据（同一个组件传递不同飞数据）</li>
<li>b. 组件的复用（同一个组件使用不同的数据）</li>
</ul>
</li>
</ol>
<h2 id="4jsx的本质是什么？">4.JSX的本质是什么？</h2>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>JSX语法（标签、JS表达式，判断，循环，事件绑定）</li>
<li>JSX是语法糖, 需要被解析成JS才能运行（h函数的使用）</li>
<li>JSX是独立的标准，可以被其他项目使用</li>
</ol>
</blockquote>
<pre><code class="language-js">   // 下面的代码实际执行流程：
    // JSX 代码
    const user = {
        firstName : &#39;xiugang&#39;,
        lastName : &#39;zhang&#39;
    }
    var profile = &lt;div&gt;
        &lt;img src=&quot;a.jpg&quot; className=&#39;profile&#39;/&gt;
        &lt;h3&gt;{[user.firstName, user.lastName].join(&#39; &#39;)}&lt;/h3&gt;
    &lt;/div&gt;

    // 解析结果(重点掌握)，关键点：是使用了一个React.createElement来创建节点的
    var profile = React.createElement(&#39;div&#39;, null, [
        React.createElement(&#39;img&#39;, {src : &#39;a.jpg&#39;, className : &#39;profile&#39;}),
        React.createElement(&#39;h3&#39;, null, [[user.firstName, user.lastName].join(&#39; &#39;)])
])

/* @jsx h*/
// 1. 使用插件：cnpm install babel-plugin-transform-react-jsx
// 2. 开始编译JSX： babel --plugins transform-react-jsx demo.js
// 3. 可以自定义React.createElement变为一个h函数： /* @jsx h*/
</code></pre>
<h2 id="5jsx和vdom的关系？">5.JSX和VDOM的关系？</h2>
<h3 id="51-分析为何需要vdom">5.1 分析为何需要VDOM</h3>
<ol>
<li>VDOM是React初次推广开来的，结合JSX</li>
<li>JSX就是模板渲染成HTML</li>
<li>初次渲染 + 修改state之后的re-render</li>
<li>正好符合VDOM的应用场景<h3 id="52-reactcreateelement和h函数">5.2 React.createElement和h函数</h3>
<h3 id="53-何时patch？">5.3 何时patch？</h3>
</li>
<li>初次渲染----<pre><code class="language-js">   ReactDOM.render(&lt;App/&gt;, container)</code></pre>
</li>
<li>会触发patch(container, vnode)函数</li>
<li>re-render-- setState</li>
<li>会触发patch(vNode, newVNode)<h3 id="54----自定义组件的解析？">5.4    自定义组件的解析？</h3>
</li>
</ol>
<h4 id="541-自定义组件的解析（todoinput和todolist组件的解析）">5.4.1 自定义组件的解析（TODOInput和TODOList组件的解析）</h4>
<ol>
<li>‘div’可以直接渲染<div>即可，vdom可以实现</li>
<li>TodoInput和TodoList是自定义组件（class），vdom不认识</li>
<li>因此Input和List定义的时候必须声明render函数</li>
<li>根据props属性初始化实例，然后执行实例的render函数</li>
<li>render函数返回的还是vnode的对象</li>
</ol>
<pre><code class="language-js">React.createElement(TodoInput, { addTitle: this.addTitle.bind(this) }),
    React.createElement(TodoList, { data: this.state.list })

    // 上面的代码相当于是先去创建一个TodoList实例对象
    var list = new TodoList({ data: this.state.list });
    // 然后再去调用这个函数的render方法（返回的是一个JSX，然后对当前的这个JSX渲染为VDOM）
    var vnode = list.render();</code></pre>
<h2 id="6说一下setstate的过程？">6.说一下setState的过程？</h2>
<pre><code class="language-js">    // 1. 每个组件实例，都有renderComponent方法
    class Component {
        constructor(){

        }

        // 每个组件都有这个函数
        renderComponent(){
            // 获取上一次的vNode
            const prevVnode = this._vnode;

            // render函数只需之后，得到的还是一个新的node
            const newVnode = this.render();

            // 开始对比，找出差异
            patch(prevVnode, newVnode);

            // 更新node为最新的node
            this._vnode = newVnode;
        }
    }

    // 2. 执行renderComponent会重新执行实例的render方法
    // 3. render函数返回newVnode，然后拿到prevNode（也就是上次的vnode）----多次执行setState视图最终也只会渲染一次
    // 4. 执行patch（preVnode, newVNode）</code></pre>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>setState通过一个队列机制实现state更新，当执行setState时，会将需要更新的state很后放入状态队列，而不会立即更新this.state，队列机制可以高效地批量更新state。如果不通过setState而直接修改this.state的值    </li>
<li>那么该state将不会被放入状态队列中。当下次调用setState并对状态队列进行合并时，就会忽略之前修改的state，造成不可预知的错误</li>
<li>同时，也利用了队列机制实现了setState的异步更新，避免了频繁的重复更新state</li>
</ol>
</blockquote>
<h2 id="77----阐述自己对react和vue的认识？">7.7.    阐述自己对React和Vue的认识？</h2>
<ol>
<li>两者的本质区别：<ul>
<li>vue本质是MVVM框架，由MVC发展而来</li>
<li>React本质是前端组件化框架，由后端组件化发展而来</li>
<li>并不妨碍两者都能实现相同的功能</li>
</ul>
</li>
<li>模板的区别<ul>
<li>vue-使用模板（最初由angular提出）</li>
<li>React-使用JSX</li>
<li>模板语法上，我更倾向于JSX</li>
<li>模板分离上，我更倾向于Vue</li>
<li>模板应该和JS逻辑分离</li>
<li>“开放封闭原则”</li>
</ul>
</li>
<li>组件化的区别<ul>
<li>React本身就是组件化，没有组件哈就不是React</li>
<li>vue也支持组件化，不过是在MVVM上的扩展</li>
<li>查阅vue组件化的文档</li>
<li>组件化更适合选择React</li>
</ul>
</li>
<li>两者的共同点<ul>
<li>都支持组件化</li>
<li>都是数据驱动视图</li>
</ul>
</li>
<li>如何选择<ul>
<li>国内使用，首推vue。文档更易读，易学，社区够大</li>
<li>如果团队水平较高，推荐使用React，组件化和JSX</li>
</ul>
</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/581bca52-c8b6-4c90-8e07-1a5ffbb64bb2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/581bca52-c8b6-4c90-8e07-1a5ffbb64bb2</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 16 Jul 2024 07:25:52 GMT</pubDate></item><item><title><![CDATA[【前端面试题】HTML5 CSS3]]></title><description><![CDATA[<h1 id="html5-css3">HTML5 CSS3</h1>
<h2 id="1css3有哪些新特性？">1.CSS3有哪些新特性？</h2>
<ol>
<li>CSS3实现圆角（border-radius），阴影（box-shadow），</li>
<li>对文字加特效（text-shadow、），线性渐变（gradient），旋转（transform）</li>
<li>transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋转,缩放,定位,倾斜</li>
<li>增加了更多的CSS选择器  多背景 rgba </li>
<li>在CSS3中唯一引入的伪元素是 ::selection.</li>
<li>媒体查询，多栏布局</li>
<li>border-image</li>
</ol>
<h2 id="2html5有哪些新特性、移除了那些元素？如何处理html5新标签的浏览器兼容问题？如何区分-html-和-html5？">2.html5有哪些新特性、移除了那些元素？如何处理HTML5新标签的浏览器兼容问题？如何区分 HTML 和 HTML5？</h2>
<p>新特性：</p>
<ol>
<li>拖拽释放(Drag and drop) API </li>
<li>语义化更好的内容标签（header,nav,footer,aside,article,section）</li>
<li>音频、视频API(audio,video)</li>
<li>画布(Canvas) API</li>
<li>地理(Geolocation) API</li>
<li>本地离线存储 localStorage 长期存储数据，浏览器关闭后数据不丢失；</li>
<li>sessionStorage 的数据在浏览器关闭后自动删除</li>
<li>表单控件，calendar、date、time、email、url、search  </li>
<li>新的技术webworker, websocket, Geolocation<br />
移除的元素：</li>
<li>纯表现的元素：basefont，big，center，font, s，strike，tt，u；</li>
<li>对可用性产生负面影响的元素：frame，frameset，noframes；<br />
支持HTML5新标签：</li>
<li>IE8/IE7/IE6支持通过 document.createElement 方法产生的标签，可以利用这一特性让这些浏览器支持 HTML5 新标签，浏览器支持新标签后，还需要添加标签默认的样式（当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架）：</li>
</ol>
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
<p>如何区分： <br />
DOCTYPE声明新增的结构元素、功能元素</p>
<h2 id="3本地存储（local-storage-）和cookies（储存在用户本地终端上的数据）之间的区别是什么？">3.本地存储（Local Storage ）和cookies（储存在用户本地终端上的数据）之间的区别是什么？</h2>
<p>Cookies:服务器和客户端都可以访问；大小只有4KB左右；有有效期，过期后将会删除；<br />
本地存储：只有本地浏览器端可访问数据，服务器不能访问本地存储直到故意通过POST或者GET的通道发送到服务器；每个域5MB；没有过期数据，它将保留知道用户从浏览器清除或者使用Javascript代码移除</p>
<h2 id="4如何实现浏览器内多个标签页之间的通信">4.如何实现浏览器内多个标签页之间的通信?</h2>
<p>调用 localstorge、cookies 等本地存储方式</p>
<h2 id="5你如何对网站的文件和资源进行优化？">5.你如何对网站的文件和资源进行优化？</h2>
<p>文件合并<br />
文件最小化/文件压缩<br />
使用CDN托管<br />
缓存的使用</p>
<h2 id="6什么是响应式设计？">6.什么是响应式设计？</h2>
<p>它是关于网页制作的过程中让不同的设备有不同的尺寸和不同的功能。响应式设计是让所有的人能在这些设备上让网站运行正常    </p>
<h2 id="7新的-html5-文档类型和字符集是？">7.新的 HTML5 文档类型和字符集是？</h2>
<p>答：HTML5文档类型：<!doctype html><br />
    HTML5使用的编码<meta charset=”UTF-8”></p>
<h2 id="8html5-canvas-元素有什么用？">8.HTML5 Canvas 元素有什么用？</h2>
<p>答：Canvas 元素用于在网页上绘制图形，该元素标签强大之处在于可以直接在 HTML 上进行图形操作。</p>
<h2 id="9html5-存储类型有什么区别？">9.HTML5 存储类型有什么区别？</h2>
<p>答：Media API、Text Track API、Application Cache API、User Interaction、Data Transfer API、Command API、Constraint Validation API、History API</p>
<h2 id="10用h5css3解决下导航栏最后一项掉下来的问题">10用H5+CSS3解决下导航栏最后一项掉下来的问题</h2>
<h2 id="11----css3新增伪类有那些？">11.    CSS3新增伪类有那些？</h2>
<pre><code>p:first-of-type 选择属于其父元素的首个 &lt;p&gt; 元素的每个 &lt;p&gt; 元素。
p:last-of-type  选择属于其父元素的最后 &lt;p&gt; 元素的每个 &lt;p&gt; 元素。
p:only-of-type  选择属于其父元素唯一的 &lt;p&gt; 元素的每个 &lt;p&gt; 元素。
p:only-child    选择属于其父元素的唯一子元素的每个 &lt;p&gt; 元素。
p:nth-child(2)  选择属于其父元素的第二个子元素的每个 &lt;p&gt; 元素。
:enabled、:disabled 控制表单控件的禁用状态。
</code></pre>
<p>:checked，单选框或复选框被选中。</p>
<h2 id="12----请用css实现：一个矩形内容，有投影，有圆角，hover状态慢慢变透明。">12.    请用CSS实现：一个矩形内容，有投影，有圆角，hover状态慢慢变透明。</h2>
<p>css属性的熟练程度和实践经验</p>
<h2 id="13----描述下css3里实现元素动画的方法">13.    描述下CSS3里实现元素动画的方法</h2>
<p>动画相关属性的熟悉程度</p>
<h2 id="14----html5css3有哪些新特性、移除了那些元素？如何处理html5新标签的浏览器兼容问题？如何区分-html-和-html5？">14.    html5\CSS3有哪些新特性、移除了那些元素？如何处理HTML5新标签的浏览器兼容问题？如何区分 HTML 和 HTML5？</h2>
<p>HTML5 现在已经不是 SGML 的子集，主要是关于图像，位置，存储，地理定位等功能的增加。</p>
<ul>
<li>绘画 canvas 元素<br />
用于媒介回放的 video 和 audio 元素<br />
本地离线存储 localStorage 长期存储数据，浏览器关闭后数据不丢失；<br />
sessionStorage 的数据在浏览器关闭后自动删除<br />
语意化更好的内容元素，比如 article、footer、header、nav、section<br />
表单控件，calendar、date、time、email、url、search<br />
CSS3实现圆角，阴影，对文字加特效，增加了更多的CSS选择器  多背景 rgba<br />
新的技术webworker, websockt, Geolocation<br />
移除的元素<br />
纯表现的元素：basefont，big，center，font, s，strike，tt，u；<br />
对可用性产生负面影响的元素：frame，frameset，noframes；</li>
<li>是IE8/IE7/IE6支持通过document.createElement方法产生的标签，<br />
可以利用这一特性让这些浏览器支持HTML5新标签，<br />
浏览器支持新标签后，还需要添加标签默认的样式：</li>
<li>当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架</li>
</ul>
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
<h2 id="15----你怎么来实现页面设计图，你认为前端应该如何高质量完成工作-一个满屏-品-字布局-如何设计">15.    你怎么来实现页面设计图，你认为前端应该如何高质量完成工作? 一个满屏 品 字布局 如何设计?</h2>
<ul>
<li>首先划分成头部、body、脚部；。。。。。 </li>
<li>实现效果图是最基本的工作，精确到2px；<br />
与设计师，产品经理的沟通和项目的参与<br />
做好的页面结构，页面重构和用户体验<br />
处理hack，兼容、写出优美的代码格式<br />
针对服务器的优化、拥抱 HTML5。</li>
</ul>
<h2 id="16----你能描述一下渐进增强和优雅降级之间的不同吗">16.    你能描述一下渐进增强和优雅降级之间的不同吗?</h2>
<p>渐进增强 progressive enhancement：针对低版本浏览器进行构建页面，保证最基本的功能，然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。<br />
优雅降级 graceful degradation：一开始就构建完整的功能，然后再针对低版本浏览器进行兼容。<br />
　　区别：优雅降级是从复杂的现状开始，并试图减少用户体验的供给，而渐进增强则是从一个非常基础的，能够起作用的版本开始，并不断扩充，以适应未来环境的需要。降级（功能衰减）意味着往回看；而渐进增强则意味着朝前看，同时保证其根基处于安全地带。　<br />
　　“优雅降级”观点<br />
　　“优雅降级”观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段，并把测试对象限定为主流浏览器（如 IE、Mozilla 等）的前一个版本。<br />
　　在这种设计范例下，旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点，因此除了修复较大的错误之外，其它的差异将被直接忽略。<br />
　　“渐进增强”观点<br />
　　“渐进增强”观点则认为应关注于内容本身。<br />
　　内容是我们建立网站的诱因。有的网站展示它，有的则收集它，有的寻求，有的操作，还有的网站甚至会包含以上的种种，但相同点是它们全都涉及到内容。这使得“渐进增强”成为一种更为合理的设计范例。这也是它立即被 Yahoo! 所采纳并用以构建其“分级式浏览器支持 (Graded Browser Support)”策略的原因所在。</p>
<p>　　那么问题了。现在产品经理看到IE6,7,8网页效果相对高版本现代浏览器少了很多圆角，阴影（CSS3），要求兼容（使用图片背景，放弃CSS3），你会如何说服他？</p>
<h2 id="17----为什么利用多个域名来存储网站资源会更有效？">17.    为什么利用多个域名来存储网站资源会更有效？</h2>
<p>CDN缓存更方便 <br />
突破浏览器并发限制 <br />
节约cookie带宽 <br />
节约主域名的连接数，优化页面响应速度 <br />
防止不必要的安全问题</p>
<h2 id="18----请谈一下你对网页标准和标准制定机构重要性的理解。">18.    请谈一下你对网页标准和标准制定机构重要性的理解。</h2>
<p>　　（无标准答案）网页标准和标准制定机构都是为了能让web发展的更‘健康’，开发者遵循统一的标准，降低开发难度，开发成本，SEO也会更好做，也不会因为滥用代码导致各种BUG、安全问题，最终提高网站易用性。</p>
<h2 id="19----请描述一下cookies，sessionstorage和localstorage的区别？　　">19.    请描述一下cookies，sessionStorage和localStorage的区别？　　</h2>
<p>　　sessionStorage用于本地存储一个会话（session）中的数据，这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储，仅仅是会话级别的存储。而localStorage用于持久化的本地存储，除非主动删除数据，否则数据是永远不会过期的。<br />
web storage和cookie的区别<br />
Web Storage的概念和cookie相似，区别是它是为了更大容量存储设计的。Cookie的大小是受限的，并且每次你请求一个新的页面的时候Cookie都会被发送过去，这样无形中浪费了带宽，另外cookie还需要指定作用域，不可以跨域调用。<br />
除此之外，Web Storage拥有setItem,getItem,removeItem,clear等方法，不像cookie需要前端开发者自己封装setCookie，getCookie。但是Cookie也是不可以或缺的：Cookie的作用是与服务器进行交互，作为HTTP规范的一部分而存在 ，而Web Storage仅仅是为了在本地“存储”数据而生。</p>
<h2 id="20----知道css有个content属性吗？有什么作用？有什么应用？">20.    知道css有个content属性吗？有什么作用？有什么应用？</h2>
<p>知道。css的content属性专门应用在 before/after 伪元素上，用来插入生成内容。最常见的应用是利用伪类清除浮动。<br />
//一种常见利用伪类清除浮动的代码</p>
<pre><code class="css language-css">.clearfix:after {
    content:"."; //这里利用到了content属性
    display:block; 
    height:0;
    visibility:hidden; 
    clear:both; }
.clearfix { 
    *zoom:1; 
}
</code></pre>
<p>after伪元素通过 content 在元素的后面生成了内容为一个点的块级素，再利用clear:both清除浮动。<br />
　　那么问题继续还有，知道css计数器（序列数字字符自动递增）吗？如何通过css content属性实现css计数器？<br />
答案：css计数器是通过设置counter-reset 、counter-increment 两个属性 、及 counter()/counters()一个方法配合after / before 伪类实现。 </p>
<h2 id="21----如何在-html5-页面中嵌入音频">21.    如何在 HTML5 页面中嵌入音频?</h2>
<p>HTML 5 包含嵌入音频文件的标准方式，支持的格式包括 MP3、Wav 和 Ogg：</p>
<audio controls> 
  <source src="jamshed.mp3" type="audio/mpeg"> 
   Your browser does'nt support audio embedding feature. 
</audio>
<h2 id="22----如何在-html5-页面中嵌入视频？">22.    如何在 HTML5 页面中嵌入视频？</h2>
<p>和音频一样，HTML5 定义了嵌入视频的标准方法，支持的格式包括：MP4、WebM 和 Ogg：</p>
<video width="450" height="340" controls> 
  <source src="jamshed.mp4" type="video/mp4"> 
   Your browser does'nt support video embedding feature. 
</video>
<h2 id="23----html5-引入什么新的表单属性？">23    HTML5 引入什么新的表单属性？</h2>
<p>Datalist   datetime   output   keygen  date  month  week  time  number   range   emailurl</p>
<h2 id="24css3新增伪类有那些？">24.CSS3新增伪类有那些？</h2>
<p>p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。<br />
    p:last-of-type  选择属于其父元素的最后 <p> 元素的每个 <p> 元素。<br />
    p:only-of-type  选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。<br />
    p:only-child    选择属于其父元素的唯一子元素的每个 <p> 元素。<br />
    p:nth-child(2)  选择属于其父元素的第二个子元素的每个 <p> 元素。<br />
    :enabled、:disabled 控制表单控件的禁用状态。<br />
:checked，单选框或复选框被选中。</p>
<h2 id="25----写描述一段语义的html代码吧。">25.    (写)描述一段语义的html代码吧。</h2>
<p>（HTML5中新增加的很多标签（如：<article>、<nav>、<header>和<footer>等）<br />
就是基于语义化设计原则）  <br />
< div id="header"><br />
< h1>标题< /h1><br />
< h2>专注Web前端技术< /h2><br />
< /div><br />
语义 HTML 具有以下特性：</p>
<p>文字包裹在元素中，用以反映内容。例如：<br />
段落包含在 <p> 元素中。
顺序表包含在<ol>元素中。
从其他来源引用的大型文字块包含在<blockquote>元素中。
HTML 元素不能用作语义用途以外的其他目的。例如：
<h1>包含标题，但并非用于放大文本。
<blockquote>包含大段引述，但并非用于文本缩进。
空白段落元素 ( <p></p> ) 并非用于跳行。<br />
文本并不直接包含任何样式信息。例如：<br />
不使用 <font> 或 <center> 等格式标记。<br />
类或 ID 中不引用颜色或位置。</p>
<h2 id="26----cookie在浏览器和服务器间来回传递。-sessionstorage和localstorage区别">26.    cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage区别</h2>
<p>sessionStorage和localStorage的存储空间更大；<br />
sessionStorage和localStorage有更多丰富易用的接口；<br />
sessionStorage和localStorage各自独立的存储空间；</p>
<h2 id="27----html5有哪些新特性、移除了那些元素？如何处理html5新标签的浏览器兼容问题？如何区分-html-和-html5？">27.    html5有哪些新特性、移除了那些元素？如何处理HTML5新标签的浏览器兼容问题？如何区分 HTML 和 HTML5？</h2>
<ul>
<li>HTML5 现在已经不是 SGML 的子集，主要是关于图像，位置，存储，多任务等功能的增加。</li>
<li>绘画 canvas  <br />
用于媒介回放的 video 和 audio 元素 <br />
本地离线存储 localStorage 长期存储数据，浏览器关闭后数据不丢失；<br />
sessionStorage 的数据在浏览器关闭后自动删除<br />
语意化更好的内容元素，比如 article、footer、header、nav、section <br />
表单控件，calendar、date、time、email、url、search  <br />
新的技术webworker, websockt, Geolocation</li>
<li>移除的元素<br />
纯表现的元素：basefont，big，center，font, s，strike，tt，u；<br />
对可用性产生负面影响的元素：frame，frameset，noframes；<br />
支持HTML5新标签：</li>
<li>IE8/IE7/IE6支持通过document.createElement方法产生的标签，<br />
可以利用这一特性让这些浏览器支持HTML5新标签，<br />
浏览器支持新标签后，还需要添加标签默认的样式：</li>
<li>当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架</li>
</ul>
<!--[if lt IE 9]>
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
<![endif]-->
<h2 id="28如何区分：-doctype声明新增的结构元素功能元素">28.如何区分： DOCTYPE声明\新增的结构元素\功能元素</h2>
<h2 id="29语义化的理解？">29.语义化的理解？</h2>
<p>用正确的标签做正确的事情！<br />
html语义化就是让页面的内容结构化，便于对浏览器、搜索引擎解析；<br />
在没有样式CCS情况下也以一种文档格式显示，并且是容易阅读的。<br />
搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重，利于 SEO。<br />
使阅读源代码的人对网站更容易将网站分块，便于阅读维护理解。</p>
<h2 id="30----html5的离线储存？">30.    HTML5的离线储存？</h2>
<p>localStorage    长期存储数据，浏览器关闭后数据不丢失；<br />
sessionStorage  数据在浏览器关闭后自动删除。</p>
<h2 id="31----写出html5的文档声明方式">31.    写出HTML5的文档声明方式</h2>
<pre><code> &lt;DOCYPE html&gt;
</code></pre>
<h2 id="32----html5和css3的新标签">32.    HTML5和CSS3的新标签</h2>
<pre><code>HTML5： nav, footer, header, section, hgroup, video, time, canvas, audio...
</code></pre>
<p>CSS3: RGBA, opacity, text-shadow, box-shadow, border-radius, border-image, <br />
border-color, transform…;</p>
<h2 id="33----自己对标签语义化的理解">33.    自己对标签语义化的理解</h2>
<pre><code>在我看来，语义化就是比如说一个段落， 那么我们就应该用 &lt;p&gt;标签来修饰，标题就应该用 &lt;h?&gt;标签等。符合文档语义的标签。
</code></pre>]]></description><link>https://blog.gaoredu.com/article/eb39fbfb-9b47-4a44-86ba-653af248a370</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eb39fbfb-9b47-4a44-86ba-653af248a370</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 13 Jul 2024 16:22:33 GMT</pubDate></item><item><title><![CDATA[【操作系统】基础知识]]></title><description><![CDATA[<h1 id="操作系统基础知识">操作系统基础知识</h1>
<h2 id="1操作系统分类">1.操作系统分类</h2>
<ul>
<li>批处理操作系统（单道，多道）</li>
<li>分时操作系统（Unix）</li>
<li>实时操作系统（MsgOS）</li>
<li>网络操作系统</li>
<li>分布式操作系统</li>
<li>微机操作系统（Linux、Windows、IOS等）</li>
<li>嵌入式操作系统（Android，iOS）</li>
</ul>
<h2 id="2操作系统的4个特征">2.操作系统的4个特征?</h2>
<h3 id="21-并发性">2.1 并发性</h3>
<p>区别于并行性，并发是指：多个事件在同一时间间隔内发生，并行是指：多个事件在同一时刻发生</p>
<h3 id="22-共享性">2.2 共享性</h3>
<p>一般的共享是指某种资源可以被大家使用，在os下的资源共享称为资源复用，具体含义是：系统中的资源可供内存中多个并发的执行的进程共同使用</p>
<h3 id="23-虚拟性">2.3 虚拟性</h3>
<p>通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能即是虚拟</p>
<h3 id="24-不确定性（异步）">2.4 不确定性（异步）</h3>
<p>每道程序完成的时间都是不可预知的，进程是以人们不可预知的速度向前推进的</p>
<h2 id="3操作系统的功能">3.操作系统的功能</h2>
<h3 id="31-处理机管理">3.1 处理机管理</h3>
<p>也称进程管理。实质上是对处理机执行时间进行管理，采用多道程序等技术将CPU的时间真正合理地分配给每个任务。主要包括进程管理、进程同步、进程通信和进程调度。</p>
<h3 id="32-文件管理">3.2 文件管理</h3>
<p>又称信息管理。主要包括文件存储空间管理、目录管理、文件的读写管理和存取管理。</p>
<h3 id="33-存储管理">3.3 存储管理</h3>
<p>是对主存储器空间的管理。主要包括存储分配与回收、存储保护、地址映射（变换）和主存扩充。（即内存管理）</p>
<h3 id="34-设备管理">3.4 设备管理</h3>
<p>实质上是对硬件设备进行管理，其中包括输入输出设备的分配、启动、完成和回收。</p>
<h3 id="35-作业管理">3.5 作业管理</h3>
<p>包括人物、人机交互和用户界面管理等。</p>
<h2 id="4处理机管理">4.处理机管理</h2>
<h3 id="41-线程与进程">4.1 线程与进程</h3>
<h4 id="411-基本概念">4.1.1 基本概念</h4>
<blockquote>
<p>[!NOTE]</p>
</blockquote>
<ol>
<li><p>进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动，是系统进行资源分配和调度的一个独立单位。</p>
</li>
<li><p>线程是进程的一个实体，是CPU调度和分派的基本单位，它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源，只拥有一点在运行中必不可少的资源(如程序计数器，一组寄存器和栈)，但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。也有就绪、运行、阻塞三态。</p>
</li>
</ol>
<blockquote>
<p>PCB：为了便于系统描述和管理进程，在OS的核心位每个进程专门定义了一个数据结构，进程控制块PCB。PCB是进程的唯一标志</p>
</blockquote>
<p>一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。相对进程而言，线程是一个更加接近于执行体的概念，它可以与同进程中的其他线程共享数据，但拥有自己的栈空间，拥有独立的执行序列。</p>
<h4 id="412-区别">4.1.2 区别</h4>
<ul>
<li>1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.</li>
<li>2) 线程的划分尺度小于进程，使得多线程程序的并发性高。</li>
<li>3) 另外，进程在执行过程中拥有独立的内存单元，而多个线程共享内存，从而极大地提高了程序的运行效率。</li>
<li>4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行，必须依存在应用程序中，由应用程序提供多个线程执行控制。</li>
<li>5) 从逻辑角度来看，多线程的意义在于一个应用程序中，有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用，来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。</li>
</ul>
<h4 id="413-优缺点">4.1.3 优缺点</h4>
<blockquote>
<p>[!NOTE]
线程执行开销小，但不利于资源的管理和保护；而进程正相反。同时，线程适合于在SMP机器上运行，而进程则可以跨机器迁移。</p>
</blockquote>
<h3 id="42-程序顺序执行的特征">4.2 程序顺序执行的特征</h3>
<ul>
<li>顺序性：每一操作必须在下一操作开始之前结束</li>
<li>封闭性：程序运行时独占全机资源，资源的状态（除初始状态外）只有本程序才能改变，程序一旦执行，其结果不受外界影响</li>
<li>可再现性：程序执行环境和初始条件相同，重复执行时，结果相同</li>
</ul>
<h3 id="43-程序并发执行的特征">4.3 程序并发执行的特征</h3>
<ul>
<li>间断性：程序并发运行时，共享系统资源，为完成同一任务相互合作，会形成相互制约关系，导致并发程序具有“执行-暂停-执行”这种间断性的活动规律</li>
<li>失去封闭性：程序并发执行时，资源状态由多个程序改变，某程序执行时，会受到其他程序影响，失去封闭性</li>
<li>不可再现性：失去封闭性，导致失去可再现性</li>
</ul>
<h3 id="44-进程的特征">4.4 进程的特征</h3>
<ul>
<li>结构特征：程序段、相关数据段和PCB三部分构成进程实体</li>
<li>动态性：进程实体的一次执行过程，具有生命期，而程序是有序指令集合，是静态的</li>
<li>并发性：多个进程同时存于内存，在一段时间内同时运行</li>
<li>独立性：进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位</li>
<li>异步性：进程按各自独立的、不可预知的速度向前推进</li>
</ul>
<h3 id="45-进程的状态">4.5 进程的状态</h3>
<p>三态模型（左图）、五态模型（右图）
<img src="../img/%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81.jpg" alt="进程的状态"></p>
<h3 id="46-进程间的通信（同步与互斥）">4.6 进程间的通信（同步与互斥）</h3>
<blockquote>
<p>[!NOTE]
由于多个进程可以并发执行，所以进程间必然存在资源共享和相互合作的问题。进程通信是指各个进程交换信息的过程。</p>
</blockquote>
<p>同步是合作进程间直接制约问题，互斥是申请临界资源进程间的间接制约问题。（临界资源（Critical Resource, CR）：在同一时间只能供一个进程使用的资源，例如：打印机，磁带机等硬件资源）</p>
<h4 id="461-临界区管理4条原则">4.6.1 临界区管理4条原则</h4>
<p>（临界区：每个进程中访问临界资源的那段代码）</p>
<ol>
<li>有空即进：</li>
<li>无空则等：</li>
<li>有限等待：要求访问临界区的进程，保证有限时间内进入临界区，避免死等</li>
<li>让权等待：进程不能进入临界区时，应立即释放处理机，避免忙等</li>
</ol>
<h3 id="47-信号量机制">4.7 信号量机制</h3>
<p>即利用PV操作来对信号量进行处理。</p>
<blockquote>
<p>[!NOTE]
信号量（semaphore）的数据结构为一个值和一个指针，指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。</p>
</blockquote>
<p>当它的值大于0时，表示当前可用资源的数量；
当它的值小于0时，其绝对值表示等待使用该资源的进程个数。</p>
<p>注意，信号量的值仅能由PV操作来改变。
　</p>
<blockquote>
<p>[!NOTE]
一般来说，信号量S &gt;= 0时，S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源，因此S的值减1；当S &lt; 0时，表示已经没有可用资源，请求者必须等待别的进程释放该类资源，它才能运行下去。而执行一个V操作意味着释放一个单位资源，因此S的值加1；若S &lt;= 0，表示有某些进程正在等待该资源，因此要唤醒一个等待状态的进程，使之运行下去。</p>
</blockquote>
<h3 id="48-进程调度">4.8 进程调度</h3>
<p>如何分配CPU。</p>
<blockquote>
<p>[!NOTE]
调度方法分为可剥夺和不可剥夺两种。即当有更高优先级的进程到来时，是否可以将正在运行进程的CPU分配给高优先级的进程，可以则为可剥夺，否则为不可剥夺的。</p>
</blockquote>
<p>在某些操作系统中，一个作业从提交到完成需要经历高、中、低三级调度。</p>
<h4 id="481-高级调度">4.8.1 高级调度</h4>
<p>又称长调度或作业调度。它决定处于输入池中的哪个后备作业可以调入主系统做好运行的准备，成为一个或一组就绪进程。系统中一个作业（程序）只需经过一次高级调度。</p>
<h4 id="482-中级调度">4.8.2 中级调度</h4>
<p>又称短程调度或对换调度。它决定处于交换区中的就绪进程哪个可以调入内存，以便直接参与对CPU的竞争。在内存资源紧张时，为了将进程调入内存，必须将内存中处于阻塞状态的进程调出交换区，以便为调入进程腾出空间。</p>
<h4 id="483-低级调度">4.8.3 低级调度</h4>
<p>又称短程调度或进程调度。它决定处于内存中的就绪进程中的哪个可以占用CPU。最活跃、最重要的调度程序，对系统影响也是最大的。</p>
<h3 id="49-常见的进程调度算法">4.9 常见的进程调度算法</h3>
<ol>
<li>先来先服务（FCFS）</li>
<li>短作业优先</li>
<li>时间片轮转（固定时间片、可变时间片）</li>
<li>优先级调度（静态优先级、动态优先级）</li>
<li>多级反馈调度（时间片轮转+优先级调度）。</li>
</ol>
<h3 id="410-死锁">4.10 死锁</h3>
<h4 id="4101-基本概念">4.10.1 基本概念</h4>
<blockquote>
<p>[!NOTE]
两个以上的进程互相要求对方释放已经占有的资源导致无法继续运行下去的现象</p>
</blockquote>
<p>例如：一个系统有一台扫描仪R1，一台刻录机R2，有两个进程P1，P2，他们都准备将扫描的文档刻录到CD上，P1先请求R1并成功，P2先请求R2并成功，后来，P1又请求R2，但却因为已经分配而阻塞，P2请求R1，也因分配而阻塞，此时，双方都被阻塞，都希望对方释放自己所需的资源，但又谁都不能得到自己所需的资源而继续进行，从而一直占有自己所占的资源，就形成死锁</p>
<h4 id="4102-可抢占性资源和不可抢占性资源">4.10.2 可抢占性资源和不可抢占性资源</h4>
<ul>
<li>前者：某进程获得这类资源后，该资源可以在被其他进程或系统抢占。</li>
<li>后者：一旦系统把资源分配给一个进程以后，就不能把他强行收回，只能等它用完自行释放</li>
</ul>
<h4 id="4103-产生死锁的原因">4.10.3 产生死锁的原因</h4>
<ul>
<li><p>（1） 竞争不可抢占性资源</p>
</li>
<li><p>（2） 进程运行推进的顺序不合适。</p>
</li>
<li><p>（3） 竞争可消耗资源</p>
</li>
</ul>
<p>如果系统资源充足，进程的资源请求都能够得到满足，死锁出现的可能性就很低，否则就会因争夺有限的资源而陷入死锁。其次，进程运行推进顺序与速度不同，也可能产生死锁。</p>
<h4 id="4104-产生死锁的四个必要条件">4.10.4 产生死锁的四个必要条件</h4>
<p>互斥条件、请求与保持条件、不剥夺条件、循环等待条件。</p>
<ul>
<li>（1） 互斥条件：一个资源每次只能被一个进程使用。</li>
<li>（2） 请求与保持条件：一个进程因请求资源而阻塞时，对已获得的资源保持不放。</li>
<li>（3） 不剥夺条件:进程已获得的资源，在末使用完之前，不能强行剥夺。</li>
<li>（4） 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。</li>
</ul>
<p>　　这四个条件是死锁的必要条件，只要系统发生死锁，这些条件必然成立，而只要上述条件之一不满足，就不会发生死锁。</p>
<h4 id="4105-解决死锁的4种处理策略">4.10.5 解决死锁的4种处理策略</h4>
<ol>
<li>鸵鸟策略（即不理睬策略）</li>
<li>预防策略</li>
<li>避免策略</li>
<li>检测与解除策略</li>
</ol>
<h5 id="死锁预防">死锁预防</h5>
<p>预先静态分配法（破坏不可剥夺条件）、资源有序分配法（将资源分类按顺序排列，保证不形成环路）。</p>
<h5 id="死锁避免">死锁避免</h5>
<p>银行家算法（对每个资源请求进行检测，确保安全。需要很大的系统开销）。</p>
<h5 id="死锁解除">死锁解除</h5>
<p>资源剥夺法、撤销进程法。</p>
<h3 id="411-内存池和进程池">4.11 内存池和进程池</h3>
<blockquote>
<p>[!NOTE]
所谓池的概念， 一般是指应用提前向内核批量申请资源，用于接下来的使用和回收再利用， 减少资源的初始化和销毁次数等开销， 以达到提高系统性能的目标。</p>
</blockquote>
<h4 id="4111-内存池">4.11.1 内存池</h4>
<p>真正使用前申请一片内存区域，有新需求时取出其中一部分使用，不够用时再重新申请新内存。</p>
<h4 id="4112-进程池">4.11.2 进程池</h4>
<p>应用预先创建一组子进程，所有子进程运行相同代码，拥有相同属性，比如PGID和优先级等；</p>
<h4 id="4113-常见两种工作方式：">4.11.3 常见两种工作方式：</h4>
<ol>
<li>主进程通过随机或round robin算法来选择子进程作为新任务的服务进程；</li>
<li>通过一个共享队列来进行同步，所有子进程从该队列中获取任务，不过同时只能有一个子进程能成功获得新任务处理权。</li>
</ol>
<h4 id="4114-线程池：">4.11.4 线程池：</h4>
<p>主要应用于任务小而多，处理时间短的场景，比如简单网页请求等。</p>
<h2 id="5存储器管理">5.存储器管理</h2>
<h3 id="51-存储器的层次">5.1 存储器的层次</h3>
<blockquote>
<p>[!NOTE]
在存储层次中，层次越高（越接近CPU），存储介质的访问速度越快，价格越高，存储容量也越小
<img src="../img/%E5%AD%98%E5%82%A8%E5%99%A8%E7%9A%84%E5%B1%82%E6%AC%A1.jpg" alt="存储器的层次"></p>
</blockquote>
<h4 id="511-主存储器">5.1.1 主存储器</h4>
<p>简称内存或主存，是计算机系统中的主要部件，用于保存进程运行时的程序和数据，也称可执行存储器</p>
<h4 id="512-寄存器">5.1.2 寄存器</h4>
<p>寄存器与处理机的速度，寄存器的字长一般是32或是64位。</p>
<h4 id="513-高速缓存">5.1.3 高速缓存</h4>
<p>介于寄存器和主存储器之间的存储器，主要用来备份内存中常用的数据，以减少处理机对内存的访问次数，这样可以大幅的提高速度</p>
<h4 id="514-磁盘缓存">5.1.4 磁盘缓存</h4>
<p>由于磁盘的I/O速度远低于内存的速度，所以用磁盘缓存来暂时存放一些磁盘数据和信息，它本身并不是一种实际存在的存储器，而是利用内存中的部分存储空间赞数存放一些信息</p>
<h3 id="52程序的装入和链接">5.2程序的装入和链接</h3>
<p><img src="../img/%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%A3%85%E5%85%A5%E5%92%8C%E9%93%BE%E6%8E%A5.jpg" alt="程序的装入和链接"></p>
<h3 id="53连续分配存储管理方式">5.3连续分配存储管理方式</h3>
<h4 id="531-地址重定位">5.3.1 地址重定位</h4>
<p>指将逻辑地址变换成物理地址的过程。分为静态重定位和动态重定位。</p>
<h4 id="532-存储管理方案">5.3.2 存储管理方案</h4>
<blockquote>
<p>[!NOTE]
分区存储管理（固定分区、可变分区、可重定位分区）、分页存储管理（将一个进程的地址空间划分为若干个大小相等的区域，成为页，相应地，将主存空间划分成与页相同大小的若干个物理块，称为块。至少需要两次访问主存）、分段存储管理、段页式存储管理（地址结构：段号+段内页号+页内地址）、虚拟存储管理。</p>
</blockquote>
<p>可变分区的请求和释放主要算法：最佳适应算法、最差适应算法、首次适应算法、循环首次适应算法。</p>
<ul>
<li><p><strong>快表</strong>：在页式存储管理中将当前最活跃的少数几页的物理块号保存在高速存储器中，用以提高页式存储管理的性能。（不用两次访问主存）</p>
</li>
<li><p><strong>页面置换算法</strong>：最佳置换算法（最长时间内不再被访问的页面置换出去）、先进先出置换算法、最近最少未使用置换算法、最近未用置换算法。</p>
</li>
</ul>
<h2 id="6设备管理">6.设备管理</h2>
<blockquote>
<p>[!NOTE]
设备管理的目标是如何提高设备的利用率，为用户提供方便统一的界面。</p>
</blockquote>
<h3 id="61-设备管理采用的缓冲技术">6.1 设备管理采用的缓冲技术</h3>
<p>通道技术、DMA技术、缓冲技术、Spooling技术。</p>
<h3 id="62-磁盘调度算法">6.2 磁盘调度算法</h3>
<ol>
<li>先来先服务（FCFS）</li>
<li>最短寻道时间（SSTF）</li>
<li>扫描算法（SCAN）（先由里向外，到达最外后由外向里）</li>
<li>单向扫描调度算法（CSCAN）（无法换向，只能由里向外）。</li>
</ol>
<h2 id="7文件管理">7.文件管理</h2>
<h3 id="71-文件的逻辑结构">7.1 文件的逻辑结构</h3>
<ol>
<li>有结构的记录式文件（由一个以上的记录构成。记录分为定长记录、不定长记录）</li>
<li>无结构的流式文件（由一串顺序的字符流构成的文件，不划分记录）</li>
</ol>
<h3 id="72-文件的物理结构">7.2 文件的物理结构</h3>
<p>顺序结构、链接结构、索引结构、多个物理块的索引表。</p>
<h3 id="73-unix的三级索引结构">7.3 Unix的三级索引结构</h3>
<h4 id="731-文件的存取方法">7.3.1 文件的存取方法</h4>
<p>顺序存取法、随机存取法。</p>
<h4 id="732-文件的存储空间管理">7.3.2 文件的存储空间管理</h4>
<p>外存空闲空间管理的数据结构通常称为磁盘分配表。常用的空闲空间的管理方法：位示图（用一个bit为的0、1表示一个物理块的空闲情况）、空闲区表、空闲块链、成组链接法（每100块为一组进行记录空闲的块号和大小）。</p>
<h4 id="733-文件链接">7.3.3 文件链接</h4>
<blockquote>
<p>[!NOTE]
硬链接（两个文件目录表目指向同一个索引节点，即指不同的文件名与同一个文件实体的链接）、符号链接（在建立的新文件或目录并与原来的文件或目录的路径名进行映射）。</p>
</blockquote>
<h5 id="7331-硬连接">7.3.3.1 硬连接</h5>
<p>原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接；硬连接不能跨越文件系统（不能跨越不同的分区）文件在磁盘中只有一个拷贝，节省硬盘空间；由于删除文件要在同一个索引节点属于唯一的连接时才能成功，因此可以防止不必要的误删除。</p>
<h5 id="7332-符号连接">7.3.3.2 符号连接</h5>
<p>用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种，作为一个文件，它的数据是它所连接的文件的路径名。类似windows下的快捷方式。可以删除原有的文件而保存连接文件，没有防止误删除功能。</p>
<h2 id="8作业管理">8.作业管理</h2>
<h3 id="81-作业状态">8.1 作业状态</h3>
<ul>
<li>提交（通过输入设备送入计算机）</li>
<li>后备（通过Spooling系统将作业输入到计算机系统的后备存储器中，等待作业调度程序调度）</li>
<li>执行</li>
<li>完成。</li>
</ul>
<h3 id="82-常用的作业调度算法">8.2 常用的作业调度算法</h3>
<ol>
<li>先来先服务</li>
<li>短作业优先</li>
<li>响应比高优先</li>
<li>优先级调度算法</li>
<li>均衡调度算法。</li>
</ol>
<hr>
<p><strong>参考文章</strong></p>
<ul>
<li><a href="https://blog.csdn.net/Song_JiangTao/article/details/79670805">https://blog.csdn.net/Song_JiangTao/article/details/79670805</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/cb8aa998-35bc-4913-aeb7-ab3462f57899</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cb8aa998-35bc-4913-aeb7-ab3462f57899</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 12 Jul 2024 11:23:07 GMT</pubDate></item><item><title><![CDATA[【CSS相关】CSS工程化方案]]></title><description><![CDATA[<h1 id="css工程化方案">CSS工程化方案</h1>
<h2 id="1如何解决css的模块化问题？">1.如何解决CSS的模块化问题？</h2>
<ol>
<li>使用Less，Sass等CSS预处理器</li>
<li>使用PostCSS插件（postcss-import/precss）</li>
<li>使用webpack处理CSS（css-loader + style-loader）</li>
</ol>
<h2 id="2postcss是什么？">2.PostCSS是什么？</h2>
<ol>
<li>PostCSS是一个平台，具体要取决于这个平台上面的插件可以做什么</li>
<li>常用的插件如下
<code>js
//  1. 可以添加属性前缀，适应所有的浏览器
    const autoprefixer = require('autoprefixer');
    // 2. 将所有的import 导入进来的模块全部合并为一个文件
    // const atImport = require('postcss-import');
    // 3.  实现代码的压缩优化
    // const cssnano = require('postcss-cssnano');
    // 4. cssnext提前使用CSS的高级语法
    // const cssnext = require('postcss-cssnext');
    // 5. precss 类似于sass的语法处理
    // const precss = require('precss')
</code><ol start="3">
<li>import实现模块的合并（模块分开，提前合并）</li>
<li>CSS语法检查，兼容性检查</li>
<li>压缩文件</li></ol></li>
</ol>
<h2 id="3css-modules是什么？如何使用">3.CSS modules是什么？如何使用?</h2>
<ol>
<li>解决类名冲突的问题</li>
<li>使用PostCSS或者Webpack等构建工具进行编译</li>
<li>在HTML模板中使用编译过程产生的类名（对象.类名的方式来获取）</li>
</ol>
<h2 id="4为什么使用js来引用，加载css？">4.为什么使用JS来引用，加载CSS？</h2>
<ol>
<li>JS作为入口，管理资源具有天然优势（HTML，CSS本身是无法管理模块和资源的）</li>
<li>将组件的结果、样式、行为封装到一起，增强组件内聚（减少代码耦合）</li>
<li>可以做更多的处理（webpack，使用CSS Modules 解决了命名的冲突问题）</li>
</ol>
<h2 id="5-postcss的实现原理说一下？">5. PostCSS的实现原理说一下？</h2>
<blockquote>
  <p>[!NOTE]<br />
  PostCSS是一个通过JS插件转换样式表的工具，它本身并不是一门新的CSS语言，而是一个平台或者是生态心态，提供插件扩展服务即JS API，开发者可以根据这些接口，定制开发插件，<br />
  目前比较流行的插件工具如：Autoprefixer 、Stylelint 、CSSnano。</p>
</blockquote>
<h3 id="51-解析步骤">5.1 解析步骤</h3>
<ol>
<li>将CSS解析成抽象语法树(AST树)</li>
<li>将AST树”传递”给任意数量的插件处理</li>
<li>将处理完毕的AST树重新转换成字符串</li>
</ol>
<h3 id="52-处理机制">5.2 处理机制</h3>
<p>Source string → Tokenizer → Parser → AST → Processor → Stringifier</p>
<h4 id="521-tokenizer">5.2.1 Tokenizer</h4>
<blockquote>
  <p>[!NOTE]<br />
  将源css字符串进行分词</p>
</blockquote>
<p>举个例子：<br />
.className { color: #FFF; }<br />
通过Tokenizer后结果如下：</p>
<pre><code class="js language-js">[
    ["word", ".className", 1, 1, 1, 10]
    ["space", " "]
    ["{", "{", 1, 12]
    ["space", " "]
    ["word", "color", 1, 14, 1, 18]
    [":", ":", 1, 19]
    ["space", " "]
    ["word", "#FFF" , 1, 21, 1, 23]
    [";", ";", 1, 24]
    ["space", " "]
    ["}", "}", 1, 26]
]
</code></pre>
<p>以word类型为例，参数如下：</p>
<pre><code class="js language-js">const token = [
     // token 的类型，如word、space、comment
    'word',

    // 匹配到的词名称
    '.className',

    // 代表该词开始位置的row以及column，但像 type为`space`的属性没有该值
    1, 1,

    // 代表该词结束位置的row以及column，
    1, 10
]
</code></pre>
<h4 id="522-parser">5.2.2 Parser</h4>
<blockquote>
  <p>[!NOTE]<br />
  经过Tokenizer之后，需要Parser将结果初始化为AST</p>
</blockquote>
<pre><code class="js language-js">this.root = {
    type: 'root',
    source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: "&lt;input css 1&gt;"},
                   start: { line: 1, column: 1 } ,
                  end: { line: 1, column: 27 }
    },
   raws:{after: "", semicolon: false}
   nodes // 子元素
}
</code></pre>
<h4 id="523-processor">5.2.3 Processor</h4>
<p>经过AST之后，PostCSS提供了大量JS API给插件用</p>
<h4 id="524-stringifier">5.2.4 Stringifier</h4>
<p>插件处理后，比如加浏览器前缀，会被重新Stringifier.stringify为一般CSS。</p>
<h2 id="6谈一下你对前端工程化的理解？">6.谈一下你对前端工程化的理解？</h2>
<p>参考博客：</p>
<ul>
<li><a href="https://www.cnblogs.com/fsyz/p/8274727.html">https://www.cnblogs.com/fsyz/p/8274727.html</a></li>
<li><a href="https://www.cnblogs.com/onebox/p/9570518.html">https://www.cnblogs.com/onebox/p/9570518.html</a></li>
</ul>]]></description><link>https://blog.gaoredu.com/article/47946dab-23c0-4e29-9e22-960f5ad61a86</link><guid isPermaLink="true">https://blog.gaoredu.com/article/47946dab-23c0-4e29-9e22-960f5ad61a86</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 11 Jul 2024 10:01:52 GMT</pubDate></item><item><title><![CDATA[【开发环境】Git相关]]></title><description><![CDATA[<h1 id="git">Git</h1>
<h2 id="1-git的三种状态">1. Git的三种状态</h2>
<ul>
<li>已提交 committed</li>
<li>已暂存 staged</li>
<li>已修改 modified</li>
</ul>
<h2 id="2-git的三个区域">2. Git的三个区域</h2>
<ol>
<li>Git仓库<ul>
<li>是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分，从其它计算机克隆仓库时，拷贝的就是这里的数据。</li>
</ul>
</li>
<li>暂存区域<ul>
<li>暂存区域是一个文件，保存了下次将提交的文件列表信息，一般在 Git 仓库目录中。 有时候也被称作`‘索引’&#39;，不过一般说法还是叫暂存区域。</li>
</ul>
</li>
<li>工作目录<ul>
<li>工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件，放在磁盘上供你使用或修改。</li>
</ul>
</li>
</ol>
<h2 id="3-基本的-git-工作流程">3. 基本的 Git 工作流程</h2>
<ol>
<li>在工作目录修改文件</li>
<li>暂存文件，将文件的快照放入暂存区</li>
<li>提交更新，找到暂存去文件，将快照永久性存储到 Git 仓库目录。</li>
</ol>
<h3 id="31-用户信息">3.1 用户信息</h3>
<blockquote>
<p>[!NOTE]
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要，因为每一个 Git 的提交都会使用这些信息，并且它会写入到你的每一次提交中，不可更改。</p>
</blockquote>
<pre><code>git config --global user.name &quot;huyaocode&quot;
git config --global user.email johndoe@example.com</code></pre><h3 id="32-加入暂存区">3.2 加入暂存区</h3>
<pre><code>git add 文件名或路径</code></pre><h3 id="33-忽略文件">3.3 忽略文件</h3>
<p>创建一个<code>.gitignore</code>文件，可描述需要忽略的文件。 参考</p>
<pre><code class="language-py"># no .a files
*.a
# but do track lib.a, even though you&#39;re ignoring .a files above
!lib.a
# 只忽略当前文件夹下已 TODO 为名的文件
/TODO
# 忽略当前目录下 build 这个文件夹
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf</code></pre>
<h3 id="34-状态修改">3.4 状态修改</h3>
<p><code>git status -s</code>将每个修改状态以一行展示，也可以用<code>git status</code>多行展示。</p>
<ul>
<li><code>A</code> 新添加到暂存区中的文件</li>
<li><code>M</code> 修改过的文件</li>
<li><code>D</code> 被删除的文件</li>
<li><code>MM</code> 出现在右边的 M 表示该文件被修改了但是还没放入暂存区，出现在靠左边的 M 表示该文件被修改了并放入了暂存区。</li>
<li><code>??</code> 未跟踪</li>
</ul>
<h3 id="35-查看修改">3.5 查看修改</h3>
<ul>
<li>要查看尚未暂存的文件更新了哪些部分，不加参数直接输入 <code>git diff</code></li>
<li>要查看已暂存的将要添加到下次提交里的内容，可以用 <code>git diff --cached</code> 或 <code>git diff --staged</code></li>
</ul>
<h3 id="36-提交修改">3.6 提交修改</h3>
<p>运行<code>git commit</code>，会出现如下情况。这种方式会启动文本编辑器，开头还有一空行，供你输入提交说明。下面的行是被注释了的，也可以取消这些注释。</p>
<p>一般是vim 或 emacs。当然也可以按照 起步 介绍的方式，使用 <code>git config --global core.editor</code> 命令设定你喜欢的编辑软件。</p>
<p>也可以使用<code>git commit -m &quot;修改描述&quot;</code> 这种直接输入描述的方式提交修改。</p>
<p> <code>git commit</code> 加上 <code>-a</code> 选项，Git 就会自动把所有已经跟踪过的文件暂存起来一并提交，从而跳过 git add 步骤</p>
<h3 id="37-移除文件">3.7 移除文件</h3>
<p>要从 Git 中移除某个文件，就必须要从已跟踪文件清单中移除（确切地说，是从暂存区域移除），然后提交。
可以用 git rm 命令完成此项工作，并连带从工作目录中删除指定的文件，这样以后就不会出现在未跟踪文件清单中了。</p>
<p>运行 <code>git rm</code>记录此次移除文件的操作。下一次提交时，该文件就不再纳入版本管理了。 如果删除之前修改过并且已经放到暂存区域的话，则必须要用强制删除选项 <code>-f</code>（译注：即 force 的首字母）。 这是一种安全特性，用于防止误删还没有添加到快照的数据，
这样的数据不能被 Git 恢复。</p>
<p>想把文件从 Git 仓库中删除（亦即从暂存区域移除），但仍然希望保留在当前工作目录中。(不想让Git跟踪)</p>
<pre><code>git rm --cached 某文件</code></pre><h3 id="38-文件更名">3.8 文件更名</h3>
<pre><code>git mv file_from file_to</code></pre><p>其实，运行 git mv 就相当于运行了下面三条命令：</p>
<pre><code>mv README.md README
git rm README.md
git add README</code></pre><h3 id="39-查看提交历史">3.9 查看提交历史</h3>
<blockquote>
<p>[!NOTE]
<code>git log</code>git log 会按提交时间列出所有的更新，最近的更新排在最上面。 正如你所看到的，这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。</p>
</blockquote>
<p>使用 <code>-p</code> 用来限制展示条数。<code>git log -p -2</code></p>
<p>使用 <code>--stat</code> 选项看到每次提</p>
<p>使用<code>format</code>，定制要显示的记录格式。</p>
<p>使用<code>--graph</code>可形象地展示你的分支、合并历史。</p>
<pre><code>$ git log --pretty=format:&quot;%h %s&quot; --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch &#39;master&#39; of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch &#39;defunkt&#39; into local</code></pre><h3 id="310-重新提交">3.10 重新提交</h3>
<blockquote>
<p>[!NOTE]
有时候我们提交完了才发现漏掉了几个文件没有添加，或者提交信息写错了。 此时，可以运行带有 <code>--amend</code> 选项的提交命令尝试重新提交。</p>
</blockquote>
<pre><code>git commit --amend</code></pre><p>这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改（例如，在上次提交后马上执行了此命令），那么快照会保持不变，而你所修改的只是提交信息。</p>
<p>文本编辑器启动后，可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。</p>
<p>例如，你提交后发现忘记了暂存某些需要的修改，可以像下面这样操作：</p>
<pre><code>git commit -m &#39;initial commit&#39;
git add forgotten_file
git commit --amend</code></pre><p>最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。</p>
<h3 id="311-取消暂存的文件">3.11 取消暂存的文件</h3>
<p>使用 <code>git reset HEAD &lt;file&gt;</code> 来取消暂存。在调用时加上 --hard 选项可以令 git reset 成为一个危险的命令（译注：可能导致工作目录中所有当前进度丢失！）</p>
<h3 id="312-撤消对文件的修改">3.12 撤消对文件的修改</h3>
<p>使用<code>git checkout -- &lt;file&gt;</code> 可以撤销修改（未保存到暂存区）</p>
<h2 id="4--什么是-git-复刻（fork）？复刻（fork）、分支（branch）和克隆（clone）之间有什么区别？">4.  什么是 Git 复刻（fork）？复刻（fork）、分支（branch）和克隆（clone）之间有什么区别？</h2>
<ol>
<li><strong>复刻（fork）</strong> 是对存储仓库（repository）进行的远程的、服务器端的拷贝，从源头上就有所区别。复刻实际上不是 Git 的范畴。它更像是个政治/社会概念。</li>
<li><strong>克隆（clone）</strong>不是复刻，克隆是个对某个远程仓库的本地拷贝。克隆时，实际上是拷贝整个源存储仓库，包括所有历史记录和分支。</li>
<li><strong>分支（branch）</strong> 是一种机制，用于处理单一存储仓库中的变更，并最终目的是用于与其他部分代码合并。</li>
</ol>
<h2 id="5-拉取请求（pull-request）和分支（branch）之间有什么区别？">5. “拉取请求（pull request）”和“分支（branch）”之间有什么区别？</h2>
<ol>
<li><strong>分支（branch）</strong> 是代码的一个独立版本。</li>
<li><strong>拉取请求（pull request）</strong> 是当有人用仓库，建立了自己的分支，做了些修改并合并到该分支（把自己修改应用到别人的代码仓库）。</li>
</ol>
<h2 id="6-git-pull和git-fetch之间有什么区别？">6. “git pull”和“git fetch”之间有什么区别？</h2>
<ol>
<li><p>简单来说，git pull 是 git fetch + git merge。</p>
</li>
<li><p>当你使用 pull，Git 会试着自动为你完成工作。它是上下文（工作环境）敏感的，所以 Git 会把所有拉取的提交合并到你当前处理的分支中。pull 则是 自动合并提交而没有让你复查的过程。如果你没有细心管理你的分支，你可能会频繁遇到冲突。</p>
</li>
<li><p>当你 fetch，Git 会收集目标分支中的所有不存在的提交，并将这些提交存储到本地仓库中。但Git 不会把这些提交合并到当前分支中。这种处理逻辑在当你需要保持仓库更新，在更新文件时又希望处理可能中断的事情时，这将非常实用。而将提交合并到主分支中，则该使用 merge。</p>
</li>
</ol>
<h2 id="7-如在-git-恢复先前的提交？">7. 如在 Git 恢复先前的提交？</h2>
<p>假设你的情形是这样，其中 C 是你的 HEAD，(F) 是你文件的状态。</p>
<pre><code>   (F)
A-B-C
    ↑
  master

   (F)
A-B-C
    ↑
  master
要修改提交中的更改：
git reset --hard HEAD~1
1
git reset --hard HEAD~1
现在B是 HEAD，因为你使用了 --hard，所以你的文件将重置到提交 B 时的状态。

要撤销提交但保留更改：
git reset HEAD~1
1
git reset HEAD~1
现在我们告诉 Git 将 HEAD 指针移回（后移）一个提交（B），并保留文件原样，然后你可以 git status 来显示你已经检入 C 的更改。

撤销提交但保留文件和索引：
git reset --soft HEAD~1
1
git reset --soft HEAD~1
执行此操作后，git status，你讲看到索引中的文件跟以前一致。</code></pre><h2 id="8-什么是git-cherry-pick？">8. 什么是“git cherry-pick”？</h2>
<blockquote>
<p>[!NOTE]
命令 git cherry-pick 通常用于把特定提交从存储仓库的一个分支引入到其他分支中。常见的用途是从维护的分支到开发分支进行向前或回滚提交。</p>
</blockquote>
<p>这与其他操作（例如：合并（merge）、变基（rebase））形成鲜明对比，后者通常是把许多提交应用到其他分支中。</p>
<p>小结：</p>
<pre><code>git cherry-pick &lt;commit-hash&gt;
1
git cherry-pick &lt;commit-hash&gt;</code></pre><h2 id="9-解释-forking-工作流程的优点">9. 解释 Forking 工作流程的优点?</h2>
<ol>
<li><p>Forking 工作流程 与其他流行的 Git 工作流程有着根本的区别。它不是用单个服务端仓库充当“中央”代码库，而是为每个开发者提供自己的服务端仓库。Forking 工作流程最常用于公共开源项目中。</p>
</li>
<li><p>Forking 工作流程的主要优点是可以汇集提交贡献，又无需每个开发者提交到一个中央仓库中，从而实现干净的项目历史记录。开发者可以推送（push）代码到自己的服务端仓库，而只有项目维护人员才能直接推送（push）代码到官方仓库中。</p>
</li>
<li><p>当开发者准备发布本地提交时，他们的提交会推送到自己的公共仓库中，而不是官方仓库。然后他们向主仓库提交请求拉取（pull request），这会告知项目维护人员有可以集成的更新。</p>
</li>
</ol>
<h2 id="10-告诉我-git-中-head、工作树和索引之间的区别？">10. 告诉我 Git 中 HEAD、工作树和索引之间的区别？</h2>
<ol>
<li>该工作树/工作目录/工作空间是你看到和编辑的（源）文件的目录树。</li>
<li>该索引/中转区（staging area）是个在 /.git/index，单一的、庞大的二进制文件，该文件列出了当前分支中所有文件的 SHA1 检验和、时间戳和文件名，它不是个带有文件副本的目录。</li>
<li>HEAD是当前检出分支的最后一次提交的引用/指针。</li>
</ol>
<h2 id="11-你能解释下-gitflow-工作流程吗？">11. 你能解释下 Gitflow 工作流程吗？</h2>
<blockquote>
<p>[!NOTE]
Gitflow 工作流程使用两个并行的、长期运行的分支来记录项目的历史记录，分别是 master 和 develop 分支。</p>
</blockquote>
<ol>
<li>Master，随时准备发布线上版本的分支，其所有内容都是经过全面测试和核准的（生产就绪）。</li>
<li>Hotfix，维护（maintenance）或修复（hotfix）分支是用于给快速给生产版本修复打补丁的。修复（hotfix）分支很像发布（release）分支和功能（feature）分支，除非它们是基于 master 而不是 develop 分支。</li>
<li>Develop，是合并所有功能（feature）分支，并执行所有测试的分支。只有当所有内容都经过彻底检查和修复后，才能合并到 master 分支。</li>
<li>Feature，每个功能都应留在自己的分支中开发，可以推送到 develop 分支作为功能（feature）分支的父分支。</li>
</ol>
<h2 id="12-什么时候应使用-git-stash？">12. 什么时候应使用 “git stash”？</h2>
<blockquote>
<p>[!NOTE]
git stash 命令把你未提交的修改（已暂存（staged）和未暂存的（unstaged））保存以供后续使用，以后就可以从工作副本中进行还原。</p>
</blockquote>
<p>回顾：</p>
<pre><code>$ git status
On branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage
$ git status
On branch master
nothing to commit, working tree clean

$ git status
On branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage
$ git status
On branch master
nothing to commit, working tree clean
我们可以使用暂存（stash）的一个地方是，如果我们发现在上次提交中忘记了某些内容，并且已经开始在同一分支中处理下一个提交了：

# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something

# stash away the current mess I made
$ git stash save

# some changes in the working dir

# and now add them to the last commit:
$ git add -u
$ git commit --ammend

# back to work!
$ git stash pop

# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something

# stash away the current mess I made
$ git stash save

# some changes in the working dir

# and now add them to the last commit:
$ git add -u
$ git commit --ammend

# back to work!
$ git stash pop</code></pre><h2 id="13-如何从-git-中删除文件，而不将其从文件系统中删除？">13. 如何从 git 中删除文件，而不将其从文件系统中删除？</h2>
<p>如果你在 git add 过程中误操作，你最终会添加不想提交的文件。但是，git rm 则会把你的文件从你暂存区（索引）和文件系统（工作树）中删除，这可能不是你想要的。</p>
<p>换成 git reset 操作：</p>
<p>git reset filename          # or
echo filename &gt;&gt; .gitingore # add it to .gitignore to avoid re-adding it
1
2
git reset filename          # or
echo filename &gt;&gt; .gitingore # add it to .gitignore to avoid re-adding it
上面意思是，git reset <paths> 是 git add <paths> 的逆操作。</p>
<h2 id="14-是么时候使用git-rebase代替git-merge？">14. 是么时候使用“git rebase”代替“git merge”？</h2>
<blockquote>
<p>[!NOTE]
这两个命令都是把修改从一个分支集成到另一个分支上，它们只是以非常不同的方式进行。</p>
</blockquote>
<p>考虑一下场景，在合并和变基前：</p>
<p>A &lt;- B &lt;- C    [master]
^
 <br>  D &lt;- E       [branch]
1
2
3
4
A &lt;- B &lt;- C    [master]
^
 <br>  D &lt;- E       [branch]
在 git merge master 之后：</p>
<p>A &lt;- B &lt;- C
^         ^
 \         <br>  D &lt;- E &lt;- F
1
2
3
4
A &lt;- B &lt;- C
^         ^
 \         <br>  D &lt;- E &lt;- F
在 git rebase master 之后：</p>
<p>A &lt;- B &lt;- C &lt;- D &lt;- E
1
A &lt;- B &lt;- C &lt;- D &lt;- E
使用变基时，意味着使用另一个分支作为集成修改的新基础。</p>
<h3 id="141-何时使用">14.1 何时使用</h3>
<p>如果你对修改不够果断，请使用合并操作。
根据你希望的历史记录的样子，而选择使用变基或合并操作。</p>
<h3 id="142-更多需要考虑的因素">14.2 更多需要考虑的因素</h3>
<ol>
<li>分支是否与团队外部的开发人员共享修改（如开源、公开项目）？如果是这样，请不要使用变基操作。变基会破坏分支，除非他们使用 git pull --rebase，否则这些开发人员将会得到损坏的或不一致的仓库。</li>
<li>你的开发团队技术是否足够娴熟？变基是一种破坏性操作。这意味着，如果你没有正确使用它，你可能会丢失提交，并且/或者会破坏其他开发者仓库的一致性。</li>
<li>分支本身是否代表有用的信息？一些团队使用功能分支（branch-per-feature）模式，每个分支代表一个功能（或错误修复，或子功能等）。在此模式中，分支有助于识别相关提交的集合。在每个开发人员分支（branch-per-developer）模式中，分支本身不会传达任何其他信息（提交信息已有作者）。则在这种模式下，变基不会有任何破坏。</li>
<li>是否无论如何都要还原合并？恢复（如在撤销中）变基，是相当困难的，并且/或者在变基中存在冲突时，是不可能完成的。如果你考虑到日后可能需要恢复，请使用合并操作。</li>
</ol>
<hr>
<p><strong>参考资料</strong></p>
<ul>
<li>Git在线学习：<a href="https://learngitbranching.js.org/?NODEMO">https://learngitbranching.js.org/?NODEMO</a></li>
<li>参考博客：<a href="https://www.cnblogs.com/ludashi/p/8323617.html">https://www.cnblogs.com/ludashi/p/8323617.html</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/43911bff-676c-461a-96fe-9dd39cfe480b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/43911bff-676c-461a-96fe-9dd39cfe480b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Jul 2024 20:48:08 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】函数curry化]]></title><description><![CDATA[<h1 id="函数柯西化（经典面试题）">函数柯西化（经典面试题）</h1>
<pre><code class="language-js">// 实现一个add方法，使计算结果能够满足如下预期：
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;

function add() {
    // 第一次执行时，定义一个数组专门用来存储所有的参数
    var _args = Array.prototype.slice.call(arguments);

    // 在内部声明一个函数，利用闭包的特性保存_args并收集所有的参数值
    var _adder = function() {
        _args.push(...arguments);
        return _adder;
    };

    // 利用toString隐式转换的特性，当最后执行时隐式转换，并计算最终的值返回
    _adder.toString = function () {
        return _args.reduce(function (a, b) {
            return a + b;
        });
    }
    return _adder;
}

add(1)(2)(3)                // 6
add(1, 2, 3)(4)             // 10
add(1)(2)(3)(4)(5)          // 15
add(2, 6)(1)                // 9</code></pre>
<h2 id="加强理解版本">加强理解版本</h2>
<pre><code class="language-js">// v1: 实现一个精简版的curry函数
function curry(fn, ...args) {
    return function () {
        return fn.apply(this, args.concat([].slice.call(arguments)));
    }
}
function add(a, b) {
    return a + b;
}

var addCurry = curry(add, 1, 2);
console.log(addCurry());// 3
//或者
var addCurry = curry(add, 1);
console.log(addCurry(2)); // 3
//或者
var addCurry = curry(add);
console.log(addCurry(1, 2)); // 3


// v2: 上面的代码优化
function sub_curry(fn) {
    let args = [].slice.call(arguments, 1);
    return function () {
        return fn.apply(this, args.concat([].slice.call(arguments)));
    }
}

function curry(fn, length) {
    length = length || fn.length;
    let slice = Array.prototype.slice;

    return function () {

    }
}


// 容易理解的版本
function curryFn(fn, args) {
    let length = fn.length;         // 获取fn这个函数的参数数量
    args = args || [];              // 参数

    return function () {
        let _args = args.slice(0);

        for (let i = 0; i &lt; arguments.length; i++) {
            _args.push(arguments[i]);
        }

        if (_args.length &lt; length) {
            return curryFn.call(this, fn, _args);
        }
        else {
            return fn.apply(this, _args);
        }
    }
}


let fn = curryFn(function(a, b, c) {
    console.log([a, b, c]);
});

fn(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;) // [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
fn(&quot;a&quot;, &quot;b&quot;)(&quot;c&quot;) // [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
fn(&quot;a&quot;)(&quot;b&quot;)(&quot;c&quot;) // [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]
fn(&quot;a&quot;)(&quot;b&quot;, &quot;c&quot;) // [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]</code></pre>
]]></description><link>https://blog.gaoredu.com/article/fe59ca8c-e201-4357-abe3-0dd4d8a2be42</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fe59ca8c-e201-4357-abe3-0dd4d8a2be42</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Jul 2024 15:59:05 GMT</pubDate></item><item><title><![CDATA[【面经系列】美团面经]]></title><description><![CDATA[<h1 id="美团面经系列">美团面经系列</h1>
<ol>
<li>meta的用法？</li>
<li>input标签的type有哪些类型？</li>
<li>语义化标签写一个头部信息，章节，尾部信息</li>
<li>说一些H5的语义化标签以及他们的作用和在浏览器的表现</li>
<li>知道BFC和IFC吗</li>
<li>less和scss用过吗？区别是啥？</li>
<li>水平垂直居中</li>
<li>margin坍塌---&gt; BFC 问题</li>
<li>css动画</li>
<li>grid的所有属性</li>
<li>三栏布局</li>
<li>position定位</li>
<li>rem以及如何实现移动端适配</li>
<li>实现一个上中下左右的经典布局</li>
<li>实现一个类似百度的搜索框，点击后下面出现一个div，我要怎么让我点到旁边的时候他消失</li>
<li>三个不同高度的div使其在一排垂直居中的方法</li>
<li>盒模型</li>
<li>层叠上下文</li>
<li>flex了解吗？讲一下</li>
<li>display属性有哪些？</li>
<li>position属性有哪些？每一个属性的作用，使用？</li>
<li>css中引入样式有哪几种方法，不考虑预处理和正常的三种方法，有没有其他的方法？</li>
<li>css选择器优先级，说说有几种方法可以超过id选择器？</li>
<li>position的几个属性？分别对应的使用场景（布局），如何去使用？</li>
<li>实现一个可以设置样式的弹框组件</li>
<li>栅格系统，CSS大概怎么分的</li>
<li>promise如何取消？</li>
<li>co模块内部是如何运行的？</li>
<li>await内部的原理？</li>
<li>JS中substr与substring的区别？</li>
<li>javascript中childNodes与children的区别？</li>
<li>HTMLCollection和NodeList的差异？</li>
<li>map和foreach的区别，像foreach一样影响原数组的有哪些方法？</li>
<li>getElementsByName和querySelectorAll的区别？</li>
<li><ul>
<li>实现一个on和emit</li>
</ul>
</li>
<li>事件模型，捕获与冒泡，哪些事件没有冒泡，没有冒泡的原因是什么</li>
<li>事件代理，中间一个不需要事件怎么办，代理的元素内部还有元素怎么办</li>
<li>input事件传播</li>
<li>原型链</li>
<li>ajax怎么请求数据的，reayState</li>
<li>防抖节流</li>
<li>const</li>
<li>说一些常用array的api</li>
<li>class interface function的区别</li>
<li>面向对象的三大特性</li>
<li>addEventLinsener与普通事件绑定的区别</li>
<li>stopPropagation包括捕获吗</li>
<li>在原型链上添加一个方法让他每隔两秒就打印一次name属</li>
<li>一个数组怎么实现下标每隔3倒序输出一次</li>
<li>Event loop是什么</li>
<li>箭头函数和普通函数区别</li>
<li>原生dom,输出每一个li里的内容（手写）</li>
<li>用settimeout实现一个setinterval （在实现这个过程中，为什么settimeout不会发生栈溢出现象）</li>
<li>解释一下instanceOf的原理（手动实现一个instanceOf）</li>
<li>解释一下hasownproperty</li>
<li>JavaScript中in操作符(for..in)、Object.keys()和Object.getOwnPropertyNames()的区别</li>
<li>ES6新特性有哪些？</li>
<li>异步的解决方案？async与await的使用？</li>
<li>实现一个自己的迭代器</li>
<li>如何使用Promise实现一个多异步任务顺序执行呢？？？(掌握)</li>
<li>判断数据类型的方法</li>
<li>typeof可以得到什么</li>
<li>call，apply，bind bind怎么实现的</li>
<li>cookie的操作封装</li>
<li>双向数据绑定和单(双)向数据流</li>
<li>vue组件通信</li>
<li>spa应用，v-dom，diff算法，mvvm，组件化开发</li>
<li>eventBus跟vuex的区别</li>
<li>抛开react的diff算法，怎么实现dom对比</li>
<li>vue响应式原理，defineproperty，proxy，对比一下两者</li>
<li>vuex</li>
<li>keep-alive</li>
<li>闭包</li>
<li>computed watch</li>
<li>使用路由做前端拦截的具体实现是什么？</li>
<li>vue-router实现的几种方式和原理？</li>
<li>vuex的有哪些作用和使用场景，实现原理是什么？</li>
<li>axios的使用？原理简单讲一下？</li>
<li>浏览器的同源策略？</li>
<li>跨域有哪些方法？document.domain的限制是啥？CORS的实现原理？</li>
<li>跨域问题。手写jsonp。说说代理服务器具体那种。</li>
<li>回流重绘</li>
<li>实现页面多ajax请求完成后渲染页面</li>
<li>CSS文件没下载完会影响CSS树吗？</li>
<li>浏览器机制</li>
<li>浏览器存储的几种方式？每一种存储方式的使用场景，有什么注意点？</li>
<li>浏览器安全上的几种问题？如何解决？（这里我觉得需要将安全问题的始末讲出来，最好不要解释概念，每一种措施实施的根据是什么？）</li>
<li>词法分析变成抽象语法树的原因</li>
<li>es6如何转换es5？babel的原理是啥？</li>
<li>http能取消吗？如何取消？</li>
<li>http2与http1.1的区别？</li>
<li>url的定义，规范？</li>
<li>tcp过程，http过程，两者啥关系</li>
<li>http报文组成（比如cookie设置哪些，生命周期，http-only，又追问xss。connection取值。缓存机制相关的，哪些字段是游览器缓存哪些是代理服务器缓存优先级如何）</li>
<li>http状态码</li>
<li>post传值都有哪些类型，如果请求参数错了会有什么提示  </li>
<li>ip层和网络层是干什么的</li>
<li>强缓存和协商缓存</li>
<li>http和https</li>
<li>冯诺依曼计算机结构</li>
<li>进程跟线程</li>
<li>死锁</li>
<li>git工作流程，常用的git命令有哪些，rebase的原理？</li>
<li>git合并，发生冲突之后怎么处理</li>
<li>长列表性能优化？</li>
<li>从url输入到前端页面展示的过程？</li>
<li>lru是啥？</li>
<li>网页上边出现广告的现象见没见过，什么原因。</li>
<li>页面白屏如何处理，想到的场景以及处理办法</li>
<li>工程化的理解</li>
<li>设计模式还有哪些</li>
<li>如果打包的js文件过大如何进行优化</li>
<li>node的Stream和Buffer区别。</li>
<li>快排</li>
<li>求1到N之间的素数，方法要求复杂度为O（n）</li>
<li>乱序输出一个数组，要求输出每个数字的概率相同</li>
<li>O（n）方法找出有序数组第一个指定数字</li>
<li>实现一个乱序</li>
<li>实现一个函数，对一个已排序的且含有重复数字的数组，找到重复数字第一次出现的位置（二分查找）</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/868d3adf-8cd7-44e2-8b31-6712769c3158</link><guid isPermaLink="true">https://blog.gaoredu.com/article/868d3adf-8cd7-44e2-8b31-6712769c3158</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 08 Jul 2024 09:37:43 GMT</pubDate></item><item><title><![CDATA[【性能优化】performance性能监控]]></title><description><![CDATA[<h1 id="前端性能监控指标">前端性能监控指标</h1>
<h2 id="1-前端性能统计的指标有哪些？">1. 前端性能统计的指标有哪些？</h2>
<ol>
<li>白屏时间：从打开网站到有内容渲染出来的时间节点；</li>
<li>首屏时间：首屏内容渲染完毕的时间节点；</li>
<li>用户可操作时间节点：domready触发节点；</li>
<li>总下载时间：window.onload的触发节点。</li>
</ol>
<h2 id="2-如何统计前端的性能（量化统计）？">2. 如何统计前端的性能（量化统计）？</h2>
<p>下面介绍几种以上几个数据的统计方案。</p>
<h3 id="21-常规统计方案">2.1 常规统计方案</h3>
<p>使用注入代码监控的方式统计以上指标，在没有一些浏览器新API（如下文将提到的timing API）的支持下，得到的数据大都是估值，虽然不准确，但也有一定的参考价值。</p>
<h4 id="211-白屏时间">2.1.1 白屏时间</h4>
<p>白屏时间节点指的是从用户进入网站（输入url、刷新、跳转等方式）的时刻开始计算，一直到页面有内容展示出来的时间节点。这个过程包括dns查询、建立tcp连接、发送首个http请求（如果使用https还要介入TLS的验证时间）、返回html文档、html文档head解析完毕。</p>
<p>使用注入代码监控无法获取解析html文档之前的时间信息，目前普遍使用的白屏时间统计方案是在html文档的head中所有的静态资源以及内嵌脚本/样式之前记录一个时间点，在head最底部记录另一个时间点，两者的差值作为白屏时间。如下：</p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;/&gt;
    &lt;!--这里还有一大串meta信息--&gt;
    &lt;script&gt;
    var start_time = new Date();//统计起点，实际为html开始解析的时间节点
    &lt;/script&gt;
    &lt;link href=&#39;a.css&#39;&gt;&lt;/link&gt;
    &lt;script src=&#39;a.js&#39;&gt;&lt;/script&gt;
    &lt;script&gt;
    var end_time = new Date();//统计起点，实际为html开始解析的时间节点
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>上述代码中的end_time和start_time的差值一般作为白屏时间的估值，但理论上来讲，这个差值只是浏览器解析html文档head的时间，并非准确的白屏时间。</p>
<h4 id="212-首屏时间">2.1.2 首屏时间</h4>
<p>首屏时间的统计比较复杂，目前应用比较广的方案是将首屏的图片、iframe等资源添加onload事件，获取最慢的一个。</p>
<p>这种方案比较适合首屏元素数量固定的页面，比如移动端首屏不论屏幕大小都展示相同数量的内容，响应式得改变内容的字体、尺寸等。但是对于首屏元素不固定的页面，这种方案并不适用，最典型的就是PC端页面，不同屏幕尺寸下展示的首屏内容不同。上述方案便不适用于此场景。</p>
<h4 id="213-可操作时间">2.1.3 可操作时间</h4>
<p>用户可操作的时间节点即dom ready触发的时间，使用jquery可以通过$(document).ready()获取此数据，如果不使用jQuery可以参考这里通过原生方法实现dom ready。</p>
<h4 id="214-总下载时间">2.1.4 总下载时间</h4>
<blockquote>
<p>[!NOTE]
总下载时间即window.onload触发的时间节点。</p>
</blockquote>
<p>目前大多数web产品都有异步加载的内容，比如图片的lazyload等。如果总下载时间需要统计到这些数据，可以借鉴AOP的理念，在请求异步内容之前和之后分别打点，最后计算差值。不过通常来讲，我们说的总下载时间并不包括异步加载的内容。</p>
<h3 id="22-使用windowperformance-api">2.2 使用window.performance API</h3>
<blockquote>
<p>[!NOTE]
window.performance 是W3C性能小组引入的新的API，目前IE9以上的浏览器都支持。</p>
</blockquote>
<p>一个performance对象的完整结构包括：</p>
<ol>
<li><p>memory字段代表JavaScript对内存的占用。</p>
</li>
<li><p>navigation字段统计的是一些网页导航相关的数据：</p>
</li>
<li><p>redirectCount:重定向的数量（只读），但是这个接口有同源策略限制，即仅能检测同源的重定向；</p>
</li>
<li><p>type 返回值应该是0,1,2 中的一个。分别对应三个枚举值:</p>
<ul>
<li>0 : TYPE_NAVIGATE (用户通过常规导航方式访问页面，比如点一个链接，或者一般的get方式)</li>
<li>1 : TYPE_RELOAD (用户通过刷新，包括JS调用刷新接口等方式访问页面)</li>
<li>2 : TYPE_BACK_FORWARD (用户通过后退按钮访问本页面)
最重要的是timing字段的统计数据，它包含了网络、解析等一系列的时间数据。</li>
</ul>
</li>
</ol>
<h4 id="221-timing-api">2.2.1 timing API</h4>
<p>timing的整体结构包括：</p>
<p><img src="../../img/%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7-timing.png" alt="性能监控"></p>
<ol>
<li><p>startTime：有些浏览器实现为navigationStart，代表浏览器开始unload前一个页面文档的开始时间节点。比如我们当前正在浏览baidu.com，在地址栏输入google.com并回车，浏览器的执行动作依次为：unload当前文档（即baidu.com）-&gt;请求下一文档（即google.com）。navigationStart的值便是触发unload当前文档的时间节点。</p>
<ul>
<li>如果当前文档为空，则navigationStart的值等于fetchStart。</li>
</ul>
</li>
<li><p>redirectStart和redirectEnd：如果页面是由redirect而来，则redirectStart和redirectEnd分别代表redirect开始和结束的时间节点；</p>
</li>
<li><p>unloadEventStart和unloadEventEnd：如果前一个文档和请求的文档是同一个域的，则unloadEventStart和unloadEventEnd分别代表浏览器unload前一个文档的开始和结束时间节点。否则两者都等于0；</p>
</li>
<li><p>fetchStart是指在浏览器发起任何请求之前的时间值。在fetchStart和domainLookupStart之间，浏览器会检查当前文档的缓存；</p>
</li>
<li><p>domainLookupStart和domainLookupEnd分别代表DNS查询的开始和结束时间节点。如果浏览器没有进行DNS查询（比如使用了cache），则两者的值都等于fetchStart；</p>
</li>
<li><p>connectStart和connectEnd分别代表TCP建立连接和连接成功的时间节点。如果浏览器没有进行TCP连接（比如使用持久化连接webscoket），则两者都等于domainLookupEnd；</p>
</li>
<li><p>secureConnectionStart：可选。如果页面使用HTTPS，它的值是安全连接握手之前的时刻。如果该属性不可用，则返回undefined。如果该属性可用，但没有使用HTTPS，则返回0；</p>
</li>
<li><p>requestStart代表浏览器发起请求的时间节点，请求的方式可以是请求服务器、缓存、本地资源等；</p>
</li>
<li><p>responseStart和responseEnd分别代表浏览器收到从服务器端（或缓存、本地资源）响应回的第一个字节和最后一个字节数据的时刻；</p>
</li>
<li><p>domLoading代表浏览器开始解析html文档的时间节点。我们知道IE浏览器下的document有readyState属性，domLoading的值就等于readyState改变为loading的时间节点；</p>
</li>
<li><p>domInteractive代表浏览器解析html文档的状态为interactive时的时间节点。domInteractive并非DOMReady，它早于DOMReady触发，代表html文档解析完毕（即dom tree创建完成）但是内嵌资源（比如外链css、js等）还未加载的时间点；</p>
</li>
<li><p>domContentLoadedEventStart：代表DOMContentLoaded事件触发的时间节点：</p>
</li>
<li><p>页面文档完全加载并解析完毕之后,会触发DOMContentLoaded事件，HTML文档不会等待样式文件,图片文件,子框架页面的加载(load事件可以用来检测HTML页面是否完全加载完毕(fully-loaded))。</p>
</li>
<li><p>domContentLoadedEventEnd：代表DOMContentLoaded事件完成的时间节点，此刻用户可以对页面进行操作，也就是jQuery中的domready时间；</p>
</li>
<li><p>domComplete：html文档完全解析完毕的时间节点；</p>
</li>
<li><p>loadEventStart和loadEventEnd分别代表onload事件触发和结束的时间节点</p>
</li>
</ol>
<h4 id="222-计算性能指标">2.2.2 计算性能指标</h4>
<blockquote>
<p>[!NOTE]
可以使用Navigation.timing 统计到的时间数据来计算一些页面性能指标，比如DNS查询耗时、白屏时间、domready等等。</p>
</blockquote>
<ul>
<li>DNS查询耗时 = domainLookupEnd - domainLookupStart</li>
<li>TCP链接耗时 = connectEnd - connectStart</li>
<li>request请求耗时 = responseEnd - responseStart</li>
<li>解析dom树耗时 = domComplete - domInteractive</li>
<li>白屏时间 = domloadng - fetchStart</li>
<li>domready时间 = domContentLoadedEventEnd - fetchStart</li>
<li>onload时间 = loadEventEnd - fetchStart</li>
</ul>
<h4 id="223-统计代码">2.2.3 统计代码</h4>
<pre><code class="language-js">// 计算加载时间
function getPerformanceTiming () { 
    var performance = window.performance;

    if (!performance) {
        // 当前浏览器不支持
        console.log(&#39;你的浏览器不支持 performance 接口&#39;);
        return;
    }

    var t = performance.timing;
    var times = {};

    //【重要】页面加载完成的时间
    //【原因】这几乎代表了用户等待页面可用的时间
    times.loadPage = t.loadEventEnd - t.navigationStart;

    //【重要】解析 DOM 树结构的时间
    //【原因】反省下你的 DOM 树嵌套是不是太多了！
    times.domReady = t.domComplete - t.responseEnd;

    //【重要】重定向的时间
    //【原因】拒绝重定向！比如，http://example.com/ 就不该写成 http://example.com
    times.redirect = t.redirectEnd - t.redirectStart;

    //【重要】DNS 查询时间
    //【原因】DNS 预加载做了么？页面内是不是使用了太多不同的域名导致域名查询的时间太长？
    // 可使用 HTML5 Prefetch 预查询 DNS ，见：[HTML5 prefetch](http://segmentfault.com/a/1190000000633364)           
    times.lookupDomain = t.domainLookupEnd - t.domainLookupStart;

    //【重要】读取页面第一个字节的时间
    //【原因】这可以理解为用户拿到你的资源占用的时间，加异地机房了么，加CDN 处理了么？加带宽了么？加 CPU 运算速度了么？
    // TTFB 即 Time To First Byte 的意思
    // 维基百科：https://en.wikipedia.org/wiki/Time_To_First_Byte
    times.ttfb = t.responseStart - t.navigationStart;

    //【重要】内容加载完成的时间
    //【原因】页面内容经过 gzip 压缩了么，静态资源 css/js 等压缩了么？
    times.request = t.responseEnd - t.requestStart;

    //【重要】执行 onload 回调函数的时间
    //【原因】是否太多不必要的操作都放到 onload 回调函数里执行了，考虑过延迟加载、按需加载的策略么？
    times.loadEvent = t.loadEventEnd - t.loadEventStart;

    // DNS 缓存时间
    times.appcache = t.domainLookupStart - t.fetchStart;

    // 卸载页面的时间
    times.unloadEvent = t.unloadEventEnd - t.unloadEventStart;

    // TCP 建立连接完成握手的时间
    times.connect = t.connectEnd - t.connectStart;

    return times;
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/f998ee5a-f874-4dbf-8914-11f4f1acd9e0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f998ee5a-f874-4dbf-8914-11f4f1acd9e0</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 06 Jul 2024 17:29:58 GMT</pubDate></item><item><title><![CDATA[【数据结构与算法】数据结构]]></title><description><![CDATA[<h1 id="数据结构">数据结构</h1>
<h2 id="1-数组和链表的区别">1. 数组和链表的区别?</h2>
<ol>
<li><p>从<strong>逻辑结构</strong>上来看，数组必须实现定于固定的长度，不能适应数据动态增减的情况，即数组的大小一旦定义就不能改变。当数据增加是，可能超过原先定义的元素的个数；当数据减少时，造成内存浪费；链表动态进行存储分配，可以适应数据动态地增减的情况，且可以方便地插入、删除数据项。</p>
</li>
<li><p>从<strong>内存存储</strong>的角度看；数组从栈中分配空间（用new则在堆上创建），对程序员方便快速，但是自由度小；链表从堆中分配空间，自由度大但是申请管理比较麻烦。</p>
</li>
<li><p><strong>从访问方式</strong>类看，数组在内存中是连续的存储，因此可以利用下标索引进行访问；链表是链式存储结构，在访问元素时候只能够通过线性方式由前到后顺序的访问，所以访问效率比数组要低。</p>
</li>
</ol>
<h2 id="2-简述快速排序过程">2. 简述快速排序过程</h2>
<blockquote>
<p>[!NOTE]
掌握所有常见的排序算法的手写实现，以及复杂度相关细节知识。</p>
</blockquote>
<ol>
<li><p>选择一个基准元素,通常选择第一个元素或者最后一个元素,</p>
</li>
<li><p>通过一趟排序将待排序的记录分割成独立的两部分，其中一部分记录的元素值均比基准元素值小。另一部分记录的元素值比基准值大。</p>
</li>
<li><p>此时基准元素在其排好序后的正确位置</p>
</li>
<li><p>然后分别对这两部分记录用同样的方法继续进行排序，直到整个序列有序。</p>
</li>
</ol>
<h2 id="3-各类排序算法对比（熟练掌握）">3. 各类排序算法对比（熟练掌握）</h2>
<p><img src="../img/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90.png" alt="排序算法对比分析"></p>
<h3 id="31-时间复杂度来说">3.1 时间复杂度来说</h3>
<ol>
<li><p>平方阶(O(n2))排序
　　各类简单排序:直接插入、直接选择和冒泡排序；</p>
</li>
<li><p>线性对数阶(O(nlog2n))排序
　　
快速排序、堆排序和归并排序；</p>
</li>
<li><p>O(n1+§))排序,§是介于0和1之间的常数。
希尔排序</p>
</li>
<li><p>线性阶(O(n))排序
　　基数排序，此外还有桶、箱排序。</p>
</li>
</ol>
<p><strong>说明：</strong></p>
<ol>
<li><p>当原表有序或基本有序时，直接插入排序和冒泡排序将大大减少比较次数和移动记录的次数，时间复杂度可降至O（n）；</p>
</li>
<li><p>而快速排序则相反，当原表基本有序时，将蜕化为冒泡排序，时间复杂度提高为O（n2）；</p>
</li>
<li><p>原表是否有序，对简单选择排序、堆排序、归并排序和基数排序的时间复杂度影响不大。</p>
</li>
</ol>
<h3 id="32-稳定性">3.2 稳定性</h3>
<blockquote>
<p>[!NOTE]
排序算法的稳定性:若待排序的序列中，存在多个具有相同关键字的记录，经过排序，这些记录的相对次序保持不变，则称该算法是稳定的；若经排序后，记录的相对次序发生了改变，则称该算法是不稳定的。 </p>
</blockquote>
<h4 id="321-稳定的排序算法">3.2.1 稳定的排序算法</h4>
<p>冒泡排序、插入排序、归并排序和基数排序</p>
<h4 id="322-不是稳定的排序算法">3.2.2 不是稳定的排序算法</h4>
<p>选择排序、快速排序、希尔排序、堆排序</p>
<h3 id="33-选择排序算法准则">3.3 选择排序算法准则</h3>
<p>一般而言，需要考虑的因素有以下四点：</p>
<p>设待排序元素的个数为n.</p>
<ol>
<li><p>当n较大，则应采用时间复杂度为O(nlog2n)的排序方法：快速排序、堆排序或归并排序序。</p>
</li>
<li><p>当n较大，内存空间允许，且要求稳定性：归并排序</p>
</li>
<li><p>当n较小，可采用直接插入或直接选择排序。</p>
<p> 直接插入排序：当元素分布有序，直接插入排序将大大减少比较次数和移动记录的次数。</p>
<p> 直接选择排序 ：元素分布有序，如果不要求稳定性，选择直接选择排序</p>
</li>
<li><p>一般不使用或不直接使用传统的冒泡排序。</p>
</li>
<li><p>基数排序
它是一种稳定的排序算法，但有一定的局限性：</p>
</li>
</ol>
<ul>
<li>关键字可分解。</li>
<li>记录的关键字位数较少，如果密集更好</li>
<li>如果是数字时，最好是无符号的</li>
</ul>
<h2 id="4-解决哈希冲突的方法（面试重点）">4. 解决哈希冲突的方法（面试重点）</h2>
<blockquote>
<p>[!NOTE]
需要对HashTable的底层实现有深入的理解，知道哈希冲突的产生原因和解决方法。</p>
</blockquote>
<p>哈希表（Hash table，也叫散列表），是根据关键码值(Key value)而直接进行访问的数据结构。</p>
<p>1） 线性探测法</p>
<p>2） 平方探测法</p>
<p>3） 伪随机序列法</p>
<p>4） 拉链法</p>
<h2 id="5-b树（了解）">5. B树（了解）</h2>
<blockquote>
<p>[!NOTE]
如果对数据库有了解的话，该知识点需要深入理解。</p>
</blockquote>
<p>根据B类树的特点，构造一个多阶的B类树，然后在尽量多的在结点上存储相关的信息，保证层数尽量的少，以便后面我们可以更快的找到信息，磁盘的I/O操作也少一些，而且B类树是平衡树，每个结点到叶子结点的高度都是相同，这也保证了每个查询是稳定的。</p>
<p>B树和B+树的区别，以一个m阶树为例。</p>
<ol>
<li><p>关键字的数量不同；B+树中分支结点有m个关键字，其叶子结点也有m个，其关键字只是起到了一个索引的作用，但是B树虽然也有m个子结点，但是其只拥有m-1个关键字。</p>
</li>
<li><p>存储的位置不同；B+树中的数据都存储在叶子结点上，也就是其所有叶子结点的数据组合起来就是完整的数据，但是B树的数据存储在每一个结点中，并不仅仅存储在叶子结点上。</p>
</li>
<li><p>分支结点的构造不同；B+树的分支结点仅仅存储着关键字信息和儿子的指针（这里的指针指的是磁盘块的偏移量），也就是说内部结点仅仅包含着索引信息。</p>
</li>
<li><p>查询不同；B树在找到具体的数值以后，则结束，而B+树则需要通过索引找到叶子结点中的数据才结束，也就是说B+树的搜索过程中走了一条从根结点到叶子结点的路径。</p>
</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/d47325bc-4059-4691-8509-d73b7166e5fe</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d47325bc-4059-4691-8509-d73b7166e5fe</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 06 Jul 2024 01:44:47 GMT</pubDate></item><item><title><![CDATA[【JS相关】异步]]></title><description><![CDATA[<h1 id="异步">异步</h1>
<h2 id="1-为什么javascript是单线程？">1. 为什么JavaScript是单线程？</h2>
<ol>
<li><p>JavaScript语言的一大特点就是单线程，也就是说，同一个时间只能做一件事。那么，为什么JavaScript不能有多个线程呢？这样能提高效率啊。</p>
</li>
<li><p>JavaScript的单线程，与它的用途有关。作为浏览器脚本语言，JavaScript的主要用途是与用户互动，以及操作DOM。这决定了它只能是单线程，否则会带来很复杂的同步问题。比如，假定JavaScript同时有两个线程，一个线程在某个DOM节点上添加内容，另一个线程删除了这个节点，这时浏览器应该以哪个线程为准？</p>
</li>
<li><p>所以，为了避免复杂性，从一诞生，JavaScript就是单线程，这已经成了这门语言的核心特征，将来也不会改变。</p>
</li>
<li><p>为了利用多核CPU的计算能力，HTML5提出Web Worker标准，允许JavaScript脚本创建多个线程，但是子线程完全受主线程控制，且不得操作DOM。所以，这个新标准并没有改变JavaScript单线程的本质。</p>
</li>
</ol>
<h2 id="2-event-loop">2. Event Loop</h2>
<p>参考地址:<a href="https://zhuanlan.zhihu.com/p/41543963">Event Loop 这个循环你晓得么？(附 GIF 详解)-饿了么前端</a></p>
<h2 id="3-任务队列的本质">3. 任务队列的本质</h2>
<ol>
<li>所有同步任务都在主线程上执行，形成一个<strong>执行栈</strong>（execution context stack）。</li>
<li>主线程之外，还存在一个”<strong>任务队列</strong>”（task queue）。只要异步任务有了运行结果，就在”任务队列”之中放置一个事件。</li>
<li>一旦”执行栈”中的所有同步任务执行完毕，系统就会读取”任务队列”，看看里面有哪些事件。那些对应的异步任务，于是结束等待状态，进入执行栈，开始执行。</li>
<li>主线程不断重复上面的第三步。</li>
</ol>
<h2 id="4-异步任务有哪些？">4. 异步任务有哪些？</h2>
<ul>
<li>setTimeOut、setInterval</li>
<li>DOM 事件</li>
<li>Promise</li>
</ul>
<h2 id="5-javascript-实现异步编程的方法？">5. JavaScript 实现异步编程的方法？</h2>
<ol>
<li>回调函数</li>
<li>事件监听</li>
<li>发布/订阅</li>
<li>Promises 对象</li>
<li>Async 函数[ES7]</li>
</ol>
<h2 id="6-关于-settimeout、setimmediate、processnexttick的比较">6. 关于 setTimeOut、setImmediate、process.nextTick()的比较</h2>
<h3 id="61-settimeout">6.1 setTimeout()</h3>
<ol>
<li>将事件插入到了事件队列，必须等到当前代码（执行栈）执行完，主线程才会去执行它指定的回调函数。</li>
<li>当主线程时间执行过长，无法保证回调会在事件指定的时间执行。</li>
<li>浏览器端每次setTimeout会有4ms的延迟，当连续执行多个setTimeout，有可能会阻塞进程，造成性能问题。</li>
</ol>
<h3 id="62-setimmediate">6.2 setImmediate()</h3>
<ol>
<li>事件插入到事件队列尾部，主线程和事件队列的函数执行完成之后立即执行。和setTimeout(fn,0)的效果差不多。</li>
<li>服务端node提供的方法。浏览器端最新的api也有类似实现:window.setImmediate,但支持的浏览器很少。</li>
</ol>
<h3 id="63-processnexttick">6.3 process.nextTick()</h3>
<ol>
<li>插入到事件队列尾部，但在下次事件队列之前会执行。也就是说，它指定的任务总是发生在所有异步任务之前，当前主线程的末尾。</li>
<li>大致流程：当前”执行栈”的尾部–&gt;下一次Event Loop（主线程读取”任务队列”）之前–&gt;触发process指定的回调函数。</li>
<li>服务器端node提供的办法。用此方法可以用于处于异步延迟的问题。</li>
<li>可以理解为：此次不行，预约下次优先执行。</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/81290be8-33c5-4c8a-8706-92d71f061acf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/81290be8-33c5-4c8a-8706-92d71f061acf</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 03 Jul 2024 19:44:08 GMT</pubDate></item><item><title><![CDATA[【CSS相关】CSS基础]]></title><description><![CDATA[<h1 id="css基础">CSS基础</h1>
<h2 id="1css样式（选择器）的优先级？">1.CSS样式（选择器）的优先级？</h2>
<h3 id="11-权重的计算规则">1.1 权重的计算规则</h3>
<ol>
<li>第一优先级：无条件优先的属性只需要在属性后面使用!important。它会覆盖页面内任何位置定义的元素样式。（ie6支持上有些bug）。</li>
<li>第一等：内联样式，如：style=&quot;color:red;&quot;，权值为1000.（该方法会造成css难以管理，所以不推荐使用）</li>
<li>第二等：ID选择器，如：#header，权值为0100.</li>
<li>第三等：类选择器、如：.bar， 权值为0010.</li>
<li>第四等：类型（标签）选择器和伪元素选择器，如：div ::first-line 权值为0001.</li>
<li>通配符，子选择器，相邻选择器等。如*，&gt;,+, 权值为0000.</li>
<li>继承的样式没有权值。</li>
</ol>
<blockquote>
<p>[!NOTE]
CSS选择器的优先级：!important &gt; 行内样式 &gt; ID选择器 &gt; 类选择器 &gt; 标签选择器 &gt; 其他</p>
</blockquote>
<h3 id="12-实际案例">1.2 实际案例</h3>
<pre><code class="language-html">&lt;style&gt;
    a{color: yellow;} /*权值：0,0,0,1*/
    div a{color: green;} /*权值：0,0,0,2*/
    .demo a{color: black;} /*权值：0,0,1,1*/
    .demo input[type=&quot;text&quot;]{color: blue;} /*权值：0,0,2,1*/
    .demo *[type=&quot;text&quot;]{color: grey;} /*权值：0,0,2,0*/
    #demo a{color: orange;} /*权值：0,1,0,1*/
    div#demo a{color: red;} /*权值：0,1,0,2*/
&lt;/style&gt;

&lt;body&gt;
    &lt;a href=&quot;&quot;&gt;第一条应该是黄色&lt;/a&gt; &lt;!-适用第1行规则-&gt;
    &lt;div class=&quot;demo&quot;&gt;
    &lt;input type=&quot;text&quot; value=&quot;第二条应该是蓝色&quot; /&gt;&lt;!-适用第4、5行规则，第4行优先级高-&gt;
    &lt;a href=&quot;&quot;&gt;第三条应该是黑色&lt;/a&gt;&lt;!-适用第2、3行规则，第3行优先级高-&gt;
    &lt;/div&gt;
    &lt;div id=&quot;demo&quot;&gt;
    &lt;a href=&quot;&quot;&gt;第四条应该是红色&lt;/a&gt;&lt;!-适用第5、6行规则，第6行优先级高-&gt;
    &lt;/div&gt;
&lt;/body&gt;</code></pre>
<h2 id="2雪碧图的作用？">2.雪碧图的作用？</h2>
<blockquote>
<p>[!NOTE]
减少HTTP的请求次数，提高加载的性能
在一些情况下可以减少图片的大小<br>关键在于对background-position概念的理解和使用</p>
</blockquote>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;购物车特效&lt;/title&gt;
    &lt;style type=&quot;text/css&quot;&gt;
        *{
            margin: 0;
            padding: 0;
        }
        .select{
            margin: 0 auto;
            display: block;
            width: 1000px;
            height: 35px;
            background-color:#F5FFFA;
        }
        div{
            width: 42px;
            height: 34px;
            background-image: url(amazon-sprite_.png);
            background-repeat: no-repeat;
            background-position: -8px -335px;
        }
        div:hover{
            background-image: url(amazon-sprite_.png);
            background-repeat: no-repeat;
            background-position: -55px -335px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href=&quot;https://www.baidu.com&quot; target=&#39;_blank&#39; class=&quot;select&quot;&gt;
        &lt;div&gt;&lt;/div&gt;

    &lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="3自定义字体的使用场景？">3.自定义字体的使用场景？</h2>
<blockquote>
<p>[!NOTE]
宣传/品牌/banner等固定文案<br>字体图标中使用</p>
</blockquote>
<pre><code class="language-html">&lt;style&gt;
@font-face{
     font-family: &#39;字体名称随便起&#39;; 
     src: url(&#39;../font/字体名称.eot&#39;);
     src:url(&#39;../font/字体名称.woff&#39;) format(&#39;woff&#39;),
         url(&#39;../font/字体名称.ttf&#39;) format(&#39;truetype&#39;),
         url(&#39;../font/字体名称.svg&#39;) format(&#39;svg&#39;);
}
/* 使用方法：html中的代码中加一个h1或者其他的，里面写你自己想要的特殊文字 */
h1{
    font-size:36px; 
    color:#ccc;
    font-family: &quot;字体名称随便起&quot;;
}

&lt;/style&gt;</code></pre>
<h2 id="4base64的使用？">4.Base64的使用？</h2>
<h3 id="41-概念">4.1 概念</h3>
<p>Base64就是一种基于64个可见字符(26个大写字母，26个小写字母，10个数字，1个+，一个 / 刚好64个字符)来表示二进制数据的表示方法。</p>
<blockquote>
<p>[!NOTE]
扩展：不可见字符其实并不是不显示，只是这些字符在屏幕上显示不出来，比如：换行符、回车、退格......字符。</p>
</blockquote>
<p>Base64字符表中的字符原本用6个bit就可以表示，现在前面添加2个0，变为8个bit，会造成一定的浪费。因此，Base64编码之后的文本，要比原文大约三分之一</p>
<h3 id="42-原理">4.2 原理</h3>
<ul>
<li>第一步，将待转换的字符串每三个字节分为一组，每个字节占8bit，那么共有24个二进制位。</li>
<li>第二步，将上面的24个二进制位每6个一组，共分为4组。</li>
<li>第三步，在每组前面添加两个0，每组由6个变为8个二进制位，总共32个二进制位，即四个字节。</li>
<li>第四步，根据Base64编码对照表（见下图）获得对应的值。</li>
</ul>
<blockquote>
<p>[!NOTE]
两个字节：两个字节共16个二进制位，依旧按照规则进行分组。此时总共16个二进制位，每6个一组，则第三组缺少2位，用0补齐，得到三个Base64编码，第四组完全没有数据则用“=”补上。因此，上图中“BC”转换之后为“QKM=”；
一个字节：一个字节共8个二进制位，依旧按照规则进行分组。此时共8个二进制位，每6个一组，则第二组缺少4位，用0补齐，得到两个Base64编码，而后面两组没有对应数据，都用“=”补上。因此，上图中“A”转换之后为“QQ==”；</p>
</blockquote>
<h3 id="43-作用">4.3 作用</h3>
<ul>
<li>用于减少HTTP请求</li>
<li>适用于小图片</li>
<li>base64编码图片之后的体积约为原图的4/3  </li>
</ul>
<h2 id="5伪类和伪元素的区别？">5.伪类和伪元素的区别？</h2>
<ul>
<li>伪元素是真的有元素</li>
<li>前者是单冒号，后者是双冒号</li>
</ul>
<pre><code class="language-html">&lt;style&gt;
li:first-child {
    height: 20px;
    width: 100px;
    background-color: #139aff;
}
li:last-child {
    height: 60px;
    width: 100px;
    background-color: #89ff56;
    line-height: 60px;
}
p:first-of-type {
    background-color:  red;
}
p:last-of-type {
    background-color:deeppink;
}


/*每个p标签之前新增一个Hello文本*/
.container p::before {
    content: &#39;Hello&#39;;
}
.container p::after {
    content: &#39;Thanks&#39;;
}
.container p::first-letter {
    font-size: 32px;
}
.container p::first-line {
    background-color: #f1ffad;
}

/*所有选中的元素会变色*/
.container p::selection {
    background-color: #1025ff;
    color: red;
}
&lt;/style&gt;
&lt;body&gt;
    &lt;ul&gt;
        &lt;li&gt;111&lt;/li&gt;
        &lt;li&gt;222&lt;/li&gt;
        &lt;li&gt;333&lt;/li&gt;
        &lt;li&gt;444&lt;/li&gt;
        &lt;li&gt;555&lt;/li&gt;
    &lt;/ul&gt;
&lt;div&gt;
    &lt;h1&gt;h1文本&lt;/h1&gt;
    &lt;p&gt;p文本1&lt;/p&gt;
    &lt;p&gt;p文本2&lt;/p&gt;
    &lt;p&gt;p文本3&lt;/p&gt;
    &lt;p&gt;p文本4&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;container&quot;&gt;
    &lt;p&gt; css1 &lt;/p&gt;
    &lt;p&gt; css2 &lt;/p&gt;
    &lt;p&gt; css3 &lt;/p&gt;
    &lt;p&gt;我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素,我在学伪元素&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="6如何美化checkbox？">6.如何美化CheckBox？</h2>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>label[for]和id</li>
<li>隐藏原生的input</li>
<li>:checked + label 选择器</li>
</ol>
</blockquote>
<pre><code class="language-html">&lt;style&gt;
#value1{
        display: none;
}
#value1:checked+label{
    color:blue;
    background: #4cda60;
}
#value1:checked+label:before{
    left:31px;
}
#value1+label{
    cursor: pointer;
    color:red;
    display: block;
    width:60px;
    height: 30px;
    background: #fafbfa;
    border-radius: 15px;
    position: relative;
    box-shadow:inset 0 0 0 0 #eee,0 0 1px rgba(0,0,0,0.4);
    transition: background 0.1s;
    -webkit-transition: background 0.1s;
    -moz-transition: background 0.1s;
    -o-transition: background 0.1s;
}
#value1+label:before{
    content:&#39;&#39;;
    position: absolute;
    background: #fff;
    top:1px;
    left:1px;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    box-shadow:0 3px 1px rgba(0,0,0,0.05), 0 0 1px rgba(0,0,0,0.3);
    transition: left 0.1s;
    -webkit-transition: left 0.1s;
    -moz-transition: left 0.1s;
    -o-transition: left 0.1s;
}
&lt;/style&gt;
&lt;body&gt;
    &lt;input type=&quot;checkbox&quot; name=&quot;timeType&quot; value=&quot;1&quot; id=&quot;value1&quot; checked=&quot;checked&quot;/&gt;
    &lt;label for=&quot;value1&quot;&gt;&lt;/label&gt;
&lt;/body&gt;</code></pre>
]]></description><link>https://blog.gaoredu.com/article/eba0cdc9-f9d3-41fc-96b3-bdda09574fab</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eba0cdc9-f9d3-41fc-96b3-bdda09574fab</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 03 Jul 2024 01:24:58 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】排序算法]]></title><description><![CDATA[<h1 id="冒泡排序">冒泡排序</h1>
<pre><code class="language-js">////////////////////////////////////////////////////////////////
// bubble sort
function ArrayList(){
    // 私有变量
    var arr = [];

    // 将数组中i，j位置的数组进行交换
    var swap = function(i, j){
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    // add element
    this.insert = function(item) {
        arr.push(item);
    }

    // to string
    this.toString = function(){
        //  数组中的join() 方法默认是按照 &quot;,&quot; 进行分割的
        return arr.join();
    }

    // v1 : bubble sort（注意：i, j两个变量都是从0开始的）
    this.bubbleSort = function(){
        var len = arr.length;
        for (var i = 0; i &lt; len; i++) {
            // 内层循环从第一位一直迭代到倒数第二位
            for (var j = 0; j &lt; len - i; j++) {
                // 只要前面的元素比后面的元素大的话，就去直接交换
                if (arr[j] &gt; arr[j + 1]) {
                    swap(j, j + 1);
                }
            }
        }
    }




    // v2 : 从内循环减去外循环已经跑过的轮数，可以避免循环中所有不必要的比较
    this.bubbleSort = function (){
        var len = arr.length;
        for (var i = 0; i &lt; len; i++) {
            for (var j = 0; j &lt; len - i - 1; j++) {
                if (arr[j] &gt; arr[j + 1]) {
                    swap(j, j + 1);
                }
            }
        }
    }

}3


/*
 * 创建一个无序数组
 * @ size
 * */
function createNoneSortedArray(size){
    var arr = new ArrayList();
    for (var i = size; i &gt; 0; i--) {
        // 直接给数组初始化一个逆序的数组序列
        arr.insert(i);
    }
    return arr;
}



///////////////////////////////////////////////////////////////////////
// 测试
var arr = createNoneSortedArray(5);
console.log(arr, arr.toString());
// bubble sort
arr.bubbleSort();
console.log(arr.toString());
</code></pre>
<h1 id="插入排序">插入排序</h1>
<pre><code class="language-js">//////////////////////////////////////////////////////////////////////////////////////
// insert sort
function ArrayList(){
    var arr = [];

    var swap = function(i, j){
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    this.insert = function (item){
        arr.push(item);
    }

    this.toString = function(){
        return arr.join();
    }

    // v1 : insert sort
    this.insertSort = function(){
        var len = arr.length;
        // 每次直接从当前元素前面的元素进行比较交换
        // 假设用户的手中刚开始的时候已经有了一张扑克牌了
        for (var i = 1; i &lt; len; i++) {
            for (var j = i; j &gt; 0; j--) {
                if (arr[j - 1] &gt; arr[j]) {
                    swap(j - 1, j);
                }/* else {
                    break;
                }*/
            }
        }
    }

    // v2 : 不使用swap函数进行交换，直接使用原地交换的方式进行排序
    this.insertSort = function(){
        var len = arr.length;
        for (var i = 1; i &lt; len; i++) {
            // 1. 先把当前的元素缓存起来
            var e = arr[i];
            // 2. 保存当前元素e应该插入到的位置j
            var j;
            // 注意点：
            // 1. 插入排序的内层循环必须和这个元素e进行比较，而不是和前面的元素进行比较
            // 2. 比较大小的代码必须放在这个内层for循环之内进行比较
            for (j = i; j &gt; 0 &amp;&amp; arr[j - 1] &gt; e; j--) {
                arr[j] = arr[j - 1];
            }
            // 3. 执行完毕内层循环之后，j的位置已经是当前的目标插入位置了
            arr[j] = e;
        }
    }
}


function createNoneSortArray(size){
    var arr = new ArrayList();
    for (var i = size; i &gt; 0; i--) {
        arr.insert(i);
    }
    return arr;
}



///////////////////////////////////////////////////////////////////////////////
// 测试
var arr = createNoneSortArray(5);
console.log(arr.toString());
arr.insertSort();
console.log(arr.toString());
</code></pre>
<h1 id="选择排序">选择排序</h1>
<pre><code class="language-js">//////////////////////////////////////////////////////////////////////////////////////
// select sort
function ArrayList(){
    var arr = [];

    var swap = function(i, j){
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    this.insert = function (item){
        arr.push(item);
    }


    this.toString = function(){
        return arr.join()
    }

    //  select sort
    this.selectSort = function(){
        var len = arr.length;
        for (var i = 0; i &lt; len; i++) {
            var minIndex = i;
            // 每次从当前位置以后的元素选择一个最小的元素放在第i个位置上面
            for (var j = i; j &lt; len; j++) {
                if (arr[j] &lt; arr[i]) {
                    minIndex = j;
                }
            }
            // 如果当前位置和原始的最小值的标定下标是一样的话，就不处理
            if (i !== minIndex)
                swap(i, minIndex);
        }
    }
}


// 创建一个无序数组序列
function createNoneSortArray(size){
    var arr = new ArrayList();
    for (var i = size; i &gt; 0; i--) {
        arr.insert(i);
    }
    return arr;
}



///////////////////////////////////////////////////////////////////////////////////////
// 测试
var arr = createNoneSortArray(5);
console.log(arr.toString());
arr.selectSort();
console.log(arr.toString());
</code></pre>
<h1 id="归并排序">归并排序</h1>
<pre><code class="language-js">//////////////////////////////////////////////////////////////////////////////////////
// merge sort
function ArrayList(){
    var arr = []

    var swap = function(i, j){
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }


    this.insert = function (item){
        arr.push(item);
    }

    this.toString = function (){
        return arr.join();
    }


    ////////////////////////////////////////////////////////////////////
    // merge sort 辅助函数
    // 开始对区间[l, middle], [middle + 1, r]区间的元素进行归并
    var __merge = function(arr, l, middle, r){
        console.log(&#39;merge aray start : &#39;, arr, l, middle, r);
        // 1. 开辟一个临时空间，把原始的数组复制到这个新的数组里面
        // 数组深度克隆： arr.slice(), arr.concat(), for循环， fo (var item in arr)循环
        var aux = arr.concat();
        for (var i = l; i &lt;= r; i++) {
            aux[i - l] = arr[i];
            console.log(&#39;copy &#39;, arr[i], aux[i], i, r);
        }

        console.log(&#39;aux array now is &#39;, aux, arr);

        // 2. 开始进行归并(i, j位置的初始化)
        var i = l, j = middle + 1;
        for (var k = l; k &lt;= r; k++) {
            // 这里需要进行越界的检查啊
            if (i &gt; middle) {
                // 开始去处理右边的
                arr[k] = aux[j - l];
                j++;
            } else if (j &gt; r) {
                arr[k] = aux[i - l];
                i++;
            }

            // 遍历[l, r]区间内的元素(开始依次比较左右区间内的元素的大小，找出一个最小值, 放在第k个位置)
            else if (aux[i - l] &lt; aux[j - l]) {
                arr[k] = aux[i - l];
                i++;
            } else {
                arr[k] = aux[j - l];
                j++;
            }

        }
    }


    // 递归使用归并排序算法对arr[l, r]这个区间范围内的数据进行排序
    var __mergeSort = function(arr, l, r){
        console.log(&#39;sort ……&#39;, l, r);
        // 1. 递归终止条件(l必须始终大于r的)
        if (l &gt;= r)
            return ;
        // 2. 计算数组中间的位置
        var middle = Math.floor(l + (r - l) / 2);
        console.log(&#39;middle now is &#39;, middle);
        // 2. 开始对左边的区间元素进行归并排序[l, middle]
        __mergeSort(arr, l, middle);
        // 3. 开始对右边的区间元素进行归并排序[middle + 1, r]
        __mergeSort(arr, middle + 1, r);
        console.log(&#39;loading……&#39;, l, r, middle);

        // 4. 排序完成之后，开始进行归并
        __merge(arr, l, middle, r);

        return arr;
    }

    // v1 : merge sort
    this.mergeSort =  function(){
        // 对区间[0, n - 1]的元素进行归并排序
        arr = __mergeSort(arr, 0, arr.length - 1);         // 将数组中的数据修改为最新的数据信息
        return arr;
    }


}



function createNoneSortArray(size){
    var arr = new ArrayList();
    for (var i = size; i &gt; 0; i--) {
        arr.insert(i);
    }
    return arr;
}



///////////////////////////////////////////////////////////////////////////////////////
// 测试
var arr = createNoneSortArray(5);
console.log(&#39;init array : &#39;, arr.toString());
arr.mergeSort();
console.log(&#39;caculate result : &#39;, arr.toString());
</code></pre>
<h1 id="快速排序">快速排序</h1>
<pre><code class="language-js">//////////////////////////////////////////////////////////////////////////////////////
// quick sort
function ArrayList(){
    var arr = [];

    var swap = function(i, j){
        var temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    this.insert = function (item){
        arr.push(item);
    }

    this.toString = function (){
        return arr.join();
    }

    ///////////////////////////////////////////////////////////////////////////////////////
    // quick sort
    // 求出数组arr在区间[l, r]范围的下标p位置，使得p满足条件, arr[l , p - 1] &lt; arr[p], arr[p + 1, r] &gt; arr[p]
    var __partition = function(arr, l, r){
        // 1. 选择数组中的第一个元素作为标定点
        var v = arr[l];
        // 2. 初始化变量的初始位置, arr[l + 1, i] &lt; v, arr[j, r] &gt;= v
        var i = l + 1, j = r;

        // 3. 开始循环
        while (true) {
            // i 向后移动
            while (i &lt;= r &amp;&amp; arr[i] &lt; v){
                i++;
            }

            // j 向前移动
            while (j &gt;= l &amp;&amp; arr[j] &gt; v) {
                j--;
            }

            // 交换数据之前需要先来处理一下元素的条件
            if (i &gt; j) {
                break;
            }

            // 此处说明遇到了第一个arr[i] &gt; v &amp;&amp; arr[j] &lt; v的元素，直接交换即可
            swap(i, j);

            // 交换完毕之后，开始进入下一个循环
            i++;
            j--;
        }

        // 执行完毕之后，将v元素放在正确的位置
        swap(l, j);
        // 最终j的位置就是标定点的位置
        return j;
    }


    // 实现对区间arr[l, r] 范围内的元素使用快速排序
    var __quickSort = function(arr, l, r){
        // 1. 递归终止的条件
        if (l &gt;= r) {
            return;
        }

        // 2. 开始求出p的位置，使得数组满足条件arr[l, p - 1] &lt; arr[p], arr[p + 1, r] &gt; arr[p]
        var p = __partition(arr, l, r);
        // 3. 继续对arr[l, p - 1], arr[p + 1, r]区间的元素使用快速排序
        __quickSort(arr, l, p - 1);
        __quickSort(arr, p + 1, r);
    }


    this.quickSort = function(){
        // 使用递归实现快速排序
        __quickSort(arr, 0, arr.length - 1);
    }






    function quickSort(arr) {
      __quickSort(arr, 0, arr.length - 1)
    }

    function __quickSort(arr, l, r) {
      if (l &gt;= r) {
          return;
      }

      let p = __partition(arr, l, r);
      __quickSort(arr, l, p - 1);
      __quickSort(arr, P + 1, r)
    }

    function __partition() {
      let v = arr[l];
      let i = l + 1, j = r;
      while (true) {
          while () 
      } 
    }
}


function createNoneSortArray(size){
    var arr = new ArrayList();
    for (var i = size; i &gt; 0; i--) {
        arr.insert(i);
    }
    return arr;
}



//////////////////////////////////////////////////////////////////////////////////
// 测试
var arr = createNoneSortArray(5);
console.log(arr.toString());
arr.quickSort();
console.log(arr.toString());
</code></pre>
]]></description><link>https://blog.gaoredu.com/article/ea359049-3c91-46de-8fdb-3ff127d232f0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ea359049-3c91-46de-8fdb-3ff127d232f0</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 02 Jul 2024 11:19:26 GMT</pubDate></item><item><title><![CDATA[【性能优化】浏览器缓存]]></title><description><![CDATA[<h1 id="缓存">缓存</h1>
<blockquote>
<p>[!NOTE]
Http 的缓存主要利用 header 里的Cache-control 和 ETag</p>
</blockquote>
<h2 id="1cache-control">1.Cache-control</h2>
<h3 id="11-cache-control主要字段">1.1 <code>Cache-control</code>主要字段</h3>
<ul>
<li>public<ul>
<li>指HTTP请求返回的资源在所经过的所有路径包括一些中间代理服务器以及发出这个请求的客户端浏览器都可以进行缓存</li>
</ul>
</li>
<li>private<ul>
<li>代表发起请求的浏览器才可以进行缓存</li>
</ul>
</li>
<li>no-cache<ul>
<li>指可以存缓存，但是每次使用都需要去服务端验证</li>
</ul>
</li>
<li>no-store<ul>
<li>本地和代理服务器都不允许去缓存</li>
</ul>
</li>
<li>no-transform<ul>
<li>不允许代理/缓存服务器转换文件格式</li>
</ul>
</li>
</ul>
<h4 id="111-到期">1.1.1 到期</h4>
<ul>
<li>max-age=<code>&lt;seconds\&gt;</code><ul>
<li>缓存到期时间</li>
</ul>
</li>
<li>s-maxage=<code>&lt;seconds\&gt;</code><ul>
<li>代理服务器专用</li>
</ul>
</li>
<li>max-stale=<code>&lt;seconds\&gt;</code><ul>
<li>指示客户机可以使用超出max-age时间的响应</li>
</ul>
</li>
</ul>
<h3 id="112-重新验证">1.1.2 重新验证</h3>
<ul>
<li>must-revalidate<ul>
<li>设置了max-age的资源过期后必须到源服务端验证资源是否还可用</li>
</ul>
</li>
<li>proxy-revalidate<ul>
<li>（缓存服务器用）设置了max-age的资源过期后必须到源服务端验证资源是否还可用</li>
</ul>
</li>
</ul>
<h2 id="12-etag">1.2 Etag</h2>
<h3 id="121-etag资源标识码">1.2.1 <code>ETag</code>资源标识码</h3>
<blockquote>
<p>即用来进行对比缓存，Etag 是服务端资源的一个标识码</p>
</blockquote>
<p>当客户端发送第一次请求时服务端会下发当前请求资源的标识码 Etag，下次再请求时，客户端则会通过 header 里的 If-None-Match 将这个标识码 Etag 带上，服务端将客户端传来的 Etag 与最新的资源 Etag 做对比，如果一样，则表示资源没有更新，返回 304。</p>
<h2 id="2-缓存方案">2. 缓存方案</h2>
<h3 id="21-需求">2.1 需求</h3>
<p>有的静态资源会设置一个较长的缓存时间，但是我们希望用户还是能使用最新的资源。</p>
<h3 id="22-解决方案">2.2 解决方案</h3>
<p>在打包完成的文件名上加上一串哈希码，这个哈希码是根据内容进行的哈希计算。
所以，如果你的内容文件没有变，那么这个hash码不会变，即这个静态资源的url没有变。 而如果内容有变，那么hash码也会变，浏览器就会去请求新的资源请求。</p>
<h3 id="23-普通的缓存机制">2.3 普通的缓存机制</h3>
<p><img src="../../img/cache-new.jpg" alt="缓存机制"></p>
<h3 id="24-资源验证">2.4 资源验证</h3>
<p>如果给Cache-Control设置了no-cache后，每次要使用资源时浏览器都要到服务器验证缓存是否过期。 如果直接使用缓存，返回码：<strong>304</strong></p>
<h3 id="25-如何验证资源是否过期：">2.5 如何验证资源是否过期：</h3>
<ul>
<li><p>Last-Modified（上次修改时间）</p>
<ul>
<li>配合 If-Modified-Since 或 If-Unmodified-Since 使用</li>
<li>如果请求的资源头中有Last-Modified这个头，这个头指定了一个时间。那么浏览器重新访问资源时就会带上If-Modified-Since这个头，其时间是Last-Modified的时间，服务器就会拿这个时间去对比上次修改的时间，然后告诉浏览器是否可以直接使用。</li>
</ul>
</li>
<li><p>Etag （数据签名）</p>
<ul>
<li>资源会依据它的内容产生一个唯一的数据签名，如果资源有更新，那么Etag就会发生变化。</li>
<li>配合 If-Match 或 If-None-Match 使用</li>
</ul>
</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/99547a65-30f5-4da1-b89c-ce69521e82f6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/99547a65-30f5-4da1-b89c-ce69521e82f6</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 08 Jun 2024 20:27:09 GMT</pubDate></item><item><title><![CDATA[【计算机网络】Cookie和Session]]></title><description><![CDATA[<h1 id="cookie和session">cookie和session</h1>
<h2 id="1-cookie和session的概念和区别？">1. cookie和session的概念和区别？</h2>
<h3 id="11-应用场景">1.1 应用场景</h3>
<h4 id="111-cookie">1.1.1 cookie</h4>
<p>登录网站，第一天输入用户名密码登录了，第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。</p>
<h4 id="112-session">1.1.2 session</h4>
<p>session一个场景是购物车，添加了商品之后客户端处可以知道添加了哪些商品，而服务器端如何判别呢，所以也需要存储一些信息就用到了session。</p>
<h3 id="12-cookie">1.2 cookie</h3>
<blockquote>
<p>[!NOTE]
服务器通过设置<code>set-cookie</code>这个响应头，将cookie信息返回给浏览器，浏览器将响应头中的cookie信息保存在本地，当下次向服务器发送HTTP请求时，浏览器会自动将保存的这些cookie信息添加到请求头中。</p>
</blockquote>
<p>通过cookie，服务器就会识别出浏览器，从而保证返回的数据是这个用户的。</p>
<ul>
<li>通过<code>set-cookie</code>设置</li>
<li>下次请求会自动带上</li>
<li>键值对，可设置多个</li>
</ul>
<h4 id="121-cookie属性">1.2.1 cookie属性</h4>
<ul>
<li>max-age<ul>
<li>过期时间有多长</li>
<li>默认在浏览器关闭时失效</li>
</ul>
</li>
<li>expires<ul>
<li>到哪个时间点过期</li>
</ul>
</li>
<li>secure<ul>
<li>表示这个cookie只会在https的时候才会发送</li>
</ul>
</li>
<li>HttpOnly<ul>
<li>设置后无法通过在js中使用document.cookie访问</li>
<li>保障安全，防止攻击者盗用用户cookie</li>
</ul>
</li>
<li>domain<ul>
<li>表示该cookie对于哪个域是有效的。 （关键点：cookie默认是不能直接跨域访问的，但是二级域名是可以共享cookie的）</li>
<li>cookie的跨域<ul>
<li>通过在<a href="http://www.taobao.com">www.taobao.com</a> 的server端提供一个获取当前域下所有cookie的 php的请求地址，然后该php获取到cookie之后将期并成 js 代码，也就是以上第二个截 - 图所看到的。然后再在 tmall用 jsonp 的方式跨域加载该 js 代码，从而实现 cookie 的跨域访问。</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="13--session（理解原理）">1.3  session（理解原理）</h3>
<ul>
<li>存放在服务器的一种用来存放用户数据的类似HashTable的结构</li>
<li>浏览器第一次发送请求时，服务器自动生成了HashTable和SessionID来唯一标识这个hash表，并将sessionID存放在cookie中通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的sessionID随着cookie发送到服务器上，服务器从请求中提取sessionID，并和保存的所有sessionID进行对比，找到这个用户对应的hash表。<ul>
<li>一般这个值是有时间限制的，超时后销毁，默认30min</li>
</ul>
</li>
<li>当用户在应用程序的web页面间挑转时，存储在session对象中的变量不会丢失而是在整个用户会话中一直存在下去。</li>
<li>session依赖于cookie，因为sessionID是存放在cookie中的。</li>
</ul>
<h2 id="2-sesssion与cookie的区别？（面试重点）">2. sesssion与cookie的区别？（面试重点）</h2>
<ol>
<li>cookie存在客户端，session存在于服务端。</li>
<li>cookie在客户端中存放，容易伪造，不如session安全</li>
<li>session会消耗大量服务器资源，cookie在每次HTTP请求中都会带上，影响网络性能</li>
<li>域的支持范围不一样，比方说a.com的Cookie在a.com下都能用，而<a href="http://www.a.com%E7%9A%84Session%E5%9C%A8api.a.com%E4%B8%8B%E9%83%BD%E4%B8%8D%E8%83%BD%E7%94%A8">www.a.com的Session在api.a.com下都不能用</a></li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/9dca0877-11e2-476c-aeb3-a6fb11069021</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9dca0877-11e2-476c-aeb3-a6fb11069021</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 08 Jun 2024 13:10:50 GMT</pubDate></item><item><title><![CDATA[【front-end-interview】md]]></title><description><![CDATA[<h1 id="前端工程师面试宝典"><a href="https://fecommunity.github.io/front-end-interview/index.html">前端工程师面试宝典</a></h1>
<blockquote>
<p>前端面试宝典，收集于全网最新、最全面的面试资料，帮助各位求职面试者斩获理想Offer。</p>
</blockquote>
<p>本书整理了前端工程师在求职面试过程中的前端知识和面经资料，希望各位网友们在学习交流过程中也可以不断丰富完善本书。</p>
<h2 id="本书结构">本书结构</h2>
<p>本书一共分为八大部分。</p>
<h3 id="第一部分：前端知识体系">第一部分：<a href="https://fecommunity.github.io/front-end-interview/%E5%89%8D%E7%AB%AF%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB/HTML%E7%9B%B8%E5%85%B3/1.HTML%E5%9F%BA%E7%A1%80%E5%BC%BA%E5%8C%96.html">前端知识体系</a></h3>
<p>本章从HTML、CSS、JavaScript、流向框架、Nodejs、性能优化、前端工程化、错误监控、Web安全共九个方面概括总结了前端面试中的主要知识点，帮助读者快速构建前端知识体系。</p>
<h3 id="第二部分：计算机网络">第二部分：<a href="https://fecommunity.github.io/front-end-interview/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/1.TCP.html">计算机网络</a></h3>
<p>介绍了面试中涉及到的13大常考知识点，涉及到OSI七层参考模型中各层的功能和传输细节，以及跨域和缓存等前端常考知识点。</p>
<h3 id="第三部分：操作系统">第三部分：<a href="https://fecommunity.github.io/front-end-interview/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html">操作系统</a></h3>
<p>简单概括了操作系统的知识体系，并总结了面试中常考的8大考点。</p>
<h3 id="第四部分：数据结构与算法">第四部分：<a href="https://fecommunity.github.io/front-end-interview/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.html">数据结构与算法</a></h3>
<p>该章节内容细节待完善，简单介绍了数据结构和算法设计中的常考知识点。</p>
<h3 id="第五部分：开发环境">第五部分：<a href="https://fecommunity.github.io/front-end-interview/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/1.Git%E7%9B%B8%E5%85%B3.html">开发环境</a></h3>
<p>主要介绍了前端工程师在开发环境中需要掌握的Linux基础命令和Git的基本操作，提高开发效率。</p>
<h3 id="第六部分：编程题与分析题">第六部分：<a href="https://fecommunity.github.io/front-end-interview/%E7%BC%96%E7%A8%8B%E9%A2%98%E4%B8%8E%E5%88%86%E6%9E%90%E9%A2%98/1.%E7%BB%A7%E6%89%BF%E7%9A%84%E5%A4%9A%E7%A7%8D%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F.html">编程题与分析题</a></h3>
<p>整理了前端面试中常考的27个经典面试题，涉及到原型链和继承、作用域和闭包、异步和单线程、ES6高级知识和一些简单的算法设计实现等考点。</p>
<h3 id="第七部分：面经系列">第七部分：<a href="https://fecommunity.github.io/front-end-interview/%E9%9D%A2%E7%BB%8F%E7%B3%BB%E5%88%97/0.%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7.html">面经系列</a></h3>
<p>目前收集整理了前端工程师在BAT等一线互联网公司的技术面试题，后续读者们可以不断更新完善该章节。</p>
<h3 id="第八部分：结束">第八部分：<a href="https://fecommunity.github.io/front-end-interview/%E6%80%BB%E7%BB%93/1.%E5%89%8D%E7%AB%AF%E6%80%BB%E7%BB%93.html">结束</a></h3>
<p>由于时间和精力有限，本书很难面面俱到。如果大家在使用本书的过程中有什么问题或建议，欢迎到<a href="https://github.com/fecommunity/front-end-interview/issues" title="前端社区">GitHub前端社区issue区</a>讨论，后续将不断完善本书内容。</p>
<h2 id="目标读者">目标读者</h2>
<p>本书主要面向初中高级前端开发方向的求职者，希望本书能助你一臂之力，祝各位早日成功，未来可期。  </p>
<h2 id="最后">最后</h2>
<p><strong>欢迎star</strong> :star:,  欢迎补充和完善。</p>
<p align="center">
<a href="https://fecommunity.github.io/front-end-interview/index.html" target="_blank">
    <img src="https://fecommunity.github.io/front-end-interview/gitbook/gitbook-plugin-theme-fexa/logo.png" width=""/>
</a>
</p>

<p align="center">
  <a href="https://fecommunity.github.io/front-end-interview/"><img src="https://img.shields.io/badge/阅读-read-brightgreen.svg" alt="阅读"></a>
  <a href="https://shang.qq.com/wpa/qunwpa?idkey=256c9ab161f115b71e8bec5acbcaa4837eeca4029048f5490ede49dee0495990"><img src="https://img.shields.io/badge/chat-QQ群-blue.svg" alt="QQ群"></a>
  <a href="https://github.com/fecommunity/front-end-interview/issues"><img src="https://img.shields.io/badge/support-讨论-critical.svg" alt="投稿"></a>
  <a href="https://fecommunity.github.io/front-end-interview/%E9%9D%A2%E7%BB%8F%E7%B3%BB%E5%88%97/0.%E9%9D%A2%E8%AF%95%E6%8A%80%E5%B7%A7.html"><img src="https://img.shields.io/badge/前端-面经系列-important" alt="投稿"></a>
</p>


<p>推荐使用 <a href="https://fecommunity.github.io/front-end-interview/index.html">https://fecommunity.github.io/front-end-interview/index.html</a> 在线阅读，在线阅读内容与本仓库同步一致。这种方式阅读的优势在于：有侧边栏阅读体验更好，GitHub pages 的访问速度相对来说也比较快。</p>
<h3 id="注：如遇在线访问当前仓库速度太慢，可尝试访问加速备用链接点击进入">注：如遇在线访问当前仓库速度太慢，可尝试访问加速备用链接<a href="https://www.52tech.tech/docs/">点击进入</a></h3>
]]></description><link>https://blog.gaoredu.com/article/e2dcec22-3d90-471d-b7fb-97dc0471f03d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e2dcec22-3d90-471d-b7fb-97dc0471f03d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 08 Jun 2024 05:29:10 GMT</pubDate></item><item><title><![CDATA[【计算机网络】CDN]]></title><description><![CDATA[<h1 id="cdn">CDN</h1>
<h2 id="1介绍一下cdn和加速的原理？">1.介绍一下CDN和加速的原理？</h2>
<h3 id="11-基本概念">1.1 基本概念</h3>
<blockquote>
<p>[!NOTE]
CDN（Content Delivery Network，内容分发网络）是构建在现有互联网基础之上的一层智能虚拟网络，通过在网络各处部署节点服务器，实现将源站内容分发至所有CDN节点，使用户可以就近获得所需的内容。CDN服务缩短了用户查看内容的访问延迟，提高了用户访问网站的响应速度与网站的可用性，解决了网络带宽小、用户访问量大、网点分布不均等问题。</p>
</blockquote>
<h3 id="12-加速原理">1.2 加速原理</h3>
<p>当用户访问使用CDN服务的网站时，本地DNS服务器通过CNAME方式将最终域名请求重定向到CDN服务。CDN通过一组预先定义好的策略(如内容类型、地理区域、网络负载状况等)，将当时能够最快响应用户的CDN节点IP地址提供给用户，使用户可以以最快的速度获得网站内容。使用CDN后的HTTP请求处理流程如下：</p>
<h4 id="121-cdn节点有缓存场景">1.2.1 CDN节点有缓存场景</h4>
<p><img src="../img/cdncache.png" alt="cdncache"></p>
<ol>
<li>用户在浏览器输入要访问的网站域名，向本地DNS发起域名解析请求。</li>
<li>域名解析的请求被发往网站授权DNS服务器。</li>
<li>网站DNS服务器解析发现域名已经CNAME到了<a href="http://www.example.com.c.cdnhwc1.com%E3%80%82">www.example.com.c.cdnhwc1.com。</a></li>
<li>请求被指向CDN服务。</li>
<li>CDN对域名进行智能解析，将响应速度最快的CDN节点IP地址返回给本地DNS。</li>
<li>用户获取响应速度最快的CDN节点IP地址。</li>
<li>浏览器在得到速度最快节点的IP地址以后，向CDN节点发出访问请求。</li>
<li>CDN节点将用户所需资源返回给用户。</li>
</ol>
<h4 id="122-cdn节点无缓存场景">1.2.2 CDN节点无缓存场景</h4>
<p><img src="../img/cdnnocahche.png" alt="无缓存"></p>
<ol>
<li>用户在浏览器输入要访问的网站域名，向本地DNS发起域名解析请求。</li>
<li>域名解析的请求被发往网站授权DNS服务器。</li>
<li>网站DNS服务器解析发现域名已经CNAME到了<a href="http://www.example.com.c.cdnhwc1.com%E3%80%82">www.example.com.c.cdnhwc1.com。</a></li>
<li>请求被指向CDN服务。</li>
<li>CDN对域名进行智能解析，将响应速度最快的CDN节点IP地址返回给本地DNS。</li>
<li>用户获取响应速度最快的CDN节点IP地址。</li>
<li>浏览器在得到速度最快节点的IP地址以后，向CDN节点发出访问请求。</li>
<li>CDN节点回源站拉取用户所需资源。</li>
<li>将回源拉取的资源缓存至节点。</li>
<li>将用户所需资源返回给用户。</li>
</ol>
<blockquote>
<p>[!NOTE]
PS：CNAME别名解析是将域名指向一个网址（域名）</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/ac00731f-3023-43bd-8a81-fcb2a6d9eefe</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ac00731f-3023-43bd-8a81-fcb2a6d9eefe</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 07 Jun 2024 15:02:16 GMT</pubDate></item><item><title><![CDATA[【开发环境】Linux相关]]></title><description><![CDATA[<h1 id="linux常见面试题">Linux常见面试题</h1>
<h2 id="1-绝对路径用什么符号表示？当前目录、上层目录用什么表示？主目录用什么表示-切换目录用什么命令？">1. 绝对路径用什么符号表示？当前目录、上层目录用什么表示？主目录用什么表示? 切换目录用什么命令？</h2>
<p>答案：</p>
<ol>
<li>绝对路径： 如/etc/init.d</li>
<li>当前目录和上层目录： ./  ../</li>
<li>主目录： ~/</li>
<li>切换目录： cd</li>
</ol>
<h2 id="2-怎么查看当前进程？怎么执行退出？怎么查看当前路径？">2. 怎么查看当前进程？怎么执行退出？怎么查看当前路径？</h2>
<p>答案：</p>
<ol>
<li>查看当前进程： ps</li>
<li>执行退出： exit</li>
<li>查看当前路径： pwd</li>
</ol>
<h2 id="3-怎么清屏？怎么退出当前命令？怎么执行睡眠？怎么查看当前用户-id？查看指定帮助用什么命令？">3. 怎么清屏？怎么退出当前命令？怎么执行睡眠？怎么查看当前用户 id？查看指定帮助用什么命令？</h2>
<p>答案：</p>
<ol>
<li>清屏： clear</li>
<li>退出当前命令： ctrl+c 彻底退出</li>
<li>执行睡眠 ： ctrl+z 挂起当前进程fg 恢复后台</li>
<li>查看当前用户 id： ”id“：查看显示目前登陆账户的 uid 和 gid 及所属分组及用户名</li>
<li>查看指定帮助： 如 man adduser 这个很全 而且有例子； adduser --help 这个告诉你一些常用参数； info adduesr；</li>
</ol>
<h2 id="4-ls-命令执行什么功能？-可以带哪些参数，有什么区别？">4. Ls 命令执行什么功能？ 可以带哪些参数，有什么区别？</h2>
<p>答案：</p>
<ol>
<li>ls 执行的功能： 列出指定目录中的目录，以及文件</li>
<li>哪些参数以及区别： a 所有文件l 详细信息，包括大小字节数，可读可写可执行的权限等</li>
</ol>
<h2 id="5-建立软链接快捷方式，以及硬链接的命令。">5. 建立软链接(快捷方式)，以及硬链接的命令。</h2>
<p>答案：</p>
<ol>
<li>软链接： ln -s slink source</li>
<li>硬链接： ln link source</li>
</ol>
<h2 id="6-目录创建用什么命令？创建文件用什么命令？复制文件用什么命令？">6. 目录创建用什么命令？创建文件用什么命令？复制文件用什么命令？</h2>
<p>答案：</p>
<ol>
<li>创建目录： mkdir</li>
<li>创建文件：典型的如 touch，vi 也可以创建文件，其实只要向一个不存在的文件输出，都会创建文件</li>
<li>复制文件： cp </li>
</ol>
<h2 id="7-文件权限修改用什么命令？格式是怎么样的？">7. 文件权限修改用什么命令？格式是怎么样的？</h2>
<ol>
<li>文件权限修改： chmod</li>
<li>格式如下：<ul>
<li>chmodu+xfile给file的属主增加执行权限 chmod 751 file 给 file 的属主分配读、写、执行(7)的权限，给 file 的所在组分配读、执行(5)的权限，给其他用户分配执行(1)的权限</li>
<li>chmodu=rwx,g=rx,o=xfile上例的另一种形式 chmod =r file 为所有用户分配读权限</li>
<li>chmod444file同上例 chmod a-wx,a+r file同上例</li>
<li>$ chmod -R u+r directory 递归地给 directory 目录下所有文件和子目录的属主分配读的权限</li>
</ul>
</li>
</ol>
<h2 id="8-查看文件内容有哪些命令可以使用？">8. 查看文件内容有哪些命令可以使用？</h2>
<p>答案：</p>
<ol>
<li>vi 文件名 #编辑方式查看，可修改</li>
<li>cat 文件名 #显示全部文件内容</li>
<li>more 文件名 #分页显示文件内容</li>
<li>less 文件名 #与 more 相似，更好的是可以往前翻页</li>
<li>tail 文件名 #仅查看尾部，还可以指定行数</li>
<li>head 文件名 #仅查看头部,还可以指定行数</li>
</ol>
<h2 id="9-随意写文件命令？怎么向屏幕输出带空格的字符串，比如hello-world">9. 随意写文件命令？怎么向屏幕输出带空格的字符串，比如”hello world”?</h2>
<p>答案：</p>
<ol>
<li><p>写文件命令：vi</p>
</li>
<li><p>向屏幕输出带空格的字符串:echo hello world</p>
</li>
</ol>
<h2 id="10-终端是哪个文件夹下的哪个文件？黑洞文件是哪个文件夹下的哪个命令？">10. 终端是哪个文件夹下的哪个文件？黑洞文件是哪个文件夹下的哪个命令？</h2>
<p>答案：</p>
<ol>
<li><p>终端  /dev/tty</p>
</li>
<li><p>黑洞文件  /dev/null</p>
</li>
</ol>
<h2 id="11-移动文件用哪个命令？改名用哪个命令？">11. 移动文件用哪个命令？改名用哪个命令？</h2>
<p>答案：</p>
<blockquote>
<p>mv 
mv</p>
</blockquote>
<h2 id="12-复制文件用哪个命令？如果需要连同文件夹一块复制呢？如果需要有提示功能呢？">12. 复制文件用哪个命令？如果需要连同文件夹一块复制呢？如果需要有提示功能呢？</h2>
<p>答案：</p>
<pre><code>&gt; cp cp -r  ？？？？</code></pre><h2 id="13-删除文件用哪个命令？如果需要连目录及目录下文件一块删除呢？删除空文件夹用什么命令？">13. 删除文件用哪个命令？如果需要连目录及目录下文件一块删除呢？删除空文件夹用什么命令？</h2>
<p>答案：</p>
<pre><code>&gt; rm rm -r rmdir</code></pre><h2 id="14-linux-下命令有哪几种可使用的通配符？分别代表什么含义">14. Linux 下命令有哪几种可使用的通配符？分别代表什么含义?</h2>
<p>答案：</p>
<ol>
<li><p>“？”可替代单个字符。</p>
</li>
<li><p>“*”可替代任意多个字符。</p>
</li>
<li><p>方括号“[charset]”可替代 charset 集中的任何单个字符，如[a-z]，[abABC]</p>
</li>
</ol>
<h2 id="15-用什么命令对一个文件的内容进行统计？行号、单词数、字节数">15. 用什么命令对一个文件的内容进行统计？(行号、单词数、字节数)</h2>
<p>答案：</p>
<blockquote>
<p>wc 命令 - c 统计字节数 - l 统计行数 - w 统计字数。</p>
</blockquote>
<h2 id="16-grep-命令有什么用？-如何忽略大小写？-如何查找不含该串的行">16. Grep 命令有什么用？ 如何忽略大小写？ 如何查找不含该串的行?</h2>
<p>答案：</p>
<blockquote>
<p>[!NOTE]
是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹 配的行打印出来。</p>
</blockquote>
<pre><code>grep [stringSTRING] filename grep [^string] filename</code></pre><h2 id="17-linux-中进程有哪几种状态？在-ps-显示出来的信息中，分别用什么符号表示的？">17. Linux 中进程有哪几种状态？在 ps 显示出来的信息中，分别用什么符号表示的？</h2>
<p>答案：</p>
<ol>
<li>不可中断状态：进程处于睡眠状态，但是此刻进程是不可中断的。不可中断， 指进程不响应异步信号。</li>
<li>暂停状态/跟踪状态：向进程发送一个 SIGSTOP 信号，它就会因响应该信号 而进入 TASK_STOPPED 状态;当进程正在被跟踪时，它处于 TASK_TRACED 这个特殊的状态。</li>
</ol>
<p><strong>正在被跟踪</strong>指的是进程暂停下来，等待跟踪它的进程对它进行操作。
3. 就绪状态：在 run_queue 队列里的状态</p>
<ol start="4">
<li>运行状态：在 run_queue 队列里的状态</li>
<li>可中断睡眠状态：处于这个状态的进程因为等待某某事件的发生（比如等待 socket 连接、等待信号量），而被挂起</li>
<li>zombie 状态（僵尸）：父亲没有通过 wait 系列的系统调用会顺便将子进程的尸体（task_struct）也释放掉</li>
<li>退出状态</li>
</ol>
<ul>
<li>D 不可中断 Uninterruptible（usually IO）</li>
<li>R 正在运行，或在队列中的进程</li>
<li>S 处于休眠状态</li>
<li>T 停止或被追踪</li>
<li>Z 僵尸进程</li>
<li>W 进入内存交换（从内核 2.6 开始无效）</li>
<li>X 死掉的进程</li>
</ul>
<h2 id="18-怎么使一个命令在后台运行">18. 怎么使一个命令在后台运行?</h2>
<p>答案：
一般都是使用 &amp; 在命令结尾来让程序自动运行。(命令后可以不追加空格)</p>
<h2 id="19-利用-ps-怎么显示所有的进程-怎么利用-ps-查看指定进程的信息？">19. 利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息？</h2>
<p>答案：</p>
<pre><code>ps -ef (system v 输出) 

ps -aux bsd 格式输出

ps -ef | grep pid</code></pre><h2 id="20-哪个命令专门用来查看后台任务">20. 哪个命令专门用来查看后台任务?</h2>
<p>答案：</p>
<pre><code>job -l</code></pre><h2 id="21-把后台任务调到前台执行使用什么命令把停下的后台任务在后台执行起来用什么命令">21. 把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令?</h2>
<p>答案：</p>
<ol>
<li><p>把后台任务调到前台执行 fg</p>
</li>
<li><p>把停下的后台任务在后台执行起来 bg</p>
</li>
</ol>
<h2 id="22-终止进程用什么命令-带什么参数">22. 终止进程用什么命令? 带什么参数?</h2>
<p>答案：</p>
<pre><code>kill [-s &lt;信息名称或编号&gt;][程序] 或 kill [-l &lt;信息编号&gt;] 

kill-9 pid
</code></pre><h2 id="23-怎么查看系统支持的所有信号？">23. 怎么查看系统支持的所有信号？</h2>
<p>答案：</p>
<p>kill -l</p>
<h2 id="24-搜索文件用什么命令-格式是怎么样的">24. 搜索文件用什么命令? 格式是怎么样的?</h2>
<p>答案：</p>
<p>find &lt;指定目录&gt; &lt;指定条件&gt; &lt;指定动作&gt;</p>
<p>whereis 加参数与文件名</p>
<p>locate 只加文件名</p>
<p>find 直接搜索磁盘，较慢。</p>
<p>find / -name &quot;string*&quot;</p>
<h2 id="25-查看当前谁在使用该主机用什么命令-查找自己所在的终端信息用什么命令">25. 查看当前谁在使用该主机用什么命令? 查找自己所在的终端信息用什么命令?</h2>
<p>答案：
查找自己所在的终端信息：who am i</p>
<p>查看当前谁在使用该主机：who</p>
<h2 id="26-使用什么命令查看用过的命令列表">26. 使用什么命令查看用过的命令列表?</h2>
<p>答案：</p>
<p>history</p>
<h2 id="27-使用什么命令查看磁盘使用空间？-空闲空间呢">27. 使用什么命令查看磁盘使用空间？ 空闲空间呢?</h2>
<p>答案：</p>
<pre><code>df -hl
文件系统 容量 已用 可用 已用% 挂载点
Filesystem Size Used Avail Use% Mounted on /dev/hda2 45G 19G 24G 44% /
/dev/hda1 494M 19M 450M 4% /boot</code></pre><h2 id="28-使用什么命令查看网络是否连通">28. 使用什么命令查看网络是否连通?</h2>
<p>答案：
netstat</p>
<h2 id="29-使用什么命令查看-ip-地址及接口信息？">29. 使用什么命令查看 ip 地址及接口信息？</h2>
<p>答案：</p>
<p>ifconfig</p>
<h2 id="30-查看各类环境变量用什么命令">30. 查看各类环境变量用什么命令?</h2>
<p>答案：</p>
<p>查看所有 env</p>
<p>查看某个，如 home： env $HOME</p>
<h2 id="31-通过什么命令指定命令提示符">31. 通过什么命令指定命令提示符?</h2>
<p>答案：</p>
<p>\u：显示当前用户账号</p>
<p>\h：显示当前主机名</p>
<p>\W：只显示当前路径最后一个目录</p>
<p>\w：显示当前绝对路径（当前用户目录会以~代替）</p>
<p>$PWD：显示当前全路径</p>
<p>$：显示命令行’$&#39;或者’#&#39;符号</p>
<p>#：下达的第几个命令</p>
<p>\d：代表日期，格式为week day month date，例如：&quot;MonAug1&quot;</p>
<p>\t：显示时间为24小时格式，如：HH：MM：SS</p>
<p>\T：显示时间为12小时格式</p>
<p>\A：显示时间为24小时格式：HH：MM</p>
<p>\v：BASH的版本信息 如export PS1=’[\u@\h\w#]$‘</p>
<h2 id="32-查找命令的可执行文件是去哪查找的-怎么对其进行设置及添加">32. 查找命令的可执行文件是去哪查找的? 怎么对其进行设置及添加?</h2>
<p>答案：</p>
<pre><code>whereis [-bfmsu][-B &lt;目录&gt;...][-M &lt;目录&gt;...][-S &lt;目录&gt;...][文件...]</code></pre><blockquote>
<p>[!NOTE]
补充说明：whereis 指令会在特定目录中查找符合条件的文件。这些文件的烈性应属于原始代码，二进制文件，或是帮助文件。</p>
</blockquote>
<p>-b   只查找二进制文件。</p>
<p>-B&lt;目录&gt; 只在设置的目录下查找二进制文件。 -f 不显示文件名前的路径名称。</p>
<p>-m   只查找说明文件。</p>
<p>-M&lt;目录&gt; 只在设置的目录下查找说明文件。 -s 只查找原始代码文件。</p>
<p>-S&lt;目录&gt; 只在设置的目录下查找原始代码文件。 -u 查找不包含指定类型的文件。</p>
<p>which 指令会在 PATH 变量指定的路径中，搜索某个系统命令的位置，并且返回第一个搜索结果。</p>
<p>-n 指定文件名长度，指定的长度必须大于或等于所有文件中最长的文件名。</p>
<p>-p 与-n 参数相同，但此处的包括了文件的路径。 -w 指定输出时栏位的宽度。</p>
<p>-V   显示版本信息</p>
<h2 id="33-通过什么命令查找执行命令">33. 通过什么命令查找执行命令?</h2>
<p>答案：
which 只能查可执行文件</p>
<p>whereis 只能查二进制文件、说明文档，源文件等</p>
<h2 id="34-怎么对命令进行取别名？">34. 怎么对命令进行取别名？</h2>
<p>答案：</p>
<pre><code>alias la=&#39;ls -a&#39;</code></pre><h2 id="35-du-和-df-的定义，以及区别？">35. du 和 df 的定义，以及区别？</h2>
<p>答案：</p>
<p>du 显示目录或文件的大小</p>
<p>df 显示每个&lt;文件&gt;所在的文件系统的信息，默认是显示所有文件系统。</p>
<blockquote>
<p>[!NOTE]
（文件系统分配其中的一些磁盘块用来记录它自身的一些数据，如 i 节点，磁盘分布图，间接块，超级块等。这些数据对大多数用户级的程序来说是不可见的，通常称为 Meta Data。） du 命令是用户级的程序，它不考虑 Meta Data，而 df 命令则查看文件系统的磁盘分配图并考虑 Meta Data。</p>
</blockquote>
<p>df 命令获得真正的文件系统数据，而 du 命令只查看文件系统的部分情况。</p>
<h2 id="36-awk-详解">36. awk 详解</h2>
<p>答案：</p>
<pre><code>awk &#39;{pattern + action}&#39; {filenames}
#cat /etc/passwd |awk -F &#39;:&#39; &#39;{print 1&quot;\t&quot;7}&#39; //-F 的意思是以&#39;:&#39;分隔 root /bin/bash
daemon /bin/sh 搜索/etc/passwd 有 root 关键字的所有行

#awk -F: &#39;/root/&#39; /etc/passwd root:x:0:0:root:/root:/bin/bash</code></pre><h2 id="37-当你需要给命令绑定一个宏或者按键的时候，应该怎么做呢？">37. 当你需要给命令绑定一个宏或者按键的时候，应该怎么做呢？</h2>
<p>答案：</p>
<ol>
<li><p>可以使用bind命令，bind可以很方便地在shell中实现宏或按键的绑定。</p>
</li>
<li><p>在进行按键绑定的时候，我们需要先获取到绑定按键对应的字符序列。</p>
</li>
<li><p>比如获取F12的字符序列获取方法如下：先按下Ctrl+V,然后按下F12 .我们就可以得到F12的字符序列 ^[[24~。</p>
</li>
<li><p>接着使用bind进行绑定。</p>
<pre><code>[root@localhost ~]# bind ‘”\e[24~&quot;:&quot;date&quot;&#39;</code></pre></li>
</ol>
<blockquote>
<p>[!WARNING]
注意：相同的按键在不同的终端或终端模拟器下可能会产生不同的字符序列。</p>
</blockquote>
<p>【附】也可以使用showkey -a命令查看按键对应的字符序列。</p>
<h2 id="38-如果一个linux新手想要知道当前系统支持的所有命令的列表，他需要怎么做？">38. 如果一个linux新手想要知道当前系统支持的所有命令的列表，他需要怎么做？</h2>
<p>答案：</p>
<p>使用命令compgen ­-c，可以打印出所有支持的命令列表。</p>
<pre><code>[root@localhost ~]$ compgen -c

l.

ll

ls

which

if

then

else

elif

fi

case

esac

for

select

while

until

do

done

…</code></pre><h2 id="39-如果你的助手想要打印出当前的目录栈，你会建议他怎么做？">39. 如果你的助手想要打印出当前的目录栈，你会建议他怎么做？</h2>
<p>答案：</p>
<p>使用Linux 命令dirs可以将当前的目录栈打印出来。</p>
<pre><code>[root@localhost ~]# dirs

/usr/share/X11</code></pre><blockquote>
<p>[!NOTE]
【附】：目录栈通过pushd popd 来操作。</p>
</blockquote>
<h2 id="40-你的系统目前有许多正在运行的任务，在不重启机器的条件下，有什么方法可以把所有正在运行的进程移除呢？">40. 你的系统目前有许多正在运行的任务，在不重启机器的条件下，有什么方法可以把所有正在运行的进程移除呢？</h2>
<p>答案：</p>
<p>使用linux命令 ’disown -r ’可以将所有正在运行的进程移除。</p>
<h2 id="41-bash-shell-中的hash-命令有什么作用？">41. bash shell 中的hash 命令有什么作用？</h2>
<p>答案：</p>
<blockquote>
<p>[!NOTE]
linux命令’hash’管理着一个内置的哈希表，记录了已执行过的命令的完整路径, 用该命令可以打印出你所使用过的命令以及执行的次数。</p>
</blockquote>
<pre><code>[root@localhost ~]# hash

hits command

2 /bin/ls

2 /bin/su</code></pre><h2 id="42-哪一个bash内置命令能够进行数学运算。">42. 哪一个bash内置命令能够进行数学运算。</h2>
<p>答案：</p>
<p>bash shell 的内置命令let 可以进行整型数的数学运算。</p>
<pre><code>#! /bin/bash
…
…
let c=a+b
…
…</code></pre><h2 id="43-怎样一页一页地查看一个大文件的内容呢？">43. 怎样一页一页地查看一个大文件的内容呢？</h2>
<p>答案：</p>
<blockquote>
<p>通过管道将命令”cat file_name.txt” 和 ’more’ 连接在一起可以实现这个需要.</p>
</blockquote>
<pre><code>[root@localhost ~]# cat file_name.txt | more</code></pre><h2 id="44-数据字典属于哪一个用户的？">44. 数据字典属于哪一个用户的？</h2>
<p>答案：
数据字典是属于’SYS’用户的，用户‘SYS’ 和 ’SYSEM’是由系统默认自动创建的</p>
<h2 id="45-怎样查看一个linux命令的概要与用法？假设你在bin目录中偶然看到一个你从没见过的的命令，怎样才能知道它的作用和用法呢？">45. 怎样查看一个linux命令的概要与用法？假设你在/bin目录中偶然看到一个你从没见过的的命令，怎样才能知道它的作用和用法呢？</h2>
<p>答案：</p>
<blockquote>
<p>[!NOTE]
使用命令whatis 可以先出显示出这个命令的用法简要，比如，你可以使用whatis zcat 去查看‘zcat’的介绍以及使用简要。</p>
</blockquote>
<pre><code>[root@localhost ~]# whatis zcat

zcat [gzip] (1) – compress or expand files</code></pre><h2 id="46-使用哪一个命令可以查看自己文件系统的磁盘空间配额呢？">46. 使用哪一个命令可以查看自己文件系统的磁盘空间配额呢？</h2>
<p>答案：</p>
<blockquote>
<p>[!NOTE]
使用命令repquota 能够显示出一个文件系统的配额信息</p>
</blockquote>
<p>【附】只有root用户才能够查看其它用户的配额。</p>
]]></description><link>https://blog.gaoredu.com/article/e89f2faa-825f-4855-9c5f-e8cf7f172742</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e89f2faa-825f-4855-9c5f-e8cf7f172742</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 03 Jun 2024 21:35:44 GMT</pubDate></item><item><title><![CDATA[【操作系统】面试题]]></title><description><![CDATA[<h1 id="面试题">面试题</h1>
<h2 id="1-进程与线程的区别？高频面试题">1. 进程与线程的区别？(高频面试题)</h2>
<h3 id="11-概念">1.1 概念</h3>
<p>进程：是并发执行的程序在执行过程中<code>分配和管理资源</code>的基本单位，是一个动态概念，竞争计算机系统资源的基本单位。
线程：是进程的一个执行单元，是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。</p>
<p><code>一个程序至少一个进程，一个进程至少一个线程。</code></p>
<h3 id="12-为什么会有线程？">1.2 为什么会有线程？</h3>
<blockquote>
<p>[!NOTE]
每个进程都有自己的地址空间，即进程空间，在网络或多用户换机下，一个服务器通常需要接收大量不确定数量用户的并发请求，为每一个请求都创建一个进程显然行不通（系统开销大响应用户请求效率低），因此操作系统中线程概念被引进。</p>
</blockquote>
<ol>
<li>线程的执行过程是线性的，尽管中间会发生中断或者暂停，但是进程所拥有的资源只为改线状执行过程服务，一旦发生线程切换，这些资源需要被保护起来。</li>
<li>进程分为单线程进程和多线程进程，单线程进程宏观来看也是线性执行过程，微观上只有单一的执行过程。多线程进程宏观是线性的，微观上多个执行操作。</li>
<li>线程的改变只代表CPU的执行过程的改变，而没有发生进程所拥有的资源的变化。　</li>
</ol>
<h3 id="13-进程线程的区别">1.3 进程线程的区别?</h3>
<ol>
<li><strong>地址空间</strong>：同一进程的线程共享本进程的地址空间，而进程之间则是独立的地址空间。</li>
<li><strong>资源拥有</strong>：同一进程内的线程共享本进程的资源如内存、I/O、cpu等，但是进程之间的资源是独立的。<ul>
<li>一个进程崩溃后，在保护模式下不会对其他进程产生影响，但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。</li>
<li>进程切换时，消耗的资源大，效率高。所以涉及到频繁的切换时，使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作，只能用线程不能用进程</li>
</ul>
</li>
<li><strong>执行过程</strong>：每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行，必须依存在应用程序中，由应用程序提供多个线程执行控制。</li>
<li>线程是处理器调度的基本单位，但是进程不是。</li>
<li>两者均可并发执行。</li>
</ol>
<h3 id="14-优缺点">1.4 优缺点</h3>
<ol>
<li>线程执行开销小，但是不利于资源的管理和保护。线程适合在SMP机器（双CPU系统）上运行。</li>
<li>进程执行开销大，但是能够很好的进行资源管理和保护。进程可以跨机器前移。</li>
</ol>
<h3 id="15-何时使用多进程，何时使用多线程？">1.5 何时使用多进程，何时使用多线程？</h3>
<ol>
<li>对资源的管理和保护要求高，不限制开销和效率时，使用多进程。</li>
<li>要求效率高，频繁切换时，资源的保护管理要求不是很高时，使用多线程。</li>
</ol>
<h2 id="2-进程有哪几种状态？">2. 进程有哪几种状态？</h2>
<ol>
<li><strong>就绪状态</strong>：进程已获得除处理机以外的所需资源，等待分配处理机资源</li>
<li><strong>运行状态</strong>：占用处理机资源运行，处于此状态的进程数小于等于CPU数</li>
<li><strong>阻塞状态</strong>： 进程等待某种条件，在条件满足之前无法执行</li>
</ol>
<p><img src="../img/process-thread.png" alt="进程与线程的区别"></p>
<h2 id="3-线程同步的方式及原因">3. 线程同步的方式及原因?</h2>
<ol>
<li><strong>互斥量</strong>：采用互斥对象机制，只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个，所以可以保证公共资源不会被多个线程同时访问。</li>
<li><strong>信号量</strong>：它允许同一时刻多个线程访问同一资源，但是需要控制同一时刻访问此资源的最大线程数量。</li>
<li><strong>事件（信号）</strong>：通过通知操作的方式来保持多线程同步，还可以方便的实现多线程优先级的比较操作。</li>
</ol>
<h2 id="4-线程间的通信机制？">4. 线程间的通信机制？</h2>
<ol>
<li><p><strong>管道（pipe）及命名管道（named pipe）</strong>：管道可用于具有亲缘关系的父子进程间的通信，有名管道除了具有管道所具有的功能外，它还允许无亲缘关系进程间的通信；</p>
</li>
<li><p><strong>信号（signal）</strong>：信号是一种比较复杂的通信方式，用于通知接收进程某个事件已经发生；</p>
</li>
<li><p><strong>消息队列</strong>：消息队列是消息的链接表，它克服了上两种通信方式中信号量有限的缺点，具有写权限得进程可以按照一定得规则向消息队列中添加新信息；对消息队列有读权限得进程则可以从消息队列中读取信息；</p>
</li>
<li><p><strong>共享内存</strong>：可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间，不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作，如互斥锁和信号量等；</p>
</li>
<li><p><strong>信号量</strong>：主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段；</p>
</li>
<li><p><strong>套接字</strong>：这是一种更为一般得进程间通信机制，它可用于网络中不同机器之间的进程间通信，应用非常广泛。</p>
</li>
</ol>
<h2 id="5-守护、僵尸、孤儿进程的概念">5. 守护、僵尸、孤儿进程的概念?</h2>
<blockquote>
<p>[!NOTE]
在操作系统领域中，孤儿进程指的是在其父进程执行完成或被终止 后仍继续运行的一类进程。</p>
</blockquote>
<h3 id="51-基本概念">5.1 基本概念</h3>
<ol>
<li><p>在类UNIX系统中，僵尸进程是指完成执行（通过 exit 系统调用，或运行时发生致命错误或收到终止信号所致）但在操作系统的进程表中仍然有一个表项（进程控制块PCB），处于&quot;终止状态 &quot;的进程。</p>
</li>
<li><p>在一個多工的電腦作業系統中，守护进程（英语：daemon，英语发音：/ˈdiːmən/或英语发音：/ˈdeɪmən/）是一種在后台执行的电脑程序。 此类程序会被以进程的形式初始化。 守护进程程序的名称通常以字母“d”结尾：例如，syslogd就是指管理系统日志的守护进程。</p>
</li>
</ol>
<p><strong>个人理解</strong>：</p>
<ol>
<li><p>一般情况下，子进程是由父进程创建，而子进程和父进程的退出是无顺序的，两者之间都不知道谁先退出。正常情况下父进程先结束会调用 wait 或者 waitpid 函数等待子进程完成再退出，而一旦父进程不等待直接退出，则剩下的子进程会被init(pid=1)进程接收，成会孤儿进程。（进程树中除了init都会有父进程）。</p>
</li>
<li><p>如果子进程先退出了，父进程还未结束并且没有调用 wait 或者 waitpid 函数获取子进程的状态信息，则子进程残留的状态信息（ task_struct 结构和少量资源信息）会变成僵尸进程。</p>
</li>
<li><p>守护进程（ daemon) 是指在后台运行，没有控制终端与之相连的进程。它独立于控制终端，通常周期性地执行某种任务 。 守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断 。</p>
</li>
</ol>
<h3 id="52-危害">5.2 危害</h3>
<p>孤儿进程结束后会被 init 进程善后，并没有危害，而僵尸进程则会一直占着进程号，操作系统的进程数量有限则会受影响。</p>
<h3 id="53-解决">5.3 解决</h3>
<p>一般僵尸进程的产生都是因为父进程的原因，则可以通过 kill 父进程解决，这时候僵尸进程就变成了孤儿进程，被 init 进程接收</p>
<h2 id="6-什么是死锁？死锁产生的条件？如何避免死锁">6. 什么是死锁？死锁产生的条件？如何避免死锁</h2>
<blockquote>
<p>[!NOTE]
多个进程在运行过程中因争夺资源而造成的一种僵局。当一个进程请求资源时，如果该资源不能立即获得，那么进程就会进入等待状态。如果一个处于等待状态的进程 P1，由于所等待的资源被另一个处于等待状态的进程 p2 所占有，而 p2 所请求的资源又被 p1 占有，这样它们所请求的资源都不会获得，两进程一直处于等待状态，形成死锁。</p>
</blockquote>
<h3 id="61-死锁产生的原因？">6.1 死锁产生的原因？</h3>
<ol>
<li>因为系统资源不足。</li>
<li>进程运行推进的顺序不合适。</li>
<li>资源分配不当等。</li>
</ol>
<h3 id="62-死锁产生的条件？">6.2 死锁产生的条件？</h3>
<ul>
<li>（1）互斥条件（Mutual exclusion）：资源不能被共享，只能由一个进程使用。</li>
<li>（2）请求与保持条件（Hold and wait）：已经得到资源的进程可以再次申请新的资源。</li>
<li>（3）非剥夺条件（No pre-emption）：已经分配的资源不能从相应的进程中被强制地剥夺。</li>
<li>（4）循环等待条件（Circular wait）：系统中若干进程组成环路，该环路中每个进程都在等待相邻进程正占用的资源。</li>
</ul>
<h3 id="63-如何避免死锁？">6.3 如何避免死锁？</h3>
<ul>
<li>（1）打破互斥条件：改造独占性资源为虚拟资源，大部分资源已无法改造。</li>
<li>（2）打破不可抢占条件：当一进程占有一独占性资源后又申请一独占性资源而无法满足，则退出原占有的资源。</li>
<li>（3）打破占有且申请条件：采用资源预先分配策略，即进程运行前申请全部资源，满足则运行，不然就等待，这样就不会占有且申请。</li>
<li>（4）打破循环等待条件：实现资源有序分配策略，对所有设备实现分类编号，所有进程只能采用按序号递增的形式申请资源</li>
</ul>
<h2 id="7-操作系统的调度算法有哪些？">7. 操作系统的调度算法有哪些？</h2>
<blockquote>
<p>[!NOTE]
FCFS(先来先服务)，优先级，时间片轮转，多级反馈</p>
</blockquote>
<ol>
<li><strong>先来先服务（FCFS）</strong>:此算法的原则是按照作业到达后备作业队列（或进程进入就绪队列）的先后次序选择作业（或进程）</li>
<li><strong>短作业优先（SJF:Shortest Process First）</strong>：这种算法主要用于作业调度，它从作业后备序列中挑选所需运行时间最短的作业进入主存运行。</li>
<li>**时间片轮转调度算法：当某个进程执行的时间片用完时，调度程序便终止该进程的执行，并将它送到就绪队列的末尾，等待分配下一时间片再执行。然后把处理机分配给就绪队列中新的队首进程，同时也让它执行一个时间片。这样就可以保证队列中的所有进程，在已给定的时间内，均能获得一时间片处理机执行时间。</li>
<li><strong>高响应比优先</strong>：按照高响应比（已等待时间+要求运行时间）/要求运行时间 优先的原则，在每次选择作业投入运行时，先计算此时后备作业队列中每个作业的响应比RP。选择最大的作业投入运行。</li>
<li><strong>优先权调度算法</strong>：按照进程的优先权大小来调度。使高优先权进程得到优先处理的调度策略称为优先权调度算法。注意：优先数越多，优先权越小。</li>
<li><strong>多级队列调度算法</strong>：多队列调度是根据作业的性质和类型的不同，将就绪队列再分为若干个队列，所有的作业（进程）按其性质排入相应的队列中，而不同的就绪队列采用不同的调度算法。</li>
</ol>
<h2 id="8-系统调用与库函数的区别">8. 系统调用与库函数的区别?</h2>
<ol>
<li><p>系统调用是最底层的应用，是面向硬件的。而库函数的调用是面向开发的，相当于应用程序的API(即预先定义好的函数)接口；</p>
</li>
<li><p>各个操作系统的系统调用是不同的，因此系统调用一般是没有跨操作系统的可移植性，而库函数的移植性良好(c库在Windows和Linux环境下都可以操作)；</p>
</li>
<li><p>库函数属于过程调用，调用开销小；系统调用需要在用户空间和内核上下文环境切换，开销较大；</p>
</li>
<li><p>库函数调用函数库中的一段程序，这段程序最终还是通过系统调用来实现的；系统调用调用的是系统内核的服务。</p>
</li>
</ol>
<table>
<thead>
<tr>
<th align="center">函数库调用</th>
<th align="center">系统调用</th>
</tr>
</thead>
<tbody><tr>
<td align="center">在所有的ANSI C编译器版本中，C库函数是相同的</td>
<td align="center">各个操作系统的系统调用是不同的</td>
</tr>
<tr>
<td align="center">它调用函数库中的一段程序（或函数）</td>
<td align="center">它调用系统内核的服务</td>
</tr>
<tr>
<td align="center">与用户程序相联系</td>
<td align="center">是操作系统的一个入口点</td>
</tr>
<tr>
<td align="center">在用户地址空间执行</td>
<td align="center">在内核地址空间执行</td>
</tr>
<tr>
<td align="center">它的运行时间属于“用户时间”</td>
<td align="center">它的运行时间属于“系统”时间</td>
</tr>
<tr>
<td align="center">属于过程调用，调用开销较小</td>
<td align="center">需要在用户空间和内核上下文环境间切换，开销较大</td>
</tr>
<tr>
<td align="center">在C函数库libc中有大约300个函数</td>
<td align="center">在UNIX中大约有90个系统调用</td>
</tr>
<tr>
<td align="center">典型的C函数库调用：system fprintf malloc</td>
<td align="center">典型的系统调用：chdir fork write brk；</td>
</tr>
</tbody></table>
]]></description><link>https://blog.gaoredu.com/article/f92cc608-2d39-46c4-9af1-efd525e7bbac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f92cc608-2d39-46c4-9af1-efd525e7bbac</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 31 May 2024 17:19:51 GMT</pubDate></item><item><title><![CDATA[【JS相关】正则 copy]]></title><description><![CDATA[<h1 id="正则表达式">正则表达式</h1>
<h2 id="1正则表达式基础">1.正则表达式基础</h2>
<h3 id="11-创建正则表达式">1.1 创建正则表达式</h3>
<h4 id="111-使用一个正则表达式字面量">1.1.1 使用一个正则表达式字面量</h4>
<pre><code class="language-js">const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;</code></pre>
<h4 id="112-调用regexp对象的构造函数">1.1.2 调用RegExp对象的构造函数</h4>
<pre><code class="language-js">const regex = new RegExp(pattern, [, flags])</code></pre>
<h4 id="113-特殊字符">1.1.3 特殊字符</h4>
<ul>
<li>^ 匹配输入的开始</li>
<li>$ 匹配输入的结束</li>
<li>* 0次或多次  {0，}</li>
<li>+ 1次或多次  {1，}</li>
<li>?<ul>
<li>0次或者1次 {0,1}。</li>
<li>用于先行断言</li>
<li>如果紧跟在任何量词 *、 +、? 或 {} 的后面，将会使量词变为非贪婪<ul>
<li>对 &quot;123abc&quot; 用 /\d+/ 将会返回 &quot;123&quot;，</li>
<li>用 /\d+?/,那么就只会匹配到 &quot;1&quot;。</li>
</ul>
</li>
</ul>
</li>
<li>. 匹配除换行符之外的任何单个字符</li>
<li>(x)  匹配 &#39;x&#39; 并且记住匹配项</li>
<li>(?:x)  匹配 &#39;x&#39; 但是不记住匹配项</li>
<li>x(?=y)  配&#39;x&#39;仅仅当&#39;x&#39;后面跟着&#39;y&#39;.这种叫做正向肯定查找。</li>
<li>x(?!y)  匹配&#39;x&#39;仅仅当&#39;x&#39;后面不跟着&#39;y&#39;,这个叫做正向否定查找。</li>
<li>x|y  匹配‘x’或者‘y’。</li>
<li>{n}  重复n次</li>
<li>{n, m}  匹配至少n次，最多m次</li>
<li>[xyz]   代表 x 或 y 或 z</li>
<li>[^xyz]  不是 x 或 y 或 z</li>
<li>\d  数字</li>
<li>\D  非数字</li>
<li>\s  空白字符，包括空格、制表符、换页符和换行符。</li>
<li>\S  非空白字符</li>
<li>\w  单词字符（字母、数字或者下划线）  [A-Za-z0-9_]</li>
<li>\W  非单字字符。[^A-Za-z0-9_]</li>
<li>\3  表示第三个分组</li>
<li>\b   词的边界<ul>
<li>/\bm/匹配“moon”中得‘m’；</li>
</ul>
</li>
<li>\B   非单词边界</li>
</ul>
<h3 id="12-使用正则表达式的方法">1.2 使用正则表达式的方法</h3>
<ul>
<li>exec    一个在字符串中执行查找匹配的RegExp方法，它返回一个数组（未匹配到则返回null）。</li>
<li>test    一个在字符串中测试是否匹配的RegExp方法，它返回true或false。</li>
<li>match    一个在字符串中执行查找匹配的String方法，它返回一个数组或者在未匹配到时返回null。</li>
<li>search    一个在字符串中测试匹配的String方法，它返回匹配到的位置索引，或者在失败时返回-1。</li>
<li>replace    一个在字符串中执行查找匹配的String方法，并且使用替换字符串替换掉匹配到的子字符串。</li>
<li>split    一个使用正则表达式或者一个固定字符串分隔一个字符串，并将分隔后的子字符串存储到数组中的String方法。</li>
</ul>
<h4 id="121-正则对象的三个方法">1.2.1 正则对象的三个方法</h4>
<pre><code class="language-js">        //①test()判断字符串中是否出现某个字符串，返回布尔值
        var re = /abc/;
        var str = &#39;00abc66&#39;;
        console.log(re.test(str));  // true
        //②exec()查找并返回字符串中指定的某个字符串，只匹配一次
        var re = /abc/;
        var str = &#39;a0bc88abc00abc&#39;;
        console.log(re.exec(str));  // [&quot;abc&quot;, index: 6, input: &quot;a0bc88abc00abc&quot;, groups: undefined]
        //③compile()方法用于改变正则匹配的内容
        var re = /ab/;
        var str = &quot;aabcdef&quot;;
        console.log(re.test(str));  //true
        re.compile(/bd/);
        console.log(re.test(str));  //false
        re.compile(&#39;66&#39;);
        console.log(re.test(str));  //false</code></pre>
<h4 id="122-字符串中与正则相关的方法">1.2.2 字符串中与正则相关的方法</h4>
<pre><code class="language-js">        //①search()方法，返回符合条件的字符串首次出现的位置（下标）
        var re = /abc/;
        var str = &#39;00abc66&#39;;
        console.log(str.search(re));        // 2
        //②match()方法，返回查找的结果，如果查询不到返回NULL
        console.log(str.match(re));         // [&quot;abc&quot;, index: 2, input: &quot;00abc66&quot;, groups: undefined]
        //③replace()方法，将匹配到的内容替换成指定内容
        console.log(str.replace(re, &quot;*&quot;));
        //④split()方法，将字符串分割成字符串数组
        console.log(str.split(re));</code></pre>
<h3 id="13-正则表达式子表达式相关">1.3 正则表达式子表达式相关</h3>
<h4 id="131-子表达式">1.3.1 子表达式</h4>
<p>在正则表达式中，通过一对圆括号括起来的内容，我们就称之为“子表达式”。如：var re = /\d(\d)\d/;</p>
<h4 id="132-捕获">1.3.2 捕获</h4>
<p>在正则表达式中，子表达式匹配到相应的内容时，系统会自动捕获这个行为，然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。</p>
<h4 id="133-反向引用">1.3.3 反向引用</h4>
<p>在正则表达式中，我们可以使用\n（n&gt;0，正整数，代表系统中的缓冲区编号）来获取缓冲区中的内容，我们把这个过程就称之为“反向引用”。</p>
<pre><code class="language-js">    var str = &quot;d1122jj7667h6868s9999&quot;;
    //查找AABB型的数字
    console.log(str.match(/(\d)\1(\d)\2/)); //1122
    //查找ABBA型的数字
    console.log(str.match(/(\d)(\d)\2\1/)); //7667
    //查找ABAB型的数字
    console.log(str.match(/(\d)(\d)\1\2/)); //6868
    //查找四个连续相同的数字
    console.log(str.match(/(\d)\1\1\1/));   //9999</code></pre>
<h3 id="14-限定符">1.4 限定符</h3>
<blockquote>
<p>[!NOTE]
限定符可以指定正则表达式的一个给定字符必须要出现多少次才能满足匹配。</p>
</blockquote>
<pre><code class="language-html">    *：匹配前面的子表达式零次或多次，0到多
    +：匹配前面的子表达式一次或多次，1到多
    ?：匹配前面的子表达式零次或一次，0或1
    {n}：匹配确定的 n 次 
    {n,}：至少匹配 n 次 
    {n,m}：最少匹配 n 次且最多匹配 m 次</code></pre>
<blockquote>
<p>[!WARNING]
注意：针对于{n,m}，正则在匹配到一个符合多种次数的字符串时，优先匹配次数多的，即能匹配到m次就不会匹配n次，这就是贪婪模式（默认）。</p>
</blockquote>
<blockquote>
<p>如果在其后加?即{n,m}?则会更改为非贪婪模式（惰性模式），则此时正则优先匹配n次。</p>
</blockquote>
<pre><code class="language-js">    var str = &quot;aa1a22a333a6a8a&quot;;
    console.log(str.match(/a\d*/));      //a
    console.log(str.match(/a\d+/));      //a1
    console.log(str.match(/a\d?/));      //a
    console.log(str.match(/a\d{3}/));    //a333
    console.log(str.match(/a\d{2,}/));   //a22
    console.log(str.match(/a\d{1,3}/));  //a1
    console.log(str.match(/a\d{1,3}?/)); //a1

    //贪婪模式加深理解，案例如下：
    //贪婪模式下最开始的&#39;a2就符合条件&#39;，但是它会返回&#39;a22&#39;
    //注意：它是在遇到一个同时符合多个次数条件的字符串时，取符合次数多字符串
    var str = &quot;a22aa1a333a6a8a&quot;;
    console.log(str.match(/a\d{1,3}/));   //a22
    console.log(str.match(/a\d{1,3}/g));  //a22 a1 a333 a6 a8
    console.log(str.match(/a\d{1,3}?/));  //a2
    console.log(str.match(/a\d{1,3}?/g)); //a2 a1 a3 a6 a8</code></pre>
<h3 id="15-定位符">1.5 定位符</h3>
<blockquote>
<p>[!NOTE]
定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。</p>
</blockquote>
<pre><code class="language-js">^ (脱字符)：匹配输入字符串的开始位置
$：匹配输入字符串的结束位置
\b：匹配一个单词边界
\B：匹配非单词边界</code></pre>
<h3 id="16-正则表达式的匹配模式（修饰符）">1.6 正则表达式的匹配模式（修饰符）</h3>
<blockquote>
<p>[!NOTE]
表示正则匹配的附加规则，放在正则模式的最尾部。修饰符可以单个使用，也可以多个一起使用。</p>
</blockquote>
<ul>
<li>①g全局匹配，找到所有匹配，而不是在第一个匹配后停止</li>
<li>②i匹配全部大小写</li>
<li>③m多行，将开始和结束字符（^和$）视为在多行上工作（也就是，分别匹配每一行的开始和结束（由\n或\r分割），而不只是只匹配整个输入字符串的最开始和最末尾处。</li>
<li>④s与m相反，单行匹配<pre><code class="language-js">  var re = /^[a-z]/gim;   //可组合使用</code></pre>
</li>
</ul>
<h3 id="17-转义字符">1.7 转义字符</h3>
<blockquote>
<p>[!NOTE]
因为在正则表达式中 . + \ 等属于表达式的一部分，但有时也需要匹配这些特殊字符，所以，需要使用反斜杠对特殊字符进行转义。</p>
</blockquote>
<pre><code class="language-js">   需要转移的字符：
   点号.
   小括号()
   中括号[]
   左斜杠/
   右斜杠\
   选择匹配符|

   * 
   ?
   {}
   + 
   $
   ^</code></pre>
<h2 id="2-正则练习题">2. 正则练习题</h2>
<h3 id="21-匹配结尾的数字">2.1 匹配结尾的数字</h3>
<pre><code class="language-js">/\d+$/g</code></pre>
<h3 id="22-统计空格个数">2.2 统计空格个数</h3>
<p>字符串内如有空格，但是空格的数量可能不一致，通过正则将空格的个数统一变为一个。</p>
<pre><code class="language-js">let reg = /\s+/g
str.replace(reg, &quot; &quot;);</code></pre>
<h3 id="23-判断字符串是不是由数字组成">2.3 判断字符串是不是由数字组成</h3>
<pre><code class="language-js">str.test(/^\d+$/);</code></pre>
<h3 id="24-电话号码正则">2.4 电话号码正则</h3>
<ul>
<li>区号必填为3-4位的数字</li>
<li>区号之后用“-”与电话号码连接电话号码为7-8位的数字</li>
<li>分机号码为3-4位的数字，非必填，但若填写则以“-”与电话号码相连接<pre><code class="language-js">/^\d{3,4}-\d{7,8}(-\d{3,4})?$/</code></pre>
</li>
</ul>
<h3 id="25-手机号码正则表达式">2.5 手机号码正则表达式</h3>
<p>正则验证手机号，忽略前面的0，支持130-139，150-159。忽略前面0之后判断它是11位的。</p>
<pre><code class="language-js">/^0*1(3|5)\d{9}$/</code></pre>
<h3 id="26-使用正则表达式实现删除字符串中的空格">2.6 使用正则表达式实现删除字符串中的空格</h3>
<pre><code class="language-js">funtion trim(str) {
  let reg = /^\s+|\s+$/g
  return str.replace(reg, &#39;&#39;);
}</code></pre>
<h3 id="27-限制文本框只能输入数字和两位小数点等等">2.7 限制文本框只能输入数字和两位小数点等等</h3>
<pre><code class="language-js">/^\d*\.\d{0,2}$/</code></pre>
<h3 id="28-只能输入小写的英文字母和小数点，和冒号，正反斜杠：">2.8 只能输入小写的英文字母和小数点，和冒号，正反斜杠(：./)</h3>
<pre><code class="language-js">/^[a-z\.:\/\\]*$/</code></pre>
<h3 id="29-替换小数点前内容为指定内容">2.9 替换小数点前内容为指定内容</h3>
<blockquote>
<p>例如：infomarket.php?id=197 替换为 test.php?id=197</p>
</blockquote>
<pre><code class="language-js">var reg = /^[^\.]+/;
var target = &#39;---------&#39;;
str = str.replace(reg, target)</code></pre>
<h3 id="210-只匹配中文的正则表达式">2.10 只匹配中文的正则表达式</h3>
<pre><code class="language-js">/[\u4E00-\u9FA5\uf900-\ufa2d]/ig</code></pre>
<h3 id="211-返回字符串的中文字符个数">2.11 返回字符串的中文字符个数</h3>
<blockquote>
<p>先去掉非中文字符，再返回length属性。</p>
</blockquote>
<pre><code class="language-js">function cLength(str){
  var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
  //匹配非中文的正则表达式
  var temp = str.replace(reg,&#39;&#39;);
  return temp.length;
}</code></pre>
<h3 id="212-正则表达式取得匹配ip地址前三段">2.12 正则表达式取得匹配IP地址前三段</h3>
<blockquote>
<p>只要匹配掉最后一段并且替换为空字符串就行了</p>
</blockquote>
<pre><code class="language-js">function getPreThrstr(str) {
  let reg = /\.\d{1,3}$/;
  return str.replace(reg,&#39;&#39;);
}</code></pre>
<h3 id="213-匹配与之间的内容">2.13 匹配<ul>与</ul>之间的内容</h3>
<pre><code class="language-js">/&lt;ul&gt;[\s\S]+?&lt;/ul&gt;/i</code></pre>
<h3 id="214-用正则表达式获得文件名">2.14 用正则表达式获得文件名</h3>
<blockquote>
<p>c:\images\tupian\006.jpg</p>
</blockquote>
<p>可能是直接在盘符根目录下，也可能在好几层目录下，要求替换到只剩文件名。
首先匹配非左右斜线字符0或多个，然后是左右斜线一个或者多个。</p>
<pre><code class="language-js">function getFileName(str){
  var reg = /[^\\\/]*[\\\/]+/g;
  // xxx\ 或是 xxx/
  str = str.replace(reg,&#39;&#39;);
  return str;
}</code></pre>
<h3 id="215-绝对路径变相对路径">2.15 绝对路径变相对路径</h3>
<blockquote>
<p>&quot;<a href="http://23.123.22.12/image/somepic.gif&quot;%E8%BD%AC%E6%8D%A2%E4%B8%BA%EF%BC%9A&quot;/image/somepic.gif&quot;">http://23.123.22.12/image/somepic.gif&quot;转换为：&quot;/image/somepic.gif&quot;</a></p>
</blockquote>
<pre><code class="language-js">var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,&quot;&quot;);</code></pre>
<h3 id="216-用户名正则">2.16 用户名正则</h3>
<blockquote>
<p>用于用户名注册，，用户名只 能用 中文、英文、数字、下划线、4-16个字符。</p>
</blockquote>
<pre><code class="language-js">/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/</code></pre>
<h3 id="217-匹配英文地址">2.17 匹配英文地址</h3>
<blockquote>
<p>规则如下:
包含 &quot;点&quot;, &quot;字母&quot;,&quot;空格&quot;,&quot;逗号&quot;,&quot;数字&quot;，但开头和结尾不能是除字母外任何字符。</p>
</blockquote>
<pre><code class="language-js">/^[a-zA-Z][\.a-zA-Z,0-9]*[a-zA-Z]$/</code></pre>
<h3 id="218-正则匹配价格">2.18 正则匹配价格</h3>
<p>开头数字若干位，可能有一个小数点，小数点后面可以有两位数字。</p>
<pre><code class="language-js">/^\d+(\.\d{2})?$/</code></pre>
<h3 id="219-身份证号码的匹配">2.19 身份证号码的匹配</h3>
<p>身份证号码可以是15位或者是18位，其中最后一位可以是X。其它全是数字</p>
<pre><code class="language-js">/^(\d{14}|\d{17})(X|x)$/</code></pre>
<h3 id="220-单词首字母大写">2.20 单词首字母大写</h3>
<blockquote>
<p>每单词首字大写，其他小写。如blue idea转换为Blue Idea，BLUE IDEA也转换为Blue Idea</p>
</blockquote>
<pre><code class="language-js">function firstCharUpper(str) {
  str = str.toLowerCase();
  let reg = /\b(\w)/g;
  return str.replace(reg, m =&gt; m.toUpperCase());
}</code></pre>
<h3 id="221-正则验证日期格式">2.21 正则验证日期格式</h3>
<blockquote>
<p>yyyy-mm-dd格式, 4位数字，横线，1或者2位数字，再横线，最后又是1或者2位数字。</p>
</blockquote>
<pre><code class="language-js">/^\d{4}-\d{1,2}-\d{1,2}$/</code></pre>
<h3 id="222-去掉文件的后缀名">2.22 去掉文件的后缀名</h3>
<blockquote>
<p><a href="http://www.abc.com/dc/fda.asp">www.abc.com/dc/fda.asp</a> 变为 <a href="http://www.abc.com/dc/fda">www.abc.com/dc/fda</a></p>
</blockquote>
<pre><code class="language-js">function removeExp(str) {
  return str.replace(/\.\w$/,&#39;&#39;)
}</code></pre>
<h3 id="223-验证邮箱的正则表达式">2.23 验证邮箱的正则表达式</h3>
<blockquote>
<p>开始必须是一个或者多个单词字符或者是-，加上@，然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合，可以有一个或者多个组合。</p>
</blockquote>
<pre><code class="language-js">/^[\w-]+@\w+\.\w+$/</code></pre>
<h3 id="224-正则判断标签是否闭合">2.24 正则判断标签是否闭合</h3>
<blockquote>
<p>例如：&lt;img xxx=”xxx” 就是没有闭合的标签；<p>p的内容，同样也是没闭合的标签。</p>
</blockquote>
<blockquote>
<p>标签可能有两种方式闭合，<img xxx=”xxx” /> 或者是<p> xxx </p>。</p>
</blockquote>
<pre><code class="language-js">/&lt;([a-z]+)(\s*\w*?\s*=\s*&quot;.+?&quot;)*(\s*?&gt;[\s\S]*?(&lt;\/\1&gt;)+|\s*\/&gt;)/i</code></pre>
<h3 id="225-正则判断是否为数字与字母的混合">2.25 正则判断是否为数字与字母的混合</h3>
<blockquote>
<p>不能小于12位，且必须为字母和数字的混合</p>
</blockquote>
<pre><code class="language-js">/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i</code></pre>
<h3 id="226-将阿拉伯数字替换为中文大写形式">2.26 将阿拉伯数字替换为中文大写形式</h3>
<pre><code class="language-js">function replaceReg(reg,str){
  let arr=[&quot;零&quot;,&quot;壹&quot;,&quot;贰&quot;,&quot;叁&quot;,&quot;肆&quot;,&quot;伍&quot;,&quot;陆&quot;,&quot;柒&quot;,&quot;捌&quot;,&quot;玖&quot;];
  let reg = /\d/g;
  return str.replace(reg,function(m){return arr[m];})
}</code></pre>
<h3 id="227-去掉标签的所有属性">2.27 去掉标签的所有属性</h3>
<pre><code class="language-html">&lt;td style=&quot;width: 23px; height: 26px;&quot; align=&quot;left&quot;&gt;***&lt;/td&gt;
变成没有任何属性的
&lt;td&gt;***&lt;/td&gt;</code></pre>
<blockquote>
<p>思路：非捕获匹配属性，捕获匹配标签，使用捕获结果替换掉字符串。正则如下：</p>
</blockquote>
<pre><code class="language-js">/(&lt;td)\s(?:\s*\w*?\s*=\s*&quot;.+?&quot;)*?\s*?(&gt;)/</code></pre>
<h3 id="228-驼峰表示">2.28 驼峰表示</h3>
<pre><code class="language-js">String.prototype.camelCase = function () {
        // .*?是非贪婪的匹配，点可以匹配任意字符，星号是前边的字符有0-n个均匹配，问号是则是0-1；
        // (^\w{1}): 用于匹配第一个首字母
        // (.*)：用于匹配任意个的前面的字符，.表示的就是任意字符

        // - param 1: 匹配到的字符串
        // - param 2: 匹配的的子字符串
        // - param 3: 匹配的子字符串
        // - param的位置
        // - param 5: 原始字符串 4: 匹配到的字符串在字符串中

        return this.replace(/(^\w{1})(.*)/g, function (match, g1, g2) {
            return g1.toUpperCase() + g2.toLowerCase();
        });
    }</code></pre>
<h3 id="229-模板字符串">2.29 模板字符串</h3>
<pre><code class="language-js">// str = &#39;name: @(name), age:@(age)&#39;
       // data = {name : &#39;xiugang&#39;, age : 18}
       /**
        * 实现一个简单的数据绑定
        * @param str
        * @param data
        * @return {*}
        */
       String.prototype.formateString = function (data) {
           return this.replace(/@\((\w+)\)/g, function (match, key) {
               // 注意这里找到的值必须返回出去(如果是undefined，就是没有数据)
               // 注意：判断一个值的类型是不是undefined，可以通过typeof判断
               console.log(typeof data[key] === &#39;undefined&#39;);
               return data[key] === &#39;undefined&#39; ? &#39;&#39; : data[key];
           });

       }</code></pre>
<h3 id="230-去掉两边的空格">2.30 去掉两边的空格</h3>
<pre><code class="language-js">/**
        * 去掉两边的空格
        * @param str
        * @return {*}
        */
       String.prototype.trim = function () {
           return this.replace(/(^\s*)|(\s*$)/g, &#39;&#39;);
       }</code></pre>
<h3 id="231-获取url参数-使用replace保存到一个数组里面，然后从数组里面取出数据">2.31 获取url参数: 使用replace保存到一个数组里面，然后从数组里面取出数据</h3>
<pre><code class="language-js">&#39;http://www.189dg.com/ajax/sms_query.ashx?undefined&amp;undefined&amp;undefined-06-27&amp;undefined-06-27&#39;
 url.replace(/(\w+)=(\w+)/g, function(a, b, c){
   console.log(a, b, c)
 })
action=smsdetail action smsdetail
sid=22 sid 22
stime=2014 stime 2014
etime=2014 etime 2014


// 封装为一个函数
var url = &quot;http://127.0.0.1/e/action/ShowInfo.php?classid=9&amp;id=2&quot;;
function parse_url(_url){
 var pattern = /(\w+)=(\w+)/ig;
 var parames = {};
 url.replace(pattern, function(a, b, c){
   parames[b] = c;
 });
 return parames;
}
var parames = parse_url(url);
alert(parames[&#39;classid&#39;] + &quot;, &quot; + parames[&#39;id&#39;]);</code></pre>
]]></description><link>https://blog.gaoredu.com/article/a2f4a671-8b1e-4af8-907f-773013fd51b7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a2f4a671-8b1e-4af8-907f-773013fd51b7</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 29 May 2024 04:27:55 GMT</pubDate></item><item><title><![CDATA[【前端工程化】Webpack常见面试题]]></title><description><![CDATA[<h1 id="1-webpack3和webpack4的区别？">1. webpack3和webpack4的区别？</h1>
<ol>
<li>mode/–mode参数: 新增了mode/--mode参数来表示是开发还是生产（development/production）; production 侧重于打包后的文件大小，development侧重于构建速度</li>
<li>移除loaders，必须使用rules（在3版本的时候loaders和rules 是共存的但是到4的时候只允许使用rules）</li>
<li>移除了CommonsChunkPlugin (提取公共代码)，用optimization.splitChunks和optimization.runtimeChunk来代替</li>
<li>支持es6的方式导入JSON文件，并且可以过滤无用的代码</li>
</ol>
<h1 id="2-什么是webpack，和grunt和gulp有什么不同？">2. 什么是webpack，和grunt和gulp有什么不同？</h1>
<ol>
<li>Webpack是一个模块打包器，他可以递归的打包项目中的所有模块，最终生成几个打包后的文件。</li>
<li>他和其他的工具最大的不同在于他支持code-splitting、模块化(AMD，ESM，CommonJs)、全局分析。</li>
</ol>
<h1 id="3-什么是bundle什么是chunk，什么是module">3. 什么是bundle,什么是chunk，什么是module?</h1>
<ol>
<li>bundle是由webpack打包出来的文件</li>
<li>chunk是指webpack在进行模块的依赖分析的时候，代码分割出来的代码块</li>
<li>module是开发中的单个模块。</li>
</ol>
<h1 id="4-什么是loader什么是plugin">4. 什么是Loader?什么是Plugin?</h1>
<ol>
<li>loader是使wenbpack拥有加载和解析非js文件的能力</li>
<li>plugin 可以扩展webpack的功能，使得webpack更加灵活。可以在构建的过程中通过webpack的api改变输出的结果</li>
</ol>
<h1 id="5-webpack的构建流程？">5. Webpack的构建流程？</h1>
<ol>
<li>初始化参数，从配置文件和shell语句中读到的参数合并，得到最后的参数</li>
<li>开始编译：用合并得到的参数初始化complier对象，加载是所有配置的插件，执行run方法开始编译</li>
<li>确定入口，通过entry找到入口文件</li>
<li>编译模块，从入口文件出发，调用所有配置的loader对模块进行解析翻译，在找到该模块依赖的模块进行处理</li>
<li>完成模块编译，得到每个模块被翻译之后的最终的内容和依赖关系</li>
<li>输出资源，根据入口和模块之间的依赖关系，组装成一个个包含多个模块的chunk，在把每个chunk转换成一个单独的文件加载到输出列表</li>
<li>输出完成，确定输出的路径和文件名，把内容写到文件系统中</li>
</ol>
<h1 id="6-如何利用webpack来优化前端性能">6. 如何利用webpack来优化前端性能</h1>
<ol>
<li>提取公共代码。webpack4移除了CommonsChunkPlugin (提取公共代码)，用optimization.splitChunks和optimization.runtimeChunk来代替</li>
<li>压缩代码。（development和production）</li>
<li>使用loader的时候，使用exclude排除node_modules中的文件</li>
<li>配置extractTextWebpackPlugin插件</li>
<li>使用TreeShaking插件：Tree-shaking 概念最早由Rollup.js 提出，后来在webpack2中被引入进来，但是这个这一特性能够被支持得益于ES6 modules的静态特性。ES6的模块声明相比于传统CommonJS的同步require有着本质区别。这种modules设计保证了依赖关系是提前确定的，使得静态分析成为了可能，与运行时无关。（除那些引用的但却没有使用的代码）</li>
</ol>
<pre><code class="language-js">// 一、.babelrc 中添加
&quot;presets&quot;: [
 [
   &quot;es2015&quot;, {
     &quot;modules&quot;: false,
   }
 ],
 &quot;stage-2&quot;
],
// 或者在babel loader中的options里面添加同样的代码, modules:false 表示的是不对ES6进行处理

// 二、使用uglifyjs-webpack-plugin
plugins: [
    new UglifyJsPlugin(),
...
]</code></pre>
<blockquote>
<p>[!NOTE]
想要代码配置tree-shaking,必须采用es6的模块语法，因为es6的模块采用的是静态分析，也就是从字面量对代码进行分析。之前的require是动态分析，必须代码执行到才知道引用的什么模块。</p>
</blockquote>
<h1 id="7-如何可以自动生成webpack配置？">7. 如何可以自动生成webpack配置？</h1>
<p>答案： webpack-cli /vue-cli /etc ...脚手架工具</p>
<h1 id="8-webpack-dev-server和http服务器如nginx有什么区别">8. webpack-dev-server和http服务器如nginx有什么区别?</h1>
<ol>
<li>webpack-dev-server使用内存来存储webpack开发环境下的打包文件</li>
<li>并且可以使用模块热更新</li>
<li>他比传统的http服务对开发更加简单高效。</li>
</ol>
<h1 id="9-什么是模块热更新？">9. 什么是模块热更新？</h1>
<p>答案:模块热更新是webpack的一个功能，他可以使得代码修改过后不用刷新浏览器就可以更新，是高级版的自动刷新浏览器。</p>
<h1 id="10-什么是长缓存？在webpack中如何做到长缓存优化？">10. 什么是长缓存？在webpack中如何做到长缓存优化？</h1>
<p>答案：</p>
<ol>
<li>浏览器在用户访问页面的时候，为了加快加载速度，会对用户访问的静态资源进行存储，但是每一次代码升级或是更新，都需要浏览器去下载新的代码，最方便和简单的更新方式就是引入新的文件名称。</li>
<li>在webpack中可以在output纵输出的文件指定chunkhash,并且分离经常更新的代码和框架代码。</li>
<li>通过NameModulesPlugin或是HashedModuleIdsPlugin使再次打包文件名不变。</li>
</ol>
<h1 id="11-什么是tree-shakingcss可以tree-shaking吗？">11. 什么是Tree-shaking?CSS可以Tree-shaking吗？</h1>
<p>答案：</p>
<ol>
<li>Tree-shaking是指在打包中去除那些引入了，但是在代码中没有被用到的那些死代码。</li>
<li>在webpack中Tree-shaking是通过uglifySPlugin来Tree-shaking JS</li>
<li>Css需要使用Purify-CSS。</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/7ad7df08-8984-4112-95a1-129d34ff4f91</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7ad7df08-8984-4112-95a1-129d34ff4f91</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 May 2024 12:38:34 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】继承的多种实现方式]]></title><description><![CDATA[<h1 id="javascript-之继承的多种实现方式和优缺点">Javascript 之继承的多种实现方式和优缺点</h1>
<blockquote>
<p>[!NOTE]
能熟练掌握每种继承方式的手写实现，并知道该继承实现方式的优缺点。</p>
</blockquote>
<h2 id="原型链继承">原型链继承</h2>
<pre><code class="language-js">    function Parent() {
      this.name = &#39;zhangsan&#39;;
      this.children = [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;];
    }
    Parent.prototype.getName = function() {
      console.log(this.name);
    }

    function Child() {

    }
    Child.prototype = new Parent();
    var child = new Child();
    console.log(child.getName());</code></pre>
<blockquote>
<p>[!NOTE]
主要问题：
    1. 引用类型的属性被所有实例共享(this.children.push(&#39;name&#39;))
    2. 在创建Child的实例的时候，不能向Parent传参</p>
</blockquote>
<h2 id="借用构造函数（经典继承）">借用构造函数（经典继承）</h2>
<pre><code class="language-js">    function Parent(age) {
      this.names = [&#39;zhangsan&#39;, &#39;lisi&#39;];
      this.age = age;

      this.getName = function() {
        return this.names;
      }

      this.getAge = function() {
        return this.age;
      }
    }

    function Child(age) {
      Parent.call(this, age);
    }
    var child = new Child(18);
    child.names.push(&#39;haha&#39;);
    console.log(child.names);

    var child2 = new Child(20);
    child2.names.push(&#39;yaya&#39;);
    console.log(child2.names);</code></pre>
<blockquote>
<p>[!NOTE]
优点：
    1. 避免了引用类型的属性被所有实例共享
    2. 可以直接在Child中向Parent传参
缺点：
    方法都在构造函数中定义了，每次创建实例都会创建一遍方法</p>
</blockquote>
<h2 id="组合继承原型链继承和经典继承双剑合璧">组合继承(原型链继承和经典继承双剑合璧)</h2>
<pre><code class="language-js">    /**
    * 父类构造函数
    * @param name
    * @constructor
    */
    function Parent(name) {
      this.name = name;
      this.colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];
    }

    Parent.prototype.getName = function() {
      console.log(this.name);
    }

    // child
    function Child(name, age) {
      Parent.call(this, name);
      this.age = age;
    }

    Child.prototype = new Parent();
    // 校正child的构造函数
    Child.prototype.constructor = Child;

    // 创建实例
    var child1 = new Child(&#39;zhangsan&#39;, 18);
    child1.colors.push(&#39;orange&#39;);
    console.log(child1.name, child1.age, child1.colors);    // zhangsan 18 (4) [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;, &quot;orange&quot;]

    var child2 = new Child(&#39;lisi&#39;, 28);
    console.log(child2.name, child2.age, child2.colors);    // lisi 28 (3) [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;]</code></pre>
<blockquote>
<p>[!NOTE]
优点: 融合了原型链继承和构造函数的优点，是Javascript中最常用的继承模式</p>
</blockquote>
<p>------ 高级继承的实现</p>
<h2 id="原型式继承">原型式继承</h2>
<pre><code class="language-js">    function createObj(o) {
      function F(){};
      // 关键：将传入的对象作为创建对象的原型
      F.prototype = o;
      return new F();
    }

    // test
    var person = {
        name: &#39;zhangsan&#39;,
        friends: [&#39;lisi&#39;, &#39;wangwu&#39;]
    }
    var person1 = createObj(person);
    var person2 = createObj(person);

    person1.name = &#39;wangdachui&#39;;
    console.log(person1.name, person2.name);  // wangdachui, zhangsan

    person1.friends.push(&#39;songxiaobao&#39;);
    console.log(person2.friends);       // lisi wangwu songxiaobao</code></pre>
<blockquote>
<p>[!WARNING]
缺点：
    对于引用类型的属性值始终都会共享相应的值，和原型链继承一样</p>
</blockquote>
<h2 id="寄生式继承">寄生式继承</h2>
<pre><code class="language-js">    // 创建一个用于封装继承过程的函数，这个函数在内部以某种形式来增强对象
    function createObj(o) {
      var clone = Object.create(o);
      clone.sayName = function() {
        console.log(&#39;say HelloWorld&#39;);
      }
      return clone;
    }</code></pre>
<blockquote>
<p>[!WARNING]
缺点：与借用构造函数模式一样，每次创建对象都会创建一遍方法</p>
</blockquote>
<h2 id="寄生组合式继承">寄生组合式继承</h2>
<h3 id="基础版本">基础版本</h3>
<pre><code class="language-js">    function Parent(name) {
      this.name = name;
      this.colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];
    }

    Parent.prototype.getName = function() {
      console.log(this, name);
    }

    function Child(name, age) {
      Parent.call(this, name);
      this.age = age;
    }

    // test1:
    // 1. 设置子类实例的时候会调用父类的构造函数
    Child.prototype = new Parent();
    // 2. 创建子类实例的时候也会调用父类的构造函数
    var child1 = new Child(&#39;zhangsan&#39;, 18);   // Parent.call(this, name);


    // 思考：如何减少父类构造函数的调用次数呢？
    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();

    // 思考：下面的这一句话可以吗？
    /* 分析：因为此时Child.prototype和Parent.prototype此时指向的是同一个对象，
            因此部分数据相当于此时是共享的(引用)。
            比如此时增加 Child.prototype.testProp = 1; 
            同时会影响 Parent.prototype 的属性的。
          如果不模拟，直接上 es5 的话应该是下面这样吧
          Child.prototype = Object.create(Parent.prototype);*/
    Child.prototype = Parent.prototype;

    // 上面的三句话可以简化为下面的一句话
    Child.prototype = Object.create(Parent.prototype);



    // test2:
    var child2 = new Child(&#39;lisi&#39;, 24);</code></pre>
<h3 id="优化版本">优化版本</h3>
<pre><code class="language-js">    // 自封装一个继承的方法
    function object(o) {
      // 下面的三句话实际上就是类似于：var o = Object.create(o.prototype)
      function F(){};
      F.prototype = o.prototype;
      return new F();
    }

    function prototype(child, parent) {
      var prototype = object(parent.prototype);
      // 维护原型对象prototype里面的constructor属性
      prototype.constructor = child;
      child.prototype = prototype;
    }

    // 调用的时候
    prototype(Child, Parent)</code></pre>
<h3 id="创建对象的方法">创建对象的方法</h3>
<ul>
<li>字面量创建</li>
<li>构造函数创建</li>
<li>Object.create()</li>
</ul>
<pre><code class="language-js">var o1 = {name: &#39;value&#39;};
var o2 = new Object({name: &#39;value&#39;});

var M = function() {this.name = &#39;o3&#39;};
var o3 = new M();

var P = {name: &#39;o4&#39;};
var o4 = Object.create(P)</code></pre>
<h3 id="原型">原型</h3>
<ul>
<li>JavaScript 的所有对象中都包含了一个 <code>__proto__</code> 内部属性，这个属性所对应的就是该对象的原型<ul>
<li>JavaScript 的函数对象，除了原型 <code>__proto__</code> 之外，还预置了 prototype 属性</li>
<li>当函数对象作为构造函数创建实例时，该 prototype 属性值将被作为实例对象的原型 <code>__proto__</code>。</li>
</ul>
</li>
</ul>
<p><img src="../img/prototype.png" alt="原型"></p>
<h3 id="原型链">原型链</h3>
<p>任何一个实例对象通过原型链可以找到它对应的原型对象，原型对象上面的实例和方法都是实例所共享的。</p>
<p>一个对象在查找以一个方法或属性时，他会先在自己的对象上去找，找不到时，他会沿着原型链依次向上查找。</p>
<p>注意： 函数才有prototype，实例对象只有有<strong>proto</strong>， 而函数有的<strong>proto</strong>是因为函数是Function的实例对象</p>
<h3 id="instanceof原理">instanceof原理</h3>
<p>判断实例对象的<strong>proto</strong>属性与构造函数的prototype是不是用一个引用。如果不是，他会沿着对象的<strong>proto</strong>向上查找的，直到顶端Object。</p>
<h3 id="判断对象是哪个类的直接实例">判断对象是哪个类的直接实例</h3>
<p>使用<code>对象.construcor</code>直接可判断</p>
<h3 id="构造函数，new时发生了什么？">构造函数，new时发生了什么？</h3>
<pre><code class="language-javascript">   var obj  = {}; 
   obj.__proto__ = Base.prototype;
   Base.call(obj);  </code></pre>
<ol>
<li>创建一个新的对象 obj;</li>
<li>将这个空对象的<strong>proto</strong>成员指向了Base函数对象prototype成员对象</li>
<li>Base函数对象的this指针替换成obj, 相当于执行了Base.call(obj);</li>
<li>如果构造函数显示的返回一个对象，那么则这个实例为这个返回的对象。 否则返回这个新创建的对象</li>
</ol>
<h3 id="类">类</h3>
<p>类的声明</p>
<pre><code class="language-js">// 普通写法
function Animal() {
  this.name = &#39;name&#39;
}

// ES6
class Animal2 {
  constructor () {
    this.name = &#39;name&#39;;
  }
}</code></pre>
<h2 id="继承">继承</h2>
<h3 id="借用构造函数法">借用构造函数法</h3>
<p>在构造函数中 使用<code>Parent.call(this)</code>的方法继承父类属性。</p>
<p>原理： 将子类的this使用父类的构造函数跑一遍 </p>
<p>缺点： Parent原型链上的属性和方法并不会被子类继承</p>
<pre><code class="language-js">function Parent() {
  this.name = &#39;parent&#39;
}

function Child() {
  Parent.call(this);
  this.type = &#39;child&#39;
}</code></pre>
<h3 id="原型链实现继承">原型链实现继承</h3>
<p>原理：把子类的prototype（原型对象）直接设置为父类的实例</p>
<p>缺点：因为子类只进行一次原型更改，所以子类的所有实例保存的是同一个父类的值。
当子类对象上进行值修改时，如果是修改的原始类型的值，那么会在实例上新建这样一个值；
但如果是引用类型的话，他就会去修改子类上唯一一个父类实例里面的这个引用类型，这会影响所有子类实例</p>
<pre><code class="language-js">function Parent() {
  this.name = &#39;parent&#39;
  this.arr = [1,2,3]
}

function Child() {
  this.type = &#39;child&#39;
}

Child.prototype = new Parent();
var c1 = new Child();
var c2 = new Child();
c1.__proto__ === c2.__proto__</code></pre>
<h3 id="组合继承方式">组合继承方式</h3>
<p>组合构造函数中使用call继承和原型链继承。</p>
<p>原理： 子类构造函数中使用<code>Parent.call(this);</code>的方式可以继承写在父类构造函数中this上绑定的各属性和方法； 
使用<code>Child.prototype = new Parent()</code>的方式可以继承挂在在父类原型上的各属性和方法</p>
<p>缺点：  父类构造函数在子类构造函数中执行了一次，在子类绑定原型时又执行了一次</p>
<pre><code class="language-js">function Parent() {
  this.name = &#39;parent&#39;
  this.arr = [1,2,3]
}

function Child() {
  Parent.call(this);
  this.type = &#39;child&#39;
}

Child.prototype = new Parent();</code></pre>
<h3 id="组合继承方式-优化1：">组合继承方式 优化1：</h3>
<p>因为这时父类构造函数的方法已经被执行过了，只需要关心原型链上的属性和方法了</p>
<pre><code class="language-js">Child.prototype = Parent.prototype;</code></pre>
<p>缺点：</p>
<ul>
<li>因为原型上有一个属性为<code>constructor</code>，此时直接使用父类的prototype的话那么会导致 实例的constructor为Parent，即不能区分这个实例对象是Child的实例还是父类的实例对象。</li>
<li>子类不可直接在prototype上添加属性和方法，因为会影响父类的原型</li>
</ul>
<p>注意：这个时候instanseof是可以判断出实例为Child的实例的，因为instanceof的原理是沿着对象的<strong>proto</strong>判断是否有一个原型是等于该构造函数的原型的。这里把Child的原型直接设置为了父类的原型，那么: 实例.<strong>proto</strong> === Child.prototype === Child.prototype</p>
<h3 id="组合继承方式-优化2---添加中间对象【最通用版本】：">组合继承方式 优化2 - 添加中间对象【最通用版本】：</h3>
<pre><code class="language-js">function Parent() {
  this.name = &#39;parent&#39;
  this.arr = [1,2,3]
}

function Child() {
  Parent.call(this);
  this.type = &#39;child&#39;
}

Child.prototype = Object.create(Parent.prototype); //提供__proto__
Child.prototype.constrctor = Child;</code></pre>
<p>Object.create()方法创建一个新对象，使用现有的对象来提供新创建的对象的<strong>proto</strong></p>
<h1 id="创建js对象的多种方式总结">创建JS对象的多种方式总结</h1>
<h2 id="工厂模式">工厂模式</h2>
<pre><code class="language-js">
    /**
    * 工厂模式创建对象
    * @param name
    * @return {Object}
    */
    function createPerson(name){
        var o = new Object();
        o.name = name;
        o.getName = function() {
          console.log(this.name);
        }
        return o;
    }
    var person = createPerson(&#39;zhangsan&#39;);
    console.log(person.__proto__ === Object.prototype); // true</code></pre>
<blockquote>
<p>缺点：无法识别当前的对象，因为创建的所有对象实例都指向的是同一个原型</p>
</blockquote>
<h2 id="构造函数模式">构造函数模式</h2>
<h3 id="构造函数创建对象基础版本">构造函数创建对象基础版本</h3>
<pre><code class="language-js">    /**
    * 使用构造函数的方式来创建对象
    * @param name
    * @constructor
    */
    function Person(name) {
      this.name = name;
      this.getName = function() {
        console.log(this.name)
      }
    }
    var person = new Person(&#39;lisi&#39;);
    console.log(person.__proto__ === Person.prototype)</code></pre>
<blockquote>
<p>优点：实例剋识别伪一个特定的类型
缺点：每次创建实例对象的时候，每个方法都会被创建一次</p>
</blockquote>
<h3 id="构造函数模式优化">构造函数模式优化</h3>
<pre><code class="language-js">    function Person(name) {
      this.name = name;
      this.getName = getName;
    }

    function getName() {
      console.log(this.name);
    }

    var person = new Person(&#39;zhangsan&#39;);
    console.log(person.__proto__ === Person.prototype);</code></pre>
<blockquote>
<p>优点：解决了每个方法都要被重新创建的问题
缺点：不合乎代码规范……</p>
</blockquote>
<h2 id="原型模式">原型模式</h2>
<h3 id="原型模式基础版">原型模式基础版</h3>
<pre><code class="language-js">    function Person(name) {

    }
    Person.prototype.name = &#39;lisi&#39;;
    Person.prototype.getName = function() {
      console.log(this.name);
    }
    var person = new Person();
    console.log(Person.prototype.constructor)       // Person</code></pre>
<blockquote>
<p>优点：方法不会被重新创建
缺点：1. 所有的属性和方法所有的实例上面都是共享的；2. 不能初始化参数</p>
</blockquote>
<h3 id="原型模式优化版本一">原型模式优化版本一</h3>
<pre><code class="language-js">    function Person(name) {

    }
    Person.prototype = {
        name: &#39;lisi&#39;,
        getName: function() {
          console.log(this.name);
        }
    }
    var person = new Person();
    console.log(Person.prototype.constructor)       // Object
    console.log(person.constructor == person.__proto__.constructor) // true</code></pre>
<blockquote>
<p>优点：封装性好了一些
缺点：重写了Person的原型prototype属性,丢失了原始的prototype上的constructor属性</p>
</blockquote>
<h3 id="原型模式优化版本二">原型模式优化版本二</h3>
<pre><code class="language-js">    function Person(name) {

    }
    Person.prototype = {
        constructor: Person,
        name: &#39;lisi&#39;,
        getName: function() {
          console.log(this.name)
        }
    }
    var person = new Person();</code></pre>
<blockquote>
<p>优点：实例可以通过constructor属性找到所属的构造函数
缺点：所有的属性和方法都共享，而且不能初始化参数</p>
</blockquote>
<h2 id="组合模式">组合模式</h2>
<pre><code class="language-js">    function Person(name) {
      this.name = name;
    }
    Person.prototype = {
        constructor: Person,
        getName: function() {
          console.log(this.name)
        }
    }
    var person = new Person(&#39;zhangsan&#39;);</code></pre>
<blockquote>
<p>优点：基本符合预期，属性私有，方法共享，是目前使用最广泛的方式
缺点：方法和属性没有写在一起，封装性不是太好</p>
</blockquote>
<h2 id="动态原型莫模式">动态原型莫模式</h2>
<pre><code class="language-js">    // 第一种创建思路：
    function Person(name) {
       this.name = name;
       if (typeof this.getName !== &#39;function&#39;) {
           Person.prototype.getName = function() {
             console.log(this.name);
           }
       }
    }
    var person = new Person();

    // 第二种创建的思路：使用对象字面量重写原型上的方法
    function Person(name) {
      this.name = name;
      if (typeof this.getName !== &#39;function&#39;) {
          Person.prototype = {
              constructor: Person,
              getName: function() {
                console.log(this.name)
              }
          }
          return new Person(name);
      }
    }

    var person1 = new Person(&#39;zhangsan&#39;);
    var person2 = new Person(&#39;lisi&#39;);
    console.log(person1.getName());
    console.log(person2.getName());
</code></pre>
<h2 id="寄生构造函数模式">寄生构造函数模式</h2>
<pre><code class="language-js">    /**
    * 寄生构造函数模式
    * @param name
    * @return {Object}
    * @constructor
    */
   function Person(name){
        var o = new Object();
        o.name = name;
        o.getName = function() {
          console.log(this.name)
        }
        return o;
   }
   var person = new Person(&#39;zhangsan&#39;);
   console.log(person instanceof Person);   // false
   console.log(person instanceof Object);   // true


   // 使用寄生-构造函数-模式来创建一个自定义的数组
   /**
    * 特殊数组的构造器
    * @constructor
    */
   function SpecialArray() {
     var values = new Array();
     /*for (var i = 0, len = arguments.length; i &lt; len; i++) {
         values.push(arguments[i]);
     }*/
     // 开始添加数据(可以直接使用apply的方式来优化代码)
     values.push.apply(values, arguments);

     // 新增的方法
     values.toPipedString = function(){
         return this.join(&#39;|&#39;);
     }

     return values;
   }

   // 使用new来创建对象
   var colors1 = new SpecialArray(&#39;red1&#39;, &#39;green1&#39;, &#39;blue1&#39;);
   // 不使用new来创建对象
   var colors2 = SpecialArray(&#39;red2&#39;, &#39;green2&#39;, &#39;blue2&#39;);

   console.log(colors1, colors1.toPipedString());
   console.log(colors2, colors2.toPipedString());</code></pre>
<h2 id="稳妥构造函数模式">稳妥构造函数模式</h2>
<pre><code class="language-js">    /**
    * 稳妥的创建对象的方式
    * @param name
    * @return {number}
    * @constructor
    */
    function Person(name){
        var o = new Object();
        o.sayName = function() {
           // 这里有点类似于在一个函数里面使用外部的变量
           // 这里直接输出的是name
          console.log(name);
        }
        return o;
    }
    var person =  Person(&#39;lisi&#39;);
    person.sayName();
    person.name = &#39;zhangsan&#39;;
    person.sayName();
    console.log(person instanceof Person);      // false
    console.log(person instanceof Object);      // false</code></pre>
<blockquote>
<p>[!NOTE]
与寄生的模式的不同点：1. 新创建的实例方法不引用this 2.不使用new操作符调用构造函数
优点：最适合一些安全的环境中使用
缺点：和工厂模式一样，是无法识别对象的所属类型的</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/dbafd222-8574-44bb-b458-e791af37c1f8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dbafd222-8574-44bb-b458-e791af37c1f8</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 21 May 2024 04:32:48 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】通用的forEach函数]]></title><description><![CDATA[<h1 id="封装实现通用的foreach函数">封装实现通用的forEach函数</h1>
<pre><code class="language-js">// v1. 实现一个自己的forEach 函数
function isArrayLike(obj) {
    // 1. 先看obj有没有length属性
    var length = !!obj &amp;&amp; (&#39;length&#39; in obj) &amp;&amp; obj.length;
    var typeRes = type(obj);

    // 2. 排除掉函数和window对象, window也是有length属性的
    if (typeRes === &#39;function&#39; || isWindow(obj)) {
        return false;
    }

    // 3. 开始处理结果
    return typeRes === &#39;array&#39;                  // 1. 是数组类型
        || length === 0                     // 2. 长度为0(函数中的arguments参数)
        || typeof length === &#39;number&#39;
        &amp;&amp; length &gt; 0
        &amp;&amp; (length - 1) in obj;             // 3. length 属性是大于 0 的数字类型，并且obj[length - 1]必须存在(符合条件的类数组对象是一定存在最后一个元素的)

}


// v1. 实现一个遍历的函数
function each(obj, callback) {
    let len, i = 0;

    // 伪数组和数组类型
    if (isArrayLike(obj)) {
        len = obj.length;
        for (; i &lt; len; i++) {
            callback(i, obj[i]);
        }
    }
    // 对象类型
    else {
        for (i in obj) {
            callback(i, obj[i]);
        }
    }

    return obj;
}


// v2. 实现终止循环的功能
function each(obj, callback) {
    let len, i = 0;
    if (isArrayLike(obj)) {
        len = obj.length;
        for (; i &lt; len; i++) {
            // 退出循环的条件
            if (callback(i, obj[i]) === false) {
                break;
            }
        }
    }
    else {
        for (i in obj) {
            // 退出循环的条件
            if (callback(i, obj[i]) === false) {
                break;
            }
        }
    }
}

// v3. 实现this的绑定, 使用call来绑定一个this对象
function each(obj, callback) {
    let len, i = 0;
    if (isArrayLike(obj)) {
        len = obj.length;
        for (; i &lt; len; i++) {
            // 退出循环的条件
            if (callback.call(obj[i], i, obj[i]) === false) {
                break;
            }
        }
    }
    else {
        for (i in obj) {
            // 退出循环的条件
            if (callback.call(obj[i], i, obj[i]) === false) {
                break;
            }
        }
    }
}
</code></pre>
<blockquote>
<p>[!NOTE]
TODO : for的性能要比封装的each函数性能好，原因是使用了call实际上是会降低性能的</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/fde7041d-8d5c-4c43-bdba-74939fead92d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fde7041d-8d5c-4c43-bdba-74939fead92d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 20 May 2024 19:52:28 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】判断两个对象相等]]></title><description><![CDATA[<h1 id="如何判断两个对象相等？0102问题引申">如何判断两个对象相等？(0.1+0.2问题引申)</h1>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>0.1 + 0.2 = 0.3 吗？</li>
<li>TODO 因为 JavaScript 采用了IEEE_754 浮点数表示法(几乎所有现代编程语言所采用)，这是一种二进制表示法</li>
</ul>
</blockquote>
<pre><code class="language-js">// v1: 用于过滤掉简单的类型比较，复杂的对象使用deepEq处理
function eq(a, b) {
    // 区别+0 和 -0
    if (a === b) return a !== 0 || 1 / a === 1 / b;

    // 如果有一个为null，退出函数（null === null, true; undefined === undefined, true）
    if (a == null || b == null) return false;

    // 判断NaN(a, b都不和自身相等的话，就为NaN)
    if (a !== a) return b !== b;

    // a是基础数据类型，b是对象的话
    let typeOfA = typeof a;
    if (typeOfA !== &#39;function&#39; &amp;&amp; typeOfA !== &#39;object&#39; &amp;&amp; typeof b !== &#39;object&#39;) {
        return false;
    }

    // 对于其他复杂的对象类型，开始进行进一步的比较
    return deepEq(a, b);
}


// v2: 对象的比较
const toString = Object.prototype.toString;

function isFunction(obj) {
    return toString.call(obj) === &#39;[object Function]&#39;;
}

function deepEq(a, b) {
    let className = toString.call(a);
    if (className !== toString.call(b)) return false;

    switch (className) {
        case &#39;[object RegExp]&#39;:
        case &#39;[object String]&#39;:
            return &#39;&#39; + a === &#39;&#39; + b;
        case &#39;[object Number]&#39;:
            // NaN
            if (+a !== +a) return +b !== +b;
            // +0, -0
            return +a === 0 ? 1 / +a === 1 / b : +a === +b;
        case &#39;[object Date]&#39;:
        case &#39;[object Boolean]&#39;:
            return +a === +b;
    }

    // 构造函数的实例如何判断呢？
    let isArray = className === &#39;[object Array]&#39;;
    if (!isArray) {
        // 如果不是数组的话（过滤掉函数的情况）
        if (typeof a != &#39;object&#39; || typeof b != &#39;object&#39;) return false;

        // 看a，b的构造函数
        let aConstructor = a.constructor;
        let bConstructor = b.constructor;

        // aCtor 和 bCtor 必须都存在并且都不是 Object 构造函数的情况下，aCtor 不等于 bCtor， 那这两个对象就真的不相等啦
        if (
            aConstructor !== bConstructor
            &amp;&amp; !(
                isFunction(aConstructor)
                &amp;&amp; aConstructor instanceof aConstructor
                &amp;&amp; isFunction(bConstructor)
                &amp;&amp; bConstructor instanceof bConstructor
            )
            &amp;&amp; (
            &#39;constructor&#39; in a
            &amp;&amp; &#39;constructor&#39; in b)
        ) {
            return false;
        }
    }

    // 如果是数组的话
    else if (isArray) {
        let length = a.length;
        if (length !== b.length) return false;

        // 比较数组的每一项是否相同
        while (length--) {
            if (!eq(a[length], b[length])) {
                return false;
            }
        }
    }
    else {
        let keys = Object.keys(a), key;
        length = keys.length;

        if (Object.keys(b).length !== length) return false;

        while (length--) {
            key = keys[length];
            if (!(b.hasOwnProperty(key)) &amp;&amp; eq(a[key], b[key])) {
                return false;
            }
        }

    }
    return true;
}

// v3. 循环引用问题？？？
let a, b;

a = { foo: { b: { foo: { c: { foo: null } } } } };
b = { foo: { b: { foo: { c: { foo: null } } } } };
a.foo.b.foo.c.foo = a;
b.foo.b.foo.c.foo = b;


// a 和 b是否相等呢？
/**
 *  aStack 和 bStack，用来储存 a 和 b 递归比较过程中的 a 和 b 的值
 * @param a
 * @param b
 * @param aStack
 * @param bStack
 * @return {boolean|boolean|*}
 */
function eq(a, b, aStack, bStack) {
    if (typeof a === &#39;number&#39;) {
        return a === b;
    }

    return deepEq(a, b, aStack, bStack);
}

function deepEq(a, b, aStack, bStack) {
    aStack = aStack || [];
    bStack = bStack || [];

    let length = aStack.length;

    while (length--) {
        if (aStack[length] === a) {
            return bStack[length] === b;
        }
    }

    aStack.push(a);
    bStack.push(b);

    let keys = Object.keys(a), key;
    length = keys.length;

    while (length--) {
        key = keys[length]

        console.log(a[key], b[key], aStack, bStack)

        if (!eq(a[key], b[key], aStack, bStack)) return false;
    }

    // aStack.pop();
    // bStack.pop();
    return true;
}


console.log(eq(a, b))


// v5. 最终版本
var toString = Object.prototype.toString;

function isFunction(obj) {
    return toString.call(obj) === &#39;[object Function]&#39;
}

function eq(a, b, aStack, bStack) {

    // === 结果为 true 的区别出 +0 和 -0
    if (a === b) return a !== 0 || 1 / a === 1 / b;

    // typeof null 的结果为 object ，这里做判断，是为了让有 null 的情况尽早退出函数
    if (a == null || b == null) return false;

    // 判断 NaN
    if (a !== a) return b !== b;

    // 判断参数 a 类型，如果是基本类型，在这里可以直接返回 false
    var type = typeof a;
    if (type !== &#39;function&#39; &amp;&amp; type !== &#39;object&#39; &amp;&amp; typeof b != &#39;object&#39;) return false;

    // 更复杂的对象使用 deepEq 函数进行深度比较
    return deepEq(a, b, aStack, bStack);
};

function deepEq(a, b, aStack, bStack) {

    // a 和 b 的内部属性 [[class]] 相同时 返回 true
    var className = toString.call(a);
    if (className !== toString.call(b)) return false;

    switch (className) {
        case &#39;[object RegExp]&#39;:
        case &#39;[object String]&#39;:
            return &#39;&#39; + a === &#39;&#39; + b;
        case &#39;[object Number]&#39;:
            if (+a !== +a) return +b !== +b;
            return +a === 0 ? 1 / +a === 1 / b : +a === +b;
        case &#39;[object Date]&#39;:
        case &#39;[object Boolean]&#39;:
            return +a === +b;
    }

    var areArrays = className === &#39;[object Array]&#39;;
    // 不是数组
    if (!areArrays) {
        // 过滤掉两个函数的情况
        if (typeof a != &#39;object&#39; || typeof b != &#39;object&#39;) return false;

        var aCtor = a.constructor,
            bCtor = b.constructor;
        // aCtor 和 bCtor 必须都存在并且都不是 Object 构造函数的情况下，aCtor 不等于 bCtor， 那这两个对象就真的不相等啦
        if (aCtor !== bCtor &amp;&amp; !(isFunction(aCtor) &amp;&amp; aCtor instanceof aCtor &amp;&amp; isFunction(bCtor) &amp;&amp; bCtor instanceof bCtor) &amp;&amp; (&#39;constructor&#39; in a &amp;&amp; &#39;constructor&#39; in b)) {
            return false;
        }
    }


    aStack = aStack || [];
    bStack = bStack || [];
    var length = aStack.length;

    // 检查是否有循环引用的部分
    while (length--) {
        // 比较aStack中的每一项数据和bStack中的每一项数据，分别与a, b 比较
        if (aStack[length] === a) {
            return bStack[length] === b;
        }
    }

    aStack.push(a);
    bStack.push(b);

    // 数组判断
    if (areArrays) {

        length = a.length;
        if (length !== b.length) return false;

        while (length--) {
            if (!eq(a[length], b[length], aStack, bStack)) return false;
        }
    }
    // 对象判断
    else {

        var keys = Object.keys(a),
            key;
        length = keys.length;

        if (Object.keys(b).length !== length) return false;
        while (length--) {

            key = keys[length];
            if (!(b.hasOwnProperty(key) &amp;&amp; eq(a[key], b[key], aStack, bStack))) return false;
        }
    }

    aStack.pop();
    bStack.pop();
    return true;

}

console.log(eq(0, 0)) // true
console.log(eq(0, -0)) // false

console.log(eq(NaN, NaN)); // true
console.log(eq(Number(NaN), Number(NaN))); // true

console.log(eq(&#39;Curly&#39;, new String(&#39;Curly&#39;))); // true

console.log(eq([1], [1])); // true
console.log(eq({ value: 1 }, { value: 1 })); // true

var a, b;

a = { foo: { b: { foo: { c: { foo: null } } } } };
b = { foo: { b: { foo: { c: { foo: null } } } } };
a.foo.b.foo.c.foo = a;
b.foo.b.foo.c.foo = b;

console.log(eq(a, b)) // true</code></pre>
]]></description><link>https://blog.gaoredu.com/article/e26c1bc7-1a53-47fc-bc2c-2973d18b7a1f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e26c1bc7-1a53-47fc-bc2c-2973d18b7a1f</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 20 May 2024 00:24:57 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】Promise实现原理]]></title><description><![CDATA[<h1 id="promise的模拟实现">Promise的模拟实现</h1>
<pre><code class="language-js">const PENDING = &#39;pending&#39;
const RESOLVED = &#39;resolved&#39;
const REJECTED = &#39;rejected&#39;

function MyPromise(fn){
  const that = this
  that.state = PENDING
  that.value = null
  that.resolvedCallbacks = []
  that.rejectedCallbacks = []

  function resolve(value) {
    if(that.state === PENDING) {
      that.state = RESOLVED
      that.value = value
      that.resolvedCallbacks.map(cb =&gt; cb(that.value))
    }
  }

  function reject(value) {
    if(that.state === PENDING){
      that.state = REJECTED
      that.value = value;
      that.rejectedCallbacks.map(cb =&gt; cb(that.value));
    }
  }
  try {
    fn(resolve, reject)
  } catch (e) {
    reject(e)
  }
}

MyPromise.prototype.then = function(onFulfilled, onRejected) {
  const that = this
  //对传入的两个参数做判断，如果不是函数将其转为函数
  onFulfilled = 
    typeof onFulfilled === &#39;function&#39;
    ? onFulfilled 
    : v =&gt; v  // onFulfilled = v =&gt; v
  onRejected = 
    typeof onRejected === &#39;function&#39;
    ? onRejected
    : r =&gt; {
      throw r
    }

  if(that.state === PENDING) {
    that.resolvedCallbacks.push(onFulfilled)
    that.rejectedCallbacks.push(onRejected)
  }
  else if(that.state === RESOLVED) {
    onFulfilled(that.value)
  }
  else {
    onRejected(that.value)
  }
}

new MyPromise((resolve, reject) =&gt; {
  setTimeout(() =&gt; {
    resolve(&#39;成功的回调数据&#39;)
  }, 1000)
}).then(value =&gt; {
  console.log(&#39;Promise.then:  &#39;, value)
})</code></pre>
]]></description><link>https://blog.gaoredu.com/article/f8e59686-3910-49e4-9d20-eff0dba370b5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f8e59686-3910-49e4-9d20-eff0dba370b5</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 15 May 2024 04:38:17 GMT</pubDate></item><item><title><![CDATA[【JS相关】JS-Web-API]]></title><description><![CDATA[<h1 id="js-web-api">JS-Web-API</h1>
<h2 id="21-dom操作">2.1 DOM操作</h2>
<h3 id="211-dom的本质是什么？">2.1.1 DOM的本质是什么？</h3>
<pre><code class="language-html">&lt;!-- DOM树：二叉树 --&gt;
    /*
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;&gt;               // 告诉浏览器以哪一种类型进行解析
    &lt;node&gt;
        &lt;child /&gt;
    &lt;/node&gt;
     */

    &lt;!DOCTYPE html&gt;                                      // 以html类型进行解析文档内容
    &lt;html&gt;
        &lt;body&gt;

        &lt;/body&gt;
    &lt;/html&gt;</code></pre>
<h3 id="212-dom操作的常用api有哪些？">2.1.2 DOM操作的常用API有哪些？</h3>
<h4 id="节点查找api">节点查找API</h4>
<ol>
<li><strong>document.getElementById</strong> ：根据ID查找元素，大小写敏感，如果有多个结果，只返回第一个；</li>
<li><strong>document.getElementsByClassName</strong> ：根据类名查找元素，多个类名用空格分隔，返回一个 HTMLCollection 。注意兼容性为IE9+（含）。另外，不仅仅是document，其它元素也支持 getElementsByClassName 方法；</li>
<li><strong>document.getElementsByTagName</strong> ：根据标签查找元素， * 表示查询所有标签，返回一个 HTMLCollection 。</li>
<li><strong>document.getElementsByName</strong> ：根据元素的name属性查找，返回一个 NodeList 。</li>
<li><strong>document.querySelector</strong> ：返回单个Node，IE8+(含），如果匹配到多个结果，只返回第一个。</li>
<li><strong>document.querySelectorAll</strong> ：返回一个 NodeList ，IE8+(含）。</li>
<li><strong>document.forms</strong> ：获取当前页面所有form，返回一个 HTMLCollection ；</li>
</ol>
<h4 id="节点创建api">节点创建API</h4>
<ol>
<li><strong>createElement</strong>创建元素</li>
<li><strong>createTextNode</strong>创建文本节点</li>
<li><strong>cloneNode</strong> 克隆一个节点</li>
<li><strong>createDocumentFragment</strong></li>
</ol>
<h4 id="节点修改api">节点修改API</h4>
<ol>
<li><strong>appendChild</strong></li>
<li><strong>insertBefore</strong></li>
<li><strong>insertAdjacentHTML</strong></li>
<li><strong>Element.insertAdjacentElement()</strong></li>
<li><strong>removeChild</strong></li>
<li><strong>replaceChild</strong></li>
</ol>
<h4 id="节点关系api">节点关系API</h4>
<ul>
<li>1、父关系API</li>
</ul>
<p><strong>parentNode</strong> ：每个节点都有一个parentNode属性，它表示元素的父节点。Element的父节点可能是Element，Document或DocumentFragment；
<strong>parentElement</strong> ：返回元素的父元素节点，与parentNode的区别在于，其父节点必须是一个Element元素，如果不是，则返回null；</p>
<ul>
<li>2、子关系API</li>
</ul>
<p><strong>children</strong> ：返回一个实时的 HTMLCollection ，子节点都是Element，IE9以下浏览器不支持；</p>
<p><strong>childNodes</strong> ：返回一个实时的 NodeList ，表示元素的子节点列表，注意子节点可能包含文本节点、注释节点等；</p>
<p><strong>firstChild</strong> ：返回第一个子节点，不存在返回null，与之相对应的还有一个 firstElementChild ；</p>
<p><strong>lastChild</strong> ：返回最后一个子节点，不存在返回null，与之相对应的还有一个 lastElementChild ；</p>
<ul>
<li>3、兄弟关系型API</li>
</ul>
<p><strong>previousSibling</strong> ：节点的前一个节点，如果不存在则返回null。注意有可能拿到的节点是文本节点或注释节点，与预期的不符，要进行处理一下。</p>
<p><strong>nextSibling</strong> ：节点的后一个节点，如果不存在则返回null。注意有可能拿到的节点是文本节点，与预期的不符，要进行处理一下。</p>
<p><strong>previousElementSibling</strong> ：返回前一个元素节点，前一个节点必须是Element，注意IE9以下浏览器不支持。</p>
<p><strong>nextElementSibling</strong> ：返回后一个元素节点，后一个节点必须是Element，注意IE9以下浏览器不支持。</p>
<h4 id="元素属性型api">元素属性型API</h4>
<p>1、<strong>setAttribute</strong> 给元素设置属性：
2、<strong>getAttribute</strong>
3、<strong>hasAttribute</strong></p>
<h4 id="样式操作api（面试考点）">样式操作API（面试考点）</h4>
<ul>
<li><p>1、直接修改元素的样式</p>
<pre><code class="language-js">elem.style.color = &#39;red&#39;;  
elem.style.setProperty(&#39;font-size&#39;, &#39;16px&#39;);  
elem.style.removeProperty(&#39;color&#39;);  </code></pre>
</li>
<li><p>2、动态添加样式规则</p>
<pre><code class="language-js">var style = document.createElement(&#39;style&#39;);  
style.innerHTML = &#39;body{color:red} #top:hover{background-color: red;color: white;}&#39;;  
document.head.appendChild(style);  </code></pre>
</li>
<li><p>3、classList获取样式属性</p>
<blockquote>
<p>[!NOTE]
了解dom节点样式(classList)的remove, add, toggle, contains, replace等方法的使用。</p>
</blockquote>
</li>
</ul>
<ul>
<li>4、window.getComputedStyle
通过 <strong>element.sytle.xxx</strong> 只能获取到内联样式，借助 <strong>window.getComputedStyle</strong> 可以获取应用到元素上的所有样式，IE8或更低版本不支持此方法。</li>
</ul>
<pre><code class="language-js">var style = window.getComputedStyle(element[, pseudoElt]);  </code></pre>
<h3 id="213-dom节点的attr和proerty的区别">2.1.3 DOM节点的attr和proerty的区别</h3>
<pre><code class="language-js">// proprty------&gt;&gt;&gt;获取nodeName和nodeType（property实际上就是JS对象的一个属性）如：text : 3(#text), p : 1(p)
    console.log(pList[0].nodeName);         // p
    console.log(pList[0].nodeType);         // 1
// attribute------&gt;&gt;&gt; 获取一个HTML标签的属性信息（设置和修改）
    var a = document.getElementsByTagName(&#39;a&#39;)[0];
    console.log(a.getAttribute(&#39;data-origin&#39;));
    console.log(a.getAttribute(&quot;href_name&quot;));           // 可以给一个HTML标签设置任意的属性名称，无论这个属性内部是否存在
a.    setAttribute(&#39;sex&#39;, &#39;male&#39;)
// 区别：
// (JS对象&amp;HTML标签)property实际上是一个普通JS对象本身的基本属性，但是attribute实际上是一个HTML标签上面的属性信息</code></pre>
<blockquote>
<p>[!NOTE]
区别：(JS对象&amp;HTML标签)property实际上是一个普通JS对象本身的基本属性，但是attribute实际上是一个HTML标签上面的属性信息</p>
</blockquote>
<h2 id="22-bom操作">2.2 BOM操作</h2>
<h3 id="221-如何检测浏览器的类型？">2.2.1 如何检测浏览器的类型？</h3>
<pre><code class="language-js">var ua = navigator.userAgent;
    var isChrome = ua.indexOf(&#39;Chrome&#39;);
    console.log(&#39;is Chrome?&#39;, isChrome &gt; 0, navigator.userAgent);
    console.log(&#39;电脑屏幕大小：&#39;, screen.width, screen.height)
</code></pre>
<h3 id="222-如何拆解url的各个部分？">2.2.2 如何拆解URL的各个部分？</h3>
<pre><code class="language-js">// location
    console.log(location.href);                 // 完整的url地址，http://localhost:8080/JS-Professional/begin/02-%E5%9F%BA%E7%A1%80%E8%BF%9B%E9%98%B6/01-%E4%BB%8E%E5%9F%BA%E7%A1%80%E5%88%B0%E8%BF%9B%E9%98%B6.html?_ijt=i8ctmkc87dvh03tdaf51rn5v1i
    console.log(location.protocol)              // http/https
    console.log(location.host, location.hostname)                  // www.52tech.tech
    console.log(location.pathname);             // host之后的全部内容，JS-Professional/begin/02-%E5%9F%BA%E7%A1%80%E8%BF%9B%E9%98%B6/01-%E4%BB%8E%E5%9F%BA%E7%A1%80%E5%88%B0%E8%BF%9B%E9%98%B6.html
    console.log(location.search);               // search就是？之后的全部内容，?_ijt=i8ctmkc87dvh03tdaf51rn5v1i（包括？）
    console.log(location.hash);                 // #后面的内容（包括#）
</code></pre>
<h2 id="23-事件操作">2.3 事件操作</h2>
<h3 id="231-编写一个通用的事件监听函数">2.3.1 编写一个通用的事件监听函数</h3>
<pre><code class="language-js">    function bindEvent(ele, type, selector, fn){
        if (fn == null) {
            fn = selector;
            selector = null;
        }

        // addEventListener 的最后一个参数默认是false, 表示的是事件冒泡，自下向上去捕获事件，true：表示事件捕获，表示事件自外向里的方式
        ele.addEventListener(type, function(e){
            if (selector) {
                // 使用的是代理的方式的话
                if (e.target.matches(selector)){            // 这里需要去判断当前点击的那个对象是不是我点击的那个对象
                    fn.call(e.target, e);
                }
            } else {
                // 不使用代理的话
                fn(e);
            }
        });
    }


    // 这里表示对这个div1 内部的所有的a标签使用事件冒泡
    bindEvent(document.getElementById(&#39;div4&#39;), &#39;click&#39;, &#39;p&#39;, function (e) {
        console.log(this.innerHTML + &#39;hahaah&#39;)
    })
版本2：
/**
     * 实现一个通用的事件绑定函数（代码简洁，减少了浏览器的占用）
     * @param element
     * @param type
     * @param selector
     * @param fn
     */
    function bindEvent(element, type, selector, fn) {
        // if (fn === null || fn === undefined)        // 这里可以直接优化为fn == null
        if (fn == null){
            // 只有3个参数的话
            fn = selector;
            selector = null;
        }

        element.addEventListener(type, function (e) {
            var target;
            // 如果selector有的话，说明此事element就是一个代理
            if (selector) {
                target = e.target;
                // 如果当前的target满足这个选择器的话
                // 如果元素被指定的选择器字符串选择，Element.matches()  方法返回true; 否则返回false。
                // document.getElementById(&#39;div1&#39;).matches(&#39;div&#39;)    true
                // matches里面的参数实际上是一个HTML标签：a, p, div …………， 内容也是不区分大小写的，有点类似于nodeName 或者nodeType 这样的判断
                if (target.matches(selector)){
                    // 修改this的指向
                    fn.call(target, e);
                }
            }else {
                fn(e);
            }
        });
    }
</code></pre>
<h3 id="232-描述事件冒泡的流程">2.3.2 描述事件冒泡的流程</h3>
<blockquote>
<p>[!NOTE]
&quot;DOM2级事件”规定的事件流包含三个阶段：事件捕获阶段，处于目标阶段和事件冒泡阶段。首先发生的是事件捕获，然后是实际的目标接收到事件，最后阶段是冒泡阶段。</p>
<ul>
<li>事件冒泡：
按照DOM树形结构向上冒泡(p --- &gt;&gt;&gt; div --- &gt;&gt;&gt; body --- &gt;&gt;&gt; document), </li>
<li>事件捕获
（document—&gt;<html>—&gt;<body>—&gt;<div>的顺序进行传播的）</li>
</ul>
</blockquote>
<h3 id="233-对于一个无线下拉图片的页面，如何给每一个图片绑定一个事件">2.3.3 对于一个无线下拉图片的页面，如何给每一个图片绑定一个事件</h3>
<pre><code class="language-js">// 代理（div3里面的所有a标签都需要进行事件的监听）
    var div3 = document.getElementById(&#39;div3&#39;);
    bindEvent(div3, &#39;click&#39;, function (e) {
        e.preventDefault();
        e.stopPropagation()
        // 可以获取真实触发的那个元素
        var target = e.target;
        console.log(target.nodeName, target.nodeType);      // 每一种页面标签实际上都有一个自己专属的nodeName
        // 这里的目的主要是用于过滤，只处理a标签的事件处理
        if (&#39;A&#39; === target.nodeName) {
            //  如果当前点击的a标签就是自己
            alert(target.innerHTML)
        }
    })
</code></pre>
<h2 id="24-ajax操作">2.4 Ajax操作</h2>
<h3 id="241-手动编写一个ajax，不依赖第三方库">2.4.1 手动编写一个ajax，不依赖第三方库</h3>
<h3 id="242-跨域的几种实现方式以及底层的实现原理">2.4.2 跨域的几种实现方式以及底层的实现原理</h3>
<ol>
<li>服务器端的使用：response.setHeader(Access-Control-Allow-Origin, &quot;<a href="http://www.baidu.com">http://www.baidu.com</a>, <a href="http://www.52tech.tech&quot;)%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F">http://www.52tech.tech&quot;)允许跨域</a></li>
<li>使用JSONP</li>
</ol>
<h3 id="243-jsonp的实现原理">2.4.3 JSONP的实现原理</h3>
<blockquote>
<p>[!NOTE]
跨域：浏览器有同源策略，不允许ajax访问其他域接口</p>
<ul>
<li>跨域条件：协议、域名、端口，有一个不同就是跨域</li>
</ul>
</blockquote>
<p>可以跨域加载资源的3个标签：</p>
<pre><code class="language-html">&lt;img src=&quot;&quot;&gt;, &lt;link href=&quot;&quot;&gt;, &lt;script src=&quot;&quot;&gt;</code></pre>
<ul>
<li>img用途：主要用于打点统计，统计网站可能是其他域</li>
<li>link, script用途：可以使用CDN，可以使用其他域</li>
<li>script用途：可以用于JSONP</li>
</ul>
<h4 id="2431-跨域注意事项">2.4.3.1 跨域注意事项:</h4>
<ol>
<li>所有的跨域请求都必须经过信息提供方的允许才可以获取</li>
<li>如果未经允许就可以直接获取，就是浏览器的同源策略出现漏洞</li>
</ol>
<h4 id="2432-浏览器端实现（提前定义一个回调函数）">2.4.3.2 浏览器端实现（提前定义一个回调函数）</h4>
<pre><code class="language-js">//封装一个jsonp请求的函数
  function query(opt) {
      let str = &quot;&quot;
      for (let key in opt) {
          str += key + &quot;=&quot; + opt[key] + &quot;&amp;&quot;
      }
      return str
  }
  //设置默认回调函数的名字
  const defaultOptions = {
      callbackName: &quot;callback&quot;
  }
  function jsonp(url, opt, options = defaultOptions) {
      //参数解析  URL为访问的接口 opt为传播的数据  option 为接受参数的回调函数
      return new Promise((resolve, reject) =&gt; {
          //判断下这个？是不是存在
          let index = url.indexOf(&quot;?&quot;);
          url += index != -1 ? query(opt) : &quot;?&quot; + query(opt);
          url = url + `${options.callbackName}=${options.callbackName}`;
          //首先创造一个标签 带有src的
          const scriptDom = document.createElement(&quot;script&quot;);
          //设置其src属性
          scriptDom.setAttribute(&quot;src&quot;, url);
          //在window系统上创建一个回调函数用来接受数据
          window[options.callbackName] = (res) =&gt; {
              //在接受到了参数动态删除这个script节点和window上面的方法
              delete window[options.callbackName];
              document.body.removeChild(scriptDom)
              //接受成功后调用resolve
              if (res) {
                  resolve(res)
              } else {
                  reject(&quot;服务器暂没有获取到数据&quot;)
              }
          }
          //动态创建script标记，错误的监听
          scriptDom.addEventListener(&#39;error&#39;, () =&gt; {
              delete window[&#39;jsonpCallback&#39;];
              document.body.removeChild(script);
              reject(&#39;服务器加载失败！&#39;);
          });
          document.body.append(scriptDom)
      })
  }</code></pre>
<h4 id="2433-后端实现">2.4.3.3 后端实现</h4>
<pre><code class="language-js">const url = require(&quot;url&quot;)

router.get(&quot;/api&quot;, (req, res, next) =&gt; {
  //将script标签的src的URL请求转成对象
  const opj = url.parse(req.url, true).query;
  //然后原理就是调用这个回调函数来进行传参
  let {
    callback
  } = opj;
  //如果这个回调函数存在证明是jsonp请求
  if (callback) {
    let resault = JSON.stringify({
      code: 1,
      msg: &quot;express框架传回去的参数&quot;
    });
    res.send(`${callback}(${resault})`)
  }
})</code></pre>
<h2 id="25-本地存储">2.5 本地存储</h2>
<h3 id="251-cookie-sessionstorage-localstorage-的区别">2.5.1 cookie, sessionStorage, localStorage 的区别</h3>
<h4 id="cookie">Cookie</h4>
<ol>
<li>存储量，只有4kb</li>
<li>所有的http请求都会带有cookie，会直接影响获取资源效率</li>
<li>API，document.cookie</li>
</ol>
<h4 id="localstorage">localstorage</h4>
<ol>
<li>localstorage.setItem(key, value);localstorage.getItem(&#39;key&#39;);</li>
<li>存储量5MB</li>
<li>sessionStorage：会话级别<blockquote>
<p>[!WARNING]
【坑】IOS safari的隐藏模式下，使用localStorage.getItem(&#39;key&#39;) 会报错，建议使用try{}catch(e){} 来实现可以防止报错</p>
</blockquote>
</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/eff1d9d6-9045-4741-b3f2-3fac9de3c2b8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eff1d9d6-9045-4741-b3f2-3fac9de3c2b8</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 15 May 2024 04:29:18 GMT</pubDate></item><item><title><![CDATA[【错误监控】异常捕获问题]]></title><description><![CDATA[<h1 id="异常捕获问题">异常捕获问题</h1>
<h2 id="1-异常捕获扩展到流行框架带来的问题？">1. 异常捕获扩展到流行框架带来的问题？</h2>
<h3 id="11-script-error">1.1 Script error</h3>
<p>我们合乎情理地在本地页面进行尝试捕获异常，如：</p>
<pre><code class="language-js">&lt;!-- http://localhost:3031/ --&gt;
&lt;script&gt;
window.onerror = function() {
    console.log(arguments);
};
&lt;/script&gt;
&lt;script src=&quot;http://cdn.xxx.com/index.js&quot;&gt;&lt;/script&gt;</code></pre>
<p>这里我们把静态资源放到异域上进行优化加载，经过分析发现，跨域之后window.onerror是无法捕获异常信息的，所以统一返回<code>Script error.</code>，解决方案便是script属性配置<code>crossorigin=”anonymous”</code>并且服务器添加<strong>Access-Control-Allow-Origin</strong>。</p>
<pre><code class="language-js">&lt;script src=&quot;http://cdn.xxx.com/index.js&quot; crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;</code></pre>
<blockquote>
<p>[!NOTE]
一般的CDN网站都会将Access-Control-Allow-Origin配置为*，意思是所有域都可以访问。</p>
</blockquote>
<h3 id="12-sourcemap">1.2 sourceMap</h3>
<blockquote>
<p>[!NOTE]
解决跨域或者将脚本存放在同域之后，你可能会将代码压缩一下再发布，这时候便出现了压缩后的代码无法找到原始报错位置的问题。</p>
</blockquote>
<p>我们用webpack将代码打包压缩成bundle.js：</p>
<pre><code class="language-js">// webpack.config.js
var path = require(&#39;path&#39;);

// webpack 4.1.1
module.exports = {
    mode: &#39;development&#39;,
    entry: &#39;./client/index.js&#39;,
    output: {
        filename: &#39;bundle.js&#39;,
        path: path.resolve(__dirname, &#39;client&#39;)
    }
}</code></pre>
<p>最后我们页面引入的脚本文件是这样的：</p>
<pre><code class="language-js">!function(e){var o={};function n(r){if(o[r])return o[r].exports;var t=o[r]={i:r,l:!1,exports:{}}...;</code></pre>
<p>所以我们看到的异常信息是这样的：</p>
<blockquote>
<p>lineNo可能是一个非常小的数字，一般是1，而columnNo会是一个很大的数字，这里是730，因为所有代码都压缩到了一行。</p>
</blockquote>
<p>那么该如何解决呢？聪明的童鞋可能已经猜到启用<strong>source-map</strong>了，没错，我们利用webpack打包压缩后生成一份对应脚本的map文件就能进行追踪了，在webpack中开启<strong>source-map</strong>功能：</p>
<pre><code class="language-js">module.exports = {
    ...
    devtool: &#39;#source-map&#39;,
    ...
}</code></pre>
<p>打包压缩的文件末尾会带上这样的注释：</p>
<pre><code class="language-js">!function(e){var o={};function n(r){if(o[r])return o[r].exports;var t=o[r]={i:r,l:!1,exports:{}}...;
//# sourceMappingURL=bundle.js.map</code></pre>
<p>意思是该文件对应的map文件为bundle.js.map。下面便是一个source-map文件的内容，是一个JSON对象：</p>
<pre><code class="language-js">version: 3, // Source map的版本
sources: [&quot;webpack:///webpack/bootstrap&quot;, ...], // 转换前的文件
names: [&quot;installedModules&quot;, &quot;__webpack_require__&quot;, ...], // 转换前的所有变量名和属性名
mappings: &quot;aACA,IAAAA,KAGA,SAAAC...&quot;, // 记录位置信息的字符串
file: &quot;bundle.js&quot;, // 转换后的文件名
sourcesContent: [&quot;// The module cache var installedModules = {};...&quot;], // 源代码
sourceRoot: &quot;&quot; // 转换前的文件所在的目录</code></pre>
<h3 id="13-mvvm框架">1.3 MVVM框架</h3>
<blockquote>
<p>现在越来越多的项目开始使用前端框架，在MVVM框架中如果你一如既往的想使用window.onerror来捕获异常，那么很可能会竹篮打水一场空，或许根本捕获不到，因为你的异常信息被框架自身的异常机制捕获了。</p>
</blockquote>
<p>比如Vue 2.x中我们应该这样捕获全局异常：</p>
<pre><code class="language-js">Vue.config.errorHandler = function (err, vm, info) {
    let { 
        message, // 异常信息
        name, // 异常名称
        script,  // 异常脚本url
        line,  // 异常行号
        column,  // 异常列号
        stack  // 异常堆栈信息
    } = err;

    // vm为抛出异常的 Vue 实例
    // info为 Vue 特定的错误信息，比如错误所在的生命周期钩子
}</code></pre>
<blockquote>
<p>目前script、line、column这3个信息打印出来是undefined，不过这些信息在stack中都可以找到，可以通过正则匹配去进行获取，然后进行上报。</p>
</blockquote>
<blockquote>
<p>同样的在react也提供了异常处理的方式，在 React 16.x 版本中引入了 Error Boundary：</p>
</blockquote>
<pre><code class="language-js">class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props);
        this.state = { hasError: false };
    }

    componentDidCatch(error, info) {
        this.setState({ hasError: true });

        // 将异常信息上报给服务器
        logErrorToMyService(error, info); 
    }

    render() {
        if (this.state.hasError) {
            return &#39;出错了&#39;;
        }

        return this.props.children;
    }
}</code></pre>
<p>然后我们就可以这样使用该组件：</p>
<ErrorBoundary>
    <MyWidget />
</ErrorBoundary>
详见官方文档：Error Handling in React 16

<h3 id="14-异常上报">1.4 异常上报</h3>
<h4 id="141-sourcemap解析">1.4.1 sourceMap解析</h4>
<blockquote>
<p>[!NOTE]
其实source-map格式的文件是一种数据类型，既然是数据类型那么肯定有解析它的办法，目前市面上也有专门解析它的相应工具包，在浏览器环境或者node环境下比较流行的是一款叫做’source-map’的插件。</p>
</blockquote>
<p>通过require该插件，前端浏览器可以对map文件进行解析，但因为前端解析速度较慢，所以这里不做推荐，我们还是使用服务器解析。如果你的应用有node中间层，那么你完全可以将异常信息提交到中间层，然后解析map文件后将数据传递给后台服务器，中间层代码如下：</p>
<pre><code class="language-js">const express = require(&#39;express&#39;);
const fs = require(&#39;fs&#39;);
const router = express.Router();
const fetch = require(&#39;node-fetch&#39;);
const sourceMap = require(&#39;source-map&#39;);
const path = require(&#39;path&#39;);
const resolve = file =&gt; path.resolve(__dirname, file);

// 定义post接口
router.post(&#39;/errorMsg/&#39;, function(req, res) {
    let error = req.body; // 获取前端传过来的报错对象
    let url = error.scriptURI; // 压缩文件路径

    if (url) {
        let fileUrl = url.slice(url.indexOf(&#39;client/&#39;)) + &#39;.map&#39;; // map文件路径

        // 解析sourceMap
        let smc = new sourceMap.SourceMapConsumer(fs.readFileSync(resolve(&#39;../&#39; + fileUrl), &#39;utf8&#39;)); // 返回一个promise对象

        smc.then(function(result) {

            // 解析原始报错数据
            let ret = result.originalPositionFor({
                line: error.lineNo, // 压缩后的行号
                column: error.columnNo // 压缩后的列号
            });

            let url = &#39;&#39;; // 上报地址

            // 将异常上报至后台
            fetch(url, {
                method: &#39;POST&#39;,
                headers: {
                    &#39;Content-Type&#39;: &#39;application/json&#39;
                },
                body: JSON.stringify({
                    errorMessage: error.errorMessage, // 报错信息
                    source: ret.source, // 报错文件路径
                    line: ret.line, // 报错文件行号
                    column: ret.column, // 报错文件列号
                    stack: error.stack // 报错堆栈
                })
            }).then(function(response) {
                return response.json();
            }).then(function(json) {
                res.json(json);         
            });
        })
    }
});

module.exports = router;</code></pre>
<p>这里我们通过前端传过来的异常文件路径获取服务器端map文件地址，然后将压缩后的行列号传递给sourceMap返回的promise对象进行解析，通过originalPositionFor方法我们能获取到原始的报错行列号和文件地址，最后通过ajax将需要的异常信息统一传递给后台存储，完成异常上报。</p>
]]></description><link>https://blog.gaoredu.com/article/91295174-377b-4000-b61d-77da6a29903c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/91295174-377b-4000-b61d-77da6a29903c</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 15 May 2024 01:35:00 GMT</pubDate></item><item><title><![CDATA[【计算机网络】TCP]]></title><description><![CDATA[<h1 id="tcp">TCP</h1>
<h2 id="1-tcp概念相关">1. TCP概念相关</h2>
<blockquote>
<p>[!NOTE]
TCP（Transmission Control Protocol），又叫传输控制协议。
TCP协议是面向连接的，可靠的，基于字节流的传输协议。在基于 TCP 进行通信时，通信双方需要先建立一个 TCP 连接，建立连接需要经过三次握手，断开连接的时候需要经过四次挥手。</p>
</blockquote>
<h3 id="11-tcp头部">1.1 TCP头部</h3>
<p><img src="../img/TCP.png" alt="TCP header"></p>
<p>对于 TCP 头部来说，以下几个字段是很重要的:</p>
<ul>
<li><p><code>序列号</code> （Sequence number），这个序号保证了 TCP 传输的报文都是有序的，对端可以通过序号顺序的拼接报文</p>
</li>
<li><p><code>确认号</code> （Acknowledgement Number），这个序号表示数据接收端期望接收的下一个字节的编号是多少，同时也表示上一个序号的数据已经收到</p>
</li>
<li><p><code>窗口大小</code> （Window Size），表示还能接收多少字节的数据，用于流量控制</p>
</li>
<li><p><code>标识符</code></p>
<ul>
<li>ACK=1 ：该字段为一表示确认号字段有效。此外，TCP 还规定在连接建立后传送的所有报文段都必须把 ACK 置为一。</li>
<li>SYN=1：当SYN=1，ACK=0时，表示当前报文段是一个连接请求报文。当SYN=1，ACK=1时，表示当前报文段是一个同意建立连接的应答报文。</li>
<li>FIN=1：该字段为一表示此报文段是一个释放连接的请求报文。</li>
<li>URG=1 :  该字段为一表示本数据报的数据部分包含紧急信息，是一个高优先级数据报文，此时紧急指针有效。紧急数据一定位于当前数据包数据部分的最前面，紧急指针标明了紧急数据的尾部。</li>
<li>PSH=1 ：该字段为一表示接收端应该立即将数据 push 给应用层，而不是等到缓冲区满后再提交。</li>
<li>RST=1：该字段为一表示当前 TCP 连接出现严重问题，可能需要重新建立 TCP 连接，也可以用于拒绝非法的报文段和拒绝连接请求。</li>
</ul>
</li>
</ul>
<h3 id="12-三次握手">1.2 三次握手</h3>
<p><img src="../img/thr-handshake.png" alt="三次握手"></p>
<p>简单的说：</p>
<ul>
<li><p>第一次握手</p>
<ul>
<li>SYN = 1， seq(client) = x</li>
<li>客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后，客户端便进入 SYN-SENT 状态。</li>
</ul>
</li>
<li><p>第二次握手</p>
<ul>
<li>SYN = 1，ACK = 1，确认序号 = x+1, seq(server) = y</li>
<li>服务端收到连接请求报文段后，如果同意连接，则会发送一个应答，该应答中也会包含自身的数据通讯初始序号，发送完成后便进入 SYN-RECEIVED 状态</li>
</ul>
</li>
<li><p>第三次握手</p>
<ul>
<li>ACK = 1，确认序号 = y+1, seq(client) = x + 1</li>
<li>客户端收到连接同意的应答后，还要向服务端发送一个确认报文。客户端发完这个报文段后便进入ESTABLISHED 状态，服务端收到这个应答后也进入 ESTABLISHED 状态，此时连接建立成功。</li>
</ul>
</li>
</ul>
<h3 id="13-为什么不用两次握手？">1.3 为什么不用两次握手？</h3>
<blockquote>
<p>[!NOTE]
主要是为了防止已经失效的连接请求报文突然又传送到了服务器，从而产生错误。</p>
</blockquote>
<p>假设有这样一种场景, 客户端发送的第一个请求连接并且没有丢失，但是被滞留的时间太长。由于TCP的客户端迟迟没有收到确认报文，以为服务器没有收到，此时重新向服务器发送报文。
而现在第一个请求到达服务端，这个请求已经报废了，但是又会建立连接。</p>
<p>如果采用的是三次握手，就算是那一次失效的报文传送过来了，服务端接受到了那条失效报文并且回复了确认报文，但是客户端不会再次发出确认。由于服务器收不到确认，就知道客户端并没有请求连接。</p>
<h3 id="13-为什么建立连接是三次握手，四次不可以吗">1.3 为什么建立连接是三次握手，四次不可以吗</h3>
<p>第一次握手：</p>
<pre><code>Client什么都不能确认   
Server确认了对方发送正常</code></pre><p>第二次握手：</p>
<pre><code>Client确认：自己发送/接收正常，对方发送/接收正常
Server确认：自己接收正常 ，对方发送正常</code></pre><p>第三次握手：</p>
<pre><code>Client确认：自己发送/接收正常， 对方发送/接收正常
Server确认：自己发送/接收正常，对方发送/接收正常</code></pre><p>所以通过三次握手确认双方收发功能都正常，四次也可以但是显得比较多余</p>
<h3 id="14-四次挥手">1.4 四次挥手</h3>
<p><img src="../img/quarticBye.png" alt="四次挥手"></p>
<p>TCP 是全双工的，在断开连接时两端都需要发送 FIN 和 ACK。</p>
<ul>
<li><p>第一次挥手</p>
<ul>
<li>若客户端 A 认为数据发送完成，则它需要向服务端 B 发送连接释放请求。</li>
</ul>
</li>
<li><p>第二次挥手</p>
<ul>
<li>B 收到连接释放请求后，会告诉应用层要释放 TCP 链接。然后会发送 ACK 包，并进入 <strong>CLOSE_WAIT</strong> 状态，表示 A 到 B 的连接已经释放，不接收 A 发的数据了。但是因为 <strong>TCP 连接时双向的</strong>，所以 B 仍旧可以发送数据给 A。</li>
</ul>
</li>
<li><p>第三次挥手</p>
<ul>
<li>B 如果此时还有没发完的数据会继续发送，完毕后会向 A 发送连接释放请求，然后 B 便进入<strong>LAST-ACK</strong>状态。</li>
<li>PS：通过延迟确认的技术（通常有时间限制，否则对方会误认为需要重传），可以将第二次和第三次握手合并，延迟 ACK 包的发送。</li>
</ul>
</li>
<li><p>第四次挥手</p>
<ul>
<li>A 收到释放请求后，向 B 发送确认应答，此时 A 进入 <strong>TIME-WAIT</strong> 状态。该状态会持续 2MSL（最大段生存期，指报文段在网络中生存的时间，超时会被抛弃） 时间，若该时间段内没有 B 的重发请求的话，就进入 <strong>CLOSED</strong> 状态。当 B 收到确认应答后，也便进入 CLOSED 状态。</li>
</ul>
</li>
</ul>
<h3 id="15-为什么-a-要进入-time-wait-状态，等待-2msl-时间后才进入-closed-状态？">1.5 为什么 A 要进入 TIME-WAIT 状态，等待 2MSL 时间后才进入 CLOSED 状态？</h3>
<p>为了保证 B 能收到 A 的确认应答。若 A 发完确认应答后直接进入 CLOSED 状态，如果确认应答因为网络问题一直没有到达，那么会造成 B 不能正常关闭。</p>
<blockquote>
<p>如果A发送完ACK应答之后直接进入CLOSED状态的话，如果因为网络延迟问题这个应答丢失或在2MSL内还没有到达B的话，那么B等待超时之后就会重新发送一个FIN包，但是此时A已经关闭了，永远得不到A的响应，从而导致B永远不能正常关闭</p>
</blockquote>
<h3 id="16-为什么需要time_wait状态">1.6 为什么需要TIME_WAIT状态</h3>
<h4 id="161-为实现tcp这种全双工连接的可靠释放">1.6.1 为实现TCP这种全双工连接的可靠释放</h4>
<p>这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间，定义这个连接的插口(客户的IP地址和端口号，服务器的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束后才能再被使用。</p>
<h4 id="162-为使旧的数据包在网络因过期而消失">1.6.2 为使旧的数据包在网络因过期而消失</h4>
<p>每个具体TCP实现必须选择一个报文段最大生存时间MSL。它是任何报文段被丢弃前在网络内的最长时间。</p>
<h3 id="17-为什么建立连接是三次握手，关闭连接确是四次挥手呢？">1.7 为什么建立连接是三次握手，关闭连接确是四次挥手呢？</h3>
<ol>
<li><p>建立连接的时候， 服务器在LISTEN状态下，收到建立连接请求的SYN报文后，把ACK和SYN放在一个报文里发送给客户端。</p>
</li>
<li><p>而关闭连接时，服务器收到对方的FIN报文时，仅仅表示对方不再发送数据了但是还能接收数据，而自己也未必全部数据都发送给对方了</p>
</li>
</ol>
<h2 id="2-arq-（超时重传）协议">2. ARQ （超时重传）协议</h2>
<blockquote>
<p>[!NOTE]
通过确认和超时机制保证了数据的正确送达，ARQ 协议包含<code>停止等待 ARQ</code> 和<code>连续 ARQ</code></p>
</blockquote>
<h3 id="21-停止等待-arq">2.1 停止等待 ARQ</h3>
<p><strong>正常传输过程</strong></p>
<p>只要 A 向 B 发送一段报文，都要停止发送并启动一个定时器，等待对端回应，在定时器时间内接收到对端应答就取消定时器并发送下一段报文。</p>
<p><strong>当报文丢失或出错：</strong></p>
<p>报文传输的过程中丢包： 这时候超过定时器设定的时间就会再次发送丢包的数据直到对端响应，所以需要每次都备份发送的数据。</p>
<p>传输过程中报文出错： 对端会抛弃该报文并等待 A 端重传。</p>
<p>PS：一般定时器设定的时间都会大于一个 RTT 的平均时间。</p>
<p><strong>ACK 超时或丢失：</strong></p>
<p>对端传输的应答也可能出现丢失或超时的情况。那么超过定时器时间 A 端照样会重传报文。这时候 B 端收到相同序号的报文会丢弃该报文并重传应答，直到 A 端发送下一个序号的报文。</p>
<p>这个协议的缺点就是传输效率低，在良好的网络环境下每次发送报文都得等待对端的 ACK 。</p>
<h3 id="22-连续-arq">2.2 连续 ARQ</h3>
<p>在连续 ARQ 中，发送端拥有一个发送窗口，可以在没有收到应答的情况下持续发送窗口内的数据，这样相比停止等待 ARQ 协议来说减少了等待时间，提高了效率。</p>
<h4 id="221-累计确认">2.2.1 累计确认</h4>
<p>连续 ARQ 中，接收端会持续不断收到报文。如果和停止等待 ARQ 中接收一个报文就发送一个应答一样，就太浪费资源了。通过累计确认，可以在收到多个报文以后统一回复一个应答报文。报文中的 ACK 可以用来告诉发送端这个序号之前的数据已经全部接收到了，下次请发送这个序号 + 1的数据。</p>
<p>但是累计确认也有一个弊端。在连续接收报文时，可能会遇到接收到序号 5 的报文后，并未接到序号 6 的报文，然而序号 7 以后的报文已经接收。遇到这种情况时，ACK 只能回复 6，这样会造成发送端重复发送数据，这种情况下可以通过 Sack 来解决。</p>
<h4 id="222-滑动窗口">2.2.2 滑动窗口</h4>
<p>上面讲到了发送窗口。在 TCP 中，两端都维护着窗口：分别为发送端窗口和接收端窗口。</p>
<p>发送端窗口包含已发送但未收到应答的数据和可以发送但是未发送的数据。</p>
<p><img src="../img/slideWindow.png" alt="滑动窗口"></p>
<p>发送端窗口是由接收窗口剩余大小决定的。接收方会把当前接收窗口的剩余大小写入应答报文，发送端收到应答后根据该值和当前网络拥塞情况设置发送窗口的大小，所以发送窗口的大小是不断变化的。</p>
<p>当发送端接收到应答报文后，会随之将窗口进行滑动</p>
<p><strong>滑动窗口实现了流量控制</strong>。接收方通过报文告知发送方还可以发送多少数据，从而保证接收方能够来得及接收数据。</p>
<p><img src="../img/tcp-%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6.jpg" alt="流量控制举例"></p>
<p><strong>Zero 窗口</strong></p>
<p>在发送报文的过程中，可能会遇到对端出现零窗口的情况。在该情况下，发送端会停止发送数据，并启动 persistent timer 。该定时器会定时发送请求给对端，让对端告知窗口大小。在重试次数超过一定次数后，可能会中断 TCP 链接。</p>
<h2 id="3-拥塞处理">3. 拥塞处理</h2>
<blockquote>
<p>[!NOTE]
拥塞处理和流量控制不同，后者是作用于接收方，保证接收方来得及接受数据。而前者是作用于网络，防止过多的数据拥塞网络，避免出现网络负载过大的情况。</p>
</blockquote>
<p>拥塞处理包括了四个算法，分别为：慢开始，拥塞避免，快速重传，快速恢复。</p>
<p><img src="../img/TCP-%E6%8B%A5%E5%A1%9E%E6%8E%A7%E5%88%B6.jpg" alt="TCP拥塞控制"></p>
<h3 id="31-慢开始算法">3.1 慢开始算法</h3>
<blockquote>
<p>[!NOTE]
慢开始算法，顾名思义，就是在传输开始时将发送窗口从1开始指数级扩大，从而避免一开始就传输大量数据导致网络拥塞。</p>
</blockquote>
<p>慢开始算法步骤具体如下</p>
<ol>
<li>连接初始设置拥塞窗口（Congestion Window） 为 1 MSS（一个分段的最大数据量）</li>
<li>每过一个 RTT (往返时延) 就将窗口大小乘二</li>
<li>指数级增长肯定不能没有限制的，所以有一个阈值限制，当窗口大小大于阈值时就会启动拥塞避免算法</li>
</ol>
<h3 id="32-拥塞避免算法">3.2 拥塞避免算法</h3>
<blockquote>
<p>[!NOTE]
拥塞避免算法相比简单点，每过一个 RTT 窗口大小只加一，这样能够避免指数级增长导致网络拥塞，慢慢将大小调整到最佳值。</p>
</blockquote>
<p><img src="../img/ysbm.png" alt="拥塞避免"></p>
<p>在传输过程中可能定时器超时的情况，这时候 TCP 会认为网络拥塞了，会马上进行以下步骤：</p>
<ul>
<li>将阈值设为当前拥塞窗口的一半</li>
<li>将拥塞窗口设为 1 MSS</li>
<li>启动拥塞避免算法</li>
</ul>
<h3 id="33-快速重传">3.3 快速重传</h3>
<p>快速重传一般和快恢复一起出现。一旦接收端收到的报文出现失序的情况，接收端只会回复最后一个顺序正确的报文序号（没有 Sack 的情况下）。如果收到三个重复的 ACK，无需等待定时器超时再重发而是启动快速重传。具体算法分为两种：</p>
<h2 id="4-tcp-小结">4. TCP 小结</h2>
<h3 id="41-为什么tcp这么复杂">4.1 为什么TCP这么复杂?</h3>
<blockquote>
<p>[!NOTE]
因为既要保证可靠性, 同时又要尽可能提高性能</p>
</blockquote>
<h4 id="411-保证可靠性的机制">4.1.1 保证可靠性的机制</h4>
<ul>
<li>校验和</li>
<li>序列号(按序到达)</li>
<li>确认应答</li>
<li>超时重传</li>
<li>连接管理</li>
<li>流量控制</li>
<li>拥塞控制</li>
</ul>
<h4 id="412-提高性能的机制">4.1.2 提高性能的机制</h4>
<ul>
<li>滑动窗口</li>
<li>快速重传</li>
<li>延迟应答</li>
<li>捎带应答</li>
</ul>
<h3 id="42-定时器">4.2 定时器</h3>
<ul>
<li>超时重传定时器</li>
<li>保活定时器</li>
<li>TIME_WAIT定时器</li>
</ul>
<h2 id="43-基于-tcp-的应用层协议">4.3 基于 TCP 的应用层协议</h2>
<ul>
<li>HTTP</li>
<li>HTTPS</li>
<li>SSH</li>
<li>Telnet</li>
<li>FTP</li>
<li>SMTP</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/f03b9563-ab21-4678-b8c3-85c4becf9a67</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f03b9563-ab21-4678-b8c3-85c4becf9a67</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 11 May 2024 14:31:08 GMT</pubDate></item><item><title><![CDATA[【性能优化】重绘回流]]></title><description><![CDATA[<h1 id="重绘回流过程">重绘回流过程</h1>
<h2 id="1-浏览器的渲染过程，dom-树和渲染树的区别？">1. 浏览器的渲染过程，DOM 树和渲染树的区别？</h2>
<p><img src="../../img/xuanran.png" alt="xuanran.png"></p>
<ol>
<li>HTML 经过解析生成 DOM树； CSS经过解析生成　Style Rules。 二者一结合生成了Render Tree。</li>
<li>通过layout计算出DOM要显示的宽高、位置、颜色。</li>
<li>最后渲染在界面上，用户就看到了</li>
</ol>
<h2 id="2-浏览器的渲染过程">2. 浏览器的渲染过程</h2>
<ol>
<li>解析 HTML 构建 DOM(DOM 树)，并行请求 css/image/js</li>
<li>CSS 文件下载完成，开始构建 CSSOM(CSS 树)</li>
<li>CSSOM 构建结束后，和 DOM 一起生成 Render Tree(渲染树)</li>
<li>布局(Layout)：计算出每个节点在屏幕中的位置</li>
<li>显示(Painting)：通过显卡把页面画到屏幕上</li>
</ol>
<h2 id="3-dom-树-和-渲染树-的区别">3. DOM 树 和 渲染树 的区别?</h2>
<ol>
<li>DOM 树与 HTML 标签一一对应，包括 head 和隐藏元素</li>
<li>渲染树不包括 head 和隐藏元素，大段文本的每一个行都是独立节点，每一个节点都有对应的 css 属性</li>
</ol>
<h2 id="4-css会阻塞dom解析吗？">4. CSS会阻塞DOM解析吗？</h2>
<ol>
<li><p>对于一个HTML文档来说，不管是内联还是外链的css，都会阻碍后续的dom渲染，但是不会阻碍后续dom的解析。</p>
</li>
<li><p>当css文件放在<code>&lt;head&gt;</code>中时，虽然css解析也会阻塞后续dom的渲染，但是在解析css的同时也在解析dom，所以等到css解析完毕就会逐步的渲染页面了。</p>
</li>
</ol>
<h2 id="5-重绘和回流（重排）的区别和关系？">5. 重绘和回流（重排）的区别和关系？</h2>
<ol>
<li>重绘：当渲染树中的元素<strong>外观</strong>（如：颜色）发生改变，不影响布局时，产生重绘</li>
<li>回流：当渲染树中的元素的<strong>布局</strong>（如：尺寸、位置、隐藏/状态状态）发生改变时，产生重绘回流</li>
<li>注意：JS 获取 Layout 属性值（如：offsetLeft、scrollTop、getComputedStyle 等）也会引起回流。因为浏览器需要通过回流计算最新值</li>
<li>回流必将引起重绘，而重绘不一定会引起回流</li>
</ol>
<h3 id="51-触发reflow">5.1 触发reflow</h3>
<ol>
<li>width/height/border/margin/padding的修改，如width=778px；</li>
<li>动画，:hover等伪类引起的元素表现改动，display=none等造成页面回流；</li>
<li>appendChild等DOM元素操作；</li>
<li>font类style的修改；</li>
<li>background的修改，注意着字面上可能以为是重绘，但是浏览器确实回流了，经过浏览器厂家的优化，部分background的修改只触发repaint，当然IE不用考虑；</li>
<li>scroll页面，这个不可避免；</li>
<li>resize页面，桌面版本的进行浏览器大小的缩放，移动端的话，还没玩过能拖动程序，resize程序窗口大小的多窗口操作系统。</li>
<li>读取元素的属性（这个无法理解，但是技术达人是这么说的，那就把它当做定理吧）：读取元素的某些属性（offsetLeft、offsetTop、offsetHeight、offsetWidth、scrollTop/Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(in IE))；</li>
</ol>
<h3 id="52-触发repaint">5.2 触发repaint</h3>
<ol>
<li>color的修改，如color=#ddd；</li>
<li>text-align的修改，如text-align=center；</li>
<li>a:hover也会造成重绘。</li>
<li>:hover引起的颜色等不导致页面回流的style变动。</li>
</ol>
<h2 id="6-如何最小化重绘repaint和回流reflow？">6. 如何最小化重绘(repaint)和回流(reflow)？</h2>
<h3 id="61-性能问题">6.1 性能问题</h3>
<p>以下操作会导致性能问题：</p>
<ol>
<li>改变 window 大小</li>
<li>改变字体</li>
<li>添加或删除样式</li>
<li>文字改变</li>
<li>定位或者浮动</li>
<li>盒模型</li>
</ol>
<h3 id="32-解决方法">3.2 解决方法</h3>
<ol>
<li>需要要对DOM元素进行复杂的操作时，可以先隐藏(display:&quot;none&quot;)，操作完成后再显示</li>
<li>需要创建多个 DOM 节点时，使用 DocumentFragment 创建完后一次性的加入 document，或使用字符串拼接方式构建好对应HTML后再使用innerHTML来修改页面</li>
<li>缓存 Layout 属性值，如：var left = elem.offsetLeft; 这样，多次使用 left 只产生一次回流</li>
<li>避免用 table 布局（table 元素一旦触发回流就会导致 table 里所有的其它元素回流）</li>
<li>避免使用 css 表达式(expression)，因为每次调用都会重新计算值（包括加载页面）</li>
<li>尽量使用 css 属性简写，如：用 border 代替 border-width, border-style, border-color</li>
<li>批量修改元素样式：elem.className 和 elem.style.cssText 代替 elem.style.xxx</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/00076bf4-7a2e-4e6d-a106-cdb02f8576bb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/00076bf4-7a2e-4e6d-a106-cdb02f8576bb</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 07 May 2024 20:46:35 GMT</pubDate></item><item><title><![CDATA[【JS相关】原型]]></title><description><![CDATA[<h1 id="原型">原型</h1>
<h2 id="1-javascript继承">1. Javascript继承</h2>
<h3 id="11-原型链继承">1.1 原型链继承</h3>
<pre><code class="language-js">    function Parent() {
      this.name = &#39;zhangsan&#39;;
      this.children = [&#39;A&#39;, &#39;B&#39;, &#39;C&#39;];
    }
    Parent.prototype.getName = function() {
      console.log(this.name);
    }

    function Child() {

    }
    Child.prototype = new Parent();
    var child = new Child();
    console.log(child.getName());</code></pre>
<blockquote>
<p>[!NOTE]
主要问题：</p>
</blockquote>
<ol>
<li>引用类型的属性被所有实例共享(this.children.push(&#39;name&#39;))</li>
<li>在创建Child的实例的时候，不能向Parent传参</li>
</ol>
<h3 id="12-借用构造函数（经典继承）">1.2 借用构造函数（经典继承）</h3>
<pre><code class="language-js">    function Parent(age) {
      this.names = [&#39;zhangsan&#39;, &#39;lisi&#39;];
      this.age = age;

      this.getName = function() {
        return this.names;
      }

      this.getAge = function() {
        return this.age;
      }
    }

    function Child(age) {
      Parent.call(this, age);
    }
    var child = new Child(18);
    child.names.push(&#39;haha&#39;);
    console.log(child.names);

    var child2 = new Child(20);
    child2.names.push(&#39;yaya&#39;);
    console.log(child2.names);</code></pre>
<blockquote>
<p>[!NOTE]
优点：</p>
</blockquote>
<ol>
<li>避免了引用类型的属性被所有实例共享</li>
<li>可以直接在Child中向Parent传参</li>
</ol>
<blockquote>
<p>[!DANGER]
缺点：</p>
</blockquote>
<ul>
<li>方法都在构造函数中定义了，每次创建实例都会创建一遍方法</li>
</ul>
<h3 id="13-组合继承原型链继承和经典继承双剑合璧">1.3 组合继承(原型链继承和经典继承双剑合璧)</h3>
<pre><code class="language-js">    /**
    * 父类构造函数
    * @param name
    * @constructor
    */
    function Parent(name) {
      this.name = name;
      this.colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];
    }

    Parent.prototype.getName = function() {
      console.log(this.name);
    }

    // child
    function Child(name, age) {
      Parent.call(this, name);
      this.age = age;
    }

    Child.prototype = new Parent();
    // 校正child的构造函数
    Child.prototype.constructor = Child;

    // 创建实例
    var child1 = new Child(&#39;zhangsan&#39;, 18);
    child1.colors.push(&#39;orange&#39;);
    console.log(child1.name, child1.age, child1.colors);    // zhangsan 18 (4) [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;, &quot;orange&quot;]

    var child2 = new Child(&#39;lisi&#39;, 28);
    console.log(child2.name, child2.age, child2.colors);    // lisi 28 (3) [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;]</code></pre>
<blockquote>
<p>[!NOTE]
优点: 融合了原型链继承和构造函数的优点，是Javascript中最常用的继承模式</p>
</blockquote>
<h2 id="2-多种方式实现继承及优缺点总结">2. 多种方式实现继承及优缺点总结</h2>
<h3 id="21--原型式继承">2.1  原型式继承</h3>
<pre><code class="language-js">    function createObj(o) {
      function F(){};
      // 关键：将传入的对象作为创建对象的原型
      F.prototype = o;
      return new F();
    }

    // test
    var person = {
        name: &#39;zhangsan&#39;,
        friends: [&#39;lisi&#39;, &#39;wangwu&#39;]
    }
    var person1 = createObj(person);
    var person2 = createObj(person);

    person1.name = &#39;wangdachui&#39;;
    console.log(person1.name, person2.name);  // wangdachui, zhangsan

    person1.friends.push(&#39;songxiaobao&#39;);
    console.log(person2.friends);       // lisi wangwu songxiaobao</code></pre>
<blockquote>
<p>[!DANGER]
缺点：</p>
</blockquote>
<ul>
<li>对于引用类型的属性值始终都会共享相应的值，和原型链继承一样</li>
</ul>
<h3 id="22-寄生式继承">2.2 寄生式继承</h3>
<pre><code class="language-js">    // 创建一个用于封装继承过程的函数，这个函数在内部以某种形式来增强对象
    function createObj(o) {
      var clone = Object.create(o);
      clone.sayName = function() {
        console.log(&#39;say HelloWorld&#39;);
      }
      return clone;
    }</code></pre>
<blockquote>
<p>[!DANGER]
缺点：与借用构造函数模式一样，每次创建对象都会创建一遍方法</p>
</blockquote>
<h3 id="23-寄生组合式继承">2.3 寄生组合式继承</h3>
<h4 id="231-基础版本">2.3.1 基础版本</h4>
<pre><code class="language-js">    function Parent(name) {
      this.name = name;
      this.colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;];
    }

    Parent.prototype.getName = function() {
      console.log(this, name);
    }

    function Child(name, age) {
      Parent.call(this, name);
      this.age = age;
    }

    // test1:
    // 1. 设置子类实例的时候会调用父类的构造函数
    Child.prototype = new Parent();
    // 2. 创建子类实例的时候也会调用父类的构造函数
    var child1 = new Child(&#39;zhangsan&#39;, 18);   // Parent.call(this, name);


    // 思考：如何减少父类构造函数的调用次数呢？
    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();

    // 思考：下面的这一句话可以吗？
    /* 分析：因为此时Child.prototype和Parent.prototype此时指向的是同一个对象，
            因此部分数据相当于此时是共享的(引用)。
            比如此时增加 Child.prototype.testProp = 1; 
            同时会影响 Parent.prototype 的属性的。
          如果不模拟，直接上 es5 的话应该是下面这样吧
          Child.prototype = Object.create(Parent.prototype);*/
    Child.prototype = Parent.prototype;

    // 上面的三句话可以简化为下面的一句话
    Child.prototype = Object.create(Parent.prototype);



    // test2:
    var child2 = new Child(&#39;lisi&#39;, 24);</code></pre>
<h4 id="232-优化版本">2.3.2 优化版本</h4>
<pre><code class="language-js">    // 自封装一个继承的方法
    function object(o) {
      // 下面的三句话实际上就是类似于：var o = Object.create(o.prototype)
      function F(){};
      F.prototype = o.prototype;
      return new F();
    }

    function prototype(child, parent) {
      var prototype = object(parent.prototype);
      // 维护原型对象prototype里面的constructor属性
      prototype.constructor = child;
      child.prototype = prototype;
    }

    // 调用的时候
    prototype(Child, Parent)</code></pre>
<h2 id="3-js创建对象的方法">3. JS创建对象的方法</h2>
<ul>
<li>字面量创建</li>
<li>构造函数创建</li>
<li>Object.create()</li>
</ul>
<pre><code class="language-js">var o1 = {name: &#39;value&#39;};
var o2 = new Object({name: &#39;value&#39;});

var M = function() {this.name = &#39;o3&#39;};
var o3 = new M();

var P = {name: &#39;o4&#39;};
var o4 = Object.create(P)</code></pre>
<h2 id="4-原型和原型链">4. 原型和原型链</h2>
<h3 id="41-原型">4.1 原型</h3>
<ol>
<li>JavaScript 的所有对象中都包含了一个 <code>__proto__</code> 内部属性，这个属性所对应的就是该对象的原型</li>
<li>JavaScript 的函数对象，除了原型 <code>__proto__</code> 之外，还预置了 prototype 属性</li>
<li>当函数对象作为构造函数创建实例时，该 prototype 属性值将被作为实例对象的原型 <code>__proto__</code>。</li>
</ol>
<p><img src="../../img/prototype.png" alt="原型"></p>
<h3 id="42-原型链">4.2 原型链</h3>
<ol>
<li><p>任何一个实例对象通过原型链可以找到它对应的原型对象，原型对象上面的实例和方法都是实例所共享的。</p>
</li>
<li><p>一个对象在查找以一个方法或属性时，他会先在自己的对象上去找，找不到时，他会沿着原型链依次向上查找。</p>
</li>
</ol>
<blockquote>
<p>[!NOTE]
注意： 函数才有prototype，实例对象只有有<strong>proto</strong>， 而函数有的<strong>proto</strong>是因为函数是Function的实例对象</p>
</blockquote>
<h3 id="43-instanceof原理">4.3 instanceof原理</h3>
<blockquote>
<p>[!NOTE]
判断实例对象的<strong>proto</strong>属性与构造函数的prototype是不是用一个引用。如果不是，他会沿着对象的<strong>proto</strong>向上查找的，直到顶端Object。</p>
</blockquote>
<h3 id="44-判断对象是哪个类的直接实例">4.4 判断对象是哪个类的直接实例</h3>
<blockquote>
<p>[!NOTE]
使用<code>对象.construcor</code>直接可判断</p>
</blockquote>
<h3 id="45-构造函数，new时发生了什么？">4.5 构造函数，new时发生了什么？</h3>
<pre><code class="language-javascript">   var obj  = {}; 
   obj.__proto__ = Base.prototype;
   Base.call(obj);  </code></pre>
<ol>
<li>创建一个新的对象 obj;</li>
<li>将这个空对象的<strong>proto</strong>成员指向了Base函数对象prototype成员对象</li>
<li>Base函数对象的this指针替换成obj, 相当于执行了Base.call(obj);</li>
<li>如果构造函数显示的返回一个对象，那么则这个实例为这个返回的对象。 否则返回这个新创建的对象</li>
</ol>
<h3 id="46-类">4.6 类</h3>
<pre><code class="language-js">// 普通写法
function Animal() {
  this.name = &#39;name&#39;
}

// ES6
class Animal2 {
  constructor () {
    this.name = &#39;name&#39;;
  }
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/fdbbd0cf-fc39-4747-be0e-728d0fa6971d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fdbbd0cf-fc39-4747-be0e-728d0fa6971d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 07 May 2024 16:31:28 GMT</pubDate></item><item><title><![CDATA[【前端面试题】JS高级]]></title><description><![CDATA[<h1 id="js高级知识">JS高级知识</h1>
<h2 id="1、----jquery一个对象可以同时绑定多个事件，这是如何实现的？">1、    JQuery一个对象可以同时绑定多个事件，这是如何实现的？</h2>
<p>jQuery可以给一个对象同时绑定多个事件，低层实现方式是使用addEventListner或attachEvent兼容不同的浏览器实现事件的绑定，这样可以给同一个对象注册多个事件。</p>
<h2 id="2、----知道什么是webkit么-知道怎么用浏览器的各种工具来调试和debug代码么">2、    知道什么是webkit么? 知道怎么用浏览器的各种工具来调试和debug代码么?</h2>
<p>Webkit是浏览器引擎，包括html渲染和js解析功能，手机浏览器的主流内核，与之相对应的引擎有Gecko（Mozilla Firefox 等使用）和Trident（也称MSHTML，IE 使用）。 
对于浏览器的调试工具要熟练使用，主要是页面结构分析，后台请求信息查看，js调试工具使用，熟练使用这些工具可以快速提高解决问题的效率</p>
<h2 id="3、----如何测试前端代码-知道bdd-tdd-unit-test么-知道怎么测试你的前端工程么mocha-sinon-jasmin-qunit">3、    如何测试前端代码? 知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?</h2>
<p>了解BDD行为驱动开发与TDD测试驱动开发已经单元测试相关概念，</p>
<h2 id="4、----前端templatingmustache-underscore-handlebars是干嘛的-怎么用">4、    前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?</h2>
<p>Web 模板引擎是为了使用户界面与业务数据（内容）分离而产生的，
Mustache 是一个 logic-less （轻逻辑）模板解析引擎，它的优势在于可以应用在 Javascript、PHP、Python、Perl 等多种编程语言中。
Underscore封装了常用的JavaScript对象操作方法，用于提高开发效率。
Handlebars 是 JavaScript 一个语义模板库，通过对view和data的分离来快速构建Web模板。</p>
<h2 id="5、----简述一下-handlebars-的基本用法？">5、    简述一下 Handlebars 的基本用法？</h2>
<p>没有用过的话说出它是干什么的即可</p>
<h2 id="6、----简述一下-handlerbars-的对模板的基本处理流程，-如何编译的？如何缓存的？">6、    简述一下 Handlerbars 的对模板的基本处理流程， 如何编译的？如何缓存的？</h2>
<p>学习技术不仅要会用，还有熟悉它的实现机制，这样在开发中遇到问题时才能更好的解决</p>
<h2 id="7、----用js实现千位分隔符">7、    用js实现千位分隔符?</h2>
<p>原生js的熟练度，实践经验，实现思路</p>
<h2 id="8、----检测浏览器版本版本有哪些方式？">8、    检测浏览器版本版本有哪些方式？</h2>
<p>IE与标准浏览器判断，IE不同版本的判断，userAgent  var ie = /<em>@cc_on !@</em>/false;</p>
<h2 id="9、----我们给一个dom同时绑定两个点击事件，一个用捕获，一个用冒泡，你来说下会执行几次事件，然后会先执行冒泡还是捕获">9、    我们给一个dom同时绑定两个点击事件，一个用捕获，一个用冒泡，你来说下会执行几次事件，然后会先执行冒泡还是捕获</h2>
<p>对两种事件模型的理解</p>
<h2 id="10、实现一个函数clone，可以对javascript中的5种主要的数据类型（包括number、string、object、array、boolean）进行值复制">10、实现一个函数clone，可以对JavaScript中的5种主要的数据类型（包括Number、String、Object、Array、Boolean）进行值复制</h2>
<p>•    考察点1：对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚
•    考察点2：是否知道如何判断一个变量是什么类型的
•    考察点3：递归算法的设计</p>
<pre><code class="language-js">    // 方法一：
Object.prototype.clone = function(){
   var o = this.constructor === Array ? [] : {};
   for(var e in this){
      o[e] = typeof this[e] === &quot;object&quot; ? this[e].clone() : this[e];
   }
   return o;
}
//方法二：
     /**
     * 克隆一个对象
     * @param Obj
     * @returns
     */
    function clone(Obj) {   
        var buf;   
        if (Obj instanceof Array) {   
            buf = [];//创建一个空的数组 
            var i = Obj.length;   
            while (i--) {   
                buf[i] = clone(Obj[i]);   
            }   
            return buf;    
        }else if (Obj instanceof Object){   
            buf = {};//创建一个空对象 
            for (var k in Obj) { //为这个对象添加新的属性 
                buf[k] = clone(Obj[k]);   
            }   
            return buf;   
        }else{ //普通变量直接赋值
            return Obj;   
        }   
    }</code></pre>
<h2 id="11、如何消除一个数组里面重复的元素？">11、如何消除一个数组里面重复的元素？</h2>
<pre><code class="language-js">    var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];
        function deRepeat(){
            var newArr=[];
            var obj={};
            var index=0;
            var l=arr.length;
            for(var i=0;i&lt;l;i++){
                if(obj[arr[i]]==undefined)
                  {
                    obj[arr[i]]=1;
                    newArr[index++]=arr[i];
                  }
                else if(obj[arr[i]]==1)
                  continue;
            }
            return newArr;
        }
        var newArr2=deRepeat(arr);
        alert(newArr2); //输出1,2,3,4,5,6,9,25</code></pre>
<h2 id="12、">12、</h2>
<p>小贤是一条可爱的小狗(Dog)，它的叫声很好听(wow)，每次看到主人的时候就会乖乖叫一声(yelp)。从这段描述可以得到以下对象：</p>
<pre><code class="language-js">    function Dog() {
      this.wow = function() {
               alert(’Wow’);
      }
      this.yelp = function() {
              this.wow();
      }
}</code></pre>
<p>小芒和小贤一样，原来也是一条可爱的小狗，可是突然有一天疯了(MadDog)，一看到人就会每隔半秒叫一声(wow)地不停叫唤(yelp)。请根据描述，按示例的形式用代码来实。（继承，原型，setInterval）</p>
<pre><code class="language-js">    function MadDog() {
    this.yelp = function() {
          var self = this;          
          setInterval(function() {
                self.wow();      
          }, 500);
      }
}
MadDog.prototype = new Dog();         
//for test
var dog = new Dog();
dog.yelp();
var madDog = new MadDog();
madDog.yelp();</code></pre>
<h2 id="13、下面这个ul，如何点击每一列的时候alert其index（闭包）">13、下面这个ul，如何点击每一列的时候alert其index?（闭包）</h2>
<pre><code class="language-html">&lt;ul id=”test”&gt;
&lt;li&gt;这是第一条&lt;/li&gt;
&lt;li&gt;这是第二条&lt;/li&gt;
&lt;li&gt;这是第三条&lt;/li&gt;
&lt;/ul&gt;

&lt;script&gt;
    // 方法一：
var lis=document.getElementById(&#39;2223&#39;).getElementsByTagName(&#39;li&#39;);
for(var i=0;i&lt;3;i++)
{
    lis[i].index=i;
    lis[i].onclick=function(){
        alert(this.index);
    };
}
//方法二：
var lis=document.getElementById(&#39;2223&#39;).getElementsByTagName(&#39;li&#39;);
for(var i=0;i&lt;3;i++){
    lis[i].index=i;
    lis[i].onclick=(function(a){
        return function() {
            alert(a);
        }
    })(i);
}
&lt;/script&gt;</code></pre>
<h2 id="14、编写一个javascript函数，输入指定类型的选择器仅需支持id，class，tagname三种简单css选择器，无需兼容组合选择器可以返回匹配的dom节点，需考虑浏览器兼容性和性能。">14、编写一个JavaScript函数，输入指定类型的选择器(仅需支持id，class，tagName三种简单CSS选择器，无需兼容组合选择器)可以返回匹配的DOM节点，需考虑浏览器兼容性和性能。</h2>
<pre><code class="language-js">/***
 @param selector {String} 传入的CSS选择器。*
 @return {Array}*/
var query = function(selector) {
var reg = /^(#)?(\.)?(\w+)$/img;
var regResult = reg.exec(selector);
var result = [];
//如果是id选择器
if(regResult[1]) {
if(regResult[3]) {
if(typeof document.querySelector === &quot;function&quot;) {
result.push(document.querySelector(regResult[3]));
    }else {
      result.push(document.getElementById(regResult[3]));
    }
   }
   }
   //如果是class选择器
   else if(regResult[2]) {
      if(regResult[3]) {
       if(typeof document.getElementsByClassName === &#39;function&#39;) {
         var doms = document.getElementsByClassName(regResult[3]);
         if(doms) {
            result = converToArray(doms);
         }
       }
     //如果不支持getElementsByClassName函数
     else {
        var allDoms = document.getElementsByTagName(&quot;*&quot;) ;
       for(var i = 0, len = allDoms.length; i &lt; len; i++) {
         if(allDoms[i].className.search(new RegExp(regResult[2])) &gt; -1) {
           result.push(allDoms[i]);
          }
       }
      }
      }
}
  //如果是标签选择器
  else if(regResult[3]) {
    var doms = document.getElementsByTagName(regResult[3].toLowerCase());
    if(doms) {
      result = converToArray(doms);
    }
  }
  return result;
  }
  function converToArray(nodes){
    var array = null;         
    try{        
      array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器         
     }catch(ex){
       array = new Array();         
     for( var i = 0 ,len = nodes.length; i &lt; len ; i++ ) { 
      array.push(nodes[i])         
     }
  }      
  return array;
}</code></pre>
<h2 id="15、请评价以下代码并给出改进意见。">15、请评价以下代码并给出改进意见。</h2>
<pre><code class="language-js">    if(window.addEventListener){
    var addListener = function(el,type,listener,useCapture){
        el.addEventListener(type,listener,useCapture);
  };
}
else if(document.all){
    addListener = function(el,type,listener){
        el.attachEvent(&quot;on&quot;+type,function(){
          listener.apply(el);
      });
   }  
}</code></pre>
<p>•    　不应该在if和else语句中声明addListener函数，应该先声明；
•    　不需要使用window.addEventListener或document.all来进行检测浏览器，应该使用能力检测；
•    　由于attachEvent在IE中有this指向问题，所以调用它时需要处理一下
改进如下：</p>
<pre><code class="language-js">function addEvent(elem, type, handler){
　　if(elem.addEventListener){
　　　　elem.addEventListener(type, handler, false);
　　}else if(elem.attachEvent){
　　　　elem[&#39;temp&#39; + type + handler] = handler;
　　　　elem[type + handler] = function(){
　　　　elem[&#39;temp&#39; + type + handler].apply(elem);
　　};
　　elem.attachEvent(&#39;on&#39; + type, elem[type + handler]);　
  }else{
　　elem[&#39;on&#39; + type] = handler;
　　}
}</code></pre>
<h2 id="16、给string对象添加一个方法，传入一个string类型的参数，然后将string的每个字符间价格空格返回，例如：">16、给String对象添加一个方法，传入一个string类型的参数，然后将string的每个字符间价格空格返回，例如：</h2>
<pre><code class="language-js">addSpace(“hello world”) // -&gt; ‘h e l l o  w o r l d’
    String.prototype.spacify = function(){
      return this.split(&#39;&#39;).join(&#39; &#39;);
    };</code></pre>
<p>接着上述问题答案提问，
1）直接在对象的原型上添加方法是否安全？尤其是在Object对象上。(这个我没能答出？希望知道的说一下。)　
2）函数声明与函数表达式的区别？
答案：在js中，解析器在向执行环境中加载数据时，对函数声明和函数表达式并非是一视同仁的，解析器会率先读取函数声明，并使其在执行任何代码之前可用（可以访问），至于函数表达式，则必须等到解析器执行到它所在的代码行，才会真正被解析执行。</p>
<h2 id="17、定义一个log方法，让它可以代理consolelog的方法。">17、定义一个log方法，让它可以代理console.log的方法。</h2>
<p>可行的方法一：</p>
<pre><code class="language-js">function log(msg)　{
    console.log(msg);
}
log(&quot;hello world!&quot;) // hello world!</code></pre>
<p>如果要传入多个参数呢？显然上面的方法不能满足要求，所以更好的方法是：</p>
<pre><code class="language-js">function log(){
    console.log.apply(console, arguments);
};</code></pre>
<p>到此，追问apply和call方法的异同。
对于apply和call两者在作用上是相同的，即是调用一个对象的一个方法，以另一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
但两者在参数上有区别的。对于第一个参数意义都一样，但对第二个参数： apply传入的是一个参数数组，也就是将多个参数组合成为一个数组传入，而call则作为call的参数传入（从第二个参数开始）。 如 func.call(func1,var1,var2,var3)对应的apply写法为：func.apply(func1,[var1,var2,var3]) 。</p>
<h2 id="18、在javascript中什么是伪数组？如何将伪数组转化为标准数组？">18、在Javascript中什么是伪数组？如何将伪数组转化为标准数组？</h2>
<p>伪数组（类数组）：无法直接调用数组方法或期望length属性有什么特殊的行为，但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数，还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。
假设接第八题题干，我们要给每个log方法添加一个”(app)”前缀，比如’hello world!’ -&gt;’(app)hello world!’。方法如下：</p>
<pre><code class="language-js">function log(){
      var args = Array.prototype.slice.call(arguments);  //为了使用unshift数组方法，将argument转化为真正的数组
      args.unshift(&#39;(app)&#39;);
      console.log.apply(console, args);
    };</code></pre>
<h2 id="19、对作用域上下文和this的理解，看下列代码：">19、对作用域上下文和this的理解，看下列代码：</h2>
<pre><code class="language-js">var User = {
  count: 1,
  getCount: function() {
    return this.count;
  }
};
console.log(User.getCount());  // what?
var func = User.getCount;
console.log(func());  // what?</code></pre>
<p>问两处console输出什么？为什么？
答案是1和undefined。
func是在winodw的上下文中被执行的，所以会访问不到count属性。
继续追问，那么如何确保Uesr总是能访问到func的上下文，即正确返回1。正确的方法是使用Function.prototype.bind。兼容各个浏览器完整代码如下：</p>
<pre><code class="language-js">Function.prototype.bind = Function.prototype.bind || function(context){
   var self = this;
   return function(){
      return self.apply(context, arguments);
   };
}
var func = User.getCount.bind(User);
console.log(func());</code></pre>
<h2 id="20、原生js的windowonload与jquery的documentreadyfunction有什么不同？如何用原生js实现jq的ready方法？">20、原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不同？如何用原生JS实现Jq的ready方法？</h2>
<p>window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。
$(document).ready()是DOM结构绘制完毕后就执行，不必等到加载完毕。</p>
<pre><code class="language-js">/*
 * 传递函数给whenReady()
 * 当文档解析完毕且为操作准备就绪时，函数作为document的方法调用
 */
var whenReady = (function() {               //这个函数返回whenReady()函数
    var funcs = [];             //当获得事件时，要运行的函数
    var ready = false;          //当触发事件处理程序时,切换为true
    //当文档就绪时,调用事件处理程序
    function handler(e) {
        if(ready) return;       //确保事件处理程序只完整运行一次
        //如果发生onreadystatechange事件，但其状态不是complete的话,那么文档尚未准备好
        if(e.type === &#39;onreadystatechange&#39; &amp;&amp; document.readyState !== &#39;complete&#39;) {
            return;
        }
        //运行所有注册函数
        //注意每次都要计算funcs.length
        //以防这些函数的调用可能会导致注册更多的函数
        for(var i=0; i&lt;funcs.length; i++) {
            funcs[i].call(document);
        }
        //事件处理函数完整执行,切换ready状态, 并移除所有函数
        ready = true;
        funcs = null;
    }
    //为接收到的任何事件注册处理程序
    if(document.addEventListener) {
        document.addEventListener(&#39;DOMContentLoaded&#39;, handler, false);
        document.addEventListener(&#39;readystatechange&#39;, handler, false);            //IE9+
        window.addEventListener(&#39;load&#39;, handler, false);
    }else if(document.attachEvent) {
        document.attachEvent(&#39;onreadystatechange&#39;, handler);
        window.attachEvent(&#39;onload&#39;, handler);
    }
    //返回whenReady()函数
    return function whenReady(fn) {
        if(ready) { fn.call(document); }
        else { funcs.push(fn); }
    }
})();</code></pre>
<p>如果上述代码十分难懂，下面这个简化版：</p>
<pre><code class="language-js">function ready(fn){
    if(document.addEventListener) {//标准浏览器
        document.addEventListener(&#39;DOMContentLoaded&#39;, function() {
            //注销事件, 避免反复触发
            document.removeEventListener(&#39;DOMContentLoaded&#39;,arguments.callee, false);
            fn();//执行函数
        }, false);
    }else if(document.attachEvent) {//IE
        document.attachEvent(&#39;onreadystatechange&#39;, function() {
            if(document.readyState == &#39;complete&#39;) {
                document.detachEvent(&#39;onreadystatechange&#39;, arguments.callee);
                fn();//函数执行
            }
        });
    }
};</code></pre>
<h2 id="21、（设计题）想实现一个对页面某个节点的拖曳？如何做？（使用原生js）">21、（设计题）想实现一个对页面某个节点的拖曳？如何做？（使用原生JS）</h2>
<p>回答出概念即可，下面是几个要点</p>
<ol>
<li><p>给需要拖拽的节点绑定mousedown, mousemove, mouseup事件</p>
</li>
<li><p>mousedown事件触发后，开始拖拽</p>
</li>
<li><p>mousemove时，需要通过event.clientX和clientY获取拖拽位置，并实时更新位置</p>
</li>
<li><p>mouseup时，拖拽结束</p>
</li>
<li><p>需要注意浏览器边界的情况</p>
<h2 id="22、请实现如下功能">22、请实现如下功能</h2>
<pre><code class="language-js">function setcookie(name,value,days){  //给cookie增加一个时间变量
　　var exp = new Date(); 
　　exp.setTime(exp.getTime() + days*24*60*60*1000); //设置过期时间为days天
　　document.cookie = name + &quot;=&quot;+ escape (value) + &quot;;expires=&quot; + exp.toGMTString(); 
} 
function getCookie(name){
　　var result = &quot;&quot;;
　　var myCookie = &quot;&quot;+document.cookie+&quot;;&quot;; 
　　var searchName = &quot;+name+&quot;=&quot;;
　　var startOfCookie = myCookie.indexOf(searchName);
　　var endOfCookie;
　　if(satrtOfCookie != -1){
　　　　startOfcookie += searchName.length;
　　　　endOfCookie = myCookie.indexOf(&quot;;&quot;,startOfCookie);
　　　　result = (myCookie.substring(startOfCookie,endOfCookie));
　　}
　　return result;
}
(function(){
　　var oTips = document.getElementById(&#39;tips&#39;);//假设tips的id为tips
　　var page = {
　　check: function(){//检查tips的cookie是否存在并且允许显示
　　　　var tips = getCookie(&#39;tips&#39;);
　　　　if(!tips || tips == &#39;show&#39;) return true;//tips的cookie不存在
　　　　if(tips == &quot;never_show_again&quot;) return false;
　　},
　　hideTip: function(bNever){
　　　　if(bNever) setcookie(&#39;tips&#39;, &#39;never_show_again&#39;, 365);
　　　　oTips.style.display = &quot;none&quot;;//隐藏
　　},
　　showTip: function(){
　　oTips.style.display = &quot;inline&quot;;//显示，假设tips为行级元素
　　},
　　init: function(){
　　　　var _this = this;
　　　　if(this.check()){
　　　　_this.showTip();
　　　　setcookie(&#39;tips&#39;, &#39;show&#39;, 1);
　　}
　　oTips.onclick = function(){
　　　　_this.hideTip(true);
　　};
　　}
　　};
page.init();
})();</code></pre>
<p>23、说出以下函数的作用是？空白区域应该填写什么？</p>
<pre><code class="language-js">//define 
(function(window){
function fn(str){
  this.str=str;
}

fn.prototype.format = function(){
  var arg = ______;
  return this.str.replace(_____,function(a,b){
       return arg[b]||&quot;&quot;;
});
}
window.fn = fn;
})(window);
</code></pre>
</li>
</ol>
<p>//use
(function(){
    var t = new fn(&#39;<p><a href="{0}">{1}</a><span>{2}</span></p>&#39;);
    console.log(t.format(&#39;<a href="http://www.alibaba.com&#39;,&#39;Alibaba&#39;,&#39;Welcome&#39;">http://www.alibaba.com&#39;,&#39;Alibaba&#39;,&#39;Welcome&#39;</a>));
})();</p>
<pre><code>答案：访函数的作用是使用format函数将函数的参数替换掉{0}这样的内容，返回一个格式化后的结果：
第一个空是：arguments
第二个空是：/\{(\d+)\}/ig
## 24、    Javascript作用链域?
理解变量和函数的访问范围和生命周期，全局作用域与局部作用域的区别，JavaScript中没有块作用域，函数的嵌套形成不同层次的作用域，嵌套的层次形成链式形式，通过作用域链查找属性的规则需要深入理解。
## 25、    谈谈this对象的理解。
理解不同形式的函数调用方式下的this指向，理解事件函数、定时函数中的this指向，函数的调用形式决定了this的指向。
## 26、    eval是做什么的？
它的功能是把对应的字符串解析成JS代码并运行；应该避免使用eval，不安全，非常耗性能（2个步骤，一次解析成js语句，一次执行）

## 27、    关于事件，IE与火狐的事件机制有什么区别？ 如何阻止冒泡？
[1].在IE中,事件对象是作为一个全局变量来保存和维护的.所有的浏览器事件,不管是用户触发的，还是其他事件,都会更新window.event对象.所以在代码中，只要调用window.event就可以获取事件对象， 再event.srcElement就可以取得触发事件的元素进行进一步处理. 
[2].在FireFox中，事件对象却不是全局对象，一般情况下，是现场发生，现场使用，FireFox把事件对象自动传给事件处理程序.
关于事件的兼容性处理要熟练掌握，事件对象具体哪些属性存在兼容性问题，IE与标准事件模型事件冒泡与事件捕获的支持要理解
## 28、    什么是闭包（closure），为什么要用它？
简单的理解是函数的嵌套形成闭包，闭包包括函数本身已经它的外部作用域
使用闭包可以形成独立的空间，延长变量的生命周期，报存中间状态值
## 29、javascript 代码中的&quot;use strict&quot;;是什么意思 ? 使用它区别是什么？
意思是使用严格模式，使用严格模式，一些不规范的语法将不再支持
## 30、如何判断一个对象是否属于某个类？
Instanceof   constructor
## 31、new操作符具体干了什么呢?
1、创建一个空对象，并且 this 变量引用该对象，同时还继承了该函数的原型。
2、属性和方法被加入到 this 引用的对象中。
3、新创建的对象由 this 所引用，并且最后隐式的返回 this 。
## 32、用原生JavaScript的实现过什么功能吗？
主要考察原生js的实践经验
## 33、Javascript中，有一个函数，执行时对象查找时，永远不会去查找原型，这个函数是？
HasOwnProperty
## 34、对JSON的了解？
轻量级数据交互格式，可以形成复杂的嵌套格式，解析非常方便
## 35、js延迟加载的方式有哪些？
方案一：&lt;script&gt;标签的async=&quot;async&quot;属性（详细参见：script标签的async属性）
方案二：&lt;script&gt;标签的defer=&quot;defer&quot;属性
方案三：动态创建&lt;script&gt;标签
方案四：AJAX eval（使用AJAX得到脚本内容，然后通过eval_r(xmlhttp.responseText)来运行脚本）
方案五：iframe方式
## 36、模块化开发怎么做？
理解模块化开发模式：浏览器端requirejs，seajs；服务器端nodejs；ES6模块化；fis、webpack等前端整体模块化解决方案；grunt、gulp等前端工作流的使用
## 37、AMD（Modules/Asynchronous-Definition）、CMD（Common Module Definition）规范区别？
理解这两种规范的差异，主要通过requirejs与seajs的对比，理解模块的定义与引用方式的差异以及这两种规范的设计原则
## 38、requireJS的核心原理是什么？（如何动态加载的？如何避免多次加载的？如何 缓存的？）
核心是js的加载模块，通过正则匹配模块以及模块的依赖关系，保证文件加载的先后顺序，根据文件的路径对加载过的文件做了缓存
## 39、让你自己设计实现一个requireJS，你会怎么做？
核心是实现js的加载模块，维护js的依赖关系，控制好文件加载的先后顺序
## 40、谈一谈你对ECMAScript6的了解？
ES6新的语法糖，类，模块化等新特性
## 41、ECMAScript6 怎么写class么，为什么会出现class这种东西?
```js
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  toString() {
     return &#39;(&#39;+this.x+&#39;, &#39;+this.y+&#39;)&#39;;
  }
}</code></pre><h2 id="42、异步加载的方式有哪些？">42、异步加载的方式有哪些？</h2>
<p>方案一：<script>标签的async="async"属性（详细参见：script标签的async属性）
方案二：<script>标签的defer="defer"属性
方案三：动态创建<script>标签
方案四：AJAX eval（使用AJAX得到脚本内容，然后通过eval_r(xmlhttp.responseText)来运行脚本）
方案五：iframe方式</p>
<h2 id="43、documenwrite和-innerhtml的区别">43、documen.write和 innerHTML的区别?</h2>
<p>document.write是重写整个document, 写入内容是字符串的html
innerHTML是HTMLElement的属性，是一个元素的内部html内容</p>
<h2 id="44、dom操作怎样添加、移除、移动、复制、创建和查找节点">44、DOM操作——怎样添加、移除、移动、复制、创建和查找节点?</h2>
<p>（1）创建新节点
      createDocumentFragment()    //创建一个DOM片段
      createElement_x()   //创建一个具体的元素
      createTextNode()   //创建一个文本节点
（2）添加、移除、替换、插入
      appendChild()
      removeChild()
      replaceChild()
      insertBefore()
（3）查找
      getElementsByTagName()    //通过标签名称
      getElementsByName()    //通过元素的Name属性的值
      getElementById()    //通过元素Id，唯一性</p>
<h2 id="45、call-和-apply-的含义和区别？">45、call() 和 .apply() 的含义和区别？</h2>
<p>apply的参数是数组形式，call的参数是单个的值，除此之外在使用上没有差别，重点理解这两个函数调用的this改变</p>
<h2 id="46、数组和对象有哪些原生方法，列举一下？">46、数组和对象有哪些原生方法，列举一下？</h2>
<pre><code class="language-js">Array.concat( ) 连接数组 
Array.join( ) 将数组元素连接起来以构建一个字符串 
Array.length 数组的大小 
Array.pop( ) 删除并返回数组的最后一个元素 
Array.push( ) 给数组添加元素 
Array.reverse( ) 颠倒数组中元素的顺序 
Array.shift( ) 将元素移出数组 
Array.slice( ) 返回数组的一部分 
Array.sort( ) 对数组元素进行排序 
Array.splice( ) 插入、删除或替换数组的元素 
Array.toLocaleString( ) 把数组转换成局部字符串 
Array.toString( ) 将数组转换成一个字符串 
Array.unshift( ) 在数组头部插入一个元素

Object.hasOwnProperty( ) 检查属性是否被继承 
Object.isPrototypeOf( ) 一个对象是否是另一个对象的原型 
Object.propertyIsEnumerable( ) 是否可以通过for/in循环看到属性 
Object.toLocaleString( ) 返回对象的本地字符串表示 
Object.toString( ) 定义一个对象的字符串表示 
Object.valueOf( ) 指定对象的原始值</code></pre>
<h2 id="47、js-怎么实现一个类。怎么实例化这个类">47、JS 怎么实现一个类。怎么实例化这个类</h2>
<p>严格来讲js中并没有类的概念，不过js中的函数可以作为构造函数来使用，通过new来实例化，其实函数本身也是一个对象。</p>
<h2 id="48、javascript中的作用域与变量声明提升？">48、JavaScript中的作用域与变量声明提升？</h2>
<p>理解JavaScript的预解析机制，js的运行主要分两个阶段：js的预解析和运行，预解析阶段所有的变量声明和函数定义都会提前，但是变量的赋值不会提前</p>
<h2 id="49、如何编写高性能的javascript？">49、如何编写高性能的Javascript？</h2>
<p>使用 DocumentFragment 优化多次 append
通过模板元素 clone ，替代 createElement
使用一次 innerHTML 赋值代替构建 dom 元素
使用 firstChild 和 nextSibling 代替 childNodes 遍历 dom 元素 
使用 Array 做为 StringBuffer ，代替字符串拼接的操作 
将循环控制量保存到局部变量
顺序无关的遍历时，用 while 替代 for
将条件分支，按可能性顺序从高到低排列
在同一条件子的多（ >2 ）条件分支时，使用 switch 优于 if
使用三目运算符替代条件分支 
需要不断执行的时候，优先考虑使用 setInterval</p>
<h2 id="50、那些操作会造成内存泄漏？">50、那些操作会造成内存泄漏？</h2>
<p>闭包，循环</p>
<h2 id="51、javascript对象的几种创建方式？">51、javascript对象的几种创建方式？</h2>
<ol>
<li>工厂模式</li>
<li>构造函数模式</li>
<li>原型模式</li>
<li>混合构造函数和原型模式</li>
<li>动态原型模式</li>
<li>寄生构造函数模式</li>
<li>稳妥构造函数模式<h2 id="52、javascript继承的-6-种方法？">52、javascript继承的 6 种方法？</h2>
</li>
<li>原型链继承</li>
<li>借用构造函数继承</li>
<li>组合继承(原型+借用构造)</li>
<li>原型式继承</li>
<li>寄生式继承</li>
<li>寄生组合式继承<h2 id="53、eval是做什么的？">53、eval是做什么的？</h2>
</li>
<li>它的功能是把对应的字符串解析成JS代码并运行</li>
<li>应该避免使用eval，不安全，非常耗性能（2次，一次解析成js语句，一次执行）<h2 id="54、javascript-原型，原型链--有什么特点？">54、JavaScript 原型，原型链 ? 有什么特点？</h2>
</li>
<li>原型对象也是普通的对象，是对象一个自带隐式的 <strong>proto</strong> 属性，原型也有可能有自己的原型，如果一个原型对象的原型不为 null 的话，我们就称之为原型链</li>
<li>原型链是由一些用来继承和共享属性的对象组成的（有限的）对象链<h2 id="55、事件、ie与火狐的事件机制有什么区别？-如何阻止冒泡？">55、事件、IE与火狐的事件机制有什么区别？ 如何阻止冒泡？</h2>
</li>
<li>我们在网页中的某个操作（有的操作对应多个事件）。例如：当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为</li>
<li>事件处理机制：IE是事件冒泡、firefox同时支持两种事件模型，也就是：捕获型事件和冒泡型事件</li>
<li>ev.stopPropagation();
注意旧ie的方法：ev.cancelBubble = true;<h2 id="56、简述一下sass、less，且说明区别？">56、简述一下Sass、Less，且说明区别？</h2>
他们是动态的样式语言，是CSS预处理器,CSS上的一种抽象层。他们是一种特殊的语法/语言而编译成CSS。
变量符不一样，less是@，而Sass是$;
Sass支持条件语句，可以使用if{}else{},for{}循环等等。而Less不支持;
Sass是基于Ruby的，是在服务端处理的，而Less是需要引入less.js来处理Less代码输出Css到浏览器<h2 id="57、关于javascript中apply和call方法的区别？">57、关于javascript中apply()和call()方法的区别？</h2>
相同点:两个方法产生的作用是完全一样的
不同点:方法传递的参数不同
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
apply()接收两个参数，一个是函数运行的作用域(this)，另一个是参数数组。
call()方法第一个参数与apply()方法相同，但传递给函数的参数必须列举出来。<h2 id="58、简述一下js中的闭包？">58、简述一下JS中的闭包？</h2>
闭包用的多的两个作用：读取函数内部的变量值；让这些变量值始终保存着(在内存中)。
同时需要注意的是：闭包慎用，不滥用，不乱用，由于函数内部的变量都被保存在内存中，会导致内存消耗大。<h2 id="59、说说你对this的理解？">59、说说你对this的理解？</h2>
在JavaScript中，this通常指向的是我们正在执行的函数本身，或者是，指向该函数所属的对象。
全局的this → 指向的是Window
函数中的this → 指向的是函数所在的对象
对象中的this → 指向其本身<h2 id="60、分别阐述splitslicesplicejoin？">60、分别阐述split(),slice(),splice(),join()？</h2>
join()用于把数组中的所有元素拼接起来放入一个字符串。所带的参数为分割字符串的分隔符，默认是以逗号分开。归属于Array
split()即把字符串分离开，以数组方式存储。归属于Stringstring
slice() 方法可从已有的数组中返回选定的元素。该方法并不会修改数组，而是返回一个子数组。如果想删除数组中的一段元素，应该使用方法 Array.splice()
splice() 方法向/从数组中添加/删除项目，然后返回被删除的项目。返回的是含有被删除的元素的数组。<h2 id="61、事件委托是什么？">61、事件委托是什么？</h2>
让利用事件冒泡的原理，让自己的所触发的事件，让他的父元素代替执行！<h2 id="62、如何阻止事件冒泡和默认事件？">62、如何阻止事件冒泡和默认事件？</h2>
阻止浏览器的默认行为
window.event?window.event.returnValue=false:e.preventDefault();
停止事件冒泡
window.event?window.event.cancelBubble=true:e.stopPropagation();
原生JavaScript中，return false;只阻止默认行为，不阻止冒泡，jQuery中的return false;既阻止默认行为，又阻止冒泡<h2 id="63、添加-删除-替换-插入到某个接点的方法？">63、添加 删除 替换 插入到某个接点的方法？</h2>
<pre><code class="language-js">obj.appendChidl()
obj.removeChild()
obj.replaceChild()
obj.innersetBefore() </code></pre>
<h2 id="64、你用过requirejs吗？它有什么特性？">64、你用过require.js吗？它有什么特性？</h2>
（1）实现js文件的异步加载，避免网页失去响应；
（2）管理模块之间的依赖性，便于代码的编写和维护。<h2 id="65、谈一下js中的递归函数，并且用递归简单实现阶乘？">65、谈一下JS中的递归函数，并且用递归简单实现阶乘？</h2>
递归即是程序在执行过程中不断调用自身的编程技巧，当然也必须要有一个明确的结束条件，不然就会陷入死循环。<h2 id="66、请用正则表达式写一个简单的邮箱验证。">66、请用正则表达式写一个简单的邮箱验证。</h2>
<pre><code class="language-js">/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;</code></pre>
<h2 id="67、简述一下你对web性能优化的方案？">67、简述一下你对web性能优化的方案？</h2>
1、尽量减少 HTTP 请求
2、使用浏览器缓存
3、使用压缩组件
4、图片、JS的预载入
5、将脚本放在底部
6、将样式文件放在页面顶部
7、使用外部的JS和CSS
8、精简代码<h2 id="68、在js中有哪些会被隐式转换为false">68、在JS中有哪些会被隐式转换为false</h2>
Undefined、null、关键字false、NaN、零、空字符串<h2 id="69、定时器setinterval有一个有名函数fn1，setinterval（fn1500）与setinterval（fn1500）有什么区别？">69、定时器setInterval有一个有名函数fn1，setInterval（fn1,500）与setInterval（fn1(),500）有什么区别？</h2>
第一个是重复执行每500毫秒执行一次，后面一个只执行一次。<h2 id="70、外部js文件出现中文字符，会出现什么问题，怎么解决？">70、外部JS文件出现中文字符，会出现什么问题，怎么解决？</h2>
会出现乱码，加charset=”GB2312”;<h2 id="71、谈谈浏览器的内核，并且说一下什么是内核？">71、谈谈浏览器的内核，并且说一下什么是内核？</h2>
Trident (['traɪd(ə)nt])--IE，Gecko (['gekəʊ])--Firefox, Presto (['prestəʊ])--opera,webkit—谷歌和Safari
浏览器内核又可以分成两部分：渲染引擎和 JS 引擎。它负责取得网页的内容（HTML、XML、图像等等）、整理讯息（例如加入 CSS 等），以及计算网页的显示方式，然后会输出至显示器或打印机。JS 引擎则是解析 Javascript 语言，执行 javascript 语言来实现网页的动态效果。<h2 id="72、javascript原型，原型链--有什么特点？">72、JavaScript原型，原型链 ? 有什么特点？</h2>
</li>
</ol>
<ul>
<li>原型对象也是普通的对象，是对象一个自带隐式的 <strong>proto</strong> 属性，原型也有可能有自己的原型，如果一个原型对象的原型不为null的话，我们就称之为原型链。</li>
<li>原型链是由一些用来继承和共享属性的对象组成的（有限的）对象链。</li>
<li>JavaScript的数据对象有那些属性值？
　　writable：这个属性的值是否可以改。
　　configurable：这个属性的配置是否可以删除，修改。
　　enumerable：这个属性是否能在for…in循环中遍历出来或在Object.keys中列举出来。
　　value：属性值。</li>
<li>当我们需要一个属性的时，Javascript引擎会先看当前对象中是否有这个属性， 如果没有的话，就会查找他的Prototype对象是否有这个属性。<pre><code class="language-js">function clone(proto) {
　　function Dummy() { }
　　Dummy.prototype = proto;
　　Dummy.prototype.constructor = Dummy;
　　return new Dummy(); //等价于Object.create(Person);
} 
function object(old) {
  function F() {};
  F.prototype = old;
  return new F();
}
var newObj = object(oldObject);</code></pre>
<h2 id="73、写一个通用的事件侦听器函数">73、写一个通用的事件侦听器函数</h2>
<pre><code class="language-js">// event(事件)工具集，来源：https://github.com/markyun
markyun.Event = {
  // 页面加载完成后
  readyEvent : function(fn) {
      if (fn==null) {
          fn=document;
      }
      var oldonload = window.onload;
      if (typeof window.onload != &#39;function&#39;) {
          window.onload = fn;
      } else {
          window.onload = function() {
              oldonload();
              fn();
          };
      }
  },
  // 视能力分别使用dom0||dom2||IE方式 来绑定事件
  // 参数： 操作的元素,事件名称 ,事件处理程序
  addEvent : function(element, type, handler) {
      if (element.addEventListener) {
          //事件类型、需要执行的函数、是否捕捉
          element.addEventListener(type, handler, false);
      } else if (element.attachEvent) {
          element.attachEvent(&#39;on&#39; + type, function() {
              handler.call(element);
          });
      } else {
          element[&#39;on&#39; + type] = handler;
      }
  },
  // 移除事件
  removeEvent : function(element, type, handler) {
      if (element.removeEnentListener) {
          element.removeEnentListener(type, handler, false);
      } else if (element.datachEvent) {
          element.detachEvent(&#39;on&#39; + type, handler);
      } else {
          element[&#39;on&#39; + type] = null;
      }
  }, 
  // 阻止事件 (主要是事件冒泡，因为IE不支持事件捕获)
  stopPropagation : function(ev) {
      if (ev.stopPropagation) {
          ev.stopPropagation();
      } else {
          ev.cancelBubble = true;
      }
  },
  // 取消事件的默认行为
  preventDefault : function(event) {
      if (event.preventDefault) {
          event.preventDefault();
      } else {
          event.returnValue = false;
      }
  },
  // 获取事件目标
  getTarget : function(event) {
      return event.target || event.srcElement;
  },
  // 获取event对象的引用，取到事件的所有信息，确保随时能使用event；
  getEvent : function(e) {
      var ev = e || window.event;
      if (!ev) {
          var c = this.getEvent.caller;
          while (c) {
              ev = c.arguments[0];
              if (ev &amp;&amp; Event == ev.constructor) {
                  break;
              }
              c = c.caller;
          }
      }
      return ev;
  }
}; </code></pre>
<h2 id="74、事件、ie与火狐的事件机制有什么区别？-如何阻止冒泡？">74、事件、IE与火狐的事件机制有什么区别？ 如何阻止冒泡？</h2>
<ol>
<li>我们在网页中的某个操作（有的操作对应多个事件）。例如：当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。  </li>
<li>事件处理机制：IE是事件冒泡、火狐是 事件捕获；</li>
<li>ev.stopPropagation();<h2 id="75、什么是闭包（closure），为什么要用？">75、什么是闭包（closure），为什么要用？</h2>
执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源，因为say667()的内部函数的执行需要依赖say667()中的变量。这是对闭包作用的非常直白的描述.<pre><code class="language-js">function say667() {
// Local variable that ends up within closure
var num = 666;
var sayAlert = function() { alert(num); }
num++;
return sayAlert;
}
var sayAlert = say667();
sayAlert()//执行结果应该弹出的667  </code></pre>
<h2 id="76、如何判断一个对象是否属于某个类？">76、如何判断一个对象是否属于某个类？</h2>
使用instanceof （待完善）<pre><code class="language-js">if(a instanceof Person){
alert(&#39;yes&#39;);
}</code></pre>
<h2 id="77、new操作符具体干了什么呢">77、new操作符具体干了什么呢?</h2>
1、创建一个空对象，并且 this 变量引用该对象，同时还继承了该函数的原型。
2、属性和方法被加入到 this 引用的对象中。
3、新创建的对象由 this 所引用，并且最后隐式的返回 this 。<pre><code class="language-js">var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj); </code></pre>
<h2 id="78、json-的了解">78、JSON 的了解</h2>
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
{'age':'12', 'name':'back'}<h2 id="79、js延迟加载的方式有哪些">79、js延迟加载的方式有哪些</h2>
defer和async、动态创建DOM方式（用得最多）、按需异步载入js<h2 id="80、模块化怎么做？">80、模块化怎么做？</h2>
立即执行函数,不暴露私有成员<pre><code class="language-js">var module1 = (function(){
　　　　var _count = 0;
　　　　var m1 = function(){
　　　　　　//...
　　　　};
　　　　var m2 = function(){
　　　　　　//...
　　　　};
　　　　return {
　　　　　　m1 : m1,
　　　　　　m2 : m2
　　　　};
　　})(); </code></pre>
<h2 id="81、异步加载的方式">81、异步加载的方式</h2>
(1) defer，只支持IE
(2) async：
(3) 创建script，插入到DOM中，加载完毕后callBack
documen.write和 innerHTML的区别
document.write只能重绘整个页面
innerHTML可以重绘页面的一部分<h2 id="82、告诉我答案是多少？">82、告诉我答案是多少？</h2>
<pre><code class="language-js">(function(x){
delete x;
alert(x);
})(1+5);</code></pre>
函数参数无法delete删除，delete只能删除通过for in访问的属性。
当然，删除失败也不会报错，所以代码运行会弹出“6”。<h2 id="83、js中的call和apply方法的区别？">83、JS中的call()和apply()方法的区别？</h2>
例子中用 add 来替换 sub，add.call(sub,3,1) == add(3,1) ，所以运行结果为：alert(4);
注意：js 中的函数其实是对象，函数名是对 Function 对象的引用。<pre><code class="language-js">function add(a,b){
alert(a+b);
}
function sub(a,b){
alert(a-b);
}
add.call(sub,3,1);  </code></pre>
<h2 id="84、jquery与jquery-ui-有啥区别？">84、Jquery与jQuery UI 有啥区别？</h2>
</li>
</ol>
</li>
<li>jQuery是一个js库，主要提供的功能是选择器，属性修改和事件绑定等等。</li>
<li>jQuery UI则是在jQuery的基础上，利用jQuery的扩展性，设计的插件。
提供了一些常用的界面元素，诸如对话框、拖动行为、改变大小行为等等<h2 id="85、jquery-中如何将数组转化为json字符串，然后再转化回来？">85、jquery 中如何将数组转化为json字符串，然后再转化回来？</h2>
jQuery中没有提供这个功能，所以你需要先编写两个jQuery的扩展：<pre><code class="language-js">   $.fn.stringifyArray = function(array) {
       return JSON.stringify(array)
   }
   $.fn.parseArray = function(array) {
       return JSON.parse(array)
   } 
   然后调用：
   $(&quot;&quot;).stringifyArray(array)</code></pre>
<h2 id="86、javascript中的作用域与变量声明提升？">86、JavaScript中的作用域与变量声明提升？</h2>
其他部分
（HTTP、正则、优化、重构、响应式、移动端、团队协作、SEO、UED、职业生涯）
   *基于Class的选择性的性能相对于Id选择器开销很大，因为需遍历所有DOM元素。
   *频繁操作的DOM，先缓存起来再操作。用Jquery的链式调用更好。   <pre><code>比如：var str=$(&quot;a&quot;).attr(&quot;href&quot;);</code></pre>   *for (var i = size; i < arr.length; i++) {}<pre><code>for 循环每一次循环都查找了数组 (arr) 的.length 属性，在开始循环的时候设置一个变量来存储这个数字，可以让循环跑得更快： 
for (var i = size, length = arr.length; i &lt; length; i++) {}</code></pre><h2 id="87、前端开发的优化问题（看雅虎14条性能优化原则）。">87、前端开发的优化问题（看雅虎14条性能优化原则）。</h2>
 （1） 减少http请求次数：CSS Sprites, JS、CSS源码压缩、图片大小控制合适；网页Gzip，CDN托管，data缓存 ，图片服务器。
 （2） 前端模板 JS+数据，减少由于HTML标签导致的带宽浪费，前端用变量保存AJAX请求结果，每次操作本地变量，不用请求，减少请求次数
 （3） 用innerHTML代替DOM操作，减少DOM操作次数，优化javascript性能。
 （4） 当需要设置的样式很多时设置className而不是直接操作style。
 （5） 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
 （6） 避免使用CSS Expression（css表达式)又称Dynamic properties(动态属性)。
 （7） 图片预加载，将样式表放在顶部，将脚本放在底部  加上时间戳。
 （8） 避免在页面的主体布局中使用table，table要等其中的内容完全下载之后才会显示出来，显示比div+css布局慢。<h2 id="88、http状态码有那些？分别代表是什么意思？">88、http状态码有那些？分别代表是什么意思？</h2>
100-199 用于指定客户端应相应的某些动作。 
200-299 用于表示请求成功。 
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 
400-499 用于指出客户端的错误。
400  语义有误，当前请求无法被服务器理解。
401  当前请求需要用户验证 
403  服务器已经理解请求，但是拒绝执行它。
500-599 用于支持服务器错误。 
503 – 服务不可用<h2 id="89、一个页面从输入-url-到页面加载显示完成，这个过程中都发生了什么？（流程说的越详细越好）">89、一个页面从输入 URL 到页面加载显示完成，这个过程中都发生了什么？（流程说的越详细越好）</h2>
   要熟悉前后端的通信流程，最好把动态网站的背后细节也介绍一遍</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/f34c20ee-a435-4914-aabe-f8412f082dfa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f34c20ee-a435-4914-aabe-f8412f082dfa</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 04 May 2024 01:21:15 GMT</pubDate></item><item><title><![CDATA[【前端面试题】流行框架]]></title><description><![CDATA[<h1 id="流行框架">流行框架</h1>
<h2 id="1、jquery的源码看过吗？能不能简单概况一下它的实现原理？">1、JQuery的源码看过吗？能不能简单概况一下它的实现原理？</h2>
<p>考察学习知识的态度，是否仅仅是停留在使用层面，要知其然知其所以然</p>
<h2 id="2、jqueryfn的init方法返回的this指的是什么对象？为什么要返回this？">2、jQuery.fn的init方法返回的this指的是什么对象？为什么要返回this？</h2>
<p>this执行init构造函数自身，其实就是jQuery实例对象，返回this是为了实现jQuery的链式操作</p>
<h2 id="3、----jquery中如何将数组转化为json字符串，然后再转化回来？">3、    jquery中如何将数组转化为json字符串，然后再转化回来？</h2>
<p>$.parseJSON(&#39;{&quot;name&quot;:&quot;John&quot;}&#39;);</p>
<h2 id="4、----jquery-的属性拷贝extend的实现原理是什么，如何实现深拷贝？">4、    jQuery 的属性拷贝(extend)的实现原理是什么，如何实现深拷贝？</h2>
<p>递归赋值</p>
<h2 id="5、----jqueryextend-与-jqueryfnextend的区别？">5、    jquery.extend 与 jquery.fn.extend的区别？</h2>
<p>Jquery.extend用来扩展jQuery对象本身；jquery.fn.extend用来扩展jQuery实例</p>
<h2 id="6、谈一下jquery中的bindlivedelegateon的区别？">6、谈一下Jquery中的bind(),live(),delegate(),on()的区别？</h2>
<h2 id="7、jquery一个对象可以同时绑定多个事件，这是如何实现的？">7、JQuery一个对象可以同时绑定多个事件，这是如何实现的？</h2>
<p>可以同时绑定多个事件，低层实现原理是使用addEventListner与attachEvent兼容处理做事件注册</p>
<h2 id="8、----jquery与jquery-ui有啥区别？">8、    Jquery与jQuery UI有啥区别？</h2>
<p>jQuery是操作dom的框架，jQueryUI是基于jQuery做的一个UI组件库</p>
<h2 id="9、----jquery和zepto的区别？各自的使用场景？">9、    jQuery和Zepto的区别？各自的使用场景？</h2>
<p>jQuery主要用于pc端，当然有对应的jQuerymobile用于移动端，zepto比jQuery更加小巧，主要用于移动端</p>
<h2 id="10、----针对-jquery-的优化方法？">10、    针对 jQuery 的优化方法？</h2>
<p>优先使用ID选择器
在class前使用tag(标签名)
给选择器一个上下文
慎用 .live()方法（应该说尽量不要使用）
使用data()方法存储临时变量</p>
<h2 id="11、----zepto的点透问题如何解决？">11、    Zepto的点透问题如何解决？</h2>
<p>点透主要是由于两个div重合，例如：一个div调用show()，一个div调用hide()；这个时候当点击上面的div的时候就会影响到下面的那个div；
解决办法主要有2种：
1.github上有一个叫做fastclick的库，它也能规避移动设备上click事件的延迟响应，<a href="https://github.com/ftlabs/fastclick">https://github.com/ftlabs/fastclick</a>
将它用script标签引入页面（该库支持AMD，于是你也可以按照AMD规范，用诸如require.js的模块加载器引入），并且在dom ready时初始化在body上，
2.根据分析，如果不引入其它类库，也不想自己按照上述fastclcik的思路再开发一套东西，需要1.一个优先于下面的“divClickUnder”捕获的事件；2.并且通过这个事件阻止掉默认行为（下面的“divClickUnder”对click事件的捕获，在ios的safari，click的捕获被认为和滚屏、点击输入框弹起键盘等一样，是一种浏览器默认行为，即可以被event.preventDefault()阻止的行为）。</p>
<h2 id="12、知道各种js框架angular-backbone-ember-react-meteor-knockout么-能讲出他们各自的优点和缺点么">12、知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能讲出他们各自的优点和缺点么?</h2>
<p>知识面的宽度，流行框架要多多熟悉</p>
<h2 id="13、underscore-对哪些-js-原生对象进行了扩展以及提供了哪些好用的函数方法？">13、Underscore 对哪些 JS 原生对象进行了扩展以及提供了哪些好用的函数方法？</h2>
<p>Underscore的熟悉程度</p>
<h2 id="14、使用过angular吗？angular中的过滤器是干什么用的">14、使用过angular吗？angular中的过滤器是干什么用的</h2>
<p>在表达式中转换数据<p>姓名为 {{ lastName | uppercase }}</p>
currency，是什么过滤器——格式化数字为货币格式，单位是$符。</p>
]]></description><link>https://blog.gaoredu.com/article/f4ae7042-0224-455b-8802-c337b54f00d9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f4ae7042-0224-455b-8802-c337b54f00d9</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 29 Apr 2024 22:32:01 GMT</pubDate></item><item><title><![CDATA[【JS相关】MVVM和Vue]]></title><description><![CDATA[<h1 id="mvvm和vue">MVVM和VUE</h1>
<h2 id="1-v-bind和v-model的区别？">1. v-bind和v-model的区别？</h2>
<ol>
<li>v-bind用来绑定数据和属性以及表达式，缩写为&#39;：&#39;</li>
<li>v-model使用在表单中，实现双向数据绑定的，在表单元素外使用不起作用</li>
</ol>
<h3 id="2-vue-中三要素的是什么？">2. Vue 中三要素的是什么？</h3>
<h4 id="21-响应式">2.1 响应式</h4>
<pre><code class="language-js">    // 如何让实现响应式的呢？
    let obj = {};
    let name = &#39;zhangsan&#39;;
    Object.defineProperties(obj, name, {get : function() {
      console.log(&#39;name&#39; , name)
    }, set : function() {
        console.log(&#39;name&#39; , name)
    }})


    // 1. 关键是理解Object.defineProperty
    // 2. 将data的属性代理到vm上面的
    let mv = {};
        let data = {
            price: 100,
            name: &#39;zhangsan&#39;
        };
        for (let key in data) {
            (function (key) {
                Object.defineProperty(mv, key, {
                    get: function () {
                        console.log(&#39;get val&#39;);
                        return data[key];
                    },
                    set: function (val) {
                        console.log(&#39;set val&#39;);
                        data[key] = val;
                    }
                })
            })(key);
        }</code></pre>
<h3 id="22-vue中如何解析模板？">2.2 Vue中如何解析模板？</h3>
<h4 id="221-模板是什么？">2.2.1 模板是什么？</h4>
<pre><code class="language-html">    &lt;div id=&quot;app&quot;&gt;
        &lt;div&gt;
            &lt;input v-model=&quot;title&quot;&gt;
            &lt;button v-on:click=&quot;add&quot;&gt;submit&lt;/button&gt;
        &lt;/div&gt;
        &lt;ul&gt;
            &lt;li v-for=&quot;item in list&quot;&gt;{{item}}&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;</code></pre>
<pre><code class="language-js"> // 1(*****). 模板实际上就是一个字符串………………(vue中的模板的本质)
 // 2. 模板有逻辑，如v-if, v-for
 // 3. 与html格式很像，但是有很大的区别
 // 4. 最终还是要转换为html来显示
 // 5(*****). 模板最终必须转换成JS代码，因为：
 //   （1）有逻辑(v-if v-for)：必须用JS才能实现（图灵完备）
 //    (2) 转换成HTML来渲染页面，必须用JS才能实现
 //    (3) 因此，模板最终要转换成为一个JS函数（render函数）</code></pre>
<h4 id="23--render函数？">2.3  render函数？</h4>
<h6 id="231-with的用法">2.3.1 with的用法</h6>
<pre><code class="language-js">var obj = {
    name: &#39;zhangsan&#39;,
    age: 20,
    getAddress(){
        alert(&#39;shanghai&#39;);
    }
}

// 不使用with
function fn() {
  alert(obj.name);
  alert(obj.age);
  obj.getAddress();
}

// 使用with(代码不易维护！！！)
function fn1() {
  with(obj){
      alert(name);
      alert(age);
      getAddress();
  }
}

fn();
fn1();
</code></pre>
<h5 id="232-render函数的实现机制？">2.3.2 render函数的实现机制？</h5>
<pre><code class="language-js">&lt;div id=&#39;app&#39;&gt;
    &lt;p&gt;{{price}}&lt;/p&gt;
&lt;/div&gt;

// 使用with限制这个作用域里面的this
with(this) {
    return _c(                          // this._c
        &#39;div&#39;,
        {
            attrs: {&quot;id&quot; : &quot;app&quot;}       // id=app
        },
        [
            _c(&#39;p&#39;, [_v(_s(price))])    // this._c(&#39;p&#39;, [_v(_s(price))])
        ]
    )
}


// 实现一个自己的render函数
var vm = new Vue({
        el: &#39;#app&#39;,
        data: {
            price: 100
        }
    });

    function render() {
        with (vm) {
            return _c(
                &#39;div&#39;,
                {
                    attrs: {&#39;id&#39;: &#39;app&#39;}
                },
                [
                    _c(&#39;p&#39;, [_v(_s(price))])
                ]
            );
        }
    }

    function render() {
        return vm._c(
            &#39;div&#39;,
            {
                attrs: {&#39;id&#39;: &#39;app&#39;}
            },
            [
                // vm._v 转换为一个文本节点
                // vm._s 转换为一个字符串
                // vm._c 转换为一个DOM节点
                vm._c(&#39;p&#39;, [vm._v(vm._s(price))])
            ]

        );
    }</code></pre>
<h4 id="233-render函数与vdom">2.3.3 render函数与vdom?</h4>
<pre><code class="language-html">&lt;div id=&quot;app&quot;&gt;
        &lt;div&gt;
            &lt;input type=&quot;text&quot; v-model=&quot;title&quot;&gt;
            &lt;button @click=&quot;add&quot;&gt;submit&lt;/button&gt;
        &lt;/div&gt;
        &lt;div&gt;
            &lt;ul&gt;
                &lt;li v-for=&quot;item in list&quot;&gt;{{item}}&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;
    &lt;/div&gt;</code></pre>
<pre><code class="language-js">with (this) {
    // this 就是vm
    return _c(
        &#39;div&#39;,
        {attrs: {&quot;id&quot;: &quot;app&quot;}},
        [
            _c(&#39;div&#39;,
                [
                    _c(&#39;input&#39;, {
                        directives: [{
                            name: &quot;model&quot;,
                            rawName: &quot;v-model&quot;,
                            value: (title),
                            expression: &quot;title&quot;
                        }],
                        attrs: {&quot;type&quot;: &quot;text&quot;},
                        domProps: {&quot;value&quot;: (title)},
                        on: {
                            &quot;input&quot;: function ($event) {
                                if ($event.target.composing) return;
                                title = $event.target.value
                            }
                        }
                    }),
                    _v(&quot; &quot;),
                    _c(&#39;button&#39;,
                        {
                            on: {
                                &quot;click&quot;: add
                            }
                        },
                        [_v(&quot;submit&quot;)]
                    )
                ]
            ),
            _v(&quot; &quot;),
            _c(&#39;div&#39;,
                [
                    _c(
                        &#39;ul&#39;,
                        // 这里返回的是一个数组（li标签组成的数组）
                        _l((list), function (item) {
                            return _c(&#39;li&#39;, [_v(_s(item))])
                        }), 0
                    )
                ]
            )
        ]
    )
}

// view ---&gt;  data ---&gt; 使用input的事件绑定 ---&gt; 更新页面数据到data
// data ---&gt;  view ---&gt; defineProperty ---&gt;  同步数据到页面</code></pre>
<h4 id="234-vm_c是什么，render函数返回了什么？">2.3.4 vm._c是什么，render函数返回了什么？</h4>
<ol>
<li><p>vdom: 使用js模拟DOm结构</p>
</li>
<li><p>snabbdom: h函数和patch函数
 Vue中的v_c：就是相当于snabbdom函数的h函数
 patch函数：</p>
<pre><code class="language-js"> vm._update(vnode) {
     const prevNode = vm._vnode;
     vm._vnode = vnode;
     if (!prevNode) {
         // 首次渲染的时候
         vm.$el = vm.__patch__(vm.$el, vnode);
     }
     else{
         vm.$el = vm.__patch__(prevNode, vnode);
     }
 }

 // 开始更新vue组件（修改data的属性的时候，Object.defineProperty）
 function updateComponent() {
   vm._update(vm._render());
 }</code></pre>
</li>
</ol>
<p><strong>**</strong>（问题总结）</p>
<ul>
<li><ol>
<li>vue模板：字符串，有逻辑，嵌入JS变量……</li>
</ol>
</li>
<li><ol start="2">
<li>模板必须转换为JS代码（有逻辑的，渲染html，js变量）</li>
</ol>
</li>
<li><ol start="3">
<li>render函数是什么样子的</li>
</ol>
</li>
<li><ol start="4">
<li>render函数的执行结果是返回的vnode</li>
</ol>
</li>
<li><ol start="5">
<li>updateComponent</li>
</ol>
</li>
</ul>
<h2 id="3-vue的整个实现流程源码解读？？？（总结点）">3. Vue的整个实现流程源码解读？？？（总结点）</h2>
<h3 id="31-解析模板成render函数">3.1 解析模板成render函数</h3>
<pre><code class="language-html">    &lt;template&gt;&lt;/template&gt; ---&gt;&gt;&gt; render 函数</code></pre>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>with函数的使用</li>
<li>模板中的所有信息都被render函数包含</li>
<li>模板中用到的data中的属性，都变成了JS变量</li>
<li>模板中的v-model v-for v-on都变成了JS逻辑</li>
<li>render函数返回vnode</li>
</ul>
</blockquote>
<h3 id="32-响应式开始监听数据">3.2 响应式开始监听数据</h3>
<blockquote>
<ul>
<li>Object.defineProperty</li>
<li>将data的属性代理到vm上</li>
</ul>
</blockquote>
<pre><code class="language-js">    with(vm) {

    }</code></pre>
<h3 id="33-首次渲染，显示页面，且绑定依赖">3.3 首次渲染，显示页面，且绑定依赖</h3>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>初次渲染，执行updateComponent, 执行vm._render()</li>
<li>执行render函数，会访问到vm.list和vm.title属性</li>
<li>会被响应式的get方法监听到(Object.defineProperty)</li>
</ul>
</blockquote>
<pre><code class="language-js">    Object.defineProperty(mv, key, {
        get: function() {
          return data[key];
        }
    })</code></pre>
<blockquote>
<ul>
<li>执行updateComponent, 会执行vdom的patch方法</li>
<li>patch将vnode渲染成DOM，初次渲染完成</li>
</ul>
</blockquote>
<h3 id="34-为何要监听get-直接监听set不行吗？">3.4 为何要监听get, 直接监听set不行吗？</h3>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>data中有很多属性，有些会被用到，有些可能不被用到</li>
<li>被用到的会走到get, 不被用到的不会走到get</li>
<li>未走到get中的属性，set的时候我们也无需关心</li>
<li>避免不必要的重复渲染（关键点）</li>
</ul>
</blockquote>
<pre><code class="language-js">    vm._update(vnode) {
        const prevNode = vm._vnode;
        vm._vnode = vnode;
        if (!prevNode) {
            // 首次渲染的时候
            vm.$el = vm.__patch__(vm.$el, vnode);
        }
        else{
            vm.$el = vm.__patch__(prevNode, vnode);
        }
    }

    // 开始更新vue组件（修改data的属性的时候，Object.defineProperty）
    function updateComponent() {
      vm._update(vm._render());
    }</code></pre>
<h3 id="35-data属性变化，触发rerender函数">3.5 data属性变化，触发rerender函数</h3>
<pre><code class="language-js">    Object.defineProperty(mv, key, {
        set: function(newVal) {
          data[key] = newVal;
          // 开始执行
          updateComponnet()
        }
    })</code></pre>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>修改属性，被响应式的set监听到</li>
<li>set中执行updateComponnet</li>
<li>updateComponent重新执行vm._render()</li>
<li>生成的vnode和preVnode, 通过patch进行对比</li>
<li>渲染到html中去</li>
</ul>
</blockquote>
<h2 id="4-说一下从使用jquery和使用框架的区别？">4. 说一下从使用jQuery和使用框架的区别？</h2>
<ol>
<li>数据和视图的分离（代码解耦）---开房封闭原则</li>
<li>数据驱动视图，只关系数据变化，DOM操作被封装</li>
</ol>
<h2 id="5-说一下对mvvm的理解？">5. 说一下对MVVM的理解？</h2>
<ol>
<li>MVC</li>
<li>MVVM</li>
<li>关于ViewModel</li>
</ol>
<h2 id="6-vue中如何实现响应式的呢？">6. Vue中如何实现响应式的呢？</h2>
<ol>
<li>响应式</li>
<li>模板引擎</li>
<li>渲染（首次渲染，后面的渲染）</li>
</ol>
<blockquote>
<ul>
<li>Object.defineProperty</li>
<li>data的属性代理到vm上面（with）</li>
</ul>
</blockquote>
<h2 id="7-vue中是如何解析模板的呢？">7. Vue中是如何解析模板的呢？</h2>
<ol>
<li>模板的本质就是字符串（有逻辑）</li>
<li>模板必须要转换为JS代码</li>
<li>render函数的实现（返回的是一个vnode）</li>
<li>updateComponnet(patch函数)</li>
</ol>
<h2 id="8-说一下vue的整体实现流程？">8. 说一下Vue的整体实现流程？</h2>
<ol>
<li>解析模板成为render函数</li>
<li>响应式开始监听数据</li>
<li>首次渲染，显示页面，且绑定依赖</li>
<li>data属性数据发生变化，重新触发惹人的人、函数</li>
</ol>
<h2 id="9-vue的数据劫持以及操作数组的坑？">9. vue的数据劫持以及操作数组的坑？</h2>
<ol>
<li><p>给data添加新属性的时候vm.$set(vm.info,&#39;newKey&#39;,&#39;newValue&#39;)</p>
</li>
<li><p>data上面属性值是数组的时候，需要用数组的方法操作数组，而不能通过index或者length属性去操作数组，因为监听不到属性操作的动作。</p>
</li>
</ol>
<h2 id="10-谈一下对mvvm和mvc的理解？">10. 谈一下对mvvm和mvc的理解？</h2>
<ol>
<li>mvc其实是model view Model传统所有逻辑在controller,难以维护。用户输入 =&gt; 控制器 =&gt; 数据改变，如果数据变了需要获取dom，操作属性，再渲染到视图上。</li>
<li>mvvm其实是model view viewModel数据变化驱动视图。数据变了，不需要你获取dom，然后改变dom的内容。这边数据变了，vm负责监听，视图那边自动发生变化。最明显的是不需要document.querySelector之类的了。</li>
</ol>
<h2 id="11-vm的实质">11. vm的实质?</h2>
<blockquote>
<p>[!NOTE]
上面说了vm负责让数据变了，视图能自动发生变化。这么神奇魔术背后的原理是Object.defineProperty。其实就是属性的读取和设置操作都进行了监听，当有这样的操作的时候，进行某种动作。来一个demo玩下。</p>
</blockquote>
<pre><code class="language-js">    // 对obj上面的属性进行读取和设置监听
    let obj = {
        name:&#39;huahua&#39;,
        age:18
    }
    function observer(obj){
        if(typeof obj === &#39;object&#39;){
            for (const key in obj) {
                defineReactive(obj,key,obj[key])
            }
        }
    }
    // get的return的值才是最终你读取到的值。所以设的值是为读取准备的。
    // set传的参数是设置的值，注意这里不要有obj.name = newVal 这样又触发set监听，会死循环的。
    function defineReactive(obj,key,value){
        Object.defineProperty(obj,key,{
            get:function(){
                console.log(&#39;你在读取&#39;)
                // happy的话这边可以value++，这样你发现读取的值始终比设置的大一个，因为return就是读取到的值
                return value
            },
            set:function(newVal){
                console.log(&#39;数据更新了&#39;)
                value = newVal
            }

        })
    }
    observer(obj)
    obj.age = 2
    console.log(obj.age)</code></pre>
<h2 id="12-definereactive的实现响应式手写实现">12. defineReactive的实现(响应式手写实现)?</h2>
<blockquote>
<p>[!NOTE]
在浏览器执行的时候，控制台随手也可以obj.name=&quot;hua1&quot;类似的操作，发现都监听到了。但是如果更深一步，obj.name={firstname:&#39;hua&#39;,lastname:&#39;piaoliang&#39;};obj.name.lastname=&#39;o&#39;就不能监听到属性修改了。因为并没有将新的赋值对象监听其属性。所以函数需要改进。 </p>
</blockquote>
<p>需要在defineReactive的第一行加上observer(value)。设置值的时候如果是对象的话，也需要将这个对象数据劫持。同理，set那边也需要加这行。</p>
<h3 id="121-基础实现">12.1 基础实现</h3>
<pre><code class="language-js">    function defineReactive(obj,key,value){
       // 注意这里！！！！！！！
        observer(value)
        Object.defineProperty(obj,key,{
            get:function(){
                return value
            },
            set:function(newVal){
                // 注意这里！！！！！！！
                observer(newVal)
                console.log(&#39;数据更新了&#39;)
                value = newVal
            }

        })
    }</code></pre>
<h3 id="122-数组方法的劫持">12.2 数组方法的劫持</h3>
<p>如果obj.name=[1,2,3];obj.name.push(4)发现又没有通知了，这是因为Object.defineProperty不支持监听数组变化。所以需要重写数组上面的方法。</p>
<pre><code class="language-js">        // 把数组上大部分方法重写了，这里不一一列举。但是如果你 [1,2].length--，这是捕捉不到的
        let arr = [&#39;push&#39;,&#39;slice&#39;,&#39;split&#39;]
        arr.forEach(method=&gt;{
            let oldPush = Array.property[method]
            Array.property[method] = function(value){
                console.log(&#39;数据更新&#39;)
                oldPush.call(this, value)
            }
        })</code></pre>
<h3 id="123-vue-的双向绑定的原理是什么常考">12.3 vue 的双向绑定的原理是什么(常考)</h3>
<blockquote>
<p>vue.js 是采用数据劫持结合发布者-订阅者模式的方式，通过 Object.defineProperty()来劫持各个属性的 setter，getter，在数据变动时发布消息给订阅者，触发相应的监听回调。</p>
</blockquote>
<ol>
<li><p>第一步：需要 observe 的数据对象进行递归遍历，包括子属性对象的属性，都加上 setter 和 getter 这样的话，给这个对象的某个值赋值，就会触发 setter，那么就能监听到了数据变化</p>
</li>
<li><p>第二步：compile 解析模板指令，将模板中的变量替换成数据，然后初始化渲染页面视图，并将每个指令对应的节点绑定更新函数，添加监听数据的订阅者，一旦数据有变动，收到通知，更新视图</p>
</li>
<li><p>第三步：Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁，主要做的事情是:</p>
<ul>
<li>在自身实例化时往属性订阅器(dep)里面添加自己</li>
<li>自身必须有一个 update()方法</li>
<li>待属性变动 dep.notice()通知时，能调用自身的 update() 方法，并触发 Compile 中绑定的回调，则功成身退。</li>
</ul>
</li>
<li><p>第四步：MVVM 作为数据绑定的入口，整合 Observer、Compile 和 Watcher 三者，通过 Observer 来监听自己的 model 数据变化，通过 Compile 来解析编译模板指令，最终利用 Watcher 搭起 Observer 和 Compile 之间的通信桥梁，达到数据变化 -&gt; 视图更新；视图交互变化(input) -&gt; 数据 model 变更的双向绑定效果。</p>
</li>
</ol>
<h2 id="13-vue如何监听数组数据变化？">13. Vue如何监听数组数据变化？</h2>
<h3 id="131-vmset方法">13.1 vm.$set方法</h3>
<p>因为是一开始就数据劫持了。所以后来如果新绑定属性，是没有数据劫持的。如果需要调用 vm.$set(vm.info,&#39;newKey&#39;,&#39;newValue&#39;)，vm是vue的实例。</p>
<h3 id="132-使用数组的方法">13.2 使用数组的方法</h3>
<p>当属性值是数组，数组变化的时候，跟踪不到变化。因为数组虽然是对象，但是Object.defineProperty不支持数组，所以vue改写了数组的所有方法，当调用数组方法的时候，就调动变动事件。但是不能通过属性或者索引控制数组，比如length，index。</p>
<blockquote>
<p>[!NOTE]
总结：data上，绑定所有属性避免后期加新属性。如果是数组，只能通过数组方法修改数组。如下例子，控制台vm.arr--发现视图并不会变化，vm.arr.push(4)就能变化</p>
</blockquote>
<pre><code class="language-html">    &lt;div id=&quot;app&quot;&gt;{{msg}}{{arr}}&lt;/div&gt;
        &lt;script src=&quot;node_modules/vue/dist/vue.js&quot;&gt;&lt;/script&gt;
        &lt;script&gt;
        let vm = new Vue({
            el:&#39;#app&#39;,
            // template加上之后会替换掉#app这个标签
            // template:&#39;&lt;h1&gt;en&lt;/h1&gt;&#39;,
            data:{msg:&#39;msg&#39;,arr:[1,2,3]}
        })
        vm.msg = &#39;msg&#39;
        &lt;/script&gt;</code></pre>
<h2 id="14-vue-的优点和缺点是什么？">14. vue 的优点和缺点是什么？</h2>
<h3 id="141-优点">14.1 优点</h3>
<ol>
<li>低耦合。视图（View）可以独立于 Model 变化和修改，一个 ViewModel 可以绑定到不同的&quot;View&quot;上，当 View 变化的时候 Model 可以不变，当 Model 变化的时候 View 也可以不变。</li>
<li>可重用性。你可以把一些视图逻辑放在一个 ViewModel 里面，让很多 view 重用这段视图逻辑。</li>
<li>独立开发。开发人员可以专注于业务逻辑和数据的开发（ViewModel），设计人员可以专注于页面设计，使用 Expression Blend 可以很容易设计界面并生成 xml 代码。</li>
<li>可测试。界面素来是比较难于测试的，而现在测试可以针对 ViewModel 来写。</li>
</ol>
<h3 id="142-缺点（面试常考）">14.2 缺点（面试常考）</h3>
<ol>
<li>网站SEO问题</li>
<li>浏览器兼容性问题</li>
<li>海量数据节点的渲染问题</li>
</ol>
<h2 id="15-请详细说下你对-vue-生命周期的理解？">15. 请详细说下你对 vue 生命周期的理解？</h2>
<blockquote>
<p>总共分为 8 个阶段创建前/后，载入前/后，更新前/后，销毁前/后。</p>
</blockquote>
<ol>
<li>创建前/后： 在 <strong>beforeCreate</strong> 阶段，vue 实例的挂载元素 el 还没有, <strong>created</strong>阶段。</li>
<li>载入前/后：在 <strong>beforeMount</strong> 阶段，vue 实例的$el 和 data 都初始化了，但还是挂载之前为虚拟的 dom 节点，data.message 还未替换。在 <strong>mounted</strong> 阶段，vue 实例挂载完成，data.message 成功渲染。</li>
<li>更新前/后：当 data 变化时，会触发<strong>beforeUpdate</strong> 和 <strong>updated</strong>方法。</li>
<li>销毁前/后：在执行 <strong>destroy 方法后</strong>，对 data 的改变不会再触发周期函数，说明此时 vue 实例已经解除了事件监听以及和 dom 的绑定，但是 dom 结构依然存在</li>
</ol>
<h2 id="16-vue组件之间的传值？">16. Vue组件之间的传值？</h2>
<h3 id="161-父组件与子组件传值">16.1. 父组件与子组件传值</h3>
<pre><code class="language-html">//父组件通过标签上面定义传值
&lt;template&gt;
    &lt;Main :obj=&quot;data&quot;&gt;&lt;/Main&gt;
&lt;/template&gt;
&lt;script&gt;
    //引入子组件
    import Main form &quot;./main&quot;

    exprot default{
        name:&quot;parent&quot;,
        data(){
            return {
                data:&quot;我要向子组件传递数据&quot;
            }
        },
        //初始化组件
        components:{
            Main
        }
    }
&lt;/script&gt;


//子组件通过props方法接受数据
&lt;template&gt;
    &lt;div&gt;{{data}}&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
    exprot default{
        name:&quot;son&quot;,
        //接受父组件传值
        props:[&quot;data&quot;]
    }
&lt;/script&gt;</code></pre>
<h3 id="162-子组件向父组件传递数据">16.2 子组件向父组件传递数据</h3>
<pre><code class="language-html">//子组件通过$emit方法传递参数
&lt;template&gt;
   &lt;div v-on:click=&quot;events&quot;&gt;&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
    //引入子组件
    import Main form &quot;./main&quot;

    exprot default{
        methods:{
            events:function(){

            }
        }
    }
&lt;/script&gt;


//

&lt;template&gt;
    &lt;div&gt;{{data}}&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
    exprot default{
        name:&quot;son&quot;,
        //接受父组件传值
        props:[&quot;data&quot;]
    }
&lt;/script&gt;</code></pre>
<h2 id="17-vue路由相关问题">17. Vue路由相关问题</h2>
<h3 id="171-active-class-是哪个组件的属性？">17.1 active-class 是哪个组件的属性？</h3>
<p>vue-router 模块的 router-link 组件。</p>
<h3 id="172-嵌套路由怎么定义？">17.2 嵌套路由怎么定义？</h3>
<blockquote>
<p>在实际项目中我们会碰到多层嵌套的组件组合而成，但是我们如何实现嵌套路由呢？因此我们需要在 VueRouter 的参数中使用 children 配置，这样就可以很好的实现路由嵌套。
index.html，只有一个路由出口</p>
</blockquote>
<pre><code class="language-html">&lt;div id=&quot;app&quot;&gt;
    &lt;!-- router-view 路由出口, 路由匹配到的组件将渲染在这里 --&gt;
    &lt;router-view&gt;&lt;/router-view&gt;
&lt;/div&gt;</code></pre>
<p>main.js，路由的重定向，就会在页面一加载的时候，就会将 home 组件显示出来，因为重定向指向了 home 组件，redirect 的指向与 path 的必须一致。children 里面是子路由，当然子路由里面还可以继续嵌套子路由。</p>
<pre><code class="language-js">import Vue from &#39;vue&#39;
import VueRouter from &#39;vue-router&#39;
Vue.use(VueRouter)

//引入两个组件

import home from &quot;./home.vue&quot;
import game from &quot;./game.vue&quot;
//定义路由
const routes = [
    { path: &quot;/&quot;, redirect: &quot;/home&quot; },//重定向,指向了home组件
    {
        path: &quot;/home&quot;, component: home,
        children: [
            { path: &quot;/home/game&quot;, component: game }
        ]
    }
]
//创建路由实例
const router = new VueRouter({routes})

new Vue({
    el: &#39;#app&#39;,
    data: {
    },
    methods: {
    },
    router
})</code></pre>
<p>home.vue，点击显示就会将子路由显示在出来，子路由的出口必须在父路由里面，否则子路由无法显示。</p>
<h3 id="173-路由之间跳转？">17.3 路由之间跳转？</h3>
<ul>
<li>声明式（标签跳转） <code>&lt;router-link :to=&quot;index&quot;&gt;</code></li>
<li>编程式（ js 跳转） <code>router.push(&#39;index&#39;)</code></li>
</ul>
<h3 id="174-懒加载（按需加载路由）（常考）">17.4 懒加载（按需加载路由）（常考）</h3>
<blockquote>
<p>webpack 中提供了 require.ensure()来实现按需加载。以前引入路由是通过 import 这样的方式引入，改为 const 定义的方式进行引入。</p>
</blockquote>
<h4 id="1741-不进行页面按需加载引入方式">17.4.1 不进行页面按需加载引入方式</h4>
<pre><code class="language-js">import  home   from &#39;../../common/home.vue&#39;</code></pre>
<h4 id="1742-进行页面按需加载的引入方式">17.4.2 进行页面按需加载的引入方式</h4>
<pre><code class="language-js">const  home = r =&gt; require.ensure( [], () =&gt; r (require(&#39;../../common/home.vue&#39;)))</code></pre>
<h3 id="175-vue-router-有哪几种导航钩子">17.5 vue-router 有哪几种导航钩子?</h3>
<ol>
<li>全局导航钩子<ul>
<li>router.beforeEach(to, from, next),</li>
<li>router.beforeResolve(to, from, next),</li>
<li>router.afterEach(to, from ,next)</li>
</ul>
</li>
<li>组件内钩子<ul>
<li>beforeRouteEnter,</li>
<li>beforeRouteUpdate,</li>
<li>beforeRouteLeave</li>
</ul>
</li>
<li>单独路由独享组件<ul>
<li>beforeEnter</li>
</ul>
</li>
</ol>
<h2 id="18-vux相关问题">18. Vux相关问题</h2>
<h3 id="181-vuex-是什么？怎么使用？哪种功能场景使用它？">18.1 vuex 是什么？怎么使用？哪种功能场景使用它？</h3>
<blockquote>
<p>vue 框架中状态管理。在 main.js 引入 store，注入。新建了一个目录 store，….. export 。场景有：单页应用中，组件之间的状态。音乐播放、登录状态、加入购物车</p>
</blockquote>
<pre><code class="language-js">// 新建 store.js
import vue from &#39;vue&#39;
import vuex form &#39;vuex&#39;
vue.use(vuex)
export default new vuex.store({
    //...code
})

//main.js
import store from &#39;./store&#39;
...</code></pre>
<h3 id="182-vuex-有哪几种属性？">18.2 vuex 有哪几种属性？</h3>
<p>有 5 种，分别是 state、getter、mutation、action、module</p>
<h3 id="183-vuex-的-store-特性是什么">18.3 vuex 的 store 特性是什么</h3>
<ul>
<li>vuex 就是一个仓库，仓库里放了很多对象。其中 state 就是数据源存放地，对应于一般 vue 对象里面的 data</li>
<li>state 里面存放的数据是响应式的，vue 组件从 store 读取数据，若是 store 中的数据发生改变，依赖这相数据的组件也会发生更新</li>
<li>它通过 mapState 把全局的 state 和 getters 映射到当前组件的 computed 计算属性</li>
</ul>
<h3 id="184-vuex-的-getter-特性是什么">18.4 vuex 的 getter 特性是什么</h3>
<ul>
<li>getter 可以对 state 进行计算操作，它就是 store 的计算属性</li>
<li>虽然在组件内也可以做计算属性，但是 getters 可以在多给件之间复用</li>
<li>如果一个状态只在一个组件内使用，是可以不用 getters</li>
</ul>
<h3 id="185-vuex-的-mutation-特性是什么">18.5 vuex 的 mutation 特性是什么</h3>
<ul>
<li>action 类似于 muation, 不同在于：action 提交的是 mutation,而不是直接变更状态</li>
<li>action 可以包含任意异步操作</li>
</ul>
<h3 id="186-vue-中-ajax-请求代码应该写在组件的-methods-中还是-vuex-的-action-中">18.6 vue 中 ajax 请求代码应该写在组件的 methods 中还是 vuex 的 action 中</h3>
<p>如果请求来的数据不是要被其他组件公用，仅仅在请求的组件内使用，就不需要放入 vuex 的 state 里</p>
<p>如果被其他地方复用，请将请求放入 action 里，方便复用，并包装成 promise 返回</p>
<h3 id="187-不用-vuex-会带来什么问题">18.7 不用 vuex 会带来什么问题</h3>
<ul>
<li>可维护性会下降，你要修改数据，你得维护 3 个地方</li>
<li>可读性下降，因为一个组件里的数据，你根本就看不出来是从哪里来的</li>
<li>增加耦合，大量的上传派发，会让耦合性大大的增加，本来 Vue 用 Component 就是为了减少耦合，现在这么用，和组件化的初衷相背</li>
</ul>
<h3 id="188-vuex-原理">18.8 vuex 原理</h3>
<p>vuex 仅仅是作为 vue 的一个插件而存在，不像 Redux,MobX 等库可以应用于所有框架，vuex 只能使用在 vue 上，很大的程度是因为其高度依赖于 vue 的 computed 依赖检测系统以及其插件系统，</p>
<p>vuex 整体思想诞生于 flux,可其的实现方式完完全全的使用了 vue 自身的响应式设计，依赖监听、依赖收集都属于 vue 对对象 Property set get 方法的代理劫持。最后一句话结束 vuex 工作原理，vuex 中的 store 本质就是没有 template 的隐藏着的 vue 组件；</p>
<h3 id="189-扩展问题">18.9 扩展问题</h3>
<h4 id="1891-使用-vuex-只需执行-vueusevuex，并在-vue-的配置中传入一个-store-对象的示例，store-是如何实现注入的？">18.9.1 使用 Vuex 只需执行 Vue.use(Vuex)，并在 Vue 的配置中传入一个 store 对象的示例，store 是如何实现注入的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>Vue.use(Vuex) 方法执行的是 install 方法，它实现了 Vue 实例对象的 init 方法封装和注入，使传入的 store 对象被设置到 Vue 上下文环境的$store 中。因此在 Vue Component 任意地方都能够通过 this.$store 访问到该 store。</p>
<h4 id="1892--state-内部支持模块配置和模块嵌套，如何实现的？">18.9.2  state 内部支持模块配置和模块嵌套，如何实现的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>在 store 构造方法中有 makeLocalContext 方法，所有 module 都会有一个 local context，根据配置时的 path 进行匹配。所以执行如 dispatch(&#39;submitOrder&#39;, payload)这类 action 时，默认的拿到都是 module 的 local state，如果要访问最外层或者是其他 module 的 state，只能从 rootState 按照 path 路径逐步进行访问。</p>
<h4 id="1893-在执行-dispatch-触发-actioncommit-同理的时候，只需传入type-payload，action-执行函数中第一个参数-store-从哪里获取的？">18.9.3 在执行 dispatch 触发 action(commit 同理)的时候，只需传入(type, payload)，action 执行函数中第一个参数 store 从哪里获取的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>store 初始化时，所有配置的 action 和 mutation 以及 getters 均被封装过。在执行如 dispatch(&#39;submitOrder&#39;, payload)的时候，actions 中 type 为 submitOrder 的所有处理方法都是被封装后的，其第一个参数为当前的 store 对象，所以能够获取到 { dispatch, commit, state, rootState } 等数据。</p>
<h4 id="1894-vuex-如何区分-state-是外部直接修改，还是通过-mutation-方法修改的？">18.9.4 Vuex 如何区分 state 是外部直接修改，还是通过 mutation 方法修改的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>Vuex 中修改 state 的唯一渠道就是执行 commit(&#39;xx&#39;, payload) 方法，其底层通过执行 this._withCommit(fn) 设置_committing 标志变量为 true，然后才能修改 state，修改完毕还需要还原_committing 变量。外部修改虽然能够直接修改 state，但是并没有修改_committing 标志位，所以只要 watch 一下 state，state change 时判断是否_committing 值为 true，即可判断修改的合法性。</p>
<h4 id="1895-调试时的时空穿梭功能是如何实现的？">18.9.5 调试时的&quot;时空穿梭&quot;功能是如何实现的？</h4>
<p><a href="https://tech.meituan.com/vuex_code_analysis.html">美团</a></p>
<p>devtoolPlugin 中提供了此功能。因为 dev 模式下所有的 state change 都会被记录下来，&#39;时空穿梭&#39; 功能其实就是将当前的 state 替换为记录中某个时刻的 state 状态，利用 store.replaceState(targetState) 方法将执行 this._vm.state = state 实现。</p>
<h2 id="19-指令相关">19. 指令相关</h2>
<h3 id="191-自定义指令v-check-v-focus-的方法有哪些-它有哪些钩子函数-还有哪些钩子函数参数">19.1 自定义指令(v-check, v-focus) 的方法有哪些? 它有哪些钩子函数? 还有哪些钩子函数参数</h3>
<ul>
<li>全局定义指令：在 vue 对象的 directive 方法里面有两个参数, 一个是指令名称, 另一个是函数。</li>
<li>组件内定义指令：directives</li>
<li>钩子函数: bind(绑定事件出发)、inserted(节点插入时候触发)、update(组件内相关更新)</li>
<li>钩子函数参数： el、binding</li>
</ul>
<h3 id="192-说出至少-4-种-vue-当中的指令和它的用法">19.2 说出至少 4 种 vue 当中的指令和它的用法</h3>
<p>v-if(判断是否隐藏)、v-for(把数据遍历出来)、v-bind(绑定属性)、v-model(实现双向绑定)</p>
<h2 id="20-axios">20. axios</h2>
<h3 id="201-axios-是什么？怎么使用？描述使用它实现登录功能的流程">20.1 axios 是什么？怎么使用？描述使用它实现登录功能的流程</h3>
<blockquote>
<p>[!NOTE]
思路：使用Vue的router.beforeEach钩子函数结合axios的拦截器功能来实现。</p>
</blockquote>
<h3 id="202-axios与ajax-fetch的区别和优缺点？">20.2 axios与ajax, fetch的区别和优缺点？</h3>
<ul>
<li>参考文章：<a href="https://blog.csdn.net/qq_36407875/article/details/84642060">https://blog.csdn.net/qq_36407875/article/details/84642060</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/cb8fbf13-296c-4ccb-bace-8c4a5cf5e618</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cb8fbf13-296c-4ccb-bace-8c4a5cf5e618</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 29 Apr 2024 04:56:14 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】实现乱序函数]]></title><description><![CDATA[<h1 id="实现乱序函数？（面试常考）">实现乱序函数？（面试常考）</h1>
<pre><code class="language-js">// v1. 基本的实现
var values = [1, 2, 3, 4, 5];
values.sort(function () {
    // Math.random() - 0.5 随机得到一个正数、负数或是 0，如果是正数则降序排列，如果是负数则升序排列，如果是 0 就不变，然后不断的升序或者降序，最终得到一个乱序的数组。
    return Math.random() - 0.5;
})

// test
var times = [0, 0, 0, 0, 0];
for (var i = 0; i &lt; 100000; i++) {
    let arr = [1, 2, 3, 4, 5];
    arr.sort(() =&gt; Math.random() - 0.5);
    times[arr[4]-1]++;
}

console.log(times)

// 插入排序
function insertSort(a, from, to) {

}


// v2: 乱序算法加强版
function shuffle(arr) {
    for (let i = arr.length; i &gt; 0; i--) {
        // 遍历数组元素，然后将当前元素与以后随机位置的元素进行交换
        let j = Math.floor(Math.random() * i);
        // arr[i - 1] 就是当前的这个arr数组的最后一个元素
        [arr[i - 1], arr[j]] = [arr[j], arr[j - 1]];
    }
}</code></pre>
<blockquote>
<p>[!NOTE]
v8 为例，v8 在处理 sort 方法时，当目标数组长度小于 10 时，使用插入排序；反之，使用快速排序和插入排序的混合排序。</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/c70e54bc-e582-4399-9562-6749b69ab096</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c70e54bc-e582-4399-9562-6749b69ab096</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Apr 2024 02:39:55 GMT</pubDate></item><item><title><![CDATA[【JS相关】虚拟DOM]]></title><description><![CDATA[<h1 id="虚拟dom">虚拟DOM</h1>
<h2 id="1介绍一下vdom">1.介绍一下vdom?</h2>
<ol>
<li>virtual dom， 虚拟DOM</li>
<li>使用JS来模拟DOM结构</li>
<li>DOM变化的对比，放在JS层来做（图灵完备语言），提高效率</li>
<li>DOM操作非常昂贵（消耗性能）</li>
</ol>
<h2 id="2snabbdom的使用">2.Snabbdom的使用</h2>
<pre><code class="language-js">var snabbdom = window.snabbdom;
// 定义patch
var patch = snabbdom.init([
    snabbdom_class,
    snabbdom_props,
    snabbdom_style,
    snabbdom_eventlisteners
])

// 定义h
var h = snabbdom.h;

var container = document.getElementById(&#39;container&#39;);
// 生成vnode
var vnode = h(&#39;ul#list&#39;, {}, [
    h(&#39;li.item&#39;, {}, &#39;Item 1&#39;),
    h(&#39;li.item&#39;, {}, &#39;Item 2&#39;),
]);

patch(container, vnode)


// 修改DOM内容
document.getElementById(&#39;btn-change&#39;).addEventListener(&#39;click&#39;, function () {
    // 生成newVnode
    var newVnode = h(&#39;ul#list&#39;, {}, [
        h(&#39;li.item&#39;, {}, &#39;Item 1&#39;),
        // DOM节点中不同的地方
        h(&#39;li.item&#39;, {}, &#39;Item B&#39;),
        h(&#39;li.item&#39;, {}, &#39;Item 3&#39;),
    ]);
    patch(vnode, newVnode)
})</code></pre>
<blockquote>
<p>[!NOTE]
核心API总结：</p>
</blockquote>
<ol>
<li>h(&#39;&lt;标签名称&gt;&#39;, { 属性 }, [子元素])</li>
<li>h(&#39;&lt;标签名&gt;&#39;, {属性}， ‘...’)</li>
<li>patch(container, vnode)</li>
<li>patch(vnode, newNode)</li>
</ol>
<h2 id="3介绍一下diff算法">3.介绍一下diff算法?</h2>
<h3 id="31-diff算法是什么">3.1 Diff算法是什么</h3>
<ol>
<li>Linux中：  diff 文件1.txt 文件2.txt</li>
<li>Git中：    git diff</li>
<li>在线比对工具<h3 id="32-去繁就简">3.2 去繁就简</h3>
</li>
<li>diff算法实现非常复杂，实现难度很大，源码量很大</li>
<li>去繁就简，讲明白核心流程，不关心细节（非常高效的手段）</li>
<li>面试官也大部分不清楚细节，但是很关系核心流程的实现<h3 id="33-vdom为何使用diff算法？">3.3 VDOM为何使用diff算法？</h3>
</li>
<li>DOM操作是昂贵的，因此要尽量减少DOM的操作</li>
<li>找出本次DOM必须更新的节点来更新，其他的不更新</li>
<li>这个找出的过程，就需要使用diff算法（找出两个虚拟DOM的差异）</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/a9c19d77-a3f1-4c27-9cb0-ae01627a717b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a9c19d77-a3f1-4c27-9cb0-ae01627a717b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Apr 2024 03:42:03 GMT</pubDate></item><item><title><![CDATA[【计算机网络】UDP]]></title><description><![CDATA[<h1 id="udp">UDP</h1>
<h2 id="1-udp概念相关">1. UDP概念相关</h2>
<blockquote>
<p>[!NOTE]</p>
<ul>
<li>UDP（User Datagram Protocol），又叫用户数据报协议。</li>
<li>UDP是一个无连接的、不可靠、基于数据报的传输协议。UDP只是报文（报文可以理解为一段段的数据）的搬运工，不会对报文进行任何拆分和拼装操作。</li>
</ul>
</blockquote>
<h3 id="11-udp">1.1 UDP</h3>
<ul>
<li>在发送端，应用层将数据传递给传输层，UDP只会给数据增加一个UDP头标识一下这是UDP，然后就传递给网络层了，不进行任何拆分。</li>
<li>在接收端，网络层将数据传递给传输层，UDP只取出IP报文头就传递给应用层，不进行任何拼装。</li>
</ul>
<h3 id="12-udp特点">1.2 UDP特点</h3>
<ul>
<li>面向报文</li>
<li>不可靠传输</li>
<li>高效</li>
</ul>
<h4 id="121-不可靠性">1.2.1 不可靠性</h4>
<ol>
<li>UDP是<strong>无连接</strong>的，也就是说通信不需要建立和断开链接。</li>
<li>UDP是不可靠的。它不会去备份数据，也不关心对方是否能收到数据。</li>
<li>UDP<strong>没有拥塞控制</strong>，一直以恒定的速度发送数据，即使网络条件不好，也不进行速率调整。 造成的弊端就是在网络条件不好时可能导致丢包。</li>
</ol>
<h4 id="122-高效性">1.2.2 高效性</h4>
<p>因为 UDP 没有 TCP 那么复杂，不需要保证数据不丢失且有序到达。所以 UDP 的头部开销小，只有八字节，相比 TCP 的至少二十字节要少得多，在传输数据报文时是很高效的。</p>
<h3 id="13-应用场景">1.3 应用场景</h3>
<p>当强调输出性能而非完整性时，如音频和多媒体的实时传输。有个视频流传输协议RTP的实时传输就是基于UDP封装而来的。</p>
<h3 id="14-udp报头">1.4 UDP报头</h3>
<p>UDP包头部包含了以下几个数据</p>
<ul>
<li>两个十六位的端口号，分别为源端口（可选字段）和目标端口</li>
<li>整个数据报文的长度</li>
<li>整个数据报文的检验和（IPv4 可选 字段），该字段用于发现头部信息和数据中的错误</li>
</ul>
<p><img src="../img/UDP.png" alt="UDP Header"></p>
<h3 id="15-传输方式">1.5 传输方式</h3>
<blockquote>
<p>[!NOTE]
支持一对一，一对多，多对多，多对一的方式，也就是说 UDP 提供了单播，多播，广播的功能。</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/f47f8758-06d3-446c-a169-062dc7dbdb60</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f47f8758-06d3-446c-a169-062dc7dbdb60</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Apr 2024 08:25:48 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】常见算法]]></title><description><![CDATA[<h1 id="大数相加问题">大数相加问题</h1>
<pre><code class="language-js">  function sumString(a, b){
    a = a + &#39;&#39;;
    b = n + &#39;&#39;;

    var arrA = a.spilt(&#39;&#39;),
        arrB = b.spilt(&#39;&#39;),
        distance = arrA.length - arrB.length,   // 计算两者的长度差，取最大的那个作为基准点
        len = distance &gt; 0 ? arrA.length : arrB.length,
        carry = 0;        // 表示相加之后的进位

        // 把长度小的那个数组的前面用0补齐，让两者的位数相同
        if (distance &gt; 0){
            for (var i = 0; i &lt; distance; i++) {
              arrB.unshift(&#39;0&#39;);
            }
        } else {
          for (var i = 0; i &lt; Math.abs(distance); i++) {
            arrA.unshift(&#39;0&#39;);
          }
        }

        var res = [];
        // 开始从数组的最后一位向前遍历，相同位数对应相加
        for (var i = len - 1; i &gt;= 0; i--) {
          var temp = +arrA[i] + (+arrB[i]) + carry;
          if (temp &gt;= 10) {
            // 6+7=13, 只需要取出最后一位
            carry = 1;
            // 先把数组转换为字符串，然后拿出来最后一位数
            res.push((temp + &#39;&#39;)[1]);
          } else {
            carry = 0;
            res.push(temp + &#39;&#39;);
          }
        }


        // 将数组转换为字符串输出

        return res.join(&#39;&#39;).replace(/^0/, &#39;&#39;);
  }</code></pre>
<h1 id="url转换为json对象">URL转换为json对象</h1>
<pre><code class="language-js">// url = ?name=zhangsan&amp;age=18&amp;sex=25
function getQueryObject(url){
  // 参数校验
  url = url == null ? window.location.href : url;
  var search = url.substring(url.lastIndexOf(&#39;?&#39;) + 1);
  // 开始进行字符串解析name=zhangsan&amp;age=18&amp;sex=25
  // +代表匹配一个或多个，零个肯定是不行的。*代表0个或多个，这里value没有是允许的。那么这里要注意的就是^在单独使用时，代表以什么开头，在中括号里面使用代表不包含的意思
  // 中括号里面的内容相当于是或的意思：表示除了?,&amp;,=这三个字符以外的其他所有字符
  var reg = /([^?&amp;=]+)=([^?&amp;=]*)/g;
  var obj = {};
  // 其中res表示匹配成功的字符串序列，$1，表示第一个（）内所匹配的内容，$2为第二个，依次类推。当我们使用全局匹配时，只要匹配成功的子串最后都会执行一遍function函数
  search.replace(reg, function(res, $1, $2){
    // name=zhangsan,age=18,sex=male
    console.log(res, $1, $2);
    obj[$1] = $2;
  });
  return obj;
}</code></pre>
<h1 id="json转换为url？">JSON转换为URL？</h1>
<pre><code class="language-js"> // data={name : &#39;zhangsan&#39;, age : &#39;lisi&#39;}
  function parseParams(data){
    var key, i, value, tempArr = [];
    for (i in data) {
      key = encodeURIComponent(i);
      value = encodeURIComponent(data[i]);
      tempArr.push(key + &#39;=&#39; + value);
    }
    return tempArr.join(&#39;&amp;&#39;);
  }</code></pre>
<h3 id="使用两个数组实现一个定长的队列？">使用两个数组实现一个定长的队列？</h3>
<h3 id="js先奇数后偶数排序">JS先奇数后偶数排序</h3>
<pre><code class="language-js">  // v1. 分开写的实现思路
  function sortArray(arr){
    arr.sort((a, b) =&gt; {
      // 1. 先把奇数放在前面，把偶数放在后面
      if (a % 2 === 0 &amp;&amp; b % 2 === 1) {
        // 如果前面的元素是奇数的话，而且后面的元素是偶数的话，就去交换
        return 1;
      }
    })
    arr.sort((a, b) =&gt; {
      // 1. 把前面的那部分奇数，和后面的那部分偶数按照从小到大的顺序排序
      if (a &gt; b &amp;&amp; (a % 2 === 1 &amp;&amp; b % 2 === 1)) {
        return 1;
      }
      if (a &gt; b &amp;&amp; (a % 2 === 0 &amp;&amp; b % 2 === 1)) {
        return 1;
      }
    });
  }

  // v2. 代码优化版本
  function sortArray(arr){
    arr.sort((a, b) =&gt; {
      if (a % 2 === 0 &amp;&amp; b % 2 === 1) {
        return 1;
      }
      if (a &gt; b &amp;&amp; (a % 2 === 1 &amp;&amp; b % 2 === 1) || (a % 2 === 0 &amp;&amp; b % 2 === 1)) {
        return 1;
      }

    });
  }</code></pre>
<h2 id="求数组最长递增子序列长度">求数组最长递增子序列长度</h2>
<pre><code class="language-js">/**
 * 求数组最长递增子序列
 * @param arr
 */
function getMaxSequenceNumbers(arr){
    let res = [];
    res.push(arr[0])
    for (let i = 1, len = arr.length; i &lt; len; i++) {
        // 开始处理res
        if (arr[i] &gt; res[res.length - 1]) {
            res.push(arr[i]);
        }
        else {
            // 小于等于的话
            // 需要在res中找到第一个大于arr[i]的元素，然后替换掉这个元素（二分查找）
            let index = binarySearch(res, arr[i]);
            if (index) {
                res[index] = arr[i];
            }
        }
    }

    return res.length;
}

function binarySearch(arr, val) {
    let l = 0, r = arr.length - 1;
    while (l &lt;= r) {
        let mid = Math.floor(l + (r - l) / 2);
        if (val &lt; arr[mid]) {
            r = mid - 1;
        }
        else if (val &gt; arr[mid]) {
            l = mid + 1;
        }
    }

    // 最终的l就是找到的结果,arr中第一个大于val的元素位置
    return l;
}


console.log(getMaxSequenceNumbers([5, 6, 7, 1, 2, 8]));</code></pre>
]]></description><link>https://blog.gaoredu.com/article/fbbff9ec-870e-4cdf-bbd0-de86c96f9a23</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fbbff9ec-870e-4cdf-bbd0-de86c96f9a23</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Apr 2024 04:53:04 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】Generator的执行细节分析]]></title><description><![CDATA[<h1 id="generator执行细节分析co库底层实现原理">Generator执行细节分析(co库底层实现原理)</h1>
<pre><code class="language-js">// 单个异步任务执行，如何使用generator函数呢？

// v1: 创建一个generator函数
function* gen() {
    let url = &#39;http://www.baidu.com&#39;;
    let res = yield fetch(url);
    console.log(res)
}

// 1. 调用Generator函数，获取遍历器对象
let g = gen();
// 2. 使用next方法，执行异步任务的第一阶段，fetch(url)
let res = g.next();

// 3. res 是一个Promise对象，{ value: Promise { &lt;pending&gt; }, done: false }
res.value.then(data =&gt; {
    // 4. 将获取到的数据格式化
    return data.json();
}).then(data =&gt; {
    // 5. 然后将格式化之后的数据传进去，调用next函数，会执行输入console.log(res)
    g.next(data);
})


// v2: 如何执行下面的多个异步函数呢
function* gen() {
    // yiled实际上会返回一个Promise对象
    var r1 = yield fetch(&#39;https://api.github.com/users/github&#39;);
    var r2 = yield fetch(&#39;https://api.github.com/users/github/followers&#39;);
    var r3 = yield fetch(&#39;https://api.github.com/users/github/repos&#39;);

    console.log([r1.bio, r2[0].login, r3[0].full_name].join(&#39;\n&#39;));
}

// 使用递归的方式来实现
function run(gen) {
    // 1. 执行自己定义的Generator函数
    let g = gen();
    function next(data) {
        let res = g.next(data);

        // 执行完毕
        if (res.done) return;

        res.value.then(data =&gt; {
            return data.json();
        }).then(data =&gt; {
            next(data)
        });

    }

    // 2. 执行next函数
    next();
}

// 首次执行并调用
run(gen);


// v3: 上面的代码优化
function run(gen) {
    // 1. 获取遍历器对象
    let g = gen();

    function next(data) {
        let res = g.next(data);

        if (res.done) return;

        res.value.then(data =&gt; {
            // 继续调用下一个Generator函数
            next(data);
        });
    }

    next();
}

// v4: 实现一个run函数，通用版本
function run(gen) {
    // 1. 获取遍历器对象
    let g = gen();


    // next函数
    function next(data) {
        let res = g.next(data);

        if (res.done) return;

        if (isPromise(res.value)) {
            // 如果是一个Promise对象的话
            res.value.then(data =&gt; {
                next(data);
            });
        }
        else {
            res.value(data);
        }

    }

    next();
}

// 可以判断一个对象是不是Promise对象
function isPromise(obj) {
    return typeof obj.then === &#39;function&#39;;
}


// v5. 上面代码继续优化
function run(gen) {
    let g = gen();

    return new Promise((resolve, reject) =&gt; {
        let res;
        function next(data) {
            try {
                res = g.next(data);
            }
            catch (e) {
                return reject(e);
            }

            if (res.done) return resolve(res.value);

            let val = toPromise(res.value);

            val.then(data =&gt; {
                next(data);
            }, err =&gt; {
                reject(err);
            });
        }

        next();
    });
}

// 可以转换任意对象到一个Promise
function toPromise(obj) {
    if (isPromise(obj)) {
        return obj;
    }
    else if (&#39;function&#39; === typeof obj) {
        return thunkToPromise(obj);
    }

    return obj;
}

// 把一个函数转换为Promise对象
function thunkToPromise(fn) {
    return new Promise((resolve, reject) =&gt; {
        fn((err, res) =&gt; {
            if (err) return reject(err);
            resolve(res);
        })
    });
}


// v6. 上面的代码进一步优化
function run(gen) {

    return new Promise(function(resolve, reject) {
        if (typeof gen == &#39;function&#39;) gen = gen();

        // 如果 gen 不是一个迭代器
        if (!gen || typeof gen.next !== &#39;function&#39;) return resolve(gen)

        onFulfilled();

        function onFulfilled(res) {
            var ret;
            try {
                ret = gen.next(res);
            } catch (e) {
                return reject(e);
            }
            next(ret);
        }

        function onRejected(err) {
            var ret;
            try {
                ret = gen.throw(err);
            } catch (e) {
                return reject(e);
            }
            next(ret);
        }

        function next(ret) {
            if (ret.done) return resolve(ret.value);
            var value = toPromise(ret.value);
            if (value &amp;&amp; isPromise(value)) return value.then(onFulfilled, onRejected);
            return onRejected(new TypeError(&#39;You may only yield a function, promise &#39; +
                &#39;but the following object was passed: &quot;&#39; + String(ret.value) + &#39;&quot;&#39;));
        }
    })
}

function isPromise(obj) {
    return &#39;function&#39; == typeof obj.then;
}

function toPromise(obj) {
    if (isPromise(obj)) return obj;
    if (&#39;function&#39; == typeof obj) return thunkToPromise(obj);
    return obj;
}

function thunkToPromise(fn) {
    return new Promise(function(resolve, reject) {
        fn(function(err, res) {
            if (err) return reject(err);
            resolve(res);
        });
    });
}

module.exports = run;


// v7: co是什么呢？
// co 是大神 TJ Holowaychuk 于 2013 年 6 月发布的一个小模块，用于 Generator 函数的自动执行。
// yield 后是一个 Promise
var fetch = require(&#39;node-fetch&#39;);
var co = require(&#39;co&#39;);

function* gen() {
    var r1 = yield fetch(&#39;https://api.github.com/users/github&#39;);
    var json1 = yield r1.json();
    var r2 = yield fetch(&#39;https://api.github.com/users/github/followers&#39;);
    var json2 = yield r2.json();
    var r3 = yield fetch(&#39;https://api.github.com/users/github/repos&#39;);
    var json3 = yield r3.json();

    console.log([json1.bio, json2[0].login, json3[0].full_name].join(&#39;\n&#39;));
}

// 可以让Generator里面的函数按顺序执行
co(gen);</code></pre>
]]></description><link>https://blog.gaoredu.com/article/b1bf4602-2db7-4388-8e78-9f08b6ce1aa9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b1bf4602-2db7-4388-8e78-9f08b6ce1aa9</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 13 Apr 2024 02:24:11 GMT</pubDate></item><item><title><![CDATA[【CSS相关】预处理器]]></title><description><![CDATA[<h1 id="css预处理器">CSS预处理器</h1>
<h2 id="1常见的css预处理器有哪些？">1.常见的CSS预处理器有哪些？</h2>
<blockquote>
<p>[!NOTE]
css预处理器：用一种专门的编程语言，为CSS增加了一些编程的特性，将CSS作为目标生成文件，然后开发者就只要使用这种语言进行编码工作，可以让你的CSS更加简洁、适应性更强、可读性更佳，更易于代码的维护等诸多好处</p>
<ul>
<li>Sass(Scss)：2007,ruby编写</li>
<li>Less: 2009，js编译</li>
</ul>
</blockquote>
<h3 id="11-使用流程？">1.1 使用流程？</h3>
<ol>
<li>基于CSS的另外一种语言</li>
<li>通过工具编译成CSS</li>
<li>添加了很多CSS不具备的特性</li>
<li>同时CSS文件的组织方式</li>
</ol>
<h3 id="12-预处理器的作用有哪些？">1.2 预处理器的作用有哪些？</h3>
<ol>
<li>帮助开发者更好组织CSS代码（变量，mixIn）</li>
<li>提高代码的复用性</li>
<li>代码的可维护性增强</li>
</ol>
<h2 id="2lesssass预处理器的功能？">2.Less/Sass预处理器的功能？</h2>
<ol>
<li>嵌套： 反映层级和约束</li>
<li>变量和计算： 减少重复代码</li>
<li>Extend和mixIn： 代码片段的抽离</li>
<li>循环: 适用于复杂有规律的样式</li>
<li>import：可以实现CSS文件的模块化</li>
</ol>
<h2 id="3css预处理器的优缺点？">3.CSS预处理器的优缺点？</h2>
<ul>
<li>优点： 提高代码的复用率和可维护性</li>
<li>缺点： 引入了编译的过程，有一定的学习成本</li>
</ul>
<blockquote>
<p>前端工程化：预处理不再是唯一的手段了，可以使用工程化构建工具进行处理</p>
</blockquote>
<h2 id="4scss和less的区别？">4.scss和less的区别？</h2>
<ol>
<li>编译环境不一样</li>
<li>变量符不一样，Less是@，而Scss是$，而且变量的作用域也不一样。</li>
<li>输出设置，Less没有输出设置，Sass提供4种输出选项：</li>
<li>Sass支持条件语句，可以使用if{}else{},for{}循环等等。而Less不支持。</li>
<li>引用外部CSS文件</li>
<li>工具库不同</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/bb9ff3e4-5a53-46ee-b812-ca702cf1001f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bb9ff3e4-5a53-46ee-b812-ca702cf1001f</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 08 Apr 2024 00:45:58 GMT</pubDate></item><item><title><![CDATA[【性能优化】网络优化]]></title><description><![CDATA[<h1 id="网络优化方案">网络优化方案</h1>
<h2 id="1合并资源文件，减少http请求">1.合并资源文件，减少HTTP请求</h2>
<p>浏览器并发的HTTP请求是由数量限制的（比如桌面浏览器并发请求可能是8个，手机浏览器是6个），如果一下子并发的几十个请求那么会有很多请求会停下来等，等前面的请求好了下一个再进去，这样就延长了整个页面的加载时间</p>
<h2 id="2压缩资源文件减小请求大小">2.压缩资源文件减小请求大小</h2>
<p>文件大小越小当然加载速度就越快。
可对代码进行压缩，去掉空格、注释、变量替换，在传输时，使用gzip等压缩方式也可以降低资源文件的大小。</p>
<h2 id="3利用缓存机制，尽可能使用缓存减少请求">3.利用缓存机制，尽可能使用缓存减少请求</h2>
<p>浏览器是有缓存机制的，在返回资源的时候设置一个cache-control设置过期时间，在过期时间内浏览器会默认使用本地缓存。</p>
<p>但缓存机制也存在一定的问题，因为网站开发是阶段性的，隔一段时间会发布一个新的版本。因为HTTP请求是根据url来定位的，如果资源文件名的url没有发生更改那么浏览器还是会使用缓存，这个时候怎么办那？
这时就需要一个缓存更新机制来让修改过的文件具有一个新的名字。
最简单的方法就是在url后加一个时间戳，但是这会导致只要有新的版本发布就会重新获取所有的新资源。
一个现代流行的方法就是根据文件计算一个hash值，这个hash值是根据文件的更新变化而变化的。 当浏览器获取文件时如果这个文件名有更新那么就会请求新的文件。</p>
<h2 id="4dns预解析">4.DNS预解析</h2>
<p>现代浏览器在 DNS Prefetch 上做了两项工作：</p>
<ol>
<li>html 源码下载完成后，会解析页面的包含链接的标签，提前查询对应的域名</li>
<li>对于访问过的页面，浏览器会记录一份域名列表，当再次打开时，会在 html 下载的同时去解析 DNS</li>
</ol>
<p><strong>自动解析</strong>
浏览器使用超链接的href属性来查找要预解析的主机名。当遇到a标签，浏览器会自动将href中的域名解析为IP地址，这个解析过程是与用户浏览网页并行处理的。但是为了确保安全性，在HTTPS页面中不会自动解析</p>
<p><strong>手动解析</strong></p>
<pre><code class="language-html">预解析某域名
&lt;link rel=&quot;dns-prefetch&quot; href=&quot;//img.alicdn.com&quot;&gt;

强制开启HTTPS下的DNS预解析
&lt;meta http-equiv=&quot;x-dns-prefetch-control&quot; content=&quot;on&quot;&gt;</code></pre>
<h2 id="5cdn加速">5.CDN加速</h2>
<p>CDN 的原理是尽可能的在各个地方分布机房缓存数据。</p>
<p>因此，我们可以将静态资源尽量使用 CDN 加载，由于浏览器对于单个域名有并发请求上限，可以考虑使用多个 CDN 域名。并且对于 CDN 加载静态资源需要注意 CDN 域名要与主站不同，否则每次请求都会带上主站的 Cookie，平白消耗流量。</p>
<h2 id="6预加载">6.预加载</h2>
<ol>
<li><p>在开发中，可能会遇到这样的情况。有些资源不需要马上用到，但是希望尽早获取，这时候就可以使用预加载。</p>
</li>
<li><p>预加载其实是声明式的 fetch ，强制浏览器请求资源，并且不会阻塞 onload 事件，可以使用以下代码开启预加载。</p>
</li>
<li><p>预加载可以一定程度上降低首屏的加载时间，因为可以将一些不影响首屏但重要的文件延后加载，唯一缺点就是兼容性不好。</p>
</li>
</ol>
<pre><code class="language-js">// 1.使用HTML标签
&lt;img src=&quot;http://pic26.nipic.com/20121213/6168183 0044449030002.jpg&quot; style=&quot;display:none&quot;/&gt;

// 2.使用Image对象
&lt;script src=&quot;./myPreload.js&quot;&gt;&lt;/script&gt;

//myPreload.js文件
var image= new Image()
image.src=&quot;http://pic26.nipic.com/20121213/6168183 004444903000 2.jpg&quot;

// 3.使用XMLHttpRequest对象,虽然存在跨域问题，但会精细控制预加载过程
    var xmlhttprequest=new XMLHttpRequest();
    xmlhttprequest.onreadystatechange=callback;
    xmlhttprequest.onprogress=progressCallback;
    xmlhttprequest.open(&quot;GET&quot;,&quot;http://image.baidu.com/mouse,jpg&quot;,true);
    xmlhttprequest.send();
    function callback(){
      if(xmlhttprequest.readyState==4&amp;&amp; xmlhttprequest.status==200){
        var responseText=xmlhttprequest.responseText;
      }else{
         console.log(&quot;Request was unsuccessful:&quot;+xmlhttprequest.status);
      }
    }
    function progressCallback(e){
        e=e || event;
        if(e.lengthComputable){
            console.log(&quot;Received&quot;+e.loaded+&quot;of&quot;+e.total+&quot;bytes&quot;)
        }
    }</code></pre>
<p>使用预渲染后，只需加载index.html和app.css即可看到页面的部分形式。
预渲染的最佳时间莫过于预渲染骨架屏了。静态的骨架屏预渲染后保存在本地，基本永久使用，只要骨架屏返回并渲染了，用户是看不到白屏的(诸如以上只有topNav的那种)，而骨架屏作为布局简单，样式普通的一个小组件，构建后返回的html在浏览器渲染当然速度也是极快的，用户体验++</p>
<h2 id="7图片优化">7.图片优化</h2>
<ol>
<li>不用图片。很多时候会使用到很多修饰类图片，其实这类修饰图片完全可以用 CSS 去代替。</li>
<li>对于移动端按理说，图片不需要加载原图，可请求裁剪好的图片</li>
<li>小图使用base64格式</li>
<li>将多个图标文件整合到一张图中（雪碧图）</li>
<li>采用正确的图片格式<ul>
<li>对于能够显示 WebP 格式的浏览器尽量使用 WebP 格式。因为 WebP 格式具有更好的图像数据压缩算法，能带来更小的图片体积，而且拥有肉眼识别无差异的图像质量，缺点就是兼容性并不好</li>
<li>色彩很多的使用 JPEG</li>
<li>色彩种类少的使用 PNG，有的可用SVG代替</li>
</ul>
</li>
</ol>
<h2 id="8预渲染">8.预渲染</h2>
<blockquote>
<p>[!NOTE]
预渲染：构建阶段生成匹配预渲染路径的 html 文件（注意：每个需要预渲染的路由都有一个对应的 html）。构建出来的 html 文件已有部分内容。</p>
</blockquote>
<p>非预渲染需要加载到1(index.html)，2（app.css），3(manifest.js)，4(vender.js)，用户才能看到页面</p>
<pre><code class="language-js">1 index.html
2 app.css 样式
3 manifest.js webpack manifest
4 vender.js 第三方库
5 app.js 业务逻辑
6 0.js 路由分包文件</code></pre>
]]></description><link>https://blog.gaoredu.com/article/787ab7d6-f08c-4167-9d09-e4d3d51d089b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/787ab7d6-f08c-4167-9d09-e4d3d51d089b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 06 Apr 2024 06:50:40 GMT</pubDate></item><item><title><![CDATA[【面经系列】阿里面经]]></title><description><![CDATA[<h1 id="阿里面经系列">阿里面经系列</h1>
<ol>
<li>react hooks 是为了解决什么</li>
<li>jsonp</li>
<li>跨域</li>
<li>rem</li>
<li>flex</li>
<li>闭包</li>
<li>async await</li>
<li>async 经过 babel 处理后的代码看过吗</li>
<li>React 性能优化</li>
<li>说一说 React</li>
<li>正则贪婪和非贪婪匹配</li>
<li>变量声明提升和函数提升</li>
<li>同源策略</li>
<li>为什么js单线程</li>
<li>nodejs处理高并发</li>
<li>事件循环</li>
<li>框架</li>
<li>webpack</li>
<li>移动端touch事件</li>
<li>实现一个斐波那契数列</li>
<li>快排</li>
<li>跨域</li>
<li>闭包</li>
<li>面向对象</li>
<li>nodejs应用</li>
<li>行内元素、行内块元素。。。</li>
<li>定位（position）</li>
<li>盒模型</li>
<li>事件代理</li>
<li>react受控组件和非受控组件  </li>
<li>nodejs用的场景 ；</li>
<li>js为什么单线程；</li>
<li>url的过程；</li>
<li>es6数组常用 ；</li>
<li>react哪些时候可以设置state 哪些时候不能会（循环）；</li>
<li>304；</li>
<li>常见的攻击xss csrf sql注入；</li>
<li>react和别的框架的差别。</li>
<li>跨域；</li>
<li>写过什么组件。。。可以复用（单例模式，form表单的验证）；</li>
<li>为什么选择这些框架；</li>
<li>后台用php做过什么；15.浏览器兼容怎么做，做过什么</li>
<li>平时怎么学习的？</li>
<li>HTML CSS JS 官方文档在哪...</li>
<li>看过哪些书</li>
<li>xss csrf</li>
<li>函数节流防抖</li>
<li>一道 this 指向题，一道原型链题</li>
<li>React setState</li>
<li>React componentWillMount 做 setState 会干嘛</li>
<li>性能优化</li>
<li>懒加载怎么实现的</li>
<li>跨域，问的比较细</li>
<li>React 同构</li>
<li>Redux connect 做了什么</li>
<li>Redux 怎么做到每个组件可以访问的 store 的</li>
<li>React Router</li>
<li>了解哪些后端语言，搭过服务吗</li>
<li>Http 2.0</li>
<li>了解 PWA 吗？（看过相关的文章），答：不了解（不然就是坑）</li>
<li>有做过移动端项目吗</li>
<li>项目场景，技术方案</li>
<li>项目涉及的性能优化</li>
<li>实习中都做了什么</li>
<li>实习中收获最大的一个项目是什么，你在这个项目中做了什么</li>
<li>实习中印象最深刻的一个项目</li>
<li>人生经历中最有成就感的一件事</li>
<li>未来两三年前端的发展</li>
<li>对前端这个职业的看法（？？我也记不清了，反正扯了一堆扯到了nodejs）</li>
<li>实习中都有什么收获</li>
<li>大意是在前端方向有没有什么偶像式的人物</li>
<li>问点基础题：平时怎么调试；有一个数据量很大的表格要怎么处理</li>
<li>node 中的js和浏览器中的js区别，从区别，相同，性能，分析？</li>
<li>(上面提到了promise的polyfill)promise介绍下？</li>
<li>promise，以前的异步回调以及其他解决异步的区别？</li>
<li>目前的小程序和H5的区别，从性能，渲染方式来说？</li>
<li>react和vue怎么选型</li>
<li>项目: 做过的项目中最难的地方</li>
<li>假定场景: 一个游戏活动, 有一个人从东到西运动, 碰到图上的点后获得奖励。怎么设计? 没有控制, 活动开始直接运动, 遇到点弹出动画。</li>
<li>动画方面用Vue会有哪些瓶颈？ - 操作DOM</li>
<li>现在有一个场景, 如果有一个用户登录淘宝了, 显示登录成功了, 然后网断了, 过了20分钟网络又连接上了, 那他接下来打开页面可以继续访问还是要去登录? - 不会去登录, 后端保存session 前端会携带用户信息进行碰撞</li>
<li>Vue从哪个版本开始接触的, 有了解过1.0吗, 他们之间对比？- 指令, 生命周期</li>
<li>说一下Node的事件机制（宏队列微队列</li>
<li>为什么时间机制是这样的呢？js如何运作的？</li>
<li>说一下你偏向前端的一个项目吧</li>
<li>你对自己未来的前端发展有什么看法？</li>
<li>Hybrid你是指的什么？专门的客户端开发吗？</li>
<li>那你就要都接触iOS和Android了，这块要做的还很多</li>
<li>React Hooks有了解么？</li>
<li>React中key的作用你知道么</li>
<li>key的具体运作方式是什么？</li>
<li>说一下你为什么做前端</li>
<li>说一下你对前端未来的发展趋势及看法（多元化，WebGL、Node、Hybrid</li>
<li>说一下你对React的理解？React设计思想？（没答好</li>
<li>那你比较下React和Vue？（Vue双向绑定、React all in js</li>
<li>diff找到了差距后，渲染时会做什么优化吗（从shouldComponentUpdate开始，扯到了async rendering、time slicing</li>
<li>说一下你对前端设计思想的理解？（MV*、函数式、面向对象/过程</li>
<li>你知道双向绑定有什么缺点吗？（触发改变的方式很多？</li>
<li>那你说说js引擎gc机制（引用计数，标记清除</li>
<li>缓存类、hashMap、Node多进程）</li>
<li>多进程复用有去了解过社区内的解决方式吗（专门的dataBus进程、Pandora.js对象代理、主子进程通信、借助Redis</li>
<li>说一下Node直出的优缺点？（展示时间优化、SEO，不知怎么扯扯到了骨架屏</li>
<li>骨架屏的概念&amp;作用？（background、懒加载、回流/重绘</li>
<li>数组随机化？</li>
<li>数组去重？</li>
<li>浏览器发起请求的方法？（XHR、fetch</li>
<li>有了解XHR和fetch的区别吗？</li>
<li>有了解跨域的一些东西吗？</li>
<li>有了解Promise一族吗</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/dc8d780e-29b1-4b91-8d8c-94a260bbc1b8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dc8d780e-29b1-4b91-8d8c-94a260bbc1b8</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 06 Apr 2024 05:39:19 GMT</pubDate></item><item><title><![CDATA[【NodeJS相关】模块机制]]></title><description><![CDATA[<h1 id="模块机制">模块机制</h1>
<h2 id="1-commonjs模块规范">1. CommonJS模块规范</h2>
<h3 id="11-模块引用">1.1 模块引用</h3>
<pre><code class="language-js">var math = require(&#39;math&#39;);</code></pre>
<h3 id="12-模块定义">1.2 模块定义</h3>
<blockquote>
<p>[!NOTE]
上下文提供exports对象用于导出当前模块的方法和变量，并且他是唯一的导出出口</p>
</blockquote>
<blockquote>
<p>exports实际上是module.exports，而module.exports就是以一个暴露给外部的对象。</p>
</blockquote>
<ul>
<li>exports.some就是给这个对象上添加属性</li>
<li>直接使用 module.exports = {...} 则可以让外部直接获取到这个对象，相当与为exports换了一个引用，如果在这之前使用exports.some会把之前的覆盖</li>
</ul>
<h3 id="13-commonjs-用法">1.3 CommonJS 用法</h3>
<pre><code class="language-js">// a.js
module.exports = {
    a: 1
}
// or 
exports.a = 1

// b.js
var module = require(&#39;./a.js&#39;)
module.a // -&gt; log 1</code></pre>
<h3 id="14-原理">1.4 原理</h3>
<pre><code class="language-js">var module = require(&#39;./a.js&#39;)
module.a 
// 这里其实就是包装了一层立即执行函数，这样就不会污染全局变量了，
// 重要的是 module 这里，module 是 Node 独有的一个变量
module.exports = {
    a: 1
}
// module 基本实现
var module = {
  id: &#39;xxxx&#39;, // 我总得知道怎么去找到他吧
  exports: {} // exports 就是个空对象
}
// 这个是为什么 exports 和 module.exports 用法相似的原因
var exports = module.exports 
var load = function (module) {
    // 导出的东西
    var a = 1
    module.exports = a
    return module.exports
};
// 然后当我 require 的时候去找到独特的
// id，然后将要使用的东西用立即执行函数包装下，over</code></pre>
<h2 id="2-node的模块实现">2. Node的模块实现</h2>
<p>在Node中引入模块，需要经历3个步骤</p>
<ul>
<li>路径分析</li>
<li>文件定位</li>
<li>编译执行</li>
</ul>
<blockquote>
<p>在node中，模块分为两类：一类是node提供的模块称为<strong>核心模块</strong>，一类是用户编写的成为<strong>文件模块</strong>。</p>
</blockquote>
<ul>
<li><p>核心模块在编译中编译成了二进制文件。在Node进程启动时，部分核心模块就被直接加载入内存。所以这部分核心模块引入时就<strong>省了文件定位和编译执行</strong>这两个步骤，并且在路径分析中优先判断，它的加载速度是最快的。</p>
</li>
<li><p>文件模块是运行时动态加载。需要完整的路径分析、文件定位、编译执行</p>
</li>
</ul>
<h3 id="21-优先从缓存加载">2.1 优先从缓存加载</h3>
<blockquote>
<p>Node对引入的模块都回进行缓存，而且缓存的是编译执行后的对象。</p>
</blockquote>
<p>不管是核心模块还是文件模块，require()都一律采用缓存优先的方式。</p>
<h3 id="22-路径分析和文件定位">2.2 路径分析和文件定位</h3>
<h4 id="221-模块标识符分析">2.2.1 模块标识符分析</h4>
<ul>
<li>核心模块</li>
<li>路径形式的文件模块</li>
<li>自定义模块<ul>
<li>node_modules下</li>
<li>查找最费时</li>
</ul>
</li>
</ul>
<h4 id="222-文件定位">2.2.2 文件定位</h4>
<ul>
<li>文件拓展名分析<ul>
<li>如果省略拓展名，回按 .js  .node  .json的次序依次尝试</li>
<li>如果.node  .json的话，加上拓展名会加快一点速度</li>
<li>同步配合缓存，可大幅缓解单线程中阻塞式调用的缺陷</li>
</ul>
</li>
<li>目录分析和包<ul>
<li>如果没有文件名，会将Index当作默认文件名</li>
</ul>
</li>
</ul>
<h3 id="23-模块编译">2.3 模块编译</h3>
<ul>
<li>.js文件<ul>
<li>通过fs同步读取后编译执行</li>
</ul>
</li>
<li>.node<ul>
<li>这是用C/C++编写的拓展文件，通过dlopen()方法加载最后编译生成的文件</li>
</ul>
</li>
<li>.json<ul>
<li>用JSON.parse()解析返回结果</li>
</ul>
</li>
<li>其余拓展名<ul>
<li>当作.js文件处理</li>
</ul>
</li>
</ul>
<blockquote>
<p>[!NOTE]
每一个编译成功的模块都会将其文件路径索引缓存在Module._cache对象上，以提高二次引入性能</p>
</blockquote>
<h4 id="231-js模块的编译">2.3.1 js模块的编译</h4>
<blockquote>
<p>[!NOTE]
在编译的过程中，Node对获取的JS文件进行了头尾包装。这也是每个模块都能访问到 require、exports、module、<strong>filename、</strong>dirname的原因</p>
</blockquote>
<pre><code class="language-js">(funciton(exports, require, module, __filename, __dirname) {

  /* 自己写的代码  */

});</code></pre>
<blockquote>
<p>这样使得模块文件间都进行了作用域隔离，不用担心变量污染全局。</p>
</blockquote>
<blockquote>
<p>为moudle.exports赋值，exports对象是通过形参的方式传入，直接赋值形参会改变形参的引用，但并不能改变作用域外的值。</p>
</blockquote>
<pre><code class="language-js">exports = function() {
  // my class
}

var change = function(a) {
  a = 100;
}

var a = 10;
change(a);
console.log(a); // =&gt; 10</code></pre>
<p>如果要达到require引入一个类的效果，请赋值给 module.exports对象。这个迂回的方案不改变形参的引用。</p>
<h4 id="232-cc-模块的编译">2.3.2 C/C++ 模块的编译</h4>
<p>Node调用process.dlopen()方法进行加载和执行。</p>
<p>实际上 .node模块并不需要编译，因为它是编写C/C++模块之后编译生成的，所以这里只有加载和执行的过程。在执行的过程中，模块exports对象与.node模块产生练习，然后返回给调用者。</p>
<h2 id="3-核心模块">3. 核心模块</h2>
<blockquote>
<p>[!NOTE]
Node的核心模块在编译成可执行文件的过程中被编译进了二进制文件。核心模块其实分为C/C++编写的和Javascript编写的两部分，其中C/C++文件存放在Node项目的src目录下，Javascript文件存放在lib目录下。</p>
</blockquote>
<ol>
<li><p>C/C++拓展模块</p>
</li>
<li><p>模块调用栈</p>
</li>
<li><p>前后端公用模块</p>
</li>
<li><p>模块侧重点</p>
</li>
</ol>
<ul>
<li><p>前端瓶颈在于带宽，后端瓶颈在于CPU和内存等资源。前端需要通过网络加载代码，后端则从磁盘加载，二者加载速度不再同一量级上。</p>
</li>
<li><p>node的模块引入几乎都是同步的，但前端模块若是也采用同步方式来引入必会在用户体验上造成很大的问题，即UI初始化实际过长</p>
</li>
</ul>
<h2 id="4-amd规范">4. AMD规范</h2>
<blockquote>
<p>Asynchronous Moudle Definition “异步模块定义”, AMD需要在声明的时候指定所有的依赖，通过形参传递依赖到模块内容中。</p>
</blockquote>
<p>定义如下</p>
<pre><code class="language-js">define(id?, dependencies, factory);</code></pre>
<h2 id="5-cmd-规范">5. CMD 规范</h2>
<blockquote>
<p>与AMD主要区别在于定于模块与依赖引入部分。</p>
</blockquote>
<p>CMD支持动态引入</p>
<pre><code class="language-js">define(funtion(require, exports, moudle) {
  // The module code goes here
})</code></pre>
]]></description><link>https://blog.gaoredu.com/article/e5239804-d991-47e8-8d4d-35ef8536b1de</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e5239804-d991-47e8-8d4d-35ef8536b1de</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 01 Apr 2024 03:55:35 GMT</pubDate></item><item><title><![CDATA[【错误监控】错误监控和上报]]></title><description><![CDATA[<h1 id="前端错误监控">前端错误监控</h1>
<h2 id="1-前端错误的类型有哪些？如何捕获错误？">1. 前端错误的类型有哪些？如何捕获错误？</h2>
<h3 id="11-错误类型">1.1 错误类型</h3>
<ol>
<li>即时运行错误：也就是代码错误；</li>
<li>资源加载错误：比如图片加载失败、JS加载失败、CSS加载失败等；</li>
</ol>
<h3 id="12-错误的捕获方式">1.2 错误的捕获方式</h3>
<h4 id="121-运行错误的捕获方式（try-catch）">1.2.1 运行错误的捕获方式（try catch）</h4>
<pre><code class="language-js">try {
    var a = 1;
    var b = a + c;
} catch (e) {
    // 捕获处理
    console.log(e); // ReferenceError: c is not defined
}</code></pre>
<h4 id="122-windowonerror">1.2.2 window.onerror</h4>
<blockquote>
<p>[!NOTE]
只能捕获即时运行错误，不能捕获资源加载错误(原理：资源加载错误，并不会向上冒泡，object.onerror捕获后就会终止，所以window.onerror并不能捕获资源加载错误)；</p>
</blockquote>
<p>相比try catch来说window.onerror提供了全局监听异常的功能：</p>
<pre><code class="language-js">window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error) {
    console.log(&#39;errorMessage: &#39; + errorMessage); // 异常信息
    console.log(&#39;scriptURI: &#39; + scriptURI); // 异常文件路径
    console.log(&#39;lineNo: &#39; + lineNo); // 异常行号
    console.log(&#39;columnNo: &#39; + columnNo); // 异常列号
    console.log(&#39;error: &#39; + error); // 异常堆栈信息
};

console.log(a);</code></pre>
<h4 id="123-资源加载错误的捕获方式">1.2.3 资源加载错误的捕获方式</h4>
<h5 id="1231-objectonerror">1.2.3.1 object.onerror</h5>
<p>img标签、script标签都可以添加onerror事件，用来捕获资源加载错误；</p>
<h5 id="1232-performancegetentries">1.2.3.2 performance.getEntries</h5>
<blockquote>
<p>[!NOTE]
可以获取所有已加载资源的加载时间，通过这种方式，可以间接的拿到没有加载的资源错误。</p>
</blockquote>
<ol>
<li>获取网站成功加载的资源数量信息：</li>
</ol>
<pre><code class="language-js">performance.getEntries().forEach(
    function(item){
        console.log(item.name)
 })</code></pre>
<ol start="2">
<li><p>再输入document.getElementsByTagName(&#39;img&#39;)，就会显示出所有的img集合，这是所有需要加载的图片的集合；</p>
</li>
<li><p>document.getElementsByTagName(&#39;img&#39;)获取的资源数组减去通过performance.getEntries()获取的资源数组，剩下的就是没有成功加载的，这种方式可以间接的捕获到资源加载错误。</p>
</li>
</ol>
<blockquote>
<p>[!NOTE]
跨域js运行错误也是可以捕获到的，但是拿不到具体的信息，比如：出错行号、出错列号，错误详情等，这种问题应该怎么处理呢？</p>
</blockquote>
<ol>
<li>在script标签上增加crossorigin属性；</li>
<li>设置js资源响应头Access-Control-Allow-Origin:*；</li>
</ol>
<h2 id="2-上报错误的基本原理">2. 上报错误的基本原理</h2>
<ol>
<li>采用Ajax通信的方式上报；</li>
<li>利用Image对象上报；(推荐的方式)</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/f524ff3e-a464-4b2e-9ed5-f98a320cb626</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f524ff3e-a464-4b2e-9ed5-f98a320cb626</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 28 Mar 2024 02:34:25 GMT</pubDate></item><item><title><![CDATA[【面经系列】面试技巧]]></title><description><![CDATA[<h1 id="面试技巧">面试技巧</h1>
<h1 id="一二面（基础面）">一二面（基础面）</h1>
<h2 id="1-一面基础面">1. 一面基础面</h2>
<h3 id="11-面试准备">1.1 面试准备</h3>
<h4 id="111--个人简历">1.1.1  个人简历</h4>
<ul>
<li>基本信息：姓名-年龄-手机-邮箱-籍贯</li>
<li>工作经历：时间-公司-岗位-职责-技术栈-业绩（哪些成就）</li>
<li>学历： 博士 &gt; 硕士 &gt; 本科 &gt; 大专</li>
<li>工作经历：时间-公司-岗位-职责-技术栈-业绩</li>
<li>开源项目：GitHub和说明</li>
</ul>
<h4 id="122-自我陈述">1.2.2 自我陈述</h4>
<h5 id="1221-把我面试的沟通方向（别把自己带到坑里面）">1.2.2.1 把我面试的沟通方向（别把自己带到坑里面）</h5>
<p>答：我平时喜欢研究一些网站，并对一些技术的原理和好玩的点感兴趣，我自己也喜欢思考，也喜欢尝试探索有没有更好的方式和实现。（有所收留，不要全部说出来，稍微留一点悬念留作面试官来提问）</p>
<h5 id="1222-豁达、自信的适度发挥">1.2.2.2 豁达、自信的适度发挥</h5>
<p>答：适当自信，向自己擅长的方向上面来引路；要让面试官来欣赏我，而不是来鄙视他。</p>
<h5 id="1223-自如谈兴趣">1.2.2.3 自如谈兴趣</h5>
<p>（豁达自信，适当收住），巧妙演示实例，适时讨论疑问（不知道的问题请求指导一下，如何去解决，不要说不知道，或者不了解）</p>
<h5 id="1224-节奏要适宜">1.2.2.4 节奏要适宜</h5>
<p>切忌小聪明（尽量把问题的所有实现方法都写出来，表现出来的是熟练）</p>
<h3 id="12-面试实战">1.2 面试实战</h3>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>方向要对，过程要细（性能优化，过程详细）</li>
<li>胆子要大、心态要和（算法题认真思考，认真使劲想；敢于承担责任，不要轻易放弃）</li>
</ol>
</blockquote>
<h2 id="2-css相关">2. CSS相关</h2>
<h3 id="21--页面布局">2.1  页面布局</h3>
<h4 id="211-如何实现垂直居中布局呢？">2.1.1 如何实现垂直居中布局呢？</h4>
<blockquote>
<p>1.已知宽高</p>
</blockquote>
<pre><code class="language-css">/*v1*/
.container {
    position: absolute;
    left: 50%;
    top: 50%;
    marigin-left: -width / 2;
    marigin-top: -width / 2;
}

/*v2*/
.container {
    position: absolute;
    top: calc(50% - 5em);
    left: calc(50% - 9em);
}
</code></pre>
<blockquote>
<p>2.未知宽高</p>
</blockquote>
<pre><code class="language-css">/*v1*/
.container {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

/*v2:flex+ auto*/
.wrapper {
    dislay: flex;
}
.content {
    margin: auto;
}

/*v3. 父元素居中*/
.wrapper {
    display: flex;
    /* 盒子横轴的对齐方式 */
    justify-content: center;
    /* 盒子纵轴的对齐方式 */
    align-items: center;
}

/*v4.body内部居中*/
.content {
     /* 1vh = 1% * 视口高度 */
      margin: 50vh auto;
      transform: translateY(-50%);
}</code></pre>
<h4 id="212-如何实现水平居中布局呢？">2.1.2 如何实现水平居中布局呢？</h4>
<ol>
<li>如果需要居中的元素为常规流中 inline / inline-block 元素，为父元素设置 text-align: center;</li>
<li>父元素上设置 text-align: center; 居中元素上margin 为 auto。</li>
<li>如果元素positon: absolute; 那么 <ul>
<li>0）设置父元素postion: relative </li>
<li>1）为元素设置宽度，</li>
<li>2）偏移量设置为 50%，</li>
<li>3）偏移方向外边距设置为元素宽度一半乘以-1</li>
</ul>
</li>
</ol>
<h4 id="213-如何实现三栏布局呢？">2.1.3 如何实现三栏布局呢？</h4>
<ol>
<li>left和right写在center前面，并且分别左右浮动；</li>
<li>左右区域分别postion：absolute，固定到左右两边;中间的这个div因为是块级元素，所以在水平方向上按照他的包容块自动撑开。</li>
<li>父元素display: table;并且宽度为100%; 每一个子元素display: table-cell; 左右两侧添加宽度，中间不加宽度</li>
<li>包裹这个3个块的父元素display: flex; 中间的元素flex: 1;</li>
<li>网格布局<pre><code class="language-css">/* 网格布局 */
.wrapper {
 display: grid;
 width: 100%;
 grid-template-columns: 300px 1fr 300px;
}</code></pre>
</li>
</ol>
<h3 id="22-知道css动画的实现吗？">2.2 知道CSS动画的实现吗？</h3>
<blockquote>
<p>[!NOTE]
知道transition 过渡动画和animation 关键帧动画区别和具体实现。</p>
<ul>
<li>1.CSS动画实现轮播图</li>
<li>2.CSS动画实现旋转的硬币</li>
<li>3.CSS动画实现钟摆效果</li>
</ul>
</blockquote>
<h3 id="23-css盒子模型">2.3 CSS盒子模型</h3>
<h4 id="231-说一下css的盒子模型？标准模型和ie模型的区别？css如何设置这两种模型？">2.3.1 说一下CSS的盒子模型？标准模型和IE模型的区别？CSS如何设置这两种模型？</h4>
<hr>
<ul>
<li>标准盒子模型：width = content</li>
<li>IE盒子模型：width = content + pading + border</li>
</ul>
<hr>
<ul>
<li>box-sizing : content-box</li>
<li>box-sizing : border-box</li>
</ul>
<h3 id="24-css样式获取">2.4 CSS样式获取</h3>
<h4 id="241-js如何设置获取盒子模型对应的宽度和高度？面试重点">2.4.1 JS如何设置获取盒子模型对应的宽度和高度？(面试重点)</h4>
<hr>
<ul>
<li>dom.style.width/height ： 只能取到内联样式的的属性信息（拿不到外部引入的CSS样式信息的）</li>
<li>dom.currentStyle.width/height : 会拿到浏览器渲染之后的属性信息（IE浏览器）</li>
<li>window.getComputedStyle(dom).width/height : Chrome/Firefox 兼容， Firefox可以通过document.defaultView.getComputedStyle(dom)的方式来获取</li>
<li>dom.getBoundingClientRect().width/height : 可以获取距离viewport位置的宽度和高度</li>
</ul>
<hr>
<h3 id="25-bfc">2.5 BFC</h3>
<h4 id="251-根据盒子模型解释边距额重叠问题？边距重叠问题的解决方案？">2.5.1 根据盒子模型解释边距额重叠问题？边距重叠问题的解决方案？</h4>
<p><img src="../img/interview/css-box.jpg" alt="CSS盒子模型"></p>
<ul>
<li>父子元素</li>
<li>兄弟元素</li>
<li>其他    --------------------------计算方式：以参数的最大值来进行计算</li>
</ul>
<p><strong>解决方案</strong>：对父级元素创建BFC</p>
<h4 id="252-bfc原理">2.5.2 BFC原理</h4>
<blockquote>
<p>[!NOTE]
BFC： 块级格式化上下文，IFC（内联格式化上下文）</p>
</blockquote>
<ol>
<li>在BFC的垂直边距上面会发生重叠</li>
<li>BFC的区域不会与浮动元素的BOX重叠</li>
<li>BFC在页面上是一个独立的渲染区域，外部的元素不会影响到我，同时也不会影响到外部的元素</li>
<li>计算BFC的高度的时候，浮动元素也会参与运算</li>
</ol>
<h4 id="253--如何创建bfc？">2.5.3  如何创建BFC？</h4>
<ol>
<li>float值不是none</li>
<li>position值不是static或者relative</li>
<li>display值为table, table-cell, inline-box1. </li>
<li>overflow : auto/hidden</li>
</ol>
<h4 id="254-bfc的使用场景？（重点理解）">2.5.4 BFC的使用场景？（重点理解）</h4>
<ol>
<li><p><strong>解决边距的重叠问题</strong></p>
<pre><code class="language-html">&lt;section id=&quot;margin&quot;&gt;
     &lt;style&gt;
         #margin {
             background-color: #4eff35;
             overflow: hidden;
         }
         #margin&gt;p {
             /*上 左右 下*/
             margin: 5px auto 25px;
             background-color: #ff255f;
         }
     &lt;/style&gt;
     &lt;p&gt;1&lt;/p&gt;
     &lt;!--把一个元素放在一个容器里面，为这个容器创建BFC即可解决边距重叠问题--&gt;
     &lt;div style=&quot;overflow: hidden&quot;&gt;
         &lt;p&gt;2&lt;/p&gt;
     &lt;/div&gt;

     &lt;p&gt;3&lt;/p&gt;
&lt;/section&gt;</code></pre>
</li>
<li><p><strong>BFC 不与float部分重叠的解决</strong></p>
<pre><code class="language-html">&lt;section id=&quot;layout&quot;&gt;
   &lt;style&gt;
       #layout {
           background-color: #48adff;
       }
       #layout .left {
           float: left;
           height: 300px;
           width: 200px;
           background-color: #ff4344;
       }
       #layout .right {
           height: 400px;
           background-color: #ff255f;
           /*给右边的这个盒子容器创建一个BFC, 这个容器里面的内容就会沿着垂直方向延伸*/
           overflow: auto;
           /*overflow: auto;*/
           /*display: table;*/
           /*float: left;*/
           /*position: fixed;*/
       }
   &lt;/style&gt;
   &lt;div class=&quot;left&quot;&gt;
       LEFT
   &lt;/div&gt;
   &lt;div class=&quot;right&quot;&gt;
       RIGHT
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
       &lt;p&gt;111&lt;/p&gt;
   &lt;/div&gt;
&lt;/section&gt;</code></pre>
</li>
<li><p><strong>BFC子元素即使是float元素也要参与运算</strong></p>
<pre><code class="language-html">&lt;section id=&quot;float&quot;&gt;
   &lt;style&gt;
       /*一个盒子内部的内容如果是浮动的话，那么这个盒子的内容实际上是不参与父容器高度计算的*/
       #float {
           background-color: red;
           /*overflow: hidden;*/
           float: left;
       }
       #float .float {
           float: left;
           font-size: 30px;
       }
   &lt;/style&gt;
   &lt;div class=&quot;float&quot;&gt;
       我是浮动的元素
   &lt;/div&gt;
&lt;/section&gt;</code></pre>
</li>
</ol>
<h2 id="3-事件相关">3. 事件相关</h2>
<h3 id="31-dom事件">3.1 DOM事件</h3>
<h4 id="311-dom事件的级别有哪些？">3.1.1 DOM事件的级别有哪些？</h4>
<blockquote>
<p>[!NOTE]
DOM级别一共可以分为四个级别：DOM0级、DOM1级、DOM2级和DOM3级。而DOM事件分为3个级别：DOM0级事件处理，DOM2级事件处理和DOM3级事件处理。</p>
</blockquote>
<ol>
<li>DOM0 : element.onclick = function(e) {}
  DOM1 ：该标准中未涉及到事件绑定的相关东西</li>
<li>DOM2 : element.addEventListener(&#39;click&#39;, function(e){}, false)， 一个DOM元素可以添加多个事件</li>
<li>DOM3 : element.addEventListener(&#39;keyup&#39;, function(e){}, false)，在DOM2标准基础上面增加了新的事件类型：鼠标事件，键盘事件，焦点事件  </li>
</ol>
<h4 id="312-dom事件模型有哪些？">3.1.2 DOM事件模型有哪些？</h4>
<ol>
<li>事件捕获：从外向内, window -&gt; document -&gt; body -&gt; button</li>
<li>事件冒泡：从内向外，button -&gt; body -&gt; document -&gt; window</li>
</ol>
<h4 id="313-dom事件流？">3.1.3 DOM事件流？</h4>
<p>浏览器为当前的页面与用户进行交互的过程中，点击鼠标后事件如何传入和响应的呢？</p>
<ul>
<li><ol>
<li>捕获阶段：从外部容器开始向内</li>
</ol>
</li>
<li><ol start="2">
<li>目标阶段：事件通过捕获到达目标阶段</li>
</ol>
</li>
<li><ol start="3">
<li>冒泡阶段：从目标元素再上传到window对象</li>
</ol>
</li>
</ul>
<h4 id="314-什么事件可以代理？什么事件不可以代理呢？">3.1.4 什么事件可以代理？什么事件不可以代理呢？</h4>
<p>什么样的事件可以用事件委托，什么样的事件不可以用呢？ </p>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>通常支持事件冒泡（Event Bubbling）的事件类型为鼠标事件和键盘事件，例如：mouseover, mouseout, click, keydown, keypress。</li>
<li>接口事件(<strong>指的是那些不一定与用户操作有关的事件</strong>)则通常不支持事件冒泡（Event Bubbling），例如：load, change, submit, focus, blur。</li>
</ol>
</blockquote>
<p><strong>很明显</strong>：focus 和 blur 都属于不支持冒泡的接口事件。既然都不支持冒泡，那又如何实现事件代理呢？</p>
<h4 id="315-ie和dom事件流的区别？">3.1.5 IE和DOM事件流的区别？</h4>
<p>IE采用冒泡型事件 Netscape使用捕获型事件 DOM使用先捕获后冒泡型事件</p>
<ol>
<li>冒泡型事件模型： button -&gt; div -&gt; body (IE浏览器本身只支持Bubbling不支持Capturing)</li>
<li>捕获型事件模型： body -&gt; div-&gt; button (Netscape事件流，网景浏览器公司)</li>
<li>DOM事件模型： body -&gt; div -&gt; button -&gt; button -&gt; div -&gt; body (先捕获后冒泡，除了IE以外的其他浏览器都支持标准的DOM事件处理模型)</li>
</ol>
<blockquote>
<p>[!NOTE]</p>
</blockquote>
<ul>
<li>规范和浏览器实现的差别？<ul>
<li>DOM2级事件规范的捕获阶段，事件从文档节点document开始传播，现代浏览器大多数都是从window对象开始传播事件的；</li>
<li>DOM2级事件规范捕获阶段不涉及事件目标，现代浏览器大多数都在这个阶段包含事件目标。</li>
</ul>
</li>
</ul>
<h4 id="316-事件对象event的属性方法的差别">3.1.6 事件对象event的属性方法的差别?</h4>
<pre><code>        IE                    DOM
cancelBubble = true    stopPropagation()    // 停止冒泡
returnValue = false    preventDefault()     // 阻止元素默认事件
srcEelement            target               // 事件目标</code></pre><h4 id="317-描述dom事件捕获的具体流程？">3.1.7 描述DOM事件捕获的具体流程？</h4>
<p><strong>window -&gt; document -&gt; HTML标签 -&gt; body -&gt; ... -&gt; 目标元素</strong></p>
<blockquote>
<p>[!NOTE]
关键点： 注意根节点是window这个对象的</p>
</blockquote>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;Title&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id=&quot;container&quot;&gt;
      &lt;style&gt;
          #container {
              width: 200px;
              height: 200px;
              background-color: #ff255f;
          }
      &lt;/style&gt;
  &lt;/div&gt;
  &lt;script&gt;
      // 事件捕获机制
      window.addEventListener(&#39;click&#39;, function(){
          console.log(&#39;window capture&#39;);
      }, true)
      document.addEventListener(&#39;click&#39;, function () {
          console.log(&#39;document capture&#39;);
      }, true)
      document.documentElement.addEventListener(&#39;click&#39;, function () {
          console.log(&#39;HTML capture&#39;);
      }, true)
      document.body.addEventListener(&#39;click&#39;, function () {
          console.log(&#39;body capture&#39;);
      }, true)
      document.getElementById(&#39;container&#39;).addEventListener(&#39;click&#39;, function () {
          console.log(&#39;container capture&#39;);
      }, true)

      // 事件冒泡机制
      window.addEventListener(&#39;click&#39;, function(){
          console.log(&#39;window capture&#39;);
      })
      document.addEventListener(&#39;click&#39;, function () {
          console.log(&#39;document capture&#39;);
      })
      document.documentElement.addEventListener(&#39;click&#39;, function () {
          console.log(&#39;HTML capture&#39;);
      })
      document.body.addEventListener(&#39;click&#39;, function () {
          console.log(&#39;body capture&#39;);
      })
      document.getElementById(&#39;container&#39;).addEventListener(&#39;click&#39;, function () {
          console.log(&#39;container capture&#39;);
      })

      // 输出结果
      window capture  --&gt; document capture --&gt; HTML capture --&gt; body capture --&gt; container capture --&gt; container capture --&gt;  body capture --&gt; HTML capture --&gt; document capture --&gt; window capture
  &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h4 id="318-如何拿到html这个标签节点元素呢？加分项">3.1.8 如何拿到HTML这个标签节点元素呢？(加分项)</h4>
<pre><code class="language-js">  var html = document.documentElement;</code></pre>
<h4 id="319-描述event对象的常见应用？">3.1.9 描述Event对象的常见应用？</h4>
<ol>
<li>e.preventDefault() : 阻止默认事件（如阻止a标签的默认跳转行为）</li>
<li>e.stopPropagation() : 阻止事件冒泡的行为</li>
<li>*** e.stopImmediatePropagation() : 事件响应的优先级的应用场景，如果一个元素绑定了多个事件，但是又不想让其他的事件执行的时候使用该方法【也会阻止冒泡】</li>
<li>e.currentTarget : 当前所绑定的事件对象</li>
</ol>
<pre><code class="language-js">  document.documentElement.onclick = function(e) {
    console.log(e.currentTarget, e.target);       // &lt;html&gt;&lt;body&gt;...&lt;/body&gt;&lt;/html&gt;（）给绑定事件的那个元素, 当前被点击的那个元素
  }</code></pre>
<blockquote>
<p>[!NOTE]
e.target : 当前被点击的元素，父元素使用事件代理的方式来实现，可以直接使用该属性获取被点击的那个元素</p>
</blockquote>
<h3 id="32-如何自定义事件？重点">3.2 如何自定义事件？(重点))</h3>
<h4 id="321-如何给一个按钮绑定一个自己定义的事件呢？">3.2.1 如何给一个按钮绑定一个自己定义的事件呢？</h4>
<pre><code class="language-js">  // v1. 使用Event对象来自定义事件
  // 开始创建一个自己定义的事件对象
  var eve = new Event(&#39;customEvent&#39;);
  // 使用dom2事件处理的方式来给这个元素绑定一个事件
  var dom = document.documentElement;
  dom.addEventListener(&#39;customEvent&#39;, function(e) {
    console.log(&#39;customEvent called!&#39;);
  });
  // 下面的这句话可以在适合的场景中来触发一个自己定义的事件对象
  setTimeout(function(){
    // 在1s之后触发这个事件
    dom.dispatchEvent(eve);
  }, 1000)


  // v2. 使用CustomEvent来实现自定义事件
  var dom = document.documentElement;
  // 使用CustomEvent的方式可以在事件触发的时候传递一个参数，然后通过e.detail 的方式来获取这个参数信息
  var myClick = new CustomEvent(&#39;myClick&#39;, {detail : {name : &#39;zhangsan&#39;, age : 24}});
  dom.addEventListener(&#39;myClick&#39;, function(e){
    console.log(e.detail, e.target)
  })
  dom.dispatchEvent(myClick);
</code></pre>
<h2 id="4-http协议">4. HTTP协议</h2>
<h3 id="41-http协议的主要特点？">4.1 HTTP协议的主要特点？</h3>
<ul>
<li>简单快速</li>
<li>灵活</li>
<li>无连接</li>
<li>无状态</li>
</ul>
<h3 id="42-http报文的组成部分？">4.2 HTTP报文的组成部分？</h3>
<ul>
<li>请求报文
请求行：请求方法 资源地址 HTTP版本
请求头： key : value
空行 :
请求体 : name=zhangsan&amp;age=18</li>
<li>响应报文 : HTTP版本 状态码
状态行
响应头
空行
响应体  </li>
</ul>
<h3 id="43-http方法？">4.3 HTTP方法？</h3>
<ul>
<li>GET : 获取资源</li>
<li>POST ： 传输资源</li>
<li>PUT ：更新资源</li>
<li>DELETE ： 删除资源</li>
<li>HEAD ：获取报文首部</li>
<li>OPTIONS : 允许客户端查看服务器的性能。</li>
</ul>
<h3 id="44-post和get的区别？">4.4 POST和GET的区别？</h3>
<ol>
<li><strong>GET请求在浏览器回退的时候是无害的，而POST会再次提交请求</strong></li>
<li>GET请求产生的URL地址可以被收藏，而POST不可以</li>
<li><strong>GET请求会被浏览器主动缓存，而POST不会，除非主动设置</strong></li>
<li>GET请求只能进行URL编码，而POST支持多种编码方式</li>
<li>GET请求参数会被完整第保留在浏览器的历史记录里面，而POST参数不会被保留</li>
<li><strong>GET请求爱URL中传送的参数的长度是有限的（2KB），而POST没有限制</strong></li>
<li>对参数的数据类型，GET值接受ASCII字符，而POST没有限制</li>
<li>POST比GET更安全，GET参数直接暴露在URL上，所以不能用来传递敏感信息</li>
</ol>
<p><strong>9. GET参数通过URL传递，POST参数直接放在了Request body中</strong></p>
<h3 id="45-http状态码？">4.5 HTTP状态码？</h3>
<h4 id="451-状态码的第一位">4.5.1 状态码的第一位</h4>
<ul>
<li><strong>1xx</strong> ：指示信息-表示请求已接收，继续处理（重点）</li>
<li>2xx ：成功-表示请求已被成功接收</li>
<li>3xx ：重定向-要完成请求必须进行更进一步的操作</li>
<li>4xx ：客户端错误-请求有语法错误或请求无法实现</li>
<li>5xx ：服务器错误-服务器未能实现合法的请求</li>
</ul>
<h4 id="452-状态码详解">4.5.2 状态码详解</h4>
<ul>
<li>200 OK ： 客户端请求成功</li>
<li>206 Partial Content ： 客户端发送了一个带有Range头的GET请求（Video标签或者audio标签在请求数据的时候）</li>
<li>301 Moved Permanently ： 请求的页面已经转移到了新的URL</li>
<li>302 Found ： 所请求的页面已经临时转移到了新的URL</li>
<li>304 Not Modified ：客户端有缓冲的文档并发出了一个条件下的请求，原来缓冲的文档还可以继续使用</li>
<li>400 Bad Request ： 客户端请求有语法错误，不被服务器所理解</li>
<li>401 Unauthorized ： 请求未经授权，这个状态码必须和WWW-Authenticate报头域一起使用</li>
<li>403 Forbidden：对被请求页面的访问被禁止</li>
<li>404 Not Found ： 请求资源不存在</li>
<li>500 Internal Server Error ：服务器发生不可预期的错误，原来缓冲的文档还可以继续使用</li>
<li>503 Service Unavailable ： 请求未完成，服务器临时过载或宕机，一段时间后可能恢复正常</li>
</ul>
<h3 id="46-什么是持久连接？">4.6 什么是持久连接？</h3>
<blockquote>
<p>[!NOTE]
HTTP协议采用‘请求-应答’模式， HTTP1.1版本才支持的，使用Keep-alive字段可以建立一个长连接，从而不需要每次请求都去建立一个新的连接。</p>
</blockquote>
<h3 id="47-什么是管线化？">4.7 什么是管线化？</h3>
<h4 id="471-基本概念">4.7.1 基本概念</h4>
<ul>
<li>在使用持久连接（Keep-alive）的情况下，某个连接上的消息的传递类似于：请求1 --&gt; 响应1 --&gt; 请求2 --&gt; 响应2 --&gt; 请求3 --&gt; 响应3</li>
<li>管线化的过程： 请求1 --&gt; 请求2 --&gt; 请求3 --&gt; 响应1 --&gt; 响应2 --&gt; 响应3</li>
</ul>
<h4 id="472-管线化的特点（特点）">4.7.2 管线化的特点（特点）</h4>
<ol>
<li><strong>管线化机制通过持久连接完成，仅在HTTP1.1版本之后支持</strong></li>
<li><strong>只有GET和HEAD请求可以进行管线化，POST有所限制的</strong></li>
<li><strong>初次创建连接的时候不应该启动管线机制，因为对方（服务器）不一定支持HTTP1.1版本的协议</strong></li>
<li>管线化不会影响到响应到来的顺序，HTTP响应返回的顺序并未改变</li>
<li>HTTP1.1 要求服务器支持管线化，但并不要求服务器也对响应进行管线化处理，只是要求对于管线化的请求不失败即可</li>
<li>由于上面提到的服务器端问题，开启管线化很可能并不会带来大幅度的性能提升，而且很多服务器和代理程序对管线化的支持并不好，因此现代的浏览器如Chrome和Firefox默认并没有开启管线化支持</li>
</ol>
<h2 id="5-原型链">5. 原型链</h2>
<h3 id="51-创建对象的几种方法？">5.1 创建对象的几种方法？</h3>
<pre><code class="language-js">// 1. 使用字面量的方式来创建
var o1 = {name : &#39;zhangsan&#39;};
var o11 = new Object({name : &#39;zhangsan&#39;});

// 2. 使用普通构造函数的方式来创建
var M = function(){
    this.name = &#39;zhangsan&#39;;
}
var o2 = new M();

// 3. Object.create方法
var p = {name : &#39;zhangsan&#39;};
var o3 = Object.create(p);</code></pre>
<h3 id="52-原型、构造函数、实例、原型链？">5.2 原型、构造函数、实例、原型链？</h3>
<p><strong>构造函数</strong>：使用new运算符来声明一个实例（任何函数都是可以通过构造函数来使用的）</p>
<p><strong>原型链</strong>：通过原型链可以找到上一级别的原型对象</p>
<p><strong>原型对象</strong>：多个实例公用的数据和属性或者方法
<img src="../img/interview/prototype.jpg" alt=""></p>
<h3 id="53-instanceof的原理？">5.3 instanceof的原理？</h3>
<blockquote>
<p>[!NOTE]
instanceof 检测一个对象A是不是另一个对象B的实例的原理是：查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在，则返回true,如果不在则返回false。不过有一个特殊的情况，当对象B的prototype为null将会报错(类似于空指针异常)。</p>
</blockquote>
<pre><code class="language-js">// 2. 使用普通构造函数的方式来创建
var M = function(){
  this.name = &#39;zhangsan&#39;;
}
var o2 = new M();
undefined
o2.__proto__ == M.prototype
true
o2.__proto__ == M.prototype
true
o2.__proto__.constructor === Object
false
o2.__proto__.constructor === M
true</code></pre>
<h3 id="54-new运算符的原理？">5.4 new运算符的原理？</h3>
<ol>
<li>一个新对象被创建。它继承于foo.prototype</li>
<li>构造函数foo被执行。执行的时候，相应的传参会被传入，同时上下文(this)会被指定为这个新实例，new foo等同于 new foo(),只能用在不传递任何参数的情况</li>
<li>如果构造函数返回了一个“对象”，那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象，那么new 出来的结果为步骤1创建的对象</li>
</ol>
<pre><code class="language-js">// new 一个对象的过程
var _new = function (fn) {
  // 1. 创建一个对象，这个对象要继承fn这个构造函数的原型对象
  var o = Object.create(fn.prototype);
  // 2. 执行构造函数
  var k = fn.call(o, arguments);
  // 3. 看下执行的这个函数的运行效果是不是函数
  if (typeof k === &#39;object&#39;){
      return k;
  }
  else
  {
      return o;
  }
}</code></pre>
<h2 id="6-面向对象">6. 面向对象</h2>
<h3 id="61-类与继承：如何实现继承，继承的几种实现方式">6.1 类与继承：如何实现继承，继承的几种实现方式</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;Title&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;script&gt;
  // 类的声明
  function Animal1() {
      this.name = &#39;name&#39;;
  }
  // ES6 中的class的声明
  class Animal2 {
      constructor(){
          this.name = &#39;name&#39;;
      }
  }

  console.log(new Animal1(), new Animal2());
  ///////////////////////////////////////////////////////////////////////////////////////////


  // 如何实现类的继承呢？？？-----------本质：原型链
  // v1. 借助构造函数实现继承
  function Parent1() {
      this.name = &#39;parent1&#39;
  }
  Parent1.prototype.sayHello = function () {
      console.log(&#39;hello&#39;);
  }
  function Child1() {
      // 执行父亲的构造函数：
      // 1. 实现原理：将父级函数的this指向了这个子类的实例上面去了
      // 2. 缺点：父亲的原型链上面的方法或者属性不能被继承；只能实现部分继承
      Parent1.call(this);
      this.type = &#39;child1&#39;;
  }
  // 没有参数的时候，可以直接new + 函数名称
  console.log(res = new Child1);




  // v2. 借助原型链实现继承
  function Parent2() {
      this.name = &#39;parent2&#39;;
      this.data = [1, 2, 3];
  }
  Parent2.prototype.sayHello = function () {
      console.log(&#39;hello&#39;);
  }
  function Child2() {
      this.type = &#39;child2&#39;;
  }
  // prototype 就是为了让这个对象的实例可以访问到原型链上的内容
  Child2.prototype = new Parent2();
  // new Child2().__proto__ === Child2.prototype  // true
  // new Child2().__proto__.name                  // parent2
  // 原型链继承的缺点：
  // 1. 原理：通过修改原型链来实现对象的继承关系
  // 2. 缺点：修改第一个对象上面的属性，会直接修改第二个对象属性数据(引用类型)
  var c1 = new Child2();
  var c2 = new Child2();
  c1.data.push(100, 200, 300);

  // v3. 组合继承
  function Parent3() {
      this.name = &#39;parent3&#39;;
      this.data = [1, 2, 3];
  }
  function Child3() {
      // 1. 借用构造函数继承
      Parent3.call(this);
      this.type = &#39;child3&#39;;
  }
  // 2. 原型链继承
  // child3的原型对象是Parent3的一个实例对象，但是这个实例对象中是没有constructor这个属性的，因此寻找属性的时候回沿着这个实例对象的原型链继续向上寻找new Parent3().prototype 这个原型对象的，
  // 最终在Parent3.prototype这个原型对象中找到了这个属性，new一个对象找的实际上是{Parent3.prototype.constructor : Parent3}
  Child3.prototype = new Parent3();
  var c1 = new Child3();
  var c2 = new Child3();
  c1.data.push(100, 200, 300);
  // 组合继承的特点：
  // 1. 原理：结合借用构造函数继承和原型链继承的优点，摒弃二者的缺点
  // 2. 缺点：父类构造函数在创建实例的时候总共执行了两次（new Parent3(), new Child3()）


  // v4. 组合继承的优化1
  function Parent4() {
      this.name = &#39;parent4&#39;;
      this.data = [1, 2, 3];
  }
  function Child4() {
      // 1. 借用构造函数继承
      Parent4.call(this);
      this.type = &#39;child4&#39;;
  }
  // 让子类的构造函数的原型对象和父类构造函数的原型对象执向同一个对象(都是同一个对象)
  Child4.prototype = Parent4.prototype;
  // 测试
  var c1 = new Child4();
  var c2 = new Child4();
  console.log(c1 instanceof Child4, c1 instanceof Parent4);
  console.log(c1.constructor)         // Parent4? 如何实现：c1.constructor(c1.__proto__.constructor) === Child4 呢？
  // 缺点：
  // 1. 无法通过原型对象的constructor属性来获取对象的属性对应的构造函数了(子类和父类公用的是一个contructor)
  // 2. obj instanceof Child4 === true; obj instanceof Parent4 === true
  // 3. obj.__proto__.constructor === Child4; obj.__proto__.constructor === Parent4  ???

  // v5. 组合继承的优化2【完美写法】
  function Parent5() {
      this.name = &#39;parent5&#39;;
      this.data = [1, 2, 3, 4, 5];
  }
  function Child5(){
      Parent5.call(this);
      this.type = &#39;child5&#39;;
  }

  // 通过创建中间对象的方式来把两个对象区分开
  // var obj = new Object(); obj.__proto__ = Constructor.prototype;
  // 1. Object.create创建的对象obj, 这个obj的原型对象就是参数
  // 2. Child5的原型对象是Child5.prototype
  // 3. Child5.prototype = obj，obj这个对象相当于就是一个中间的桥梁关系
  Child5.prototype = Object.create(Parent5.prototype);
  // 当前的方式还是会按照原型链一级一级向上寻找的, 给Child5的原型对象上面绑定一个自己定义的constructor属性
  Child5.prototype.constructor = Child5;

  // var s1 = new Child5()

  // 上面的代码等价于
  var obj = Object.create(Parent5.prototype);     // obj.prototype = Parent5.prototype
  Child5.prototype = obj;
  Child5.prototype.constructor = Child5;
  // 1. 对象之间就是通过__proto__ 属性向上寻找的
  // 2. 寻找规则： child5 ---&gt; Child5.prototype ---&gt; obj(Object.create(Parent5.prototype)) ---&gt; Parent5.prototype


  // 技巧：不要让面试官问太多题目：拖拉时间【挤牙膏】，把一个问题尽量吃透
  // 消化这一块内容
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<blockquote>
<p>[!WARNING]
面试技巧</p>
</blockquote>
<ol>
<li>不要让面试官问太多题目：拖拉时间【挤牙膏】，把一个问题尽量吃透</li>
<li>知识深度</li>
</ol>
<h2 id="7-通信">7. 通信</h2>
<h3 id="71-什么是同源策略个限制？">7.1 什么是同源策略个限制？</h3>
<blockquote>
<p>[!NOTE]
同源策略限制是从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。（一个源的文档或脚本是没有权利直接操作另外一个源的文档或脚本的）</p>
</blockquote>
<ol>
<li><strong>Cookie， LocalStorage和IndexDB无法读取</strong></li>
<li>DOM无法获得；（document.body是无法获取的）</li>
<li>Ajax请求不能发送</li>
</ol>
<h3 id="72-前后端如何进行通信呢？">7.2 前后端如何进行通信呢？</h3>
<ol>
<li>Ajax（有同源策略限制）；Fetch API则是XMLHttpRequest的最新替代技术， 它是W3C的正式标准</li>
<li>WebSocket：支持跨域请求数据，没有同源策略的限制</li>
<li>CORS：新的协议通信标准；CORS则将导致跨域访问的请求分为三种：Simple Request，Preflighted Request以及Requests with Credential；cors相对于jsonp而言的好处就是支持所有的请求方式，不止是get请求，还支持post,put请求等等，而它的缺点就很明显，无法兼容所有的浏览器，对于要兼容到老式浏览器而言，还是使用jsonp好点</li>
</ol>
<h3 id="73-如何创建ajax呢？">7.3 如何创建Ajax呢？</h3>
<ol>
<li>XMLHttpRequest对象的工作流程</li>
<li>浏览器的兼容性处理【重点】</li>
<li>事件的触发条件</li>
<li>事件的触发顺序</li>
</ol>
<pre><code class="language-js">  function ajax(params){
    // 1. 创建对象，考虑兼容性【重点】
    var xhr = XMLHTTPRequest ? new XMLHTTPRequest() : new window.ActiveXObject(&#39;Microsoft.XMLHTTP&#39;);      // *** 兼容性问题必须考虑
    // 2. 打开连接
    var type = params.type || &#39;GET&#39;,
        url = params.url || &#39;&#39;,
        data = params.data || {},
        success = params.success,
        error = params.error,
        dataArr = [];
    for (var k in data) {
      dataArr.push(k + &#39;=&#39; + data[k]);
    }
    //带上Cookie
    xhr.withCredentials = true;
    if (type.toUpperCase() === &#39;GET&#39;) {
      // get
      url += &#39;?&#39; + dataArr.join(&#39;&amp;&#39;);
      // 问号结尾的话，直接替换为空字符串
      xhr.open(type, url.replace(/\?$/g, &#39;&#39;), true);
      // GET 请求的话，是不需要再send方法中带上参数的
      xhr.send();
    }
    else {
      // POST
      xhr.open(type, url, true);
      xhr.setRequestHeader(&#39;Content-type&#39;, &#39;application/x-www-form-urlencoded&#39;);
      // POST 请求需要把数据放在send方法里面， data = name=zhangsna&amp;age=18&amp;sex=male
      xhr.send(dataArr.join(&#39;&amp;&#39;));
    }
    // 开始监听变化
    xhr.onreadystatechange = function(){
      // 这里需要考虑强缓存和协商缓存的话直接处理，206是媒体资源的创建方式
      if (xhr.readyState === 4 &amp;&amp; xhr.status === 200 || xhr.status === 304) {
          var res;
          if (success instanceof Function) {
            res = xhr.responseText;
            if (typeof res === &#39;string&#39;) {
              res = JSON.parse(res);
              // 开始执行成功的回调函数
              success.call(xhr, res);
            }
          } else {
            if (error instanceof Function) {
              // 失败的话直接返回这个responseText中的内容信息
              error.call(xhr, res);
            }
          }
      }
    }
  }</code></pre>
<h3 id="74-跨域通信的几种方式？">7.4 跨域通信的几种方式？</h3>
<h4 id="741-jsonp">7.4.1 JSONP</h4>
<pre><code class="language-js">  function jsonp(url, onsuccess, onerror, charset){
    // 1. 全局注册一个callback
    var callbackName = &#39;callback&#39; + Math.random() * 100;
    window[callbackName] = function(){
      if (onsuccess &amp;&amp; typeof onsuccess === &#39;Function&#39;) {
        onsuccess(arguments[0]);
      }
    }
    // 2. 动态创建一个script标签
    var script = document.createElement(&#39;script&#39;);
    script.setAttribute(&#39;type&#39;, &#39;text/javascript&#39;);
    charset &amp;&amp; script.setAttribute(&#39;charset&#39;, charset);
    script.setAttribute(&#39;src&#39;, url);
    script.async = true;
    // 3. 开始监听处理的过程
    script.onload = script.onreadystatechange = function(){
      if (!script.readyState || /loaded|complete/.test(script.readyState)) {
        // 4. 成功之后移除这个事件
        script.onload = script.onreadystatechange = null;
        // 删除这个script的DOM对象（head.removeChild(script), 这个DOM节点的父节点相当于是head标签这个父节点）
        script.parentNode &amp;&amp; script.parentNode.removeChild(script);
        // 删除函数或变量
        window[callbackName] = null;
      }
    }
    script.onerror = function(){
      if (onerror &amp;&amp; typeof onerror === &#39;Function&#39;) {
        onerror();
      }
    }
    // 5. 开始发送这个请求(把这个标签放在页面中的head标签中即可)
    document.getElementsByTagName(&#39;head&#39;)[0].appendChild(script);
  }</code></pre>
<h4 id="742-hash">7.4.2 Hash</h4>
<p>hash 改变后页面不会刷新的</p>
<blockquote>
<p>[!NOTE]
使用场景：当前的页面A通过iframe或者frame嵌入了跨域的页面</p>
</blockquote>
<pre><code class="language-js">  // 1. A页面中的代码如下
  var B = document.getElementsByTagName(&#39;iframe&#39;);
  B.src = B.src + &#39;#&#39; + JSON.stringfy(data);
  // 2. B中的伪代码如下
  window.onhashchange = function(){
    var data = window.location.hash;    // 接受数据
    data = JSON.parse(data);
  }</code></pre>
<h4 id="743--postmessagehtml5中新增">7.4.3  postMessage(HTML5中新增)</h4>
<blockquote>
<p>[!NOTE]
使用场景： 可以实现窗口A(A.com)向窗口B(B.com)发送信息</p>
</blockquote>
<pre><code class="language-js">  // 1. 窗口B中的代码如下
  var BWindow = window;
  BWindow.postMessage(JSON.stringfy(data), &#39;http://www.A.com&#39;);   
  // 2. 窗口A中代码
  var AWindow = window;
  AWindow.addEventListener(&#39;message&#39;, function(e){
      console.log(e.origin);                  // http://www.B.com
      console.log(e.source);                  // BWindow

      e.source.postMessage(&#39;已成功收到消息&#39;);

      console.log(JSON.parse(e.data));        // data
  }, false)
  // 父窗口给子窗口发信息，需要用iframe的contentWindow属性作为调用主体
  // 子窗口给父窗口发的信息需要使用window.top，多层iframe使用window.frameElement</code></pre>
<h4 id="744--websocket">7.4.4 . WebSocket</h4>
<blockquote>
<p>[!NOTE]
不受同源策略影响，可以直接使用</p>
</blockquote>
<pre><code class="language-js">  var ws = new window.WebSocket(&#39;ws://echo.websocket.org&#39;);

  // 打开连接
  ws.onopen = function(e){
    console.log(&#39;Connection open ……&#39;);
    ws.send(&#39;Hello WebSocket!&#39;);
  }

  // 接受消息
  ws.onmessage = function(e){
    console.log(&#39;Received Message : &#39;, e.data);
  }

  // 关闭连接
  ws.onclose = function(e){
    console.log(&#39;Connection closed&#39;);
  }</code></pre>
<h4 id="745-cors">7.4.5 CORS</h4>
<blockquote>
<p>支持跨域通信版本的Ajax，是一种新的标准（Origin头）【ajax的一个变种，适用于任何】</p>
</blockquote>
<p><a href="http://www.ruanyifeng.com/blog/2016/04/cors.html">http://www.ruanyifeng.com/blog/2016/04/cors.html</a></p>
<pre><code class="language-js">  fetch(&#39;/get/name&#39;, {
    method : &#39;get&#39;
  }).then(function(response){
    console.log(response);
  }).catch(function(err){
    // 出错了；等价于then的第二个参数
  });
  // 原因：浏览器默认会拦截ajax请求，会根据头中的origin消息进行判断处理消息；Origin字段用来说明，本次请求来自哪个源（协议 + 域名 + 端口）。服务器根据这个值，决定是否同意这次请求。JSONP只支持GET请求，CORS支持所有类型的HTTP请求。JSONP的优势在于支持老式浏览器，以及可以向不支持CORS的网站请求数据。</code></pre>
<h5 id="7451-cors请求的基本流程">7.4.5.1 CORS请求的基本流程</h5>
<ol>
<li>对于简单请求，浏览器直接发出CORS请求。具体来说，就是在头信息之中，增加一个Origin字段。</li>
<li>Origin字段用来说明，本次请求来自哪个源（协议 + 域名 + 端口）。服务器根据这个值，决定是否同意这次请求。</li>
<li>如果Origin指定的源，不在许可范围内，服务器会返回一个正常的HTTP回应。浏览器发现，这个回应的头信息没有包含Access-Control-Allow-Origin字段（详见下文），就知道出错了，从而抛出一个错误，被XMLHttpRequest的onerror回调函数捕获。</li>
<li>如果Origin指定的域名在许可范围内，服务器返回的响应，会多出几个头信息字段。</li>
</ol>
<pre><code>  Access-Control-Allow-Origin: http://api.bob.com   // 必需的字段
  Access-Control-Allow-Credentials: true            // 可选字段： 是否允许发送cookie
  Access-Control-Expose-Headers: FooBar
  Content-Type: text/html; charset=utf-8</code></pre><ol start="5">
<li>简单请求的CORS请求，会在正式通信之前，增加一次HTTP查询请求，称为&quot;预检&quot;请求（preflight）。OPTIONS表示当前的这个请求是用来询问的；服务器收到&quot;预检&quot;请求以后，检查了Origin、Access-Control-Request-Method和Access-Control-Request-Headers字段以后，确认允许跨源请求，就可以做出回应。</li>
</ol>
<h5 id="7452-jsonp和cors的区别？">7.4.5.2 JSONP和CORS的区别？</h5>
<ol>
<li>JSONP只支持GET请求，CORS支持所有类型的HTTP请求</li>
<li>JSONP的优势在于支持老式浏览器，以及可以向不支持CORS的网站请求数据。</li>
</ol>
<h2 id="8-安全">8. 安全</h2>
<h3 id="81-csrf">8.1 CSRF</h3>
<h4 id="811-基本概念和缩写">8.1.1 基本概念和缩写</h4>
<p>CSRF： 跨站请求伪造，Cross site request forgery</p>
<h4 id="812-csrf-攻击原理">8.1.2 CSRF 攻击原理</h4>
<p><img src="../img/interview/csrf.jpg" alt="CSRF攻击原理"></p>
<h4 id="813-可以成功攻击的条件？">8.1.3 可以成功攻击的条件？</h4>
<ol>
<li>目标网站存在CSRF漏洞的请求接口（一般为get请求）</li>
<li>目标用户之前已经成功登录过这个网站（留下了Cookie）</li>
</ol>
<h4 id="814-如何防御呢？">8.1.4 如何防御呢？</h4>
<ol>
<li><strong>Token验证</strong>：访问服务器接口的时候，会自动带上这个token</li>
<li><strong>Referer验证</strong>：验证网站的页面来源（只有我当前网站下的页面才可以请求，对于来自其他网站的请求一律拦截）</li>
<li><strong>隐藏令牌</strong>： 隐藏信息会放在header中（类似于Token）</li>
</ol>
<h3 id="82-xss">8.2 XSS</h3>
<h4 id="821-基本概念和缩写">8.2.1 基本概念和缩写</h4>
<p>XSS： cross-site scripting, 跨站脚本攻击</p>
<h4 id="822-xss防御">8.2.2 XSS防御</h4>
<p><strong>攻击原理</strong>: 注入JS脚本</p>
<p><strong>防御措施</strong>: 让JS代码无法解析执行</p>
<h3 id="83-csrf和xss的区别呢？">8.3 CSRF和XSS的区别呢？</h3>
<ol>
<li>CSRF：网站本身存在漏洞的接口，依赖这些登录过目标网站的用户来实现信息的窃取；</li>
<li>XSS：向页面中注入JS执行，JS函数体内执行目标任务；</li>
</ol>
<blockquote>
<p>[!NOTE]</p>
</blockquote>
<ol>
<li>一定要说出中文名称，实现原理，防范措施都说出来</li>
<li>不要拖泥带水，言简意赅</li>
</ol>
<h2 id="9-算法">9. 算法</h2>
<blockquote>
<p>[!NOTE]
算法攻略：多刷题才是硬道理！！！</p>
</blockquote>
<h1 id="二三面（知识深度面）">二三面（知识深度面）</h1>
<h2 id="10-渲染机制">10. 渲染机制</h2>
<h3 id="101-什么是doctype及作用？">10.1 什么是DOCTYPE及作用？</h3>
<ol>
<li>DTD（Document Type Definition）：文档类型定义，是一系列的语法规则，用来定义XML或者(X)HTML的文件类型。浏览器会使用它来判断文档的类型，决定使用哪一种协议来解析，以及切换浏览器模式；</li>
<li>DOCTYPE： 是用来声明文档类型和DTD规范的，一个主要的用途是文件的合法性验证；如果文件代码不合法，那么浏览器解析的时候就会出现一些出错</li>
<li>总结：Doctype就是通知浏览器当前的文档是属于那种类型的，包含哪些DTD。</li>
</ol>
<pre><code class="language-html">  &lt;!--HTML5的写法--&gt;
  &lt;DOCTYPE html&gt;
  &lt;!-- HTML 4.01  Strict
    1. 这个DTD 包含所有的HTML元素和属性
    2. 但是不包含展示性的和弃用的元素（比如font）
  --&gt;
  &lt;DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot; &gt;
  &lt;!-- HTML 4.0.1 Transitional
    1. 这个DTD 包含所有的HTML元素和属性
    2. 也包含展示性的和弃用性的元素（比如font）
  --&gt;
  &lt;DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot; http://www.w3.org/TR/html4/loose.dtd&quot; &gt;</code></pre>
<hr>
<blockquote>
<p>[!NOTE]
在W3C标准出来之前，不同的浏览器对页面渲染有不同的标准，产生了一定的差异。这种渲染方式叫做混杂模式。在W3C标准出来之后，浏览器对页面的渲染有了统一的标准，这种渲染方式叫做标准模式。&lt;!DOCTYPE&gt;不存在或者形式不正确会导致HTML或XHTML文档以混杂模式呈现，就是把如何渲染html页面的权利交给了浏览器，有多少种浏览器就有多少种展示方式。因此要提高浏览器兼容性就必须重视&lt;!DOCTYPE&gt;</p>
</blockquote>
<h3 id="102-严格模式和混杂模式">10.2 严格模式和混杂模式</h3>
<blockquote>
<p>[!NOTE]
严格模式和混杂模式都是浏览器的呈现模式，浏览器究竟使用混杂模式还是严格模式呈现页面与网页中的DTD（文件类型定义）有关，DTD里面包含了文档的规则。比如：loose.dtd</p>
</blockquote>
<ul>
<li><strong>严格模式</strong>：又称标准模式，是指浏览器按照W3C标准来解析代码，呈现页面</li>
<li><strong>混杂模式</strong>：又称为怪异模式或者兼容模式，是指浏览器按照自己的方式来解析代码，使用一种比较宽松的向后兼容的方式来显示页面。</li>
</ul>
<hr>
<h3 id="103-浏览器的渲染过程？">10.3 浏览器的渲染过程？</h3>
<p><img src="../img/interview/dom_render.jpg" alt="浏览器渲染过程"></p>
<h4 id="1031-开始进行dom解析，渲染dom-tree">10.3.1 开始进行DOM解析，渲染DOM Tree</h4>
<p><img src="../img/interview/dom_tree.jpg" alt="DOM树渲染"></p>
<h4 id="1032-开始进行css解析，渲染cssom-tree">10.3.2 开始进行CSS解析，渲染CSSOM Tree</h4>
<p><img src="../img/interview/cssom_tree.jpg" alt="CSSOM树渲染"></p>
<h4 id="1033-dom树和css树的结合，最后会转换为render-tree">10.3.3 DOM树和CSS树的结合，最后会转换为Render Tree</h4>
<p><img src="../img/interview/render_tree.jpg" alt="Render树渲染"></p>
<h4 id="1034-layout的过程，计算每一个dom元素的位置、宽度、高度等信息，最终渲染并显示页面到浏览器">10.3.4 Layout的过程，计算每一个DOM元素的位置、宽度、高度等信息，最终渲染并显示页面到浏览器</h4>
<p><img src="../../img/interview/layout.jpg" alt="Layout的过程"></p>
<h3 id="104-何时会触发reflow？">10.4 何时会触发Reflow？</h3>
<blockquote>
<p>[!NOTE]
定义：DOM结构中每个元素都有自己的盒子模型，这些都是需要根据各种样式来计算并根据计算结果将元素放在它该出现的位置，这个过程就是reflow；</p>
</blockquote>
<ol>
<li>当你增加、删除、修改DOM节点的时候，会导致Reflow或Repaint</li>
<li>当你移动DOM的位置，或者设置动画的时候</li>
<li>当你修改CSS样式的时候</li>
<li>当你Resize窗口的时候（移动端没有这个问题，与浏览器有关），或者在滚动窗口的时候</li>
<li>当你修改网页的默认的字体的时候</li>
</ol>
<h3 id="105-何时回触发repaint？">10.5 何时回触发Repaint？</h3>
<blockquote>
<p>[!NOTE]
定义：当各种盒子的位置、大小以及其他属性，例如颜色、字体大小都确定下来以后，浏览器于是便按照元素各自的特性绘制了一遍，于是页面的内容出现了，这个过程就是repaint</p>
</blockquote>
<ol>
<li>DOM改动</li>
<li>CSS改动</li>
</ol>
<h3 id="106-如何最大程度上的减少浏览器的重绘repaint过程频率呢？">10.6 如何最大程度上的减少浏览器的重绘Repaint过程(频率)呢？</h3>
<h4 id="1061-避免在document上直接进行频繁的dom操作，如果确实需要可以采用off-document的方式进行">10.6.1 避免在document上直接进行频繁的DOM操作，如果确实需要可以采用off-document的方式进行</h4>
<ul>
<li><ol>
<li>先将元素从document中删除，完成修改之后然后再把元素放回原来的位置</li>
</ol>
</li>
<li><ol start="2">
<li>将元素的display设置为none, 然后完成修改之后再把元素的display属性修改为原来的值</li>
</ol>
</li>
<li><ol start="3">
<li>如果需要创建多个DOM节点，可以使用DocumentFragment创建完毕之后一次性地加入document中去<pre><code class="language-js">var frag = document.createDocumentFragment();
frag.appendChild(dom);    /*每次创建的节点先放入DocumentFragment中*/</code></pre>
<h4 id="1062-集中修改样式">10.6.2 集中修改样式</h4>
</li>
</ol>
</li>
</ul>
<ol>
<li>尽可能少的修改元素style上的属性</li>
<li>尽量通过修改className来修改样式(一次性修改)</li>
<li>通过cssText属性来设置样式值<pre><code class="language-js">document.getElementById(&quot;d1&quot;).style.cssText = &quot;color:red; font-size:13px;&quot;;</code></pre>
<h4 id="1063-缓存layout的属性值">10.6.3 缓存Layout的属性值</h4>
<blockquote>
<p>[!NOTE]
对于Layout属性中非引用类型的值（数字型），如果需要多次访问则可以在一次访问时先存储到局部变量中，之后都使用局部变量，这样可以避免每次读取属性时造成浏览器的渲染。</p>
</blockquote>
</li>
</ol>
<pre><code class="language-js">  var width = el.offsetWidth;
  var scrollLeft = el.scrollLeft;</code></pre>
<h4 id="1064-设置元素的position为absolute或fixed">10.6.4 设置元素的position为absolute或fixed</h4>
<blockquote>
<p>[!NOTE]
在元素的position为static和relative时，元素处于DOM树结构当中，当对元素的某个操作需要重新渲染时，浏览器会渲染整个页面。将元素的position设置为absolute和fixed可以使元素从DOM树结构中脱离出来独立的存在，而浏览器在需要渲染时只需要渲染该元素以及位于该元素下方的元素，从而在某种程度上缩短浏览器渲染时间。</p>
</blockquote>
<h2 id="11-布局layout？">11. 布局Layout？</h2>
<p><strong>Layout属性包括</strong>：</p>
<ol>
<li>offsetLeft、offsetTop、offsetHeight、offsetWidth: 相对于父对象的边距信息，且返回值为数字；left获取或设置相对于具有定位属性(position定义为relative)的父对象的边距信息，返回值为字符串10px</li>
<li>scrollTop/Left/Width/Height：滚动条在各个方向上拉动的距离，返回值为数字</li>
<li>clientTop/Left/Width/Height：浏览器的可视区域的大小</li>
<li>getComputedStyle()、currentStyle(in IE)：浏览器渲染DOM元素之后的宽度和高度等样式信息</li>
</ol>
<h2 id="12-js运行机制">12. JS运行机制</h2>
<h3 id="121-如何理解js的单线程？">12.1 如何理解JS的单线程？</h3>
<p>看代码，写结果？</p>
<pre><code class="language-js">  // 同步任务
  console.log(1);
  // 异步任务要挂起
  setTimeout(function(){
    console.log(2)
  }, 0);
  console.log(3)
  // out : 1 3 2</code></pre>
<pre><code class="language-js">  console.log(&#39;A&#39;);
  setTimeout(function(){
    console.log(&#39;B&#39;)
  }, 0);
  while (true) {

  }

  // out : A</code></pre>
<h3 id="122-什么是任务队列？">12.2 什么是任务队列？</h3>
<pre><code class="language-js">  for (var i = 0; i &lt; 4; i++) {
    // setTimeout , setInterval 只有在时间到了的时候，才会把这个事件放在异步队列中去
    setTimeout(function(){
      console.log(i);
    }, 1000);
  }
  // out : 4 4 4 4</code></pre>
<h3 id="123-什么是event-loop？">12.3 什么是Event Loop？</h3>
<blockquote>
<p>[!NOTE]
JS是单线程的，浏览器引擎会先来执行同步任务，遇到异步任务之后，会把当前的这个异步任务放在time模块中，等到主线程中的所有的同步任务全部执行完毕之后；然后当前的这个异步任务只有时间到了之后，才会把这个任务（回调函数）放在一个异步队列中；当当前的任务栈中的任务全部执行完毕了之后，会先去执行微任务队列中的任务（Promise），然后等到微任务队列中的所有任务全部执行完毕之后，再去执行process.nextTick()这个函数，等到这个函数执行完毕之后，本次的事件轮训结束；
开启新的执行栈，从宏任务队列中依次取出异步任务，开始执行；每个宏任务执行都会重新开启一个新的任务执行栈</p>
</blockquote>
<h4 id="1231-3个关键点">12.3.1 3个关键点</h4>
<ol>
<li>执行栈执行的是同步任务；</li>
<li>什么时候去异步队列中取这个任务；</li>
<li>什么时候向这个任务队列中放入新的异步任务<h4 id="1232-异步任务的分类">12.3.2 异步任务的分类</h4>
</li>
</ol>
<ul>
<li>setTimeout, setInterval; </li>
<li>DOM事件（点击按钮的时候也会先去执行同步任务）； </li>
<li>Promise</li>
</ul>
<h2 id="13-知识点总结">13. 知识点总结</h2>
<ol>
<li>理解JS的单线程的概念</li>
<li>理解任务队列</li>
<li>理解Event Loop</li>
<li>理解哪些语句会翻入到异步任务队列</li>
<li>理解与放入到异步任务队列的时机<h3 id="131-页面性能">13.1 页面性能</h3>
<h4 id="1311-提升页面性能的方法有哪些？">13.1.1 提升页面性能的方法有哪些？</h4>
</li>
<li>资源压缩合并，减少HTTP请求；</li>
<li>非核心代码的异步加载 ---&gt; 异步加载的方式有哪些？ ---&gt; 异步加载的区别？</li>
<li><strong>利用浏览器的缓存 ---&gt; 缓存的分类 ---&gt; 缓存的原理</strong></li>
<li>使用CDN加速</li>
<li><strong>预解析DNS：DNS Prefetch 是一种DNS 预解析技术，当你浏览网页时，浏览器会在加载网页时对网页中的域名进行解析缓存，这样在你单击当前网页中的连接时就无需进行DNS的解析，减少用户等待时间，提高用户体验。（提前解析域名，而不是点击链接的时候才去进行DNS域名解析，可以节省DNS解析需要耗费的20-120毫秒时间）</strong></li>
</ol>
<!-- x-dns-Prefetch-control -->
<pre><code class="language-html">  &lt;!-- https协议的网站，默认是关闭了DNS的预解析的，可以使用下面的语句开启  --&gt;
  &lt;meta http-equiv=&quot;x-dns-prefetch-control&quot; content=&quot;on&quot;&gt;
  &lt;!-- 开始配置需要进行DNS预解析的域名 --&gt;
  &lt;link rel=&quot;dns-prefetch&quot; href=&quot;//www.zhix.net&quot;&gt;                               &lt;!--支持http和HTTPS--&gt;
  &lt;link rel=&quot;dns-prefetch&quot; href=&quot;http://bdimg.share.baidu.com&quot; /&gt;               &lt;!--支持http的协议--&gt;
  &lt;link rel=&quot;dns-prefetch&quot; href=&quot;http://nsclick.baidu.com&quot; /&gt;
  &lt;link rel=&quot;dns-prefetch&quot; href=&quot;http://hm.baidu.com&quot; /&gt;
  &lt;link rel=&quot;dns-prefetch&quot; href=&quot;http://eiv.baidu.com&quot; /&gt;</code></pre>
<h2 id="14-异步加载的方式">14. 异步加载的方式</h2>
<h3 id="141-动态脚本的加载">14.1 动态脚本的加载</h3>
<pre><code class="language-js">  var script = document.createElement(&#39;script&#39;);
  document.getElementsByTagName(&#39;head&#39;)[0].appendChild(script);

  // 没有 defer 或 async，浏览器会立即加载并执行指定的脚本，“立即”指的是在渲染该 script 标签之下的文档元素之前，也就是说不等待后续载入的文档元素，读到就加载并执行。
  &lt;script src=&quot;script.js&quot;&gt;&lt;/script&gt;</code></pre>
<h3 id="142-defer">14.2 defer</h3>
<pre><code class="language-html">&lt;!-- 有 defer，加载后续文档元素的过程将和 script.js 的加载并行进行（异步），但是 script.js 的执行要在所有元素解析完成之后，DOMContentLoaded 事件触发之前完成。 --&gt;
&lt;script defer src=&quot;myscript.js&quot;&gt;&lt;/script&gt;</code></pre>
<h3 id="143-async">14.3 async</h3>
<pre><code class="language-html">  &lt;!-- 有 async，加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行（异步）。 --&gt;
  &lt;script async src=&quot;script.js&quot;&gt;&lt;/script&gt;</code></pre>
<h3 id="144-异步加载的区别？">14.4 异步加载的区别？</h3>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>defer是在HTML解析完成之后（DOMContentLoaded事件执行之后）才会执行，如果是多个，会按照加载的顺序依次执行（按照顺序执行）</li>
<li>async是在加载完之后立即执行，如果是多个，执行顺序和加载顺序无关（与顺序无关）</li>
</ol>
</blockquote>
<h2 id="15-说一下浏览器的缓存机制吧？">15. 说一下浏览器的缓存机制吧？</h2>
<h3 id="151-缓存的分类">15.1 缓存的分类</h3>
<blockquote>
<p>[!NOTE]
缓存目的就是为了提升页面的性能</p>
</blockquote>
<h4 id="1511-强缓存">15.1.1 强缓存</h4>
<p><strong>直接从本地读取，不发送请求</strong></p>
<pre><code>    Response Headers
    cache-control: max-age=315360000（相对时间，优先级比expires高）
    expires: Sat, 10 Mar 2029 04:01:39 GMT(绝对时间)</code></pre><h4 id="1512-协商缓存">15.1.2 协商缓存</h4>
<p><strong>问一下服务器，这个文件有没有过期，然后再使用这个文件</strong></p>
<pre><code>    Response Headers
    last-modified: Tue, 12 Mar 2019 06:22:34 GMT（绝对时间）
    etag: &quot;52-583dfb6f4de80&quot;</code></pre><p>向服务器请求资源的时候，带上if-Modified-Since或者if-None-Match这个请求头，去询问服务器：</p>
<pre><code>    Request Headers
    if-Modified-Since: Tue, 12 Mar 2019 06:22:34 GMT
    if-None-Match: &quot;52-583dfb6f4de80&quot;</code></pre><h2 id="16-错误监控如何保证前端产品的上线质量？">16. 错误监控/如何保证前端产品的上线质量？</h2>
<h3 id="161-前端错误的分类？">16.1 前端错误的分类？</h3>
<ol>
<li>即时运行错误：代码错误</li>
<li>资源加载错误：图片/css/js文件加载失败</li>
</ol>
<h3 id="162-错误的捕获方式？">16.2 错误的捕获方式？</h3>
<h4 id="1621-即时运行错误的捕获方式">16.2.1 即时运行错误的捕获方式</h4>
<pre><code class="language-js">  // 方法一：使用try catch捕获
  try {
    // ...
  } catch (e) {
    // error
  } finally {
    // handle error
  }

  // 方法二：使用window.onerror 捕获错误
  // 无法捕获到资源加载错误
  window.onerror = function(msg, url, line, col, error){
    // ...
  }  
  window.addEventListener(&#39;error&#39;, function(msg, url, line, col, error){
    // ...
  })</code></pre>
<h4 id="1622-资源加载错误（不会向上冒泡）">16.2.2 资源加载错误（不会向上冒泡）</h4>
<pre><code class="language-js">  // 方法一: 直接在script, img这些DOM标签上面直接加上onerror事件
  Object.onerror = function(e){
      // ...
  }

  // 方法二：window.performace.getEntries(间接获取资源加载错误的数量)
  var loadedResources = window.performance.getEntries();           // 1. 获取浏览器中已经加载的所有资源（包括各个阶段的详细加载时间）
  var loaderImgs = loadedResources.filter(item =&gt; {
      return /\.jpg|png|gif|svg/.test(item.name)
  });
  var imgs = document.getElementsByTagName(&#39;img&#39;);                // 2. 获取页面中所有的img集合
  var len = imgs.length - loaderImgs.length;                      // 3. 加载失败的图片数量
  console.log(&#39;图片加载失败数量：&#39;, len, &#39;条&#39;);


  // 方法三： 使用事件捕获的方式来实现Error事件捕获
  // 使用事件捕获的方式来实现资源加载错误的事件的捕获：window ---&gt; document --&gt; html --- &gt; body ---&gt; div ---...
  window.addEventListener(&#39;error&#39;, function (msg) {
      console.log(msg);
  }, true);</code></pre>
<h4 id="1623-补充的方法">16.2.3 补充的方法</h4>
<pre><code class="language-js">      // 使用事件捕获的方式来实现
     window.addEventListener(&#39;error&#39;, function (msg) {
         console.log(&#39;资源加载异常成功捕获：&#39;, msg);
     }, true);
     // 使用事件冒泡的方式是只能捕获到运行的时候的一些异常
     window.addEventListener(&#39;error&#39;, function (e) {
         console.log(&#39;运行异常成功捕获1：&#39;, e.message, e.filename, e.lineno, e.colno, e.error);
     }, false);

     // 这种方式是可以按照参数的方式来接受相关的参数信息
     window.onerror = function (msg, url, line, col, error) {
         console.log(&#39;运行异常成功捕获2：&#39;, msg, url, line, col, error);
     }</code></pre>
<h4 id="1624-问题的延伸：跨域的js运行错误可以捕获吗，错误提示是什么？应该怎么处理呢？">16.2.4 问题的延伸：跨域的js运行错误可以捕获吗，错误提示是什么？应该怎么处理呢？</h4>
<h5 id="16241-错误信息">16.2.4.1 错误信息</h5>
<p><img src="../img/interview/cross-site-script-error.jpg" alt="JS跨域出现的错误"></p>
<pre><code>errorinfo :
Script0 error
0 row
0 col</code></pre><h5 id="16242-处理方法">16.2.4.2 处理方法</h5>
<ol>
<li><strong>第一步</strong>：在script标签上增加crossorigin属性<pre><code class="language-HTML">&lt;!-- script 表情添加crossorigin属性 --&gt;
&lt;!-- 除了 script，所有能引入跨域资源的标签包括 link 和 img 之类，都有一样的属性 --&gt;
&lt;script crossorigin  src=&quot;http://www.lmj.com/demo/crossoriginAttribute/error.js&quot;&gt;&lt;/script&gt;</code></pre>
</li>
<li><strong>第二步</strong>：设置js资源响应头&#39;Access-Control-Allow-Origin: * &#39;,服务器端需要开启<pre><code class="language-js">// 服务器可以直接设置一个响应头信息
res.setResponseHeader(&#39;Access-Control-Allow-Origin&#39;, &#39;www.lmj.com&#39;);</code></pre>
</li>
</ol>
<h3 id="163-上报错误的基本原理？">16.3 上报错误的基本原理？</h3>
<ol>
<li>采用Ajax通信的方式来上报</li>
<li>利用Image对象进行上报（cnzz）[重点理解掌握]<pre><code class="language-js">// 下面的两种方式都是可以实现错误信息的上报功能的
(new Image).src = &#39;http://www.baidu.com?name=zhangsna&amp;age=18&amp;sex=male&#39;
(new Image()).src = &#39;https://www.baidu.com?name=zhangsan&#39;</code></pre>
</li>
</ol>
<h2 id="17-如何使用js获取客户端的硬件信息呢？">17. 如何使用JS获取客户端的硬件信息呢？</h2>
<pre><code class="language-js">  // IE 浏览器提供的获取电脑硬件的API
  var locator = new ActiveXObject (&quot;WbemScripting.SWbemLocator&quot;);
  var service = locator.ConnectServer(&quot;.&quot;);
  var properties = service.ExecQuery(&quot;SELECT * FROM Win32_Processor&quot;);</code></pre>
<h2 id="18-使用windowperformace-来实现用户体验的数据记录呢？">18. 使用window.performace 来实现用户体验的数据记录呢？</h2>
<blockquote>
<p>[!NOTE]
可以参考性能优化章节-performance性能监控一文内容。</p>
</blockquote>
<h1 id="三四面（业务项目面）">三四面（业务项目面）</h1>
<blockquote>
<p>[!NOTE]</p>
</blockquote>
<ul>
<li>知识面要广</li>
<li>理解要深刻</li>
<li>内心要诚实：没了解过，问面试官有哪些资料可以学习</li>
<li>态度要谦虚</li>
<li>回答要灵活：把握一个度，不要和面试官争执对错</li>
<li><ul>
<li>要学会赞美：被问住了可以回答，适当赞美（没面试官理解的那么深，虚心请教）</li>
</ul>
</li>
</ul>
<h2 id="19介绍一下你做过的项目？">19.介绍一下你做过的项目？</h2>
<p><img src="../img/%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D.jpg" alt="项目介绍"></p>
<h3 id="191-项目介绍模板（业务能力体现）">19.1 项目介绍模板（业务能力体现）</h3>
<ol>
<li>我做过什么业务？</li>
<li>负责的业务有什么业绩？</li>
<li>使用了什么技术方案？</li>
<li>突破了什么技术难点？</li>
<li>遇到了什么问题？</li>
<li>最大的收获是什么？</li>
</ol>
<h3 id="192-团队协作能力">19.2 团队协作能力</h3>
<p><img src="../img/%E5%9B%A2%E9%98%9F%E5%8D%8F%E4%BD%9C%E8%83%BD%E5%8A%9B.jpg" alt="项目介绍"></p>
<h3 id="193-事务推动能力">19.3 事务推动能力</h3>
<p><img src="../img/%E4%BA%8B%E5%8A%A1%E6%8E%A8%E5%8A%A8%E8%83%BD%E5%8A%9B.jpg" alt="项目介绍"></p>
<h3 id="194-带人能力">19.4 带人能力</h3>
<p><img src="../img/%E5%B8%A6%E4%BA%BA%E8%83%BD%E5%8A%9B.jpg" alt="项目介绍"></p>
<h1 id="终面（hr面）">终面（HR面）</h1>
<h2 id="20-技术终面或hr面试要点">20. 技术终面或HR面试要点</h2>
<blockquote>
<p>[!NOTE]
主要考察点：乐观积极、主动沟通、逻辑顺畅、上进有责任心、有主张，做事果断、职业竞争力、职业规划</p>
</blockquote>
<h3 id="201-职业竞争力">20.1 职业竞争力</h3>
<ol>
<li><p><strong>业务能力</strong>：可以做到行业第一</p>
</li>
<li><p><strong>思考能力</strong>：对同一件事可以从不同角度去思考，找到最优解</p>
</li>
<li><p><strong>学习能力</strong>：不断学习新的业务，沉淀、总结</p>
</li>
<li><p><strong>无上限的付出</strong>：对于无法解决的问题可以熬夜、加班</p>
</li>
</ol>
<h3 id="202-职业规划">20.2 职业规划</h3>
<ol>
<li><p><strong>目标是什么</strong>：在业务上成为专家，在技术上成为行业大牛</p>
</li>
<li><p><strong>近阶段的目标</strong>：不断的学习积累各方面地经验，以学习为主</p>
</li>
<li><p><strong>长期目标</strong>：做几件有价值的事情，如开源作品、技术框架等</p>
</li>
<li><p><strong>方式方法</strong>：先完成业务上的主要问题，做到极致，然后逐步向目标靠拢</p>
</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/6553ffcc-c37c-43e1-95d9-abd6221bdeb2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6553ffcc-c37c-43e1-95d9-abd6221bdeb2</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Mar 2024 07:30:29 GMT</pubDate></item><item><title><![CDATA[【Web安全】CSRF攻击]]></title><description><![CDATA[<h1 id="csrf-跨站请求伪造">CSRF 跨站请求伪造</h1>
<h2 id="1-介绍一下csrf攻击的原理和防御？">1. 介绍一下CSRF攻击的原理和防御？</h2>
<blockquote>
<p>（Cross Site Request Forgy）,打开同一浏览器时其他的网站对本网站造成的影响。原理就是攻击者构造出一个后端请求地址，诱导用户点击或者通过某些途径自动发起请求。如果用户是在登录状态下的话，后端就以为是用户在操作，从而进行相应的逻辑。
<img src="../../img/csrf.png" alt="原理"></p>
</blockquote>
<p>举个例子，用户同时打开了A网站和钓鱼网站。 假设A网站中有一个通过 GET 请求提交用户评论的接口，那么攻击者就可以在钓鱼网站中加入一个图片，图片的地址就是评论接口。</p>
<pre><code class="language-html">&lt;img src=&quot;http://www.domain.com/xxx?comment=&#39;attack&#39;&quot;/&gt;</code></pre>
<h3 id="11-csrf攻击原理">1.1 CSRF攻击原理</h3>
<ol>
<li>用户登录A网站</li>
<li>A网站确认身份（给客户端cookie）</li>
<li>B网站页面向A网站发起请求（带上A网站身份）</li>
</ol>
<h3 id="12--csrf防御">1.2  CSRF防御</h3>
<ol>
<li><p>Get 请求不对数据进行修改</p>
</li>
<li><p>不让第三方网站访问到用户 Cookie</p>
</li>
<li><p>阻止第三方网站请求接口</p>
</li>
<li><p>请求时附带验证信息，比如验证码或者 Token</p>
</li>
<li><p>SameSite</p>
<ul>
<li>可以对 Cookie 设置 SameSite 属性。该属性表示 Cookie 不随着跨域请求发送，可以很大程度减少 CSRF 的攻击，但是该属性目前并不是所有浏览器都兼容。</li>
</ul>
</li>
<li><p>Token验证</p>
<ul>
<li>cookie是发送时自动带上的，而不会主动带上Token，所以在每次发送时主动发送Token</li>
</ul>
</li>
<li><p>Referer验证</p>
<ul>
<li>对于需要防范 CSRF 的请求，我们可以通过验证 Referer 来判断该请求是否为第三方网站发起的。</li>
</ul>
</li>
<li><p>隐藏令牌</p>
<ul>
<li>主动在HTTP头部中添加令牌信息</li>
</ul>
</li>
</ol>
<p>禁止第三方网站带cookies</p>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies#SameSite_Cookies">same-site</a>属性。 设置只有同一站点的请求才能携带cookie</p>
<h3 id="13-csrf蠕虫">1.3 CSRF蠕虫</h3>
<p>如果某个用户打开了被攻击网页，并且用户同时访问了攻击者的网页。
那么攻击者的网页就会使用用户的身份发送一些请求，并且常用用户的身份发布一些评论或文章，里面包含攻击者的网页链接。如果其他用户看到了这个用户的这条评论，都甚至可以不点击，其他用户也会被盗用身份发送一些恶意请求。这样病毒的传播就会越来越快，影响越来越大。</p>
<h3 id="14-csrf攻击危害">1.4 CSRF攻击危害</h3>
<ul>
<li>利用用户登录态</li>
<li>用户不知情</li>
<li>完成业务请求</li>
<li>盗取用户资金</li>
<li>冒充用户发帖背锅</li>
<li>损坏网站名誉</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/b416b927-87e7-4ff4-87d3-b34a8b73dbed</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b416b927-87e7-4ff4-87d3-b34a8b73dbed</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Mar 2024 02:46:02 GMT</pubDate></item><item><title><![CDATA[【CSS相关】CSS效果]]></title><description><![CDATA[<h1 id="css效果">CSS效果</h1>
<h2 id="1使用div绘制图形（三角形）？">1.使用div绘制图形（三角形）？</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;Title&lt;/title&gt;
    &lt;style&gt;
        .triangle-top {
            width: 0;
            height: 0;
            border-width: 0 40px 40px;
            border-style: solid;
            border-color: transparent transparent red;
        }

        .triangle-bottom {
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 40px 40px 0 40px;
            border-color: blueviolet transparent transparent transparent;
        }

        .triangle-left {
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 40px 0 40px 40px;
            border-color: transparent transparent transparent #89ff56;
        }

        .triangle-right {
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 40px 40px 40px 0;
            border-color: transparent yellowgreen transparent;
        }


        /*缺口的三角形*/
        .box{
            position: absolute;
            left: 0;
            top: 0;
            width: 0;
            height:0;
            border: 6px solid transparent;
        }
        .b1{
            /*底层的盒子三角形相当于全部是黑色的*/
            border-bottom-color:#000 ;
        }
        .b2{
            /*上层的为白色覆盖*/
            border-bottom-color:#fff ;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;triangle-top&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;triangle-bottom&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;triangle-left&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;triangle-right&quot;&gt;&lt;/div&gt;

&lt;div class=&quot;box b1&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;box b2&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="2如何产生一个不占空间的边框-box-sizing属性">2.如何产生一个不占空间的边框?( box-sizing属性)?</h2>
<blockquote>
<p>[!NOTE]
知识点：IE和标准盒子模型的异同点
<img src="../../img/css-%E6%A0%87%E5%87%86%E7%9B%92%E5%AD%90%E6%A8%A1%E5%9E%8B.jpg" alt="标准盒子模型"></p>
</blockquote>
<ul>
<li>标准盒子模型：元素的width或height=content的width或height；</li>
</ul>
<blockquote>
<p><img src="../../img/css-IE%E7%9B%92%E5%AD%90%E6%A8%A1%E5%9E%8B.jpg" alt="IE盒子模型"></p>
</blockquote>
<ul>
<li>IE盒子模型：元素的width或height=content的width或height+padding<em>2+border</em>2；</li>
</ul>
<pre><code class="language-css">    /*IE盒子模型：width_sum = margin + width*/
    .border-box-use {
        box-sizing : border-box;
        /*通过IE的盒子模型设置出来之后，这个盒子内容区域的宽度实际只有180px
            这里指定的width 实际上是包含了border的宽度的
        */
        width: 200px;
        height: 200px;

        border: 10px solid #89ff56;
    }

    /*标准盒子模型：width_sum = margin + width + padding + width*/
    .border-content-box-use {
        /*设置为标准的盒子模型，默认值*/
        box-sizing: content-box;

        width: 200px;
        height: 200px;

        padding: 1px;
        border: 10px solid #ff255f;
    }

    .parent-box-inhrit {
        /*设置当前的盒子模型是从父级盒子中继承，这里相当于是继承了IE的盒子模型*/
        box-sizing: inherit;
        width: 50px;
        height: 50px;
        background-color: #48adff;

        border: 1px solid #000;

        /*对一个元素自身设置padding，相当于是把盒子撑大了*/
        padding: 5px;
    }</code></pre>
<h3 id="21-使用box-shadow实现">2.1 使用box-shadow实现</h3>
<pre><code class="language-css">/*box-shadow 制作边框*/
.box-shadow-border {
    width: 200px;
    height: 200px;
    /*设置外阴影：x y 模糊区域 扩展区域*/
    box-shadow: 0 0 0 10px red , 0 0 0 10px blue;
}</code></pre>
<h3 id="22-使用outline实现">2.2 使用outline实现</h3>
<p>在元素边框边缘的外围绘制一条包围元素的线，包括outline-color、outline-style、outline-width三个子属性的设置，可缺省，无固定顺序。轮廓不占据页面空间，也不一定是矩形。即不会增加额外的width或者height。</p>
<pre><code class="language-css">.borner-no-space {
    width: 200px;
    height: 200px;
    outline: 10px solid red;
}</code></pre>
<h2 id="3如何实现ios图标的圆角？">3.如何实现IOS图标的圆角？</h2>
<pre><code class="language-css">/*clip-path的使用
            1. 对容器进行裁剪
            2. 常见集合图形
            3. 自定义路径
*/
.container-clippath {
    width: 400px;
    height: 300px;
    border: 1px solid #000;
    background-image: url(&quot;bg.jpg&quot;);
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center center;

    /*开始进行区域裁剪*/
    /*clip-path: circle(50px at 100px 100px);*/
    /*clip-path: inset(100px 50px);*/
    clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
    /*同时，也是支持svg矢量图的裁剪*/
}

.container-clippath:hover {
    clip-path: circle(80px at 100px 100px);
}</code></pre>
<h2 id="5说下背景图的居中显示重复改变大小">5.说下背景图的居中显示/重复/改变大小?</h2>
<pre><code class="language-css">background-position： 背景图片相对容器原点的起始位置
background-repeat
background-size : cover/contain(设置大小)
</code></pre>
<p><img src="../../img/css-background-position.png" alt="background-position"></p>
<pre><code class="language-css">/* 一个值: 这个值指定图片的宽度，那么第二个值为auto */
background-size: auto
background-size: 50%
background-size: 3em
background-size: 12px

/* 两个值: 第一个值指定图片的宽度，第二个值指定图片的高度 */
background-size: 50% auto
background-size: 3em 25%
background-size: auto 6px
background-size: auto auto
/*多重背景，请用逗号隔开，在CSS语法中凡语法后跟*或者#，都是可以无限重复的，但是必须用逗号隔开。 */
background-size: auto, auto     /* 不要跟background-size: auto auto混淆了 */
background-size: 50%, 25%, 25%
background-size: 6px, auto, contain

background-size: inherit</code></pre>
<h2 id="6如何平移放大一个元素？如何实现05px的边框？">6.如何平移/放大一个元素？如何实现0.5px的边框？</h2>
<blockquote>
<p>[!NOTE]
知识点:transform的灵活使用</p>
</blockquote>
<pre><code class="language-html">&lt;style&gt;
.custom-border{
    width:200px;
    margin:10px auto;
    height:100px;
    border:1px solid #333;
    background-color:#eee;
    padding:10px;
}
.scale-border{
    margin:10px auto;
    height:100px;
    position:relative;
    padding:10px;
    width: 200px;
}
.border{
    -webkit-transform:scale(0.5);
    transform:scale(0.5);
    position:absolute;
    border:1px solid #333;
    top:-50%;
    right:-50%;
    bottom:-50%;
    left:-50%;
    background-color:#eee;
}
.content{
    position:relative;
    z-index:2;
}
&lt;/style&gt;

&lt;body&gt;
    &lt;div class=&quot;custom-border border-color&quot;&gt;边框宽度1px&lt;/div&gt;
    &lt;div class=&quot;scale-border&quot;&gt;
        &lt;div class=&quot;content&quot;&gt;边框宽度0.5px&lt;/div&gt;
        &lt;div class=&quot;border border-color&quot;&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="7如何实现3d效果（旋转的硬币）？">7.如何实现3D效果（旋转的硬币）？</h2>
<pre><code class="language-css">/* 1. 设置一个透视变换，相机距离图像的距离 */
/* perspective : 500px */
/* 2. 设置视觉查看的样式 */
/* transform-style : perspective-3d */
/* 3. 变换图像 */
/* transform : translate rotate */


/*旋转的硬币效果*/
.money {
    width: 100px;
    height: 100px;
    border-radius: 50px;
    background-color: #48adff;
    border: 2px solid #000;

    /*开启3D效果*/

    perspective: 500px;
    transform-style: preserve-3d;
    /*transform : rotateY(180deg);*/
    animation : rotate 2s linear infinite;
}

@keyframes rotate {
    from {
        transform : rotateY(0deg);
    }
    to {
        transform : rotateY(360deg);
    }
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/f734b323-412d-4bcc-be0f-22a559b41a4d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f734b323-412d-4bcc-be0f-22a559b41a4d</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Mar 2024 15:00:59 GMT</pubDate></item><item><title><![CDATA[【前端面试题】HTML和CSS]]></title><description><![CDATA[<h1 id="html和css">HTML和CSS</h1>
<h2 id="1----你做的页面在哪些流览器测试过？这些浏览器的内核分别是什么">1.    你做的页面在哪些流览器测试过？这些浏览器的内核分别是什么?</h2>
<p>IE: trident内核
Firefox：gecko内核
Safari:webkit内核
Opera:以前是presto内核，Opera现已改用Google Chrome的Blink内核
Chrome:Blink(基于webkit，Google与Opera Software共同开发)</p>
<h2 id="2----每个html文件里开头都有个很重要的东西，doctype，知道这是干什么的吗？">2.    每个HTML文件里开头都有个很重要的东西，Doctype，知道这是干什么的吗？</h2>
<!DOCTYPE><p> 声明位于文档中的最前面的位置，处于 <html> 标签之前。此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范。（重点：告诉浏览器按照何种规范解析页面）</p>
<h2 id="3----quirks模式是什么？它和standards模式有什么区别">3.    Quirks模式是什么？它和Standards模式有什么区别</h2>
<p>从IE6开始，引入了Standards模式，标准模式中，浏览器尝试给符合标准的文档在规范上的正确处理达到在指定浏览器中的程度。
在IE6之前CSS还不够成熟，所以IE5等之前的浏览器对CSS的支持很差， IE6将对CSS提供更好的支持，然而这时的问题就来了，因为有很多页面是基于旧的布局方式写的，而如果IE6 支持CSS则将令这些页面显示不正常，如何在即保证不破坏现有页面，又提供新的渲染机制呢？
在写程序时我们也会经常遇到这样的问题，如何保证原来的接口不变，又提供更强大的功能，尤其是新功能不兼容旧功能时。遇到这种问题时的一个常见做法是增加参数和分支，即当某个参数为真时，我们就使用新功能，而如果这个参数 不为真时，就使用旧功能，这样就能不破坏原有的程序，又提供新功能。IE6也是类似这样做的，它将DTD当成了这个“参数”，因为以前的页面大家都不会去写DTD，所以IE6就假定 如果写了DTD，就意味着这个页面将采用对CSS支持更好的布局，而如果没有，则采用兼容之前的布局方式。这就是Quirks模式（怪癖模式，诡异模式，怪异模式）。
区别：
总体会有布局、样式解析和脚本执行三个方面的区别。
盒模型：在W3C标准中，如果设置一个元素的宽度和高度，指的是元素内容的宽度和高度，而在Quirks 模式下，IE的宽度和高度还包含了padding和border。</p>
<p>设置行内元素的高宽：在Standards模式下，给<span>等行内元素设置wdith和height都不会生效，而在quirks模式下，则会生效。
设置百分比的高度：在standards模式下，一个元素的高度是由其包含的内容来决定的，如果父元素没有设置百分比的高度，子元素设置一个百分比的高度是无效的用margin:0 auto设置水平居中：使用margin:0 auto在standards模式下可以使元素水平居中，但在quirks模式下却会失效。
（还有很多，答出什么不重要，关键是看他答出的这些是不是自己经验遇到的，还是说都是看文章看的，甚至完全不知道。）</p>
<h2 id="4----divcss的布局较table布局有什么优点？">4.    div+css的布局较table布局有什么优点？</h2>
<p>改版的时候更方便 只要改css文件。
页面加载速度更快、结构化清晰、页面显示简洁。
表现与结构相分离。
易于优化（seo）搜索引擎更友好，排名更容易靠前。</p>
<h2 id="5----img的alt与title有何异同？-strong与em的异同？">5.    img的alt与title有何异同？ strong与em的异同？</h2>
<p>a:alt(alt text):为不能显示图像、窗体或applets的用户代理（UA），alt属性用来指定替换文字。替换文字的语言由lang属性指定。(在IE浏览器下会在没有title时把alt当成 tool tip显示)
title(tool tip):该属性为设置该属性的元素提供建议性的信息。
strong:粗体强调标签，强调，表示内容的重要性
em:斜体强调标签，更强烈强调，表示内容的强调点</p>
<h2 id="6----你能描述一下渐进增强和优雅降级之间的不同吗">6.    你能描述一下渐进增强和优雅降级之间的不同吗?</h2>
<p>渐进增强 progressive enhancement：针对低版本浏览器进行构建页面，保证最基本的功能，然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation：一开始就构建完整的功能，然后再针对低版本浏览器进行兼容。
区别：优雅降级是从复杂的现状开始，并试图减少用户体验的供给，而渐进增强则是从一个非常基础的，能够起作用的版本开始，并不断扩充，以适应未来环境的需要。降级（功能衰减）意味着往回看；而渐进增强则意味着朝前看，同时保证其根基处于安全地带。
“优雅降级”观点
“优雅降级”观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段，并把测试对象限定为主流浏览器（如 IE、Mozilla 等）的前一个版本。
在这种设计范例下，旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点，因此除了修复较大的错误之外，其它的差异将被直接忽略。
“渐进增强”观点
“渐进增强”观点则认为应关注于内容本身。
内容是我们建立网站的诱因。有的网站展示它，有的则收集它，有的寻求，有的操作，还有的网站甚至会包含以上的种种，但相同点是它们全都涉及到内容。这使得“渐进增强”成为一种更为合理的设计范例。这也是它立即被 Yahoo! 所采纳并用以构建其“分级式浏览器支持 (Graded Browser Support)”策略的原因所在。
那么问题来了。现在产品经理看到IE6,7,8网页效果相对高版本现代浏览器少了很多圆角，阴影（CSS3），要求兼容（使用图片背景，放弃CSS3），你会如何说服他？</p>
<h2 id="7----为什么利用多个域名来存储网站资源会更有效？">7.    为什么利用多个域名来存储网站资源会更有效？</h2>
<p>CDN缓存更方便
突破浏览器并发限制
节约cookie带宽
节约主域名的连接数，优化页面响应速度
防止不必要的安全问题</p>
<h2 id="8----请谈一下你对网页标准和标准制定机构重要性的理解。">8.    请谈一下你对网页标准和标准制定机构重要性的理解。</h2>
<p>网页标准和标准制定机构都是为了能让web发展的更‘健康’，开发者遵循统一的标准，降低开发难度，开发成本，SEO也会更好做，也不会因为滥用代码导致各种BUG、安全问题，最终提高网站易用性。</p>
<h2 id="9----请描述一下cookies，sessionstorage和localstorage的区别？">9.    请描述一下cookies，sessionStorage和localStorage的区别？</h2>
<p>sessionStorage用于本地存储一个会话（session）中的数据，这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储，仅仅是会话级别的存储。而localStorage用于持久化的本地存储，除非主动删除数据，否则数据是永远不会过期的。
web storage和cookie的区别
Web Storage的概念和cookie相似，区别是它是为了更大容量存储设计的。Cookie的大小是受限的，并且每次你请求一个新的页面的时候Cookie都会被发送过去，这样无形中浪费了带宽，另外cookie还需要指定作用域，不可以跨域调用。
除此之外，Web Storage拥有setItem,getItem,removeItem,clear等方法，不像cookie需要前端开发者自己封装setCookie，getCookie。但是Cookie也是不可以或缺的：Cookie的作用是与服务器进行交互，作为HTTP规范的一部分而存在 ，而Web Storage仅仅是为了在本地“存储”数据而生。</p>
<h2 id="10----简述一下src与href的区别。">10.    简述一下src与href的区别。</h2>
<p>src用于替换当前元素，href用于在当前文档和引用资源之间确立联系。
src是source的缩写，指向外部资源的位置，指向的内容将会嵌入到文档中当前标签所在位置；在请求src资源时会将其指向的资源下载并应用到文档内，例如js脚本，img图片和frame等元素。</p>
<script src =”js.js”></script>
<p>当浏览器解析到该元素时，会暂停其他资源的下载和处理，直到将该资源加载、编译、执行完毕，图片和框架等元素也如此，类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
href是Hypertext Reference的缩写，指向网络资源所在位置，建立和当前元素（锚点）或当前文档（链接）之间的链接，如果我们在文档中添加</p>
<link href=”common.css” rel=”stylesheet”/>
那么浏览器会识别该文档为css文件，就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用link方式来加载css，而不是使用@import方式。

<h2 id="11----知道的网页制作会用到的图片格式有哪些？">11.    知道的网页制作会用到的图片格式有哪些？</h2>
<p>png-8，png-24，jpeg，gif，svg。
但是上面的那些都不是面试官想要的最后答案。面试官希望听到是Webp。（是否有关注新技术，新鲜事物）
科普一下Webp：WebP格式，谷歌（google）开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3，并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式。
在质量相同的情况下，WebP格式图像的体积要比JPEG格式图像小40%</p>
<h2 id="12----知道什么是微格式吗？谈谈理解。在前端构建中应该考虑微格式吗？">12.    知道什么是微格式吗？谈谈理解。在前端构建中应该考虑微格式吗？</h2>
<p>微格式（Microformats）是一种让机器可读的语义化XHTML词汇的集合，是结构化数据的开放标准。是为特殊应用而制定的特殊格式。
优点：将智能数据添加到网页上，让网站内容在搜索引擎结果界面可以显示额外的提示。（应用范例：豆瓣，有兴趣自行google）</p>
<h2 id="13----在cssjs代码上线之后开发人员经常会优化性能，从用户刷新网页开始，一次js请求一般情况下有哪些地方会有缓存处理？">13.    在css/js代码上线之后开发人员经常会优化性能，从用户刷新网页开始，一次js请求一般情况下有哪些地方会有缓存处理？</h2>
<p>答案：dns缓存，cdn缓存，浏览器缓存，服务器缓存。</p>
<h2 id="14----一个页面上有大量的图片（大型电商网站），加载很慢，你有哪些方法优化这些图片的加载，给用户更好的体验。">14.    一个页面上有大量的图片（大型电商网站），加载很慢，你有哪些方法优化这些图片的加载，给用户更好的体验。</h2>
<p>图片懒加载，在页面上的未可视区域可以添加一个滚动条事件，判断图片位置与浏览器顶端的距离与页面的距离，如果前者小于后者，优先加载。
如果为幻灯片、相册等，可以使用图片预加载技术，将当前展示图片的前一张和后一张优先下载。
如果图片为css图片，可以使用CSSsprite，SVGsprite，Iconfont、Base64等技术。
如果图片过大，可以使用特殊编码的图片，加载时会先加载一张压缩的特别厉害的缩略图，以提高用户体验。
如果图片展示区域小于图片的真实大小，则因在服务器端根据业务需要先行进行图片压缩，图片压缩后大小与展示一致。</p>
<h2 id="15----你如何理解html结构的语义化？">15.    你如何理解HTML结构的语义化？　</h2>
<p>去掉或样式丢失的时候能让页面呈现清晰的结构：
html本身是没有表现的，我们看到例如<h1>是粗体，字体大小2em，加粗；<strong>是加粗的，不要认为这是html的表现，这些其实html默认的css样式在起作用，所以去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML结构的优点，但是浏览器都有有默认样式，默认样式的目的也是为了更好的表达html的语义，可以说浏览器的默认样式和语义化的HTML结构是不可分割的。
屏幕阅读器（如果访客有视障）会完全根据你的标记来“读”你的网页.
例如,如果你使用的含语义的标记,屏幕阅读器就会“逐个拼出”你的单词,而不是试着去对它完整发音.
PDA、手机等设备可能无法像普通电脑的浏览器一样来渲染网页（通常是因为这些设备对CSS的支持较弱）
使用语义标记可以确保这些设备以一种有意义的方式来渲染网页.理想情况下,观看设备的任务是符合设备本身的条件来渲染网页.
语义标记为设备提供了所需的相关信息,就省去了你自己去考虑所有可能的显示情况（包括现有的或者将来新的设备）.例如,一部手机可以选择使一段标记了标题的文字以粗体显示.而掌上电脑可能会以比较大的字体来显示.无论哪种方式一旦你对文本标记为标题,您就可以确信读取设备将根据其自身的条件来合适地显示页面.
搜索引擎的爬虫也依赖于标记来确定上下文和各个关键字的权重
过去你可能还没有考虑搜索引擎的爬虫也是网站的“访客”,但现在它们他们实际上是极其宝贵的用户.没有他们的话,搜索引擎将无法索引你的网站,然后一般用户将很难过来访问.
你的页面是否对爬虫容易理解非常重要,因为爬虫很大程度上会忽略用于表现的标记,而只注重语义标记.
因此,如果页面文件的标题被标记,而不是,那么这个页面在搜索结果的位置可能会比较靠后.除了提升易用性外,语义标记有利于正确使用CSS和JavaScript,因为其本身提供了许多“钩钩”来应用页面的样式与行为.
SEO主要还是靠你网站的内容和外部链接的。
便于团队开发和维护
W3C给我们定了一个很好的标准，在团队中大家都遵循这个标准，可以减少很多差异化的东西，方便开发和维护，提高开发效率，甚至实现模块化开发。</p>
<h2 id="16----谈谈以前端角度出发做好seo需要考虑什么？">16.    谈谈以前端角度出发做好SEO需要考虑什么？</h2>
<p>了解搜索引擎如何抓取网页和如何索引网页
你需要知道一些搜索引擎的基本工作原理，各个搜索引擎之间的区别，搜索机器人（SE robot 或叫 web crawler）如何进行工作，搜索引擎如何对搜索结果进行排序等等。
Meta标签优化
主要包括主题（Title)，网站描述(Description)，和关键词（Keywords）。还有一些其它的隐藏文字比如Author（作者），Category（目录），Language（编码语种）等。
如何选取关键词并在网页中放置关键词
搜索就得用关键词。关键词分析和选择是SEO最重要的工作之一。首先要给网站确定主关键词（一般在5个上下），然后针对这些关键词进行优化，包括关键词密度（Density），相关度（Relavancy），突出性（Prominency）等等。
了解主要的搜索引擎
虽然搜索引擎有很多，但是对网站流量起决定作用的就那么几个。比如英文的主要有Google，Yahoo，Bing等；中文的有百度，搜狗，有道等。不同的搜索引擎对页面的抓取和索引、排序的规则都不一样。还要了解各搜索门户和搜索引擎之间的关系，比如AOL网页搜索用的是Google的搜索技术，MSN用的是Bing的技术。
主要的互联网目录
Open Directory自身不是搜索引擎，而是一个大型的网站目录，他和搜索引擎的主要区别是网站内容的收集方式不同。目录是人工编辑的，主要收录网站主页；搜索引擎是自动收集的，除了主页外还抓取大量的内容页面。
按点击付费的搜索引擎
搜索引擎也需要生存，随着互联网商务的越来越成熟，收费的搜索引擎也开始大行其道。最典型的有Overture和百度，当然也包括Google的广告项目Google Adwords。越来越多的人通过搜索引擎的点击广告来定位商业网站，这里面也大有优化和排名的学问，你得学会用最少的广告投入获得最多的点击。
搜索引擎登录
网站做完了以后，别躺在那里等着客人从天而降。要让别人找到你，最简单的办法就是将网站提交（submit）到搜索引擎。如果你的是商业网站，主要的搜索引擎和目录都会要求你付费来获得收录（比如Yahoo要299美元），但是好消息是（至少到目前为止）最大的搜索引擎Google目前还是免费，而且它主宰着60％以上的搜索市场。
链接交换和链接广泛度（Link Popularity）
网页内容都是以超文本（Hypertext）的方式来互相链接的，网站之间也是如此。除了搜索引擎以外，人们也每天通过不同网站之间的链接来Surfing（“冲浪”）。其它网站到你的网站的链接越多，你也就会获得更多的访问量。更重要的是，你的网站的外部链接数越多，会被搜索引擎认为它的重要性越大，从而给你更高的排名。
合理的标签使用</p>
<h2 id="17----有哪项方式可以对一个dom设置它的css样式？">17.    有哪项方式可以对一个DOM设置它的CSS样式？　</h2>
<p>外部样式表，引入一个外部css文件
内部样式表，将css代码放在 <head> 标签内部
内联样式，将css样式直接定义在 HTML 元素内部</p>
<h2 id="18----css都有哪些选择器？">18.    CSS都有哪些选择器？</h2>
<p>派生选择器（用HTML标签申明）
id选择器（用DOM的ID申明）
类选择器（用一个样式类名申明）
属性选择器（用DOM的属性申明，属于CSS2，IE6不支持，不常用，不知道就算了）
除了前3种基本选择器，还有一些扩展选择器，包括
后代选择器（利用空格间隔，比如div .a{  }）
群组选择器（利用逗号间隔，比如p,div,#a{  }）
那么问题来了，CSS选择器的优先级是怎么样定义的？
基本原则：
一般而言，选择器越特殊，它的优先级越高。也就是选择器指向的越准确，它的优先级就越高。
复杂的计算方法：
用1表示派生选择器的优先级
用10表示类选择器的优先级
用100标示ID选择器的优先级
div.test1 .span var 优先级 1+10 +10 +1
span#xxx .songs li 优先级1+100 + 10 + 1
#xxx li 优先级 100 +1
那么问题来了，看下列代码，<p>标签内的文字是什么颜色的？</p>
<style>
.classA{ color:blue;}
.classB{ color:red;}
</style>
<body>
<p class='classB classA'> 123 </p>
</body>
答案：red。与样式定义在文件中的先后顺序有关，即是后面的覆盖前面的，与在<p class=’classB classA’>中的先后关系无关。

<h2 id="19----css中可以通过哪些属性定义，使得一个dom元素不显示在浏览器可视范围内？">19.    CSS中可以通过哪些属性定义，使得一个DOM元素不显示在浏览器可视范围内？</h2>
<p>最基本的：
设置display属性为none，或者设置visibility属性为hidden
技巧性：
设置宽高为0，设置透明度为0，设置z-index位置在-1000em</p>
<h2 id="20----超链接访问过后hover样式就不出现的问题是什么？如何解决？">20.    超链接访问过后hover样式就不出现的问题是什么？如何解决？</h2>
<p>答案：被点击访问过的超链接样式不在具有hover和active了,解决方法是改变CSS属性的排列顺序: L-V-H-A（link,visited,hover,active）</p>
<h2 id="21----什么是css-hack？ie678的hack分别是什么？">21.    什么是Css Hack？ie6,7,8的hack分别是什么？</h2>
<p>答案：针对不同的浏览器写不同的CSS code的过程，就是CSS hack。
示例如下：
   #test{<br>        width:300px;<br>        height:300px;<br>        background-color:blue;      /<em>firefox</em>/
        background-color:red\9;      /<em>all ie</em>/
        background-color:yellow;    /<em>ie8</em>/
        +background-color:pink;        /<em>ie7</em>/
        _background-color:orange;       /<em>ie6</em>/    }<br>        :root #test { background-color:purple\9; }  /<em>ie9</em>/
@media all and (min-width:0px)
     { #test {background-color:black;} }  /<em>opera</em>/
@media screen and (-webkit-min-device-pixel-ratio:0)
{ #test {background-color:gray;} }       /<em>chrome and safari</em>/</p>
<h2 id="22----行内元素和块级元素的具体区别是什么？行内元素的padding和margin可设置吗？">22.    行内元素和块级元素的具体区别是什么？行内元素的padding和margin可设置吗？</h2>
<p>块级元素(block)特性：
总是独占一行，表现为另起一行开始，而且其后的元素也必须另起一行显示;
宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;
内联元素(inline)特性：
和相邻的内联元素在同一行;
宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变（也就是padding和margin的left和right是可以设置的），就是里面文字或图片的大小。
那么问题来了，浏览器还有默认的天生inline-block元素（拥有内在尺寸，可设置高宽，但不会自动换行），有哪些？
答案：<input> 、<img> 、<button> 、<texterea> 、<label>。</p>
<h2 id="23----什么是外边距重叠？重叠的结果是什么？">23.    什么是外边距重叠？重叠的结果是什么？</h2>
<p>外边距重叠就是margin-collapse。
在CSS当中，相邻的两个盒子（可能是兄弟关系也可能是祖先关系）的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠，并且因而所结合成的外边距称为折叠外边距。
折叠结果遵循下列计算规则：
两个相邻的外边距都是正数时，折叠结果是它们两者之间较大的值。
两个相邻的外边距都是负数时，折叠结果是两者绝对值的较大值。
两个外边距一正一负时，折叠结果是两者的相加的和。</p>
<h2 id="24----rgba和opacity的透明效果有什么不同？">24.    rgba()和opacity的透明效果有什么不同？</h2>
<p>rgba()和opacity都能实现透明效果，但最大的不同是opacity作用于元素，以及元素内的所有内容的透明度，
而rgba()只作用于元素的颜色或其背景色。（设置rgba透明的元素的子元素不会继承透明效果！）</p>
<h2 id="25----css中可以让文字在垂直和水平方向上重叠的两个属性是什么？">25.    css中可以让文字在垂直和水平方向上重叠的两个属性是什么？</h2>
<p>垂直方向：line-height
水平方向：letter-spacing
那么问题来了，关于letter-spacing的妙用知道有哪些么？
答案:可以用于消除inline-block元素间的换行符空格间隙问题。</p>
<h2 id="26----如何垂直居中一个浮动元素？">26.    如何垂直居中一个浮动元素？</h2>
<pre><code class="language-css">// 方法一：已知元素的高宽
#div1{
    background-color:#6699FF;
    width:200px;
    height:200px;
    position: absolute;        //父元素需要相对定位
    top: 50%;
    left: 50%;
    margin-top:-100px ;   //二分之一的height，width
    margin-left: -100px;
    }

//方法二:未知元素的高宽

  #div1{
    width: 200px;
    height: 200px;
    background-color: #6699FF;

    margin:auto;
    position: absolute;        //父元素需要相对定位
    left: 0;
    top: 0;
    right: 0;
    bottom: 0;
    }
那么问题来了，如何垂直居中一个&lt;img&gt;?（用更简便的方法。）
#container     //&lt;img&gt;的容器设置如下
{
    display:table-cell;
    text-align:center;
    vertical-align:middle;
}</code></pre>
<h2 id="27----px和em的区别。">27.    px和em的区别。</h2>
<p>px和em都是长度单位，区别是，px的值是固定的，指定是多少就是多少，计算比较容易。em得值不是固定的，并且em会继承父级元素的字体大小。
浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。</p>
<h2 id="28----描述一个reset的css文件并如何使用它。知道normalizecss吗？你了解他们的不同之处？">28.    描述一个”reset”的CSS文件并如何使用它。知道normalize.css吗？你了解他们的不同之处？</h2>
<p>重置样式非常多，凡是一个前端开发人员肯定有一个常用的重置CSS文件并知道如何使用它们。他们是盲目的在做还是知道为什么这么做呢？原因是不同的浏览器对一些元素有不同的默认样式，如果你不处理，在不同的浏览器下会存在必要的风险，或者更有戏剧性的性发生。
你可能会用Normalize来代替你的重置样式文件。它没有重置所有的样式风格，但仅提供了一套合理的默认样式值。既能让众多浏览器达到一致和合理，但又不扰乱其他的东西（如粗体的标题）。
在这一方面，无法做每一个复位重置。它也确实有些超过一个重置，它处理了你永远都不用考虑的怪癖，像HTML的audio元素不一致或line-height不一致。</p>
<h2 id="29----sass、less是什么？大家为什么要使用他们？">29.    Sass、LESS是什么？大家为什么要使用他们？</h2>
<p>他们是CSS预处理器。他是CSS上的一种抽象层。他们是一种特殊的语法/语言编译成CSS。
例如Less是一种动态样式语言. 将CSS赋予了动态语言的特性，如变量，继承，运算， 函数. LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox)，也可一在服务端运行 (借助 Node.js)。
为什么要使用它们？
结构清晰，便于扩展。
可以方便地屏蔽浏览器私有语法差异。这个不用多说，封装对浏览器语法差异的重复处理，减少无意义的机械劳动。
可以轻松实现多重继承。
完全兼容 CSS 代码，可以方便地应用到老项目中。LESS 只是在 CSS 语法上做了扩展，所以老的 CSS 代码也可以与 LESS 代码一同编译。</p>
<h2 id="30----displaynone与visibilityhidden的区别是什么？">30.    display:none与visibility:hidden的区别是什么？</h2>
<p>display : 隐藏对应的元素但不挤占该元素原来的空间。
visibility: 隐藏对应的元素并且挤占该元素原来的空间。
即是，使用CSS display:none属性后，HTML元素（对象）的宽度、高度等各种属性值都将“丢失”;而使用visibility:hidden属性后，HTML元素（对象）仅仅是在视觉上看不见（完全透明），而它所占据的空间位置仍然存在。</p>
<h2 id="31----css中link和import的区别是：">31.    CSS中link和@import的区别是：</h2>
<p>Link属于html标签，而@import是CSS中提供的
在页面加载的时候，link会同时被加载，而@import引用的CSS会在页面加载完成后才会加载引用的CSS
@import只有在ie5以上才可以被识别，而link是html标签，不存在浏览器兼容性问题
Link引入样式的权重大于@import的引用（@import是将引用的样式导入到当前的页面中）</p>
<h2 id="32----简介盒子模型：">32.    简介盒子模型：</h2>
<p>CSS的盒子模型有两种：IE盒子模型、标准的W3C盒子模型模型
盒模型：内容、内边距、外边距（一般不计入盒子实际宽度）、边框</p>
<h2 id="33----为什么要初始化样式？">33.    为什么要初始化样式？</h2>
<p>由于浏览器兼容的问题，不同的浏览器对标签的默认样式值不同，若不初始化会造成不同浏览器之间的显示差异
但是初始化CSS会对搜索引擎优化造成小影响</p>
<h2 id="34----bfc是什么">34.    BFC是什么?</h2>
<p>BFC（块级格式化上下文），一个创建了新的BFC的盒子是独立布局的，盒子内元素的布局不会影响盒子外面的元素。在同一个BFC中的两个相邻的盒子在垂直方向发生margin重叠的问题
BFC是指浏览器中创建了一个独立的渲染区域，该区域内所有元素的布局不会影响到区域外元素的布局，这个渲染区域只对块级元素起作用</p>
<h2 id="35----html语义化是什么？">35.    html语义化是什么？</h2>
<p>当页面样式加载失败的时候能够让页面呈现出清晰的结构
有利于seo优化，利于被搜索引擎收录（更便于搜索引擎的爬虫程序来识别）
便于项目的开发及维护，使html代码更具有可读性，便于其他设备解析。</p>
<h2 id="36----doctype的作用？严格模式与混杂模式的区别？">36.    Doctype的作用？严格模式与混杂模式的区别？</h2>
<!DOCTYPE><p>用于告知浏览器该以何种模式来渲染文档
严格模式下：页面排版及JS解析是以该浏览器支持的最高标准来执行
混杂模式：不严格按照标准执行，主要用来兼容旧的浏览器，向后兼容</p>
<h2 id="37----ie的双边距bug：块级元素float后设置横向margin，ie6显示的margin比设置的较大。">37.    IE的双边距BUG：块级元素float后设置横向margin，ie6显示的margin比设置的较大。</h2>
<p>解决：加入_display：inline</p>
<h2 id="38----html与xhtml二者有什么区别？">38.    HTML与XHTML——二者有什么区别？</h2>
<ol>
<li>所有的标记都必须要有一个相应的结束标记</li>
<li>所有标签的元素和属性的名字都必须使用小写</li>
<li>所有的 XML 标记都必须合理嵌套</li>
<li>所有的属性必须用引号 &quot;&quot; 括起来</li>
<li>把所有 &lt; 和 &amp; 特殊符号用编码表示</li>
<li>给所有属性赋一个值</li>
<li>不要在注释内容中使用 &quot;--&quot;</li>
<li>图片必须有说明文字<h2 id="39----html常见兼容性问题？">39.    html常见兼容性问题？</h2>
</li>
<li>双边距BUG float引起的  使用display</li>
<li>3像素问题 使用float引起的 使用dislpay:inline -3px  </li>
<li>超链接hover 点击后失效  使用正确的书写顺序 link visited hover active</li>
<li>Ie z-index问题 给父级添加position:relative</li>
<li>Png 透明 使用js代码 改</li>
<li>Min-height 最小高度 ！Important 解决’</li>
<li>select 在ie6下遮盖 使用iframe嵌套</li>
<li>为什么没有办法定义1px左右的宽度容器（IE6默认的行高造成的，使用over:hidden,zoom:0.08 line-height:1px）</li>
<li>IE5-8不支持opacity，解决办法：
.opacity {
  opacity: 0.4
  filter: alpha(opacity=60); /* for IE5-7 <em>/
  -ms-filter: &quot;progid:DXImageTransform.Microsoft.Alpha(Opacity=60)&quot;; /</em> for IE 8*/
}</li>
<li>IE6不支持PNG透明背景，解决办法: IE6下使用gif图片<h2 id="40----对web标准以及w3c的理解与认识">40.    对WEB标准以及W3C的理解与认识</h2>
答：标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件，容易维 护、改版方便，不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性。<h2 id="41----行内元素有哪些块级元素有哪些css的盒模型">41.    行内元素有哪些?块级元素有哪些?CSS的盒模型?</h2>
答：块级元素：div p h1 h2 h3 h4 form ul
行内元素: a b br i span input select
Css盒模型:内容，border ,margin，padding<h2 id="42----前端页面有哪三层构成，分别是什么作用是什么">42.    前端页面有哪三层构成，分别是什么?作用是什么?</h2>
答：结构层 Html 表示层 CSS 行为层 js。<h2 id="43----doctype作用-严格模式与混杂模式-如何触发这两种模式，区分它们有何意义">43.    Doctype作用? 严格模式与混杂模式-如何触发这两种模式，区分它们有何意义?</h2>
 （1）、&lt;!DOCTYPE&gt; 声明位于文档中的最前面，处于 <html> 标签之前。告知浏览器的解析器，用什么文档类型 规范来解析这个文档。 
 （2）、严格模式的排版和 JS 运作模式是  以该浏览器支持的最高标准运行。
 （3）、在混杂模式中，页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
 （4）、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。<h2 id="44----行内元素有哪些？块级元素有哪些？-空void元素有那些？">44.    行内元素有哪些？块级元素有哪些？ 空(void)元素有那些？</h2>
（1）CSS规范规定，每个元素都有display属性，确定该元素的类型，每个元素都有默认的display值，比如div默认display属性值为“block”，成为“块级”元素；span默认display属性值为“inline”，是“行内”元素。<br>（2）行内元素有：a b span img input select strong（强调的语气） 块级元素有：div ul ol li dl dt dd h1 h2 h3 h4…p<br>（3）知名的空元素：<br><br><hr><img><input><link><meta>鲜为人知的是： <area><base><col><command>
<embed><keygen><param><source><track><wbr></li>
</ol>
<h2 id="45----css的盒子模型？">45.    CSS的盒子模型？</h2>
<p>（1）两种， IE 盒子模型、标准 W3C 盒子模型；IE 的content部分包含了 border 和 pading;
（2）盒模型： 内容(content)、填充(padding)、边界(margin)、 边框(border).</p>
<h2 id="46----css-选择符有哪些？哪些属性可以继承？优先级算法如何计算？-css3新增伪类有那些？">46.    CSS 选择符有哪些？哪些属性可以继承？优先级算法如何计算？ CSS3新增伪类有那些？</h2>
<pre><code>*   1.id选择器（ # myid）
    2.类选择器（.myclassname）
    3.标签选择器（div, h1, p）
    4.相邻选择器（h1 + p）
    5.子选择器（ul &lt; li）
    6.后代选择器（li a）
    7.通配符选择器（ * ）
    8.属性选择器（a[rel = &quot;external&quot;]）
    9.伪类选择器（a: hover, li: nth - child）
*   可继承： font-size font-family color, UL LI DL DD DT;
*   不可继承 ：border padding margin width height ;
*   优先级就近原则，样式定义最近者为准;
*   载入样式以最后载入的定位为准;</code></pre><p>优先级为:
       !important &gt;  id &gt; class &gt; tag<br>       important 比 内联优先级高
CSS3新增伪类举例：
    p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
    p:last-of-type  选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
    p:only-of-type  选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。
    p:only-child    选择属于其父元素的唯一子元素的每个 <p> 元素。
    p:nth-child(2)  选择属于其父元素的第二个子元素的每个 <p> 元素。
    :enabled、:disabled 控制表单控件的禁用状态。
    :checked，单选框或复选框被选中。</p>
<h2 id="47----如何居中div如何居中一个浮动元素">47.    如何居中div,如何居中一个浮动元素?</h2>
<p>给div设置一个宽度，然后添加margin:0 auto属性
    div{
        width:200px;
        margin:0 auto;
     }<br>居中一个浮动元素
      确定容器的宽高 宽500 高 300 的层
      设置层的外边距
     .div { 
      Width:500px ; height:300px;//高度可以不设
      Margin: -150px 0 0 -250px;
      position:relative;相对定位
      background-color:pink;//方便看效果
      left:50%;
      top:50%;
    } </p>
<h2 id="48----浏览器的内核分别是什么经常遇到的浏览器的兼容性有哪些？原因，解决方法是什么，常用hack的技巧-？">48.    浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些？原因，解决方法是什么，常用hack的技巧 ？</h2>
<pre><code>* IE浏览器的内核Trident、 Mozilla的Gecko、google的WebKit、Opera内核Presto；
* png24为的图片在iE6浏览器上出现背景，解决方案是做成PNG8.
* 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
* IE6双边距bug:块属性标签float后，又有横行的margin情况下，在ie6显示margin比设置的大。 
  浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;} 
 这种情况之下IE会产生20px的距离，解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)
  渐进识别的方式，从总体中逐渐排除局部。 
  首先，巧妙的使用“\9”这一标记，将IE游览器从所有情况中分离出来。 
  接着，再次使用“+”将IE8和IE7、IE6分离开来，这样IE8已经独立识别。
  css
      .bb{
       background-color:#f1ee18;/*所有识别*/
      .background-color:#00deff\9; /*IE6、7、8识别*/
      +background-color:#a200ff;/*IE6、7识别*/
      _background-color:#1e0bd1;/*IE6识别*/
      } 
*  IE下,可以使用获取常规属性的方法来获取自定义属性,
   也可以使用getAttribute()获取自定义属性;
   Firefox下,只能使用getAttribute()获取自定义属性. 
   解决方法:统一通过getAttribute()获取自定义属性.
*  IE下,even对象有x,y属性,但是没有pageX,pageY属性; 
  Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
* （条件注释）缺点是在IE浏览器下可能会增加额外的HTTP请求数。
* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.
超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}</code></pre><h2 id="49----列出display的值，说明他们的作用。position的值，-relative和absolute定位原点是？">49.    列出display的值，说明他们的作用。position的值， relative和absolute定位原点是？</h2>
<ol>
<li>block 象块类型元素一样显示。
none 缺省值。向行内元素类型一样显示。
inline-block 象行内元素一样显示，但其内容象块类型元素一样显示。
list-item 象块类型元素一样显示，并添加样式列表标记。</li>
<li>position的值</li>
</ol>
<p>  *absolute 
        生成绝对定位的元素，相对于 static 定位以外的第一个父元素进行定位。 
  *fixed （老IE不支持）
        生成绝对定位的元素，相对于浏览器窗口进行定位。 </p>
<ul>
<li>relative <pre><code>生成相对定位的元素，相对于其正常位置进行定位。 </code></pre></li>
<li>static  默认值。没有定位，元素出现在正常的流中</li>
<li>（忽略 top, bottom, left, right z-index 声明）。</li>
<li>inherit 规定从父元素继承 position 属性的值。<h2 id="50----absolute的containing-block计算方式跟正常流有什么不同？">50.    absolute的containing block计算方式跟正常流有什么不同？</h2>
lock-level boxes
一个 block-level element (&#39;display&#39; 属性值为 &#39;block&#39;, &#39;list-item&#39; 或是 ‘table’) 会生成一个 block-level box，这样的盒子会参与到 block-formatting context (一种布局的方式) 中。
block formatting context
在这种布局方式下，盒子们自所在的 containing block 顶部起一个接一个垂直排列，水平方向上撑满整个宽度 (除非内部的盒子自己内部建立了新的 BFC)。
containing block
一般来说，盒子本身就为其子孙建立了 containing block，用来计算内部盒子的位置、大小，而对内部的盒子，具体采用哪个 containing block 来计算，需要分情况来讨论：</li>
</ul>
<p>若此元素为 inline 元素，则 containing block 为能够包含这个元素生成的第一个和最后一个 inline box 的 padding box (除 margin, border 外的区域) 的最小矩形；
否则则由这个祖先元素的 padding box 构成。
根元素所在的 containing block 被称为 initial containing block，在我们常用的浏览器环境下，指的是原点与 canvas 重合，大小和 viewport 相同的矩形；
对于 position 为 static 或 relative 的元素，其 containing block 为祖先元素中最近的 block container box 的 content box (除 margin, border, padding 外的区域)；
对于 position:fixed 的元素，其 containing block 由 viewport 建立；
对于 position:absolute 的元素，则是先找到其祖先元素中最近的 position 属性非 static 的元素，然后判断：
如果都找不到，则为 initial containing block。</p>
<h2 id="51----对web标准以及w3c的理解与认识">51.    对WEB标准以及W3C的理解与认识</h2>
<p>标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件，容易维 护、改版方便，不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性；</p>
<h2 id="52----css的基本语句构成是">52.    css的基本语句构成是?</h2>
<p>选择器{属性1:值1;属性2:值2;……}</p>
<h2 id="53----浏览器标准模式和怪异模式之间的区别是什么">53.    浏览器标准模式和怪异模式之间的区别是什么?</h2>
<p>盒子模型 渲染模式的不同
使用 window.top.document.compatMode 可显示为什么模式</p>
<h2 id="54----css中可以通过哪些属性定义，使得一个dom元素不显示在浏览器可视范围内？">54.    CSS中可以通过哪些属性定义，使得一个DOM元素不显示在浏览器可视范围内？　　</h2>
<p>　　最基本的：
　　设置display属性为none，或者设置visibility属性为hidden
　　技巧性：
　　设置宽高为0，设置透明度为0，设置z-index位置在-1000</p>
<h2 id="55----行内元素和块级元素的具体区别是什么？行内元素的padding和margin可设置吗？">55.    行内元素和块级元素的具体区别是什么？行内元素的padding和margin可设置吗？</h2>
<p>　　块级元素(block)特性：
    总是独占一行，表现为另起一行开始，而且其后的元素也必须另起一行显示;
    宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;
　　内联元素(inline)特性：
     和相邻的内联元素在同一行;
      宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变（也就是padding和margin的left和right是可以设置的），就是里面文字或图片的大小。
　　那么问题来了，浏览器还有默认的天生inline-block元素（拥有内在尺寸，可设置高宽，但不会自动换行），有哪些？
　　答案：<input> 、<img> 、<button> 、<textarea> 、<label></p>
<h2 id="56----什么是外边距重叠？重叠的结果是什么？">56.    什么是外边距重叠？重叠的结果是什么？</h2>
<p>　　答案：
　　外边距重叠就是margin-collapse。
　　在CSS当中，相邻的两个盒子（可能是兄弟关系也可能是祖先关系）的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠，并且因而所结合成的外边距称为折叠外边距。
　　折叠结果遵循下列计算规则：</p>
<ol>
<li>两个相邻的外边距都是正数时，折叠结果是它们两者之间较大的值。</li>
<li>两个相邻的外边距都是负数时，折叠结果是两者绝对值的较大值。</li>
<li>两个外边距一正一负时，折叠结果是两者的相加的和。<h2 id="57----说display属性有哪些？可以做什么？">57.    说display属性有哪些？可以做什么？</h2>
display:block行内元素转换为块级元素
display:inline块级元素转换为行内元素
display:inline-block转为内联元素　　<h2 id="58、描述一个reset的css文件并如何使用它。知道normalizecss吗？你了解他们的不同之处？">58、描述一个&quot;reset&quot;的CSS文件并如何使用它。知道normalize.css吗？你了解他们的不同之处？　</h2>
　　重置样式非常多，凡是一个前端开发人员肯定有一个常用的重置CSS文件并知道如何使用它们。他们是盲目的在做还是知道为什么这么做呢？原因是不同的浏览器对一些元素有不同的默认样式，如果你不处理，在不同的浏览器下会存在必要的风险，或者更有戏剧性的性发生。
　　你可能会用Normalize来代替你的重置样式文件。它没有重置所有的样式风格，但仅提供了一套合理的默认样式值。既能让众多浏览器达到一致和合理，但又不扰乱其他的东西（如粗体的标题）。
　　在这一方面，无法做每一个复位重置。它也确实有些超过一个重置，它处理了你永远都不用考虑的怪癖，像HTML的audio元素不一致或line-height不一致。</li>
</ol>
<h2 id="58----哪些css属性可以继承？">58.    哪些css属性可以继承？</h2>
<p>可继承： font-size font-family color, ul li dl dd dt;
  不可继承 ：border padding margin width height ;</p>
<h2 id="59----css优先级算法如何计算？">59.    css优先级算法如何计算？</h2>
<p>!important &gt;  id &gt; class &gt; 标签 
  !important 比 内联优先级高
  *优先级就近原则，样式定义最近者为准;
  *以最后载入的样式为准;</p>
<h2 id="60----b标签和strong标签i标签和em标签的区别？">60.    b标签和strong标签,i标签和em标签的区别？</h2>
<p>后者有语义，前者则无。</p>
<h2 id="61----有那些行内元素、有哪些块级元素、盒模型？">61.    有那些行内元素、有哪些块级元素、盒模型？</h2>
<ul>
<li>1.内联元素(inline element)
a – 锚点
abbr – 缩写
acronym – 首字
b – 粗体(不推荐)
big – 大字体
br – 换行
em – 强调
font – 字体设定(不推荐)
i – 斜体
img – 图片
input – 输入框
label – 表格标签
s – 中划线(不推荐)
select – 项目选择
small – 小字体文本
span – 常用内联容器，定义文本内区块
strike – 中划线
strong – 粗体强调
sub – 下标
sup – 上标
textarea – 多行文本输入框
tt – 电传文本
u – 下划线
var – 定义变量</li>
<li>2、块级元素
address – 地址
blockquote – 块引用
center – 举中对齐块
dir – 目录列表
div – 常用块级容易，也是css layout的主要标签
dl – 定义列表
fieldset – form控制组
form – 交互表单
h1 – 大标题
h2 – 副标题
h3 – 3级标题
h4 – 4级标题
h5 – 5级标题
h6 – 6级标题
hr – 水平分隔线
isindex – input prompt
menu – 菜单列表
noframes – frames可选内容，（对于不支持frame的浏览器显示此区块内容）
noscript – ）可选脚本内容（对于不支持script的浏览器显示此内容）
ol – 排序表单
p – 段落
pre – 格式化文本
table – 表格
ul – 非排序列表</li>
<li>3.CSS盒子模型包含四个部分组成：
内容、填充（padding）、边框（border）、外边界（margin）。<h2 id="62----有哪些选择符，优先级的计算公式是什么？行内样式和！important哪个优先级高？">62.    有哪些选择符，优先级的计算公式是什么？行内样式和！important哪个优先级高？</h2>
   #ID &gt; .class &gt; 标签选择符  !important优先级高<h2 id="63----我想让行内元素跟上面的元素距离10px，加margin-top和padding-top可以吗？">63.    我想让行内元素跟上面的元素距离10px，加margin-top和padding-top可以吗？</h2>
margin-top,padding-top无效<h2 id="64----css的盒模型由什么组成？">64.    CSS的盒模型由什么组成？</h2>
内容，border ,margin，padding<h2 id="65----说说display属性有哪些？可以做什么？">65.    说说display属性有哪些？可以做什么？</h2>
display:block行内元素转换为块级元素
display:inline块级元素转换为行内元素
display:inline-block转为内联元素<h2 id="66----哪些css属性可以继承？">66.    哪些css属性可以继承？</h2>
可继承： font-size font-family color, ul li dl dd dt;
不可继承 ：border padding margin width height ;<h2 id="67----css优先级算法如何计算？">67.    css优先级算法如何计算？</h2>
!important &gt;  id &gt; class &gt; 标签 
!important 比 内联优先级高<ul>
<li>优先级就近原则，样式定义最近者为准;</li>
<li>以最后载入的样式为准;</li>
</ul>
</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/e6e386ca-fc41-42be-bb95-8a34aaa3e1d6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e6e386ca-fc41-42be-bb95-8a34aaa3e1d6</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 17 Mar 2024 13:27:53 GMT</pubDate></item><item><title><![CDATA[【计算机网络】HTTPS]]></title><description><![CDATA[<h1 id="https">HTTPS</h1>
<h2 id="1-介绍一下https协议？">1. 介绍一下HTTPS协议？</h2>
<h3 id="11-基本概念">1.1 基本概念</h3>
<blockquote>
<p>http默认采用80作为通讯端口，对于传输采用不加密的方式，https默认采用443，对于传输的数据进行加密传输。</p>
</blockquote>
<h3 id="12-密码学基础">1.2 密码学基础</h3>
<p><strong>明文</strong>： 明文指的是未被加密过的原始数据。</p>
<p><strong>密文</strong>：明文被某种加密算法加密之后，会变成密文，从而确保原始数据的安全。密文也可以被解密，得到原始的明文。</p>
<p><strong>密钥</strong>：密钥是一种参数，它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥，分别应用在对称加密和非对称加密上。</p>
<h3 id="13-对称加密">1.3 对称加密</h3>
<blockquote>
<p>[!NOTE]
对称加密又叫做私钥加密，即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快，适合于对大数据量进行加密，常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。</p>
</blockquote>
<pre><code>其加密过程如下：明文 + 加密算法 + 私钥 =&gt; 密文
解密过程如下：密文 + 解密算法 + 私钥 =&gt; 明文</code></pre><p>对称加密中用到的密钥叫做私钥，私钥表示个人私有的密钥，即该密钥不能被泄露。</p>
<p>其加密过程中的私钥与解密过程中用到的私钥是同一个密钥，这也是称加密之所以称之为“对称”的原因。由于对称加密的算法是公开的，所以一旦私钥被泄露，那么密文就很容易被破解，所以对称加密的缺点是密钥安全管理困难。</p>
<h3 id="14-非对称加密">1.4 非对称加密</h3>
<blockquote>
<p>[!NOTE]
非对称加密也叫做公钥加密。非对称加密与对称加密相比，其安全性更好。对称加密的通信双方使用相同的密钥，如果一方的密钥遭泄露，那么整个通信就会被破解。而非对称加密使用一对密钥，即公钥和私钥，且二者成对出现。私钥被自己保存，不能对外泄露。公钥指的是公共的密钥，任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密，用另一个进行解密。</p>
</blockquote>
<ul>
<li><p><strong>被公钥加密过的密文只能被私钥解密</strong>，过程如下：</p>
<pre><code>明文 + 加密算法 + 公钥 =&gt; 密文， 密文 + 解密算法 + 私钥 =&gt; 明文</code></pre></li>
<li><p><strong>被私钥加密过的密文只能被公钥解密</strong>，过程如下：</p>
<pre><code>明文 + 加密算法 + 私钥 =&gt; 密文， 密文 + 解密算法 + 公钥 =&gt; 明文</code></pre></li>
</ul>
<p>由于加密和解密使用了两个不同的密钥，这就是非对称加密“非对称”的原因。
非对称加密的缺点是加密和解密花费时间长、速度慢，只适合对少量数据进行加密。
在非对称加密中使用的主要算法有：RSA、Elgamal、Rabin、D-H、ECC（椭圆曲线加密算法）等。</p>
<h2 id="2-https通信过程（面试重点）">2. HTTPS通信过程（面试重点）</h2>
<h3 id="21-基本概念">2.1 基本概念</h3>
<p><strong>HTTPS协议 = HTTP协议 + SSL/TLS协议</strong>，在HTTPS数据传输的过程中，需要用SSL/TLS对数据进行加密和解密，需要用HTTP对加密后的数据进行传输，由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。</p>
<p><strong>SSL</strong>的全称是Secure Sockets Layer，即安全套接层协议，是为网络通信提供安全及数据完整性的一种安全协议。SSL协议在1994年被Netscape发明，后来各个浏览器均支持SSL，其最新的版本是3.0。</p>
<p><strong>TLS</strong>的全称是Transport Layer Security，即安全传输层协议，最新版本的TLS（Transport Layer Security，传输层安全协议）是IETF（Internet Engineering Task Force，Internet工程任务组）制定的一种新的协议，它建立在SSL 3.0协议规范之上，是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别，主要是它们所支持的加密算法不同，所以TLS与SSL3.0不能互操作。虽然TLS与SSL3.0在加密算法上不同，但是在我们理解HTTPS的过程中，我们可以把SSL和TLS看做是同一个协议。</p>
<p>HTTPS为了兼顾安全与效率，<strong>同时使用了对称加密和非对称加密</strong>。数据是被对称加密传输的，对称加密过程需要客户端的一个密钥，为了确保能把该密钥安全传输到服务器端，采用非对称加密对该密钥进行加密传输，总的来说，<strong>对数据进行对称加密，对称加密所要使用的密钥通过非对称加密传输</strong>。</p>
<p><img src="../img/httpscrypt.png" alt="加密"></p>
<h3 id="22-传输秘钥">2.2 传输秘钥</h3>
<p>HTTPS在传输的过程中会涉及到三个密钥：</p>
<ul>
<li>服务器端的公钥和私钥，用来进行非对称加密</li>
<li>客户端生成的随机密钥，用来进行对称加密</li>
</ul>
<h3 id="23-传输细节（重点理解）">2.3 传输细节（重点理解）</h3>
<p>一个HTTPS请求实际上包含了两次HTTP传输，可以细分为8步。</p>
<ol>
<li>客户端向服务器发起HTTPS请求，连接到服务器的443端口</li>
<li>服务器端有一个密钥对，即公钥和私钥，是用来进行非对称加密使用的，服务器端保存着私钥，不能将其泄露，公钥可以发送给任何人。</li>
<li>服务器将自己的公钥发送给客户端。</li>
<li>客户端收到服务器端的公钥之后，会对公钥进行检查，验证其合法性，如果发现发现公钥有问题，那么HTTPS传输就无法继续。严格的说，这里应该是验证服务器发送的数字证书的合法性。如果公钥合格，那么客户端会生成一个随机值，这个随机值就是用于进行对称加密的密钥，我们将该密钥称之为client key，即客户端密钥，这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密，这样客户端密钥就变成密文了，至此，HTTPS中的第一次HTTP请求结束。</li>
<li>客户端会发起HTTPS中的第二个HTTP请求，将加密之后的客户端密钥发送给服务器。</li>
<li>服务器接收到客户端发来的密文之后，会用自己的私钥对其进行非对称解密，解密之后的明文就是客户端密钥，然后用客户端密钥对数据进行对称加密，这样数据就变成了密文。</li>
<li>然后服务器将加密后的密文发送给客户端。</li>
<li>客户端收到服务器发送来的密文，用客户端密钥对其进行对称解密，得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束，整个HTTPS传输完成。</li>
</ol>
<p>原文链接：<a href="https://www.jianshu.com/p/14cd2c9d2cd2">https://www.jianshu.com/p/14cd2c9d2cd2</a></p>
]]></description><link>https://blog.gaoredu.com/article/3f4cfba7-cd4f-4626-8326-3b3273ea30bb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3f4cfba7-cd4f-4626-8326-3b3273ea30bb</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Mar 2024 01:45:26 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】for of与迭代器]]></title><description><![CDATA[<h1 id="for-of-与迭代器">for of 与迭代器</h1>
<blockquote>
<p>[!NOTE]
迭代器对象: 所谓迭代器，其实就是一个具有 next() 方法的对象，每次调用 next() 都会返回一个结果对象，该结果对象有两个属性，value 表示当前的值，done 表示遍历是否结束。</p>
</blockquote>
<pre><code class="language-js">function createIterator(items) {
    let i = 0;
    return {
        next: function () {
            let done  = i &gt;= items.length;
            let value = !done ? items[i++] : undefined;

            return {
                done: done,
                value: value
            }
        }
    }
}

// iterator 就是一个迭代器对象
var iterator = createIterator([1, 2, 3]);

console.log(iterator.next()); // { done: false, value: 1 }
console.log(iterator.next()); // { done: false, value: 2 }
console.log(iterator.next()); // { done: false, value: 3 }
console.log(iterator.next()); // { done: true, value: undefined }

// ES6 规定，默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性，或者说，一个数据结构只要具有 Symbol.iterator 属性，就可以认为是&quot;可遍历的&quot;（iterable）。

// v2: 实现一个遍历器对象
const obj = {
    value: 1
};
obj[Symbol.iterator] = function () {
    return createIterator([1, 2, 3])
}
for (let value of obj) {
    console.log(value);
}

// TODO: 默认部署了 Symbol.iterator 属性有哪些呢？
// 1. 数组
// 2. Set
// 3. Map
// 4. 类数组对象，如 arguments 对象、DOM NodeList 对象
// 5. Generator 对象
// 6. 字符串

// TODO; 如何实现一个forof函数呢？
function forOf(obj, cb) {
    let iterable, result;

    if (typeof obj[Symbol.iterator] !== &quot;function&quot;)
        throw new TypeError(result + &quot; is not iterable&quot;);
    if (typeof cb !== &quot;function&quot;) throw new TypeError(&quot;cb must be callable&quot;);

    // 实际上是一个函数，调用这个函数，返回的是一个对象
    iterable = obj[Symbol.iterator]();

    result = iterable.next();
    while (!result.done) {
        cb(result.value);
        result = iterable.next();
    }
}

// 为了更好的访问对象中的内容，比如有的时候我们仅需要数组中的值，但有的时候不仅需要使用值还需要使用索引，ES6 为数组、Map、Set 集合内建了以下三种迭代器：
//
// 1. entries() 返回一个遍历器对象，用来遍历[键名, 键值]组成的数组。对于数组，键名就是索引值。
// 2. keys() 返回一个遍历器对象，用来遍历所有的键名。
// 3. values() 返回一个遍历器对象，用来遍历所有的键值。
var colors = [&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;];

for (let index of colors.keys()) {
    console.log(index);
}

// 0
// 1
// 2

for (let color of colors.values()) {
    console.log(color);
}

// red
// green
// blue

for (let item of colors.entries()) {
    console.log(item);
}

// [ 0, &quot;red&quot; ]
// [ 1, &quot;green&quot; ]
// [ 2, &quot;blue&quot; ]


// 遍历 Map 数据结构的时候可以顺便结合解构赋值：
const valuess = new Map([[&quot;key1&quot;, &quot;value1&quot;], [&quot;key2&quot;, &quot;value2&quot;]]);

for (let [key, value] of valuess) {
    console.log(key + &quot;:&quot; + value);
}

// key1:value1
// key2:value2




// Map 类型与数组类似，但是对于 Set 类型需要注意以下：
var colors = new Set([&quot;red&quot;, &quot;green&quot;, &quot;blue&quot;]);

for (let index of colors.keys()) {
    console.log(index);
}

// red
// green
// blue

for (let color of colors.values()) {
    console.log(color);
}

// red
// green
// blue

for (let item of colors.entries()) {
    console.log(item);
}

// [ &quot;red&quot;, &quot;red&quot; ]
// [ &quot;green&quot;, &quot;green&quot; ]
// [ &quot;blue&quot;, &quot;blue&quot; ]</code></pre>
]]></description><link>https://blog.gaoredu.com/article/e9392bec-be8b-46bb-9f60-aae7f9d9223b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e9392bec-be8b-46bb-9f60-aae7f9d9223b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 13 Mar 2024 06:16:27 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】DOM树遍历]]></title><description><![CDATA[<h1 id="dom树的深度遍历和广度遍历">DOM树的深度遍历和广度遍历</h1>
<pre><code class="language-js">// 深度遍历
function interator(node) {
    console.log(node);
    if (node.children.length) {
        for (var i = 0; i &lt; node.children.length; i++) {
            interator(node.children[i]);
        }
    }
}

// 广度遍历
function interator(node) {

    var arr = [];
    arr.push(node);
    while (arr.length &gt; 0) {
        node = arr.shift();
        console.log(node);
        if (node.children.length) {
            for (var i = 0; i &lt; node.children.length; i++) {
                arr.push(node.children[i]);
            }
        }
    }
}</code></pre>
<h1 id="dom树的深度遍历和广度遍历-1">DOM树的深度遍历和广度遍历</h1>
<pre><code class="language-js">// 深度遍历
function interator(node) {
    console.log(node);
    if (node.children.length) {
        for (var i = 0; i &lt; node.children.length; i++) {
            interator(node.children[i]);
        }
    }
}

// 广度遍历
function interator(node) {

    var arr = [];
    arr.push(node);
    while (arr.length &gt; 0) {
        node = arr.shift();
        console.log(node);
        if (node.children.length) {
            for (var i = 0; i &lt; node.children.length; i++) {
                arr.push(node.children[i]);
            }
        }
    }
}</code></pre>
]]></description><link>https://blog.gaoredu.com/article/d24ac64a-9486-48c5-9c3e-915c58d2e4c5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d24ac64a-9486-48c5-9c3e-915c58d2e4c5</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 09 Mar 2024 22:26:40 GMT</pubDate></item><item><title><![CDATA[【前端面试题】性能优化]]></title><description><![CDATA[<h1 id="雅虎14条web性能优化规则">雅虎14条Web性能优化规则</h1>
<h2 id="法则-1-减少-http-请求次数">法则 1. 减少 HTTP 请求次数</h2>
<p>80%的最终用户响应时间花在前端程序上，而其大部分时间则花在各种页面元素， 如图像、 样式表、 脚本和 Flash 等，的下载上。 减少页面元素将会减少 HTTP 请求 次数。这是快速显示页面的关键所在。 一种减少页面元素个数的方法是简化页面设计。 但是否存在其他方式，能做到既有丰富内容，又能获得快速响应时间呢？以下是这样一些技术： 
Image maps 组合多个图片到一张图片中。总文件大小变化不大，但减少了 HTTP 请求次数从而加快了页面显示速度。该方式只适合图片连续的情况；同时坐标的定义是烦人又容易出错的工作。
 CSS Sprites 是更好的方法。它可以组合页面中的图片到单个文件中，并使用 CSS 的 background-image 和 background-position 属性来实现所需的部分图片。 Inline images 使用 data: URL scheme 来在页面中内嵌图片。这将增大 HTML 文件的大小。组合 inline images 到你的（缓存）样式表是既能较少 HTTP 请求， 又能避免加大 HTML 文件大小的方法。 
Combined files 通过组合多个脚本文件到单一文件来减少 HTTP 请求次数。样式 表也可采用类似方法处理。 这个方法虽然简单，但没有得到大规模的使用。  10大 美国网站每页平均有 7 个脚本文件和 2 个样式表。当页面之间脚本和样式表变化 很大时，该方式将遇到很大的挑战，但如果做到的话，将能加快响应时间。 
小结：减少 HTTP 请求次数是性能优化的起点。这最提高首次访问的效率起到很重要的 作用。 Tenni Theurer 的文章 Browser Cache Usage – Exposed!描述，40-60% 据 的日常访问是首次访问，因此为首次访问者加快页面访问速度是用户体验的关 键。 </p>
<h2 id="法则-2-使用-cdncontent-delivery-network-内容分发网络-">法则 2. 使用 CDN(Content Delivery Network, 内容分发网络 )</h2>
<p>用户离 web server 的远近对响应时间也有很大影响。从用户角度看，把内容部 署到多个地理位置分散的服务器上将有效提高页面装载速度。 但是该从哪里开始 呢？ 
作为实现内容地理分布的第一步，不要试图重构 web 应用以适应分布架构。 改变 架构将导致多个周期性任务，如同步 session 状态，在多个 server 之间复制数 据库交易。 这样缩短用户与内容距离的尝试可能被应用架构改版所延迟，或阻止。 我们还记得 80-90%的最终用户响应时间花在下载页面中的各种元素上，如图像 文件、 样式表、 脚本和 Flash 等。 与其花在重构系统这个困难的任务上，还不如先 分布静态内容。 这不仅能大大减少响应时间，而且由于 CDN 的存在，分布静态内 容非常容易实现。 CDN 是地理上分布的 web server 的集合，用于更高效地发布内容。 通常基于网络 远近来选择给具体用户服务的 web server。 一些大型网站拥有自己的 CDN，但是使用如 Akamai Technologies, Mirror Image Internet, 或 Limelight Networks 等 CDN 服务提供商的服务将是划算的。 在 Yahoo!把静态内容分布到 CDN 减少了用户影响时间 20%或更多。切换到 CDN 的 代码修改工作是很容易的，但能达到提高网站的速度。 </p>
<h2 id="法则-3-增加-expires-header">法则 3. 增加 Expires Header</h2>
<p>网页内容正变得越来越丰富，这意味着更多的脚本文件、样式表、图像文件和 Flash。 首次访问者将不得不面临多次 HTTP 请求，但通过使用 Expires header， 您可以在客户端缓存这些元素。这在后续访问中避免了不必要的 HTTP 请求。 Expires header 最常用于图像文件，但是它也应该用于脚本文件、样式表和 Flash。 浏览器（和代理）使用缓存来减少 HTTP 请求的次数和大小，使得网页加速装载。 Web server 通过 Expires header 告诉客户端一个元素可以缓存的时间长度。 如果服务器是 Apache 的话，您可以使用 ExpiresDefault 基于当期日期来设置 过期日期，如： ExpiresDefault “access plus 10 years” 设置过期时间为从请求时间开始 计算的 10 年。 请记住，如果使用超长的过期时间，则当内容改变时，您必须修改文件名称。 在 Yahoo!我们经常把改名作为 release 的一个步骤：版本号内嵌在文件名中，如 yahoo_2.0.6.js。 </p>
<h2 id="法则-4-压缩页面元素">法则 4. 压缩页面元素</h2>
<p>通过压缩 HTTP 响应内容可减少页面响应时间。从 HTTP/1.1 开始，web 客户端在 HTTP 请求中通过 Accept-Encoding 头来表明支持的压缩类型，如： 
Accept-Encoding: gzip, deflate. 如果 Web server 检查到 Accept-Encoding 头，它会使用客户端支持的方法来压 缩 HTTP 响应，会设置 Content-Encoding 头，如：Content-Encoding: gzip。 Gzip 是目前最流行及有效的压缩方法。 其他的方式如 deflate，但它效果较差， 也不够流行。通过 Gzip，内容一般可减少 70%。如果是 Apache，在 1.3 版本下需 使用 mod_gzip 模块，而在 2.x 版本下，则需使用 mod_deflate。 Web server 根据文件类型来决定是否压缩。 大部分网站对 HTML 文件进行压缩。 但 对脚本文件和样式表进行压缩也是值得的。实际上，对包括 XML 和 JSON 在内的 任务文本信息进行压缩都是值得的。 图像文件和 PDF 文件不应该被压缩，因为它 们本来就是压缩格式保存的。对它们进行压缩，不但浪费 CPU，而且还可能增加 文件的大小。 因此，对尽量多的文件类型进行压缩是一种减少页面大小和提高用户体验的简 便方法。 </p>
<h2 id="法则-5-把样式表放在头上">法则 5. 把样式表放在头上</h2>
<p>我们发现把样式表移到 HEAD 部分可以提高界面加载速度，因此这使得页面元素 可以顺序显示。 在很多浏览器下，如 IE，把样式表放在 document 的底部的问题在于它禁止了网 页内容的顺序显示。 浏览器阻止显示以免重画页面元素，那用户只能看到空白页 了。Firefox 不会阻止显示，但这意味着当样式表下载后，有些页面元素可能需 要重画，这导致闪烁问题。 HTML 规范明确要求样式表被定义在 HEAD 中，因此，为避免空白屏幕或闪烁问题， 最好的办法是遵循 HTML 规范，把样式表放在 HEAD 中。 </p>
<h2 id="法则-6-把脚本文件放在底部">法则 6. 把脚本文件放在底部</h2>
<p>与样式文件一样，我们需要注意脚本文件的位置。 我们需尽量把它们放在页面的 底部，这样一方面能顺序显示，另方面可达到最大的并行下载。 浏览器会阻塞显示直到样式表下载完毕，因此我们需要把样式表放在 HEAD 部分。 而对于脚本来说，脚本后面内容的顺序显示将被阻塞，因此把脚本尽量放在底 部意味着更多内容能被快速显示。 脚本引起的第二个问题是它阻塞并行下载数量。HTTP/1.1 规范建议浏览器每个 主机的并行下载数不超过 2 个。 因此如果您把图像文件分布到多台机器的话，您可以达到超过 2 个的并行下载。 但是当脚本文件下载时，浏览器不会启动其他的 并行下载，甚至其他主机的下载也不启动。 在某些情况下，不是很容易就能把脚本移到底部的。如，脚本使用 document.write 方法来插入页面内容。 同时可能还存在域的问题。 不过在很多情 况下，还是有一些方法的。 一个备选方法是使用延迟脚本（deferred script）。DEFER 属性表明脚本未包 含 document.write，指示浏览器刻继续显示。不幸的是，Firefox 不支持 DEFER 属性。 IE 中，脚本可能被延迟执行，但不一定得到需要的长时间延迟。 在 不过从 另外角度来说，如果脚本能被延迟执行，那它就可以被放在底部了。 </p>
<h2 id="法则-7-避免-css-表达式">法则 7. 避免 CSS 表达式</h2>
<p>CSS 表达式是功能强大的(同时也是危险的)用于动态设置 CSS 属性的方式。IE， 从版本 5 开始支持 CSS 表达式，如 backgourd-color: expression((new Date()).getHours()%2?”#B8D4FF”:”#F08A00”)，即背景色每个小时切换一 次。 CSS 表达式的问题是其执行次数超过大部分人的期望。 不仅页面显示和 resize 时 计算表达式，而且当页面滚屏，甚至当鼠标在页面上移动时都会重新计算表达 式。 一种减少 CSS 表达式执行次数的方法是一次性表达式，即当第一次执行时就以 明确的数值代替表达式。如果必须动态设置的话，可使用事件处理函数代替。如 果您必须使用 CSS 表达式的话，请记住它们可能被执行上千次，从而影响页面 性能。 </p>
<h2 id="法则-8-把-javascript-和-css-放到外部文件中">法则 8. 把 JavaScript 和 CSS 放到外部文件中</h2>
<p>上述很多性能优化法则都基于外部文件进行优化。 现在，我们必须问一个问题： JavaScript 和 CSS 应该包括在外部文件，还是在页面文件中？ 在现实世界中，使用外部文件会加快页面显示速度，因为外部文件会被浏览器 缓存。如果内置 JavaScript 和 CSS 在页面中虽然会减少 HTTP 请求次数，但增大 了页面的大小。 另外一方面，使用外部文件，会被浏览器缓存，则页面大小会减 小，同时又不增加 HTTP 请求次数。 因此，一般来说，外部文件是更可行的方式。 唯一的例外是内嵌方式对主页更有 效，如 Yahoo!和 My Yahoo!都使用内嵌方式。一般来说，在一个 session 中，主 页访问此时较少，因此内嵌方式可以取得更快的用户响应时间。 </p>
<h2 id="法则-9-减少-dns-查询次数">法则 9. 减少 DNS 查询次数</h2>
<p>DNS 用于映射主机名和 IP 地址，一般一次解析需要 20～120 毫秒。 为达到更高的 性能，DNS 解析通常被多级别地缓存，如由 ISP 或局域网维护的 caching server，本地机器操作系统的缓存（如 windows 上的 DNS Client Service）， 浏览器。 的缺省 DNS 缓存时间为 30 分钟，Firefox 的缺省缓冲时间是 1 分钟。 IE 减少主机名可减少 DNS 查询的次数，但可能造成并行下载数的减少。避免 DNS 查 询可减少响应时间，而减少并行下载数可能增加响应时间。 一个可行的折中是把 内容分布到至少 2 个，最多 4 个不同的主机名上。 </p>
<h2 id="法则-10-最小化-javascript代码">法则 10. 最小化 JavaScript代码</h2>
<p>最小化 JavaScript 代码指在 JS 代码中删除不必要的字符，从而降低下载时间。 两个流行的工具是 JSMin 和 YUI Compressor。 混淆是最小化于源码的备选方式。 象最小化一样，它通过删除注释和空格来减少 源码大小，同时它还可以对代码进行混淆处理。 作为混淆的一部分，函数名和变 量名被替换成短的字符串，这使得代码更紧凑，同时也更难读，使得难于被反 向工程。Dojo Compressor (ShrinkSafe)是最常见的混淆工具。 最小化是安全的、直白的过程，而混淆则更复杂，而且容易产生问题。从对美国 10 大网站的调查来看，通过最小化，文件可减少 21%，而混淆则可减少 25%。 除了最小化外部脚本文件外，内嵌的脚本代码也应该被最小化。 即使脚本根据法 则 4 被压缩后传输，最小化脚本刻减少文件大小 5%或更高。 </p>
<h2 id="法则-11-避免重定向">法则 11. 避免重定向</h2>
<p>重定向功能是通过 301 和 302 这两个 HTTP 状态码完成的，如： HTTP/1.1 301 Moved Permanently Location: <a href="http://example.com/newuri">http://example.com/newuri</a> Content-Type: text/html 浏览器自动重定向请求到 Location 指定的 URL 上，重定向的主要问题是降低了 用户体验。 一种最耗费资源、经常发生而很容易被忽视的重定向是 URL 的最后缺少/，如访 问 <a href="http://astrology.yahoo.com/astrology">http://astrology.yahoo.com/astrology</a> 将被重定向到 <a href="http://astrology.yahoo.com/astrology/%E3%80%82%E5%9C%A8">http://astrology.yahoo.com/astrology/。在</a> Apache 下，可以通过 Alias，mod_rewrite 或 DirectorySlash 等方式来解决该问题。 </p>
<h2 id="法则-12-删除重复的脚本文件">法则 12. 删除重复的脚本文件</h2>
<p>在一个页面中包含重复的 JS 脚本文件会影响性能，即它会建立不必要的 HTTP 请求和额外的 JS 执行。 不必要的 HTTP 请求发生在 IE 下，而 Firefox 不会产生多余的 HTTP 请求。 额外的 JS 执行，不管在 IE 下，还是在 Firefox 下，都会发生。 一个避免重复的脚本文件的方式是使用模板系统来建立脚本管理模块。 除了防止 重复的脚本文件外，该模块还可以实现依赖性检查和增加版本号到脚本文件名 中，从而实现超长的过期时间。 </p>
<h2 id="法则-13-配置-etags">法则 13. 配置 ETags</h2>
<p>ETags 是用于确定浏览器缓存中元素是否与 Web server 中的元素相匹配的机制， 它是比 last-modified date 更灵活的元素验证机制。ETag 是用于唯一表示元素 版本的字符串，它需被包括在引号中。Web server 首先在 response 中指定 ETag： HTTP/1.1 200 OK &lt; 03:03:59 2006 Dec 12&gt; 10c24bc-4ab-457e1c1f” Content-Length: 12195 后来，如果浏览器需要验证某元素，它使用 If-None-Match 头回传 ETag 给 Web server，如果 ETag 匹配，则服务器返回 304 代码，从而节省了下载时间</p>
]]></description><link>https://blog.gaoredu.com/article/7cd9b198-6b91-484d-96c0-4eae4ca164a2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7cd9b198-6b91-484d-96c0-4eae4ca164a2</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 28 Feb 2024 18:20:37 GMT</pubDate></item><item><title><![CDATA[【性能优化】雅虎军规14条]]></title><description><![CDATA[<h1 id="雅虎军规">雅虎军规</h1>
<p><a href="https://developer.yahoo.com/performance/rules.html?guccounter=1">雅虎军规</a></p>
<h2 id="1-雅虎军规">1. 雅虎军规</h2>
<h3 id="11-14条雅虎军规">1.1 14条雅虎军规</h3>
<ol>
<li>减少Http请求</li>
<li>使用CDN（内容分发网络）</li>
<li>添加Exprire/Cache-Control头</li>
<li>使用Gzip压缩</li>
<li>将Css放在页面的最上面</li>
<li>将script放在页面的最下面</li>
<li>经量避免使用Css Expressions(CSS表达式)</li>
<li>将脚本文件和样式文件都放在外部文件中</li>
<li>减少DNS查找</li>
<li>最小化JavaScript和Css</li>
<li>避免重定向</li>
<li>移除重复的脚本</li>
<li>配置实体标签ETag</li>
<li>使用Ajax缓存</li>
</ol>
<h3 id="12-性能优化概况">1.2 性能优化概况</h3>
<ul>
<li>网络部分<ul>
<li>尽量减少HTTP请求数<ul>
<li>合并文件</li>
<li>雪碧图</li>
<li>小图Base64</li>
</ul>
</li>
<li>减少DNS查找<ul>
<li>开启DNS预解析</li>
</ul>
</li>
<li>使用CND静态资源服务器</li>
<li>避免重定向</li>
<li>杜绝404</li>
</ul>
</li>
<li>缓存<ul>
<li>配置ETags<ul>
<li>实体标签（ETags），是服务器和浏览器用来决定浏览器缓存中组件与源服务器中的组件是否匹配的一种机制</li>
</ul>
</li>
<li>添上Expires或者Cache-Control HTTP头</li>
<li>使用外链的方式引入JS和CSS（缓存）</li>
</ul>
</li>
<li>内容部分<ul>
<li>按需加载组件</li>
<li>预加载组件</li>
<li>减少DOM元素的数量</li>
<li>尽量少用iframe</li>
<li>压缩JavaScript和CSS（代码层面）</li>
</ul>
</li>
<li>CSS 部分<ul>
<li>避免使用CSS表达式</li>
<li>选择<code>&lt;link&gt;</code>而不是<code>@import</code></li>
<li>避免使用滤镜</li>
<li>把样式表放在顶部</li>
</ul>
</li>
<li>JS 部分<ul>
<li>把脚本放在底部</li>
<li>去除重复脚本</li>
<li>减少DOM访问</li>
</ul>
</li>
<li>图片部分<ul>
<li>选用合适的图片格式</li>
<li>雪碧图中间少留空白</li>
<li>不要用HTML缩放图片，要小图就去加载小图</li>
<li>用小的可缓存的favicon.ico</li>
</ul>
</li>
<li>cookie<ul>
<li>给cookie减肥<ul>
<li>清除不必要的cookie</li>
<li>cookie尽可能小</li>
<li>设置好合适的域</li>
<li>合适的有效期</li>
</ul>
</li>
<li>把静态资源放在不含cookie的域下<ul>
<li>当浏览器发送对静态图像的请求时，cookie也会一起发送，而服务器根本不需要这些cookie。</li>
</ul>
</li>
</ul>
</li>
<li>移动端<ul>
<li>保证所有组件都小于25K </li>
<li>把组件打包到一个复合文档里</li>
</ul>
</li>
<li>服务器<ul>
<li>开启Gzip等压缩</li>
<li>避免图片src属性为空（为空浏览器也会向服务器发送另一个请求）</li>
<li>对Ajax用GET请求</li>
<li>尽早清空缓冲区</li>
<li>使用CDN（内容分发网络）<ul>
<li>内容分发网络（CDN）是一组分散在不同地理位置的web服务器，用来给用户更高效地发送内容。</li>
</ul>
</li>
</ul>
</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/dd7f7d9b-c4e9-4aa2-8426-bb53f2a11a2a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dd7f7d9b-c4e9-4aa2-8426-bb53f2a11a2a</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 25 Feb 2024 15:43:37 GMT</pubDate></item><item><title><![CDATA[【前端面试题】Ajax和网络]]></title><description><![CDATA[<h1 id="ajax和网络">Ajax和网络</h1>
<h2 id="1、ajax-是什么-如何创建一个ajax？">1、Ajax 是什么? 如何创建一个Ajax？</h2>
<p>Ajax并不算是一种新的技术，全称是asychronous javascript and xml，可以说是已有技术的组合，主要用来实现客户端与服务器端的异步通信效果，实现页面的局部刷新，早期的浏览器并不能原生支持ajax，可以使用隐藏帧（iframe）方式变相实现异步效果，后来的浏览器提供了对ajax的原生支持
使用ajax原生方式发送请求主要通过XMLHttpRequest(标准浏览器)、ActiveXObject(IE浏览器)对象实现异步通信效果
基本步骤：</p>
<pre><code class="language-js">var xhr =null;//创建对象 
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
}
     xhr.open(“方式”,”地址”,”标志位”);//初始化请求 
     xhr.setRequestHeader(“”,””);//设置http头信息 
     xhr.onreadystatechange =function(){}//指定回调函数 
     xhr.send();//发送请求 </code></pre>
<p>js框架（jQuery/EXTJS等）提供的ajax  API对原生的ajax进行了封装，熟悉了基础理论，再学习别的框架就会得心应手，好多都是换汤不换药的内容 </p>
<h2 id="2、同步和异步的区别">2、同步和异步的区别?</h2>
<p>同步：阻塞的
-张三叫李四去吃饭，李四一直忙得不停，张三一直等着，直到李四忙完两个人一块去吃饭
=浏览器向服务器请求数据，服务器比较忙，浏览器一直等着（页面白屏），直到服务器返回数据，浏览器才能显示页面
异步：非阻塞的
-张三叫李四去吃饭，李四在忙，张三说了一声然后自己就去吃饭了，李四忙完后自己去吃
=浏览器向服务器请求数据，服务器比较忙，浏览器可以自如的干原来的事情（显示页面），服务器返回数据的时候通知浏览器一声，浏览器把返回的数据再渲染到页面，局部更新</p>
<h2 id="3、如何解决跨域问题">3、如何解决跨域问题?</h2>
<p>理解跨域的概念：协议、域名、端口都相同才同域，否则都是跨域
出于安全考虑，服务器不允许ajax跨域获取数据，但是可以跨域获取文件内容，所以基于这一点，可以动态创建script标签，使用标签的src属性访问js文件的形式获取js脚本，并且这个js脚本中的内容是函数调用，该函数调用的参数是服务器返回的数据，为了获取这里的参数数据，需要事先在页面中定义回调函数，在回调函数中处理服务器返回的数据，这就是解决跨域问题的主流解决方案</p>
<h2 id="4、页面编码和被请求的资源编码如果不一致如何处理？">4、页面编码和被请求的资源编码如果不一致如何处理？</h2>
<p>对于ajax请求传递的参数，如果是get请求方式，参数如果传递中文，在有些浏览器会乱码，不同的浏览器对参数编码的处理方式不同，所以对于get请求的参数需要使用 encodeURIComponent函数对参数进行编码处理，后台开发语言都有相应的解码api。对于post请求不需要进行编码</p>
<h2 id="5、简述ajax-的过程。">5、简述ajax 的过程。</h2>
<ol>
<li>创建XMLHttpRequest对象,也就是创建一个异步调用对象</li>
<li>创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息</li>
<li>设置响应HTTP请求状态变化的函数</li>
<li>发送HTTP请求</li>
<li>获取异步调用返回的数据</li>
<li>使用JavaScript和DOM实现局部刷新<h2 id="6、阐述一下异步加载。">6、阐述一下异步加载。</h2>
</li>
<li>异步加载的方案： 动态插入 script 标签</li>
<li>通过 ajax 去获取 js 代码，然后通过 eval 执行</li>
<li>script 标签上添加 defer 或者 async 属性</li>
<li>创建并插入 iframe，让它异步执行 js<h2 id="7、请解释一下-javascript-的同源策略。">7、请解释一下 JavaScript 的同源策略。</h2>
同源策略是客户端脚本（尤其是Javascript）的重要的安全度量标准。它最早出自Netscape Navigator2.0，其目的是防止某个文档或脚本从多个不同源装载。所谓同源指的是：协议，域名，端口相同，同源策略是一种安全协议，指一段脚本只能读取来自同一来源的窗口和文档的属性。<h2 id="8、get和post的区别，何时使用post？">8、GET和POST的区别，何时使用POST？</h2>
GET：一般用于信息获取，使用URL传递参数，对所发送信息的数量也有限制，一般在2000个字符，有的浏览器是8000个字符
POST：一般用于修改服务器上的资源，对所发送的信息没有限制
在以下情况中，请使用 POST 请求：</li>
<li>无法使用缓存文件（更新服务器上的文件或数据库）</li>
<li>向服务器发送大量数据（POST 没有数据量限制）</li>
<li>发送包含未知字符的用户输入时，POST 比 GET 更稳定也更可靠<h2 id="9、ajax-是什么ajax-的交互模型同步和异步的区别如何解决跨域问题">9、ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?</h2>
<ol>
<li>通过异步模式，提升了用户体验</li>
<li>优化了浏览器和服务器之间的传输，减少不必要的数据往返，减少了带宽占用</li>
</ol>
</li>
<li>Ajax在客户端运行，承担了一部分本来由服务器承担的工作，减少了大用户量下的服务器负载。<h2 id="10、-ajax的最大的特点是什么。">10、 Ajax的最大的特点是什么。</h2>
Ajax可以实现异步通信效果，实现页面局部刷新，带来更好的用户体验；按需获取数据，节约带宽资源 <h2 id="11、ajax的缺点">11、ajax的缺点</h2>
1、ajax不支持浏览器back按钮。
2、安全问题 AJAX暴露了与服务器交互的细节。
3、对搜索引擎的支持比较弱。
4、破坏了程序的异常机制。<h2 id="12、ajax请求的时候get-和post方式的区别">12、ajax请求的时候get 和post方式的区别</h2>
get一般用来进行查询操作，url地址有长度限制，请求的参数都暴露在url地址当中，如果传递中文参数，需要自己进行编码操作，安全性较低。
post请求方式主要用来提交数据，没有数据长度的限制，提交的数据内容存在于http请求体中，数据不会暴漏在url地址中。<h2 id="13、解释jsonp的原理，以及为什么不是真正的ajax">13、解释jsonp的原理，以及为什么不是真正的ajax</h2>
　　Jsonp并不是一种数据格式，而json是一种数据格式，jsonp是用来解决跨域获取数据的一种解决方案，具体是通过动态创建script标签，然后通过标签的src属性获取js文件中的js脚本，该脚本的内容是一个函数调用，参数就是服务器返回的数据，为了处理这些返回的数据，需要事先在页面定义好回调函数，本质上使用的并不是ajax技术<h2 id="14、什么是ajax和json，它们的优缺点。">14、什么是Ajax和JSON，它们的优缺点。</h2>
Ajax是全称是asynchronous JavaScript andXML，即异步JavaScript和xml，用于在Web页面中实现异步数据交互，实现页面局部刷新。
优点：可以使得页面不重载全部内容的情况下加载局部内容，降低数据传输量，避免用户不断刷新或者跳转页面，提高用户体验
缺点：对搜索引擎不友好；要实现ajax下的前后退功能成本较大；可能造成请求数的增加跨域问题限制；
JSON是一种轻量级的数据交换格式，ECMA的一个子集
优点：轻量级、易于人的阅读和编写，便于机器（JavaScript）解析，支持复合数据类型（数组、对象、字符串、数字）<h2 id="15、http常见的状态码有那些？分别代表是什么意思？">15、http常见的状态码有那些？分别代表是什么意思？</h2>
200 - 请求成功
301 - 资源（网页等）被永久转移到其它URL
404 - 请求的资源（网页等）不存在
500 - 内部服务器错误<h2 id="16、一个页面从输入-url-到页面加载显示完成，这个过程中都发生了什么？">16、一个页面从输入 URL 到页面加载显示完成，这个过程中都发生了什么？</h2>
分为4个步骤：</li>
<li>当发送一个 URL 请求时，不管这个 URL 是 Web 页面的 URL 还是 Web 页面上每个资源的 URL，浏览器都会开启一个线程来处理这个请求，同时在远程 DNS 服务器上启动一个 DNS 查询。这能使浏览器获得请求对应的 IP 地址。</li>
<li>浏览器与远程 Web 服务器通过 TCP 三次握手协商来建立一个 TCP/IP 连接。该握手包括一个同步报文，一个同步-应答报文和一个应答报文，这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信，而后服务器应答并接受客户端的请求，最后由客户端发出该请求已经被接受的报文。</li>
<li>一旦 TCP/IP 连接建立，浏览器会通过该连接向远程服务器发送 HTTP 的 GET 请求。远程服务器找到资源并使用 HTTP 响应返回该资源，值为 200 的 HTTP 响应状态表示一个正确的响应。</li>
<li>此时，Web 服务器提供资源服务，客户端开始下载资源。<h2 id="17、ajax请求的时候get-和post方式的区别">17、ajax请求的时候get 和post方式的区别</h2>
get一般用来进行查询操作，url地址有长度限制，请求的参数都暴露在url地址当中，如果传递中文参数，需要自己进行编码操作，安全性较低。
post请求方式主要用来提交数据，没有数据长度的限制，提交的数据内容存在于http请求体中，数据不会暴漏在url地址中。<h2 id="18、ajax请求时，如何解释json数据">18、ajax请求时，如何解释json数据</h2>
使用eval() 或者JSON.parse() 鉴于安全性考虑，推荐使用JSON.parse()更靠谱，对数据的安全性更好。<h2 id="19、javascript的本地对象，内置对象和宿主对象">19、.javascript的本地对象，内置对象和宿主对象</h2>
本地对象为独立于宿主环境的ECMAScript提供的对象，包括Array Object RegExp等可以new实例化的对象
内置对象为Gload，Math 等不可以实例化的(他们也是本地对象，内置对象是本地对象的一个子集)
宿主对象为所有的非本地对象，所有的BOM和DOM对象都是宿主对象，如浏览器自带的document,window 等对象<h2 id="20、为什么利用多个域名来存储网站资源会更有效？">20、为什么利用多个域名来存储网站资源会更有效？</h2>
确保用户在不同地区能用最快的速度打开网站，其中某个域名崩溃用户也能通过其他郁闷访问网站，并且不同的资源放到不同的服务器上有利于减轻单台服务器的压力。<h2 id="21、请说出三种减低页面加载时间的方法">21、请说出三种减低页面加载时间的方法</h2>
1、压缩css、js文件
2、合并js、css文件，减少http请求
3、外部js、css文件放在最底下
4、减少dom操作，尽可能用变量替代不必要的dom操作<h2 id="22、http状态码都有那些。">22、HTTP状态码都有那些。</h2>
200 OK      //客户端请求成功
400 Bad Request  //客户端请求有语法错误，不能被服务器所理解
403 Forbidden  //服务器收到请求，但是拒绝提供服务
404 Not Found  //请求资源不存在，输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable  //服务器当前不能处理客户端的请求，一段时间后可能恢复正常</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/c808ebcc-7978-4b13-9111-521f0925eee9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c808ebcc-7978-4b13-9111-521f0925eee9</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 13 Feb 2024 06:57:57 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】arguments参数]]></title><description><![CDATA[<h1 id="arguments参数的使用？">Arguments参数的使用？</h1>
<h2 id="如何对于类数组ui下直接调用数组的方法呢？">如何对于类数组ui下直接调用数组的方法呢？</h2>
<pre><code class="language-js">    var arrLike = {
        0: &#39;name&#39;,
        1: &#39;age&#39;,
        2: &#39;sex&#39;,
        length: 3
    }
    Array.prototype.join.call(arrLike, &#39;&amp;&#39;);
    Array.prototype.slice.call(arrLike, 0);
    Array.prototype.map.call(arrLike, function(item) {
      return item.toUpperCase();
    });</code></pre>
<h2 id="如何将一个类数组转换为一个数组呢">如何将一个类数组转换为一个数组呢?</h2>
<pre><code class="language-js">    var arrLike = {
            0: &#39;name&#39;,
            1: &#39;age&#39;,
            2: &#39;sex&#39;,
            length: 3
    }
    // 1. slice
    Array.prototype.slice.call(arrLike);
    // 2. splice
    Array.prototype.splice.call(arrLike, 0);
    // 3. Es6 Array.from
    Array.from(arrLike);
    // 4. apply
    Array.prototype.concat.apply([], arrLike);</code></pre>
<h2 id="arguments的callee属性的用途？">arguments的callee属性的用途？</h2>
<h3 id="引申：如何使用闭包的方式来解决循环中的i异常问题？？？">引申：如何使用闭包的方式来解决循环中的i异常问题？？？</h3>
<pre><code class="language-js">    // 初始状态：
    var data = [];
    for (var i = 0; i &lt; 3; i++) {
        data[i] = function() {
          console.log(i);
        }
    }
    data[0]();   // 3
    data[1]();   // 3
    data[2]();   // 3



    // 解决方案V1：将i保存在匿名函数本身的一个属性上面
    var data = [];
    for (var i = 0; i &lt; 3; i++) {
        // 思路：
        // 1. 注意arguments.callee实际上就是当前的这个匿名函数本身
        // 2. (arguments.callee === &#39;匿名函数&#39;) ===&gt; true
        // 3. 开始给当前的这个匿名函数添加属性i
        // 4. 由于是给匿名函数本身添加的属性，因此我们就可以直接通过arguments.callee.参数名称的方式获取到目标参数
        (data[i] = function() {
          console.log(arguments.callee.i);
        }).i = i;
    }

    // 解决方案V2：在外层添加一层闭包，将i保存在一个局部变量tmp上面
    for (var i = 0; i &lt; 3; i++) {
        (function() {
          // 这个闭包函数的作用域里面使用外部的变量
          var temp = i;
          data[i] = function() {
            console.log(temp);
          }
        })();
    }

    // 解决方案V2：在外层添加一层闭包，将i的值复制到参数num里面
    for (var i = 0; i &lt; 3; i++) {
        (function(num) {
          data[i] = function() {
            console.log(num);
          }
        })(i);
    }

    // 解决方案V4：在外层添加一层闭包，内部返回一个函数
    for (var i = 0; i &lt; 3; i++) {
        data[i] = function(num) {
          return function() {
            console.log(num);
          }
        }(i)
    }</code></pre>
<h2 id="把一个函数中的参数传递到另外一个函数中去？">把一个函数中的参数传递到另外一个函数中去？</h2>
<pre><code class="language-js">    function foo() {
      bar.apply(this, arguments);
    }

    function bar(a, b, c) {
      console.log(a, b, c);
    }

    foo(1, 2, 3);</code></pre>
<h2 id="使用es6中的rest运算符转换arguments参数？">使用ES6中的rest...运算符转换arguments参数？</h2>
<pre><code class="language-js">    function fn(...arguments) {
      console.log(arguments);   // [1, 2, 3]
    }
    fn(1, 2, 3);</code></pre>
<blockquote>
<p>[!NOTE]
arguments的应用其实很多，在下个系列，也就是 JavaScript 专题系列中，我们会在 jQuery 的 extend 实现、函数柯里化、递归等场景看见 arguments 的身影。这篇文章就不具体展开了。</p>
</blockquote>
<p><strong>应用场景</strong>：</p>
<ul>
<li>参数不定长</li>
<li>函数柯里化</li>
<li>递归调用</li>
<li>函数重载</li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/ec32a75a-ffbc-47f0-9343-9250edf239ed</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ec32a75a-ffbc-47f0-9343-9250edf239ed</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 09 Feb 2024 18:31:49 GMT</pubDate></item><item><title><![CDATA[【数据结构与算法】算法设计]]></title><description><![CDATA[<h1 id="算法设计">算法设计</h1>
<blockquote>
<p>[!NOTE]
啥也不多说，多刷题才是硬道理<del>~</del></p>
</blockquote>
<hr>
<p><strong>刷题平台推荐</strong></p>
<ul>
<li>牛客网：<a href="https://www.nowcoder.com/activity/oj">https://www.nowcoder.com/activity/oj</a></li>
<li>leetcode: <a href="https://leetcode-cn.com/">https://leetcode-cn.com/</a></li>
</ul>
]]></description><link>https://blog.gaoredu.com/article/d1265d24-8e3d-4ca4-96a1-2e9d163572f8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d1265d24-8e3d-4ca4-96a1-2e9d163572f8</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2024 12:18:58 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】数组扁平化]]></title><description><![CDATA[<h1 id="数组扁平化">数组扁平化</h1>
<pre><code class="language-js">// v1. 递归实现版本
function flatten(arr) {
    let res = [];
    for (let i = 0, len = arr.length; i &lt; len; i++) {
        if (Array.isArray(arr[i])) {
            res = res.concat(flatten(arr[i]));
        }
        else {
            res.push(arr[i]);
        }
    }
    return res;
}

// v2. 使用数组的toString方法实现
function flatten(arr) {
    return arr.toString().split(&#39;,&#39;).map(item =&gt; +item);
}
// TODO: 会把所有的项都变成数字了
// console.log(flatten([1, &#39;1&#39;, [2, 3, 4]]));



// v3. 使用reduce函数来实现(重点掌握)
function flatten(arr) {
    return arr.reduce((prev, next) =&gt; {
        return prev.concat(Array.isArray(next) ? flatten(next) : next);
    }, []);
}
console.log(flatten([1, &#39;1&#39;, [2, 3, 4]]));


// v4. 使用...运算符来解构数组
function flatten(arr) {
    // 数组中只要有一项是数组的话，就把当前的这个数组解构一层
    while (arr.some(item =&gt; Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}

</code></pre>
]]></description><link>https://blog.gaoredu.com/article/8ea1d115-b628-47fc-85f7-73de488df7fd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8ea1d115-b628-47fc-85f7-73de488df7fd</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Jan 2024 13:37:56 GMT</pubDate></item><item><title><![CDATA[【CSS相关】CSS动画]]></title><description><![CDATA[<h1 id="css动画">CSS动画</h1>
<h2 id="1css动画的实现方式？">1.CSS动画的实现方式？</h2>
<p>CSS动画类型：</p>
<h3 id="1-transition补间动画">1. transition补间动画</h3>
<ul>
<li>位置-平移： left/right/margin/transform</li>
<li>方位-旋转: transform</li>
<li>大小-缩放： transform</li>
<li>透明度： opacity</li>
<li>线性变换： transform</li>
</ul>
<h3 id="2-keyframe关键帧动画">2. keyframe关键帧动画</h3>
<h3 id="3-逐帧动画">3. 逐帧动画</h3>
<h2 id="2过渡动画和关键帧动画的区别？">2.过渡动画和关键帧动画的区别？</h2>
<ol>
<li>过度动画需要有状态的变化</li>
<li>关键帧动画不需要状态的变化</li>
<li>关键帧动画的控制更加精细</li>
</ol>
<h2 id="3如何实现逐帧动画？">3.如何实现逐帧动画？</h2>
<pre><code class="language-css">/*逐帧动画（关键帧动画的一种特殊情形）*/
/* 1. 适用于无法补间的动画
    2. 猎豹奔跑的过程中实际上是有补间的
    3. 使用steps(1)去掉补间
    4. 资源较大
*/
.container-every-frame {
 /*1的含义：这里需要设置每一个区间之间只有一个动画，那么就不会有补间了*/
    animation-timing-function: steps(1);
}</code></pre>
<h2 id="4css动画的性能怎么样？">4.CSS动画的性能怎么样？</h2>
<ol>
<li>性能不坏</li>
<li>部分情况下优于JS</li>
<li>JS可以做到更好</li>
<li>部分高危属性：box-shadow(阴影效果的实现会消耗性能)</li>
</ol>
<h2 id="5使用css3动画实现一个轮播图效果？">5.使用CSS3动画实现一个轮播图效果？</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;图片轮换&lt;/title&gt;
    &lt;style type=&quot;text/css&quot;&gt;
        div,img{
            margin: 0;
            padding: 0;
        }
        .div_first{
            width: 1000px;
            height: 300px;
            margin-top: 100px;
            margin-left: 250px;
            overflow: hidden;
        }
        .div_second{
            width: 4000px;
            position: relative;
            animation: myimg 12s linear infinite normal; 
        }
        @keyframes myimg{
            0{
                left: 0;
            }
            5%{
                left: 0;
            }

            30%{
                left: -1000px;
            }
            35%{
                left: -1000px;
            }

            60%{
                left: -2000px;
            }
            65%{
                left: -2000px;
            }

            95%{
                left: -3000px;
            }
            100%{
                left: -3000px;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;div_first&quot;&gt;
        &lt;div class=&quot;div_second&quot;&gt;
            &lt;img src=&quot;../../img/风景1.jpg&quot; alt=&quot;&quot;&gt;
            &lt;img src=&quot;../../img/风景1.jpg&quot; alt=&quot;&quot;&gt;
            &lt;img src=&quot;../../img/风景1.jpg&quot; alt=&quot;&quot;&gt;
            &lt;img src=&quot;../../img/风景1.jpg&quot; alt=&quot;&quot;&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
]]></description><link>https://blog.gaoredu.com/article/98d03337-cf9c-4a25-8feb-17cc8aa075d4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/98d03337-cf9c-4a25-8feb-17cc8aa075d4</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Jan 2024 11:46:34 GMT</pubDate></item><item><title><![CDATA[【总结】前端总结]]></title><description><![CDATA[<h1 id="前端总结">前端总结</h1>
<blockquote>
<p>[!NOTE]
至此，本书的全部内容就已经全部结束了，但是前端未来需要学习和掌握的东西却没有结束。对于互联网求职炽热化时期的前端开发方向的求职者来说，网上很难找到一些比较系统的前端面试考点总结，网上的前端面经也是参差不齐的，如果从头开始梳理前端开发工程师的面试中的所有考点需要耗费大量的时间和精力。本书通过收集整理全网各大平台的以往前端求职者的面经，最终整理出了这本前端工程师面试宝典，以帮助求职者斩获理想Offer，最后祝大家前途无限，未来可期。</p>
</blockquote>
<h2 id="最后的建议">最后的建议</h2>
<ol>
<li><strong>JavaScript高级程序设计（红宝书）</strong>：建议看个两三遍，其义自见，面试内容基本逃不过红宝书里的东西。继承、原型链、作用域链百考不厌。</li>
<li><strong>es6标准入门（阮一峰）</strong>，不要只是了解es6有哪些东西，建议直接看线上版，一个一个块去学习。面试官问es6了解哪些的时候你说的越多评价越高，比较核心的内容：箭头函数，promise,map,set,let,const,class,symbol,generator。es7:async,await。</li>
<li><strong>玩转数据结构</strong>：前端同学不要觉得数据结构没用，实际上了解更多的数据结构可以让你编码更加轻松和流畅，还有就是一定要跟着写，像链表、队列、二叉树、堆跟着写一下就好，面试过程中常考bst的add、前中后序遍历（递归和非递归）、删除节点。</li>
<li><strong>剑指offer和LeetCode</strong>：不管你觉得前端需不需要会算法，刷就行了。</li>
<li><strong>流行框架</strong>：针对vue：双向数据绑定原理（要会写一个简单的双绑），v-model原理，diff算法，vue和其他框架的区别（一般react），vue代码优化，组件编写要点，vue-router原理（如何加入动态参数），vuex解决了什么有哪些模块。React也类似，有很多相通的知识点，像router, redux这些可以对比着复习即可。</li>
<li><strong>移动端开发</strong>：（如果有移动端开发经历，这块需要重点掌握；没有这块经验的也要知道常见的面试题），像移动端适配，300ms产生原因和解决方案，点击穿透事件，如何做自适应，兼容性问题如何解决，input框被输入法遮挡解决方案；知道Hybrid开发模式。</li>
<li><strong>计算机网络</strong>，非常非常重要，大厂必问。osi七层模型/tcpip四层模型，http1.0 1.1 2.0区别，https原理，请求响应报文header具体内容（了解的越多越好），请求方式，各种响应码（最重要的304一定要说清楚，详见http缓存详解，cache-control），tcp/udp不同，tcp（三握四挥、syn洪泛、流量控制、拥塞控制、滑动窗口协议），dns解析，mac/ip等都要熟练掌握。</li>
<li><strong>操作系统（OS）</strong>：进线程区别，调度和通信方式。</li>
<li><strong>数据库</strong>：如果项目中用到数据库，需要掌握事务、索引、视图等概念，知道B树的底层实现原理。</li>
<li><strong>前端优化问题</strong>：知道重绘回流、浏览器渲染原理, 首屏问题优化等。</li>
<li><strong>比较常考的前端代码题</strong>：节流防抖、bind底层、extend底层、$底层、cookie封装、扁平化、柯里化、promise原理、手写闭包、手写ajax、串行ajax请求处理、url处理、promise封装ajax。</li>
<li><strong>设计模式</strong>（单例、工厂、观察者、订阅发布者），最好能手写，观察者设计模式要重点掌握(EventEmitter)。</li>
<li><strong>浏览器机制</strong>（异步机制、线程宿主环境），微宏任务（非常重要），URL输入到绘制的全过程（越详细越好）。</li>
<li><strong>后台</strong>：如果会点nodejs，入门级别（会写爬虫，简单搭建服务器，了解koa洋葱圈模型，express中间件写法和底层实现原理，Node创建进程的方法和区别）</li>
<li><strong>html</strong>: h5相关内容，加分点：canvas 和 webgl; websocket原理和服务器端推送机制，长短轮询, 通信原理。</li>
<li><strong>css</strong>：选择器相关、双列等高三列自适应布局等、垂直居中（可能不定高）、动画（CSS的transition和animation，js动画了解jq和velocity）、css3相关（transition/transform）、bfc（形成方式）、display/position参数、flex参数掌握，border相关绘图，box-sizing参数，grid布局了解。</li>
<li><strong>spa相关</strong>（首屏加载，白屏问题，路由转换，seo），了解PWA和Service Worker底层原理。</li>
<li><strong>服务器端渲染</strong>（不会问太深，加分项），知道Vue和React的SSR实现流程和底层实现原理。</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/faa884f8-cf20-4b11-b93f-cc3009ebc03e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/faa884f8-cf20-4b11-b93f-cc3009ebc03e</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Jan 2024 08:40:13 GMT</pubDate></item><item><title><![CDATA[【计算机网络】HTTP]]></title><description><![CDATA[<h1 id="http协议">HTTP协议</h1>
<h2 id="1-介绍一下osi七层参考模型和tcpip五层模型">1. 介绍一下OSI七层参考模型和TCP/IP五层模型</h2>
<h3 id="11-osi七层模型">1.1 OSI七层模型</h3>
<p><img src="../img/OSI-%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B.png" alt="OSI七层参考模型"></p>
<h3 id="12-tcpip五层模型">1.2 TCP/IP五层模型</h3>
<p><img src="../img/TCP-IP-%E4%BA%94%E5%B1%82%E6%A8%A1%E5%9E%8B.png" alt="TCP/IP五层模型"></p>
<h3 id="13-各层的设备">1.3 各层的设备</h3>
<p><img src="../img/TCP%E6%A8%A1%E5%9E%8B-%E5%90%84%E5%B1%82%E8%AE%BE%E5%A4%87.png" alt="各层设备"></p>
<h3 id="14-各层对应协议">1.4 各层对应协议</h3>
<p><img src="../img/TCP%E6%A8%A1%E5%9E%8B-%E5%90%84%E5%B1%82%E5%8D%8F%E8%AE%AE.png" alt="各层协议"></p>
<p>参考文章： <a href="https://www.cnblogs.com/qishui/p/5428938.html">https://www.cnblogs.com/qishui/p/5428938.html</a></p>
<h2 id="2-http协议和特点">2. HTTP协议和特点</h2>
<h3 id="21-基本概念">2.1 基本概念</h3>
<blockquote>
<p>[!NOTE]
HTTP是Hyper Text Transfer Protocol（超文本传输协议）的缩写。它是一个应用层协议，由请求和响应构成，是一个标准的客户端服务器模型。HTTP是一个无状态的协议。</p>
</blockquote>
<h3 id="22-数据包结构">2.2 数据包结构</h3>
<p><img src="../img/http-data.jpg" alt="数据包"></p>
<p><strong>数据包细节</strong></p>
<p><img src="../img/http-data-detail.jpg" alt="详细信息"></p>
<h3 id="23-协议的特点">2.3 协议的特点</h3>
<ol>
<li><strong>无连接(重点理解)</strong><ul>
<li>限制每次连接只处理一个请求。服务器处理完客户的请求，并收到客户的应答后，即断开连接。采用这种方式可以节省传输时间。</li>
</ul>
</li>
<li>无状态<ul>
<li>协议对于事务处理没有记忆能力。</li>
</ul>
</li>
<li>简单快速<ul>
<li>客户向服务器请求服务时，只需传送请求方法和路径。</li>
</ul>
</li>
<li>灵活<ul>
<li>HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。</li>
</ul>
</li>
</ol>
<h3 id="参考链接：httpsblogcsdnnetsinat_21455985articledetails53508115">参考链接：<a href="https://blog.csdn.net/sinat_21455985/article/details/53508115">https://blog.csdn.net/sinat_21455985/article/details/53508115</a></h3>
<h3 id="24-请求报文">2.4 请求报文</h3>
<ul>
<li>请求行<ul>
<li>请求类型</li>
<li>要访问的资源</li>
<li>HTTP协议版本号</li>
</ul>
</li>
<li>请求头<ul>
<li>用来说明服务器要使用的附加信息（一些键值对）</li>
<li>例如：User-Agent、 Accept、Content-Type、Connection</li>
</ul>
</li>
<li>空行<ul>
<li>分割请求头与请求体</li>
</ul>
</li>
<li>请求体<ul>
<li>可以添加任意的其他数据</li>
</ul>
</li>
</ul>
<h3 id="25-响应报文">2.5 响应报文</h3>
<ul>
<li>状态行<ul>
<li>状态码</li>
<li>状态消息</li>
<li>HTTP协议版本号</li>
</ul>
</li>
<li>消息报头<ul>
<li>说明客户端要使用的一些附加信息</li>
<li>如：Content-Type、charset、响应的时间</li>
</ul>
</li>
<li>响应正文<ul>
<li>返回给客户端的文本信息</li>
</ul>
</li>
</ul>
<h3 id="26-http-方法">2.6 HTTP 方法</h3>
<ul>
<li>GET<ul>
<li>获取资源</li>
</ul>
</li>
<li>POST<ul>
<li>传输资源</li>
</ul>
</li>
<li>PUT<ul>
<li>更新资源</li>
</ul>
</li>
<li>DELETE<ul>
<li>删除资源</li>
</ul>
</li>
<li>HEAD<ul>
<li>获取报文首部</li>
</ul>
</li>
</ul>
<h3 id="261-post-和-get-的区别">2.6.1 Post 和 Get 的区别</h3>
<ul>
<li>GET在浏览器回退时是无害的，而POST会再次提交</li>
<li><code>重点</code>Get请求能缓存，Post不能</li>
<li>Post相对Get相对安全一些，因为Get请求都包含在URL中，而且会被浏览器保存记录，Post不会。但是再抓包的情况下都是一样的。</li>
<li>Post 可以通过 request body来传输比 Get 更多的数据</li>
<li>URL有长度限制，会影响 Get 请求，但是这个长度限制是浏览器规定的</li>
<li>Post 支持更多的编码类型且不对数据类型限制</li>
<li><code>重点</code>POST，浏览器先发送header，服务器响应100 continue，浏览器再发送data，服务器响应200 ok(返回数据)</li>
<li>补充：100状态码表示（继续）请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分，正在等待其余部分。</li>
</ul>
<p><strong>副作用和幂等的概念</strong></p>
<blockquote>
<p>[!NOTE]</p>
</blockquote>
<ol>
<li>副作用：指对服务器上的资源做改变，搜索是无副作用的，注册是副作用的。</li>
<li>幂等：指发送 M 和 N 次请求（两者不相同且都大于 1），服务器上资源的状态一致，比如注册 10 个和 11 个帐号是不幂等的，对文章进行更改 10 次和 11 次是幂等的。</li>
</ol>
<blockquote>
<p>[!NOTE]
在规范的应用场景上说，Get 多用于无副作用，幂等的场景，例如搜索关键字。Post 多用于副作用，不幂等的场景，例如注册。</p>
</blockquote>
<h3 id="27-常见状态码">2.7 常见状态码</h3>
<h4 id="271-1xx-指示信息（面试考点）">2.7.1 1XX 指示信息（面试考点）</h4>
<p>表示请求已接收，继续处理</p>
<h4 id="272-2xx-成功">2.7.2 2XX 成功</h4>
<ul>
<li><strong>200</strong> OK</li>
<li>204 No content，表示请求成功，但响应报文不含实体的主体部分</li>
<li>205 Reset Content，表示请求成功，但响应报文不含实体的主体部分，但是与 204 响应不同在于要求请求方重置内容</li>
<li><strong>206</strong> Partial Content，进行范围请求</li>
</ul>
<h4 id="273-3xx-重定向">2.7.3 3XX 重定向</h4>
<ul>
<li><strong>301</strong> 永久性重定向，表示资源已被分配了新的 URL</li>
<li><strong>302</strong> 临时性重定向，表示资源临时被分配了新的 URL</li>
<li>303 表示资源存在着另一个 URL，应使用 GET 方法获取资源</li>
<li><strong>304</strong> 未修改，重定位到浏览器。自从上次请求后，请求的网页未修改过。服务器返回此响应时，不会返回网页内容。如果网页自请求者上次请求后再也没有更改过，您应将服务器配置为返回此响应（称为 If-Modified-Since HTTP 标头）。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更，进而节省带宽和开销。</li>
<li>307 临时重定向，和302含义类似，但是期望客户端保持请求方法不变向新的地址发出请求</li>
</ul>
<h4 id="274-4xx-客户端错误">2.7.4 4XX 客户端错误</h4>
<ul>
<li><strong>404</strong> 在服务器上没有找到请求的资源</li>
<li><strong>403</strong> forbidden，表示对请求资源的访问被服务器拒绝</li>
<li>400 请求报文存在语法错误</li>
<li>401  表示发送的请求需要有通过 HTTP 认证的认证信息</li>
</ul>
<h4 id="275-5xx-服务器错误">2.7.5 5XX 服务器错误</h4>
<ul>
<li><strong>500</strong> 表示服务器端在执行请求时发生了错误</li>
<li>501 表示服务器不支持当前请求所需要的某个功能</li>
<li><strong>503</strong> 表明服务器暂时处于超负载或正在停机维护，无法处理请求</li>
</ul>
<h3 id="28-http持久连接（http11支持）">2.8 HTTP持久连接（HTTP1.1支持）</h3>
<blockquote>
<p>[!NOTE]
HTTP协议采用“请求-应答”模式，并且HTTP是基于TCP进行连接的。普通模式（非keep-alive）时，每个请求或应答都需要建立一个连接，完成之后立即断开。</p>
</blockquote>
<p>当使用<code>Conection: keep-alive</code>模式（又称持久连接、连接重用）时，keep-alive使客户端道服务器端连接持续有效，即不关闭底层的TCP连接，当出现对服务器的后继请求时，keep-alive功能避免重新建立连接。</p>
<h3 id="29-http管线化-（http11支持）">2.9 HTTP管线化 （HTTP1.1支持）</h3>
<p><img src="../img/pipe.png" alt="pipe"></p>
<p>管线化后，请求和响应不再是依次交替的了。他可以支持一次性发送多个请求，并一次性接收多个响应。</p>
<ul>
<li>只有get与head请求可以进行管线化，POST有限制</li>
<li>初次创建连接时不应该启动管线机制，因为服务器不一定支持该协议</li>
</ul>
<h3 id="210-http数据协商">2.10 HTTP数据协商</h3>
<p>在客户端向服务端发送请求的时候，客户端会申明可以接受的数据格式和数据相关的一些限制是什么样的；服务端在接受到这个请求时他会根据这个信息进行判断到底返回怎样的数据。</p>
<h4 id="2101-请求">2.10.1 请求</h4>
<ul>
<li>cookie</li>
<li>Host  </li>
<li>Connection</li>
<li>Accept<ul>
<li>在请求中使用Accept可申明想要的数据格式(image/webp,image/apng,image/)</li>
</ul>
</li>
<li>Accept-Encoding<ul>
<li>告诉服务端使用什么的方式来进行压缩</li>
<li>例如：gzip、deflate、br</li>
</ul>
</li>
<li>Accept-Language<ul>
<li>描述语言信息(zh-CN)</li>
</ul>
</li>
<li>User-Agent(Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.15 Safari/537.36)<ul>
<li>用来描述客户端浏览器相关信息</li>
<li>可以用来区分PC端页面和移动端页面</li>
</ul>
</li>
</ul>
<h4 id="2102-响应">2.10.2 响应</h4>
<ul>
<li>Content-Type<ul>
<li>对应Accept，从请求中的Accept支持的数据格式中选一种来返回</li>
</ul>
</li>
<li>Content-Encoding<ul>
<li>对应 Accept-Encoding，指服务端到底使用的是那种压缩方式</li>
</ul>
</li>
<li>Content-Language<ul>
<li>对应Accept-Language</li>
</ul>
</li>
</ul>
<h4 id="2103-form-表单中enctype数据类型">2.10.3 form 表单中enctype数据类型</h4>
<ul>
<li><p><code>application/x-www-form-urlencoded</code></p>
<ul>
<li>key=value&amp;key=value 格式</li>
</ul>
</li>
<li><p><code>multipart/form-data</code></p>
<ul>
<li>用于提交文件</li>
<li>multipart表示请求是由多个部分组成（因为上传文件的时候文件不能以字符串形式提交，需要单独分出来）</li>
<li>boundary 用来分隔不同部分</li>
</ul>
</li>
<li><p><code>text/plain</code></p>
<pre><code class="language-js">// 原生ajax 方式对get的url，使用POST请求方式进行发送
document.querySelector(&quot;#btnAjax&quot;).onclick = function () {
   var ajax = new XMLHttpRequest();

   // 使用post请求
   ajax.open(&#39;post&#39;,&#39;ajax_post.php&#39;);

   // 如果 使用post发送数据 必须 设置 如下内容
   // 修改了 发送给 服务器的 请求报文的 内容
   // 如果需要像 HTML 表单那样 POST 数据，请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据：
   ajax.setRequestHeader(&quot;Content-type&quot;,&quot;application/x-www-form-urlencoded&quot;);
   // 发送
   // post请求 发送的数据 写在 send方法中
   // 格式 name=jack&amp;age=18 字符串的格式
   ajax.send(&#39;name=jack&amp;age=998&#39;);

   // 注册事件
   ajax.onreadystatechange = function () {
       if (ajax.readyState==4&amp;&amp;ajax.status==200) {
           console.log(ajax.responseText);
       }
   }
}</code></pre>
</li>
</ul>
<h3 id="211-http-redirect-重定向">2.11 HTTP Redirect 重定向</h3>
<ul>
<li>302 暂时重定向<ul>
<li>浏览器每次访问都要先去目标网址访问，再重定向到新的网址</li>
</ul>
</li>
<li>301 永久重定向<ul>
<li>当浏览器收到的HTTP状态码为301时，下次访问对应网址就直接调整到新的网址，不会再访问原网址</li>
</ul>
</li>
</ul>
<h3 id="212-http-csp-内容安全策略">2.12 HTTP CSP 内容安全策略</h3>
<p><a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/CSP">HTTP CSP 内容安全策略</a></p>
<p>CSP Content-Security-Policy</p>
<ul>
<li>限制资源获取</li>
<li>报告资源获取越权</li>
</ul>
<p>例子：</p>
<ul>
<li><code>Content-Security-Policy: default-src http: https:</code> 表示只允许通过http、https的方式加载资源</li>
<li><code>&#39;Content -Security-Policy&#39;: &#39;default-src&#39; \&#39;self\&#39;; form-action\&#39;self\&#39; &#39;</code> 表示只能加载本域下的资源，只能向本域发送表单请求</li>
</ul>
<h4 id="2121-tls-握手过程如下图">2.12.1 TLS 握手过程如下图</h4>
<p><img src="../img/tls.png" alt="TLS"></p>
<ol>
<li>客户端发送一个随机值，需要的协议和加密方式</li>
<li>服务端收到客户端的随机值，自己也产生一个随机值，并根据客户端需求的协议和加密方式来使用对应的方式，发送自己的证书（如果需要验证客户端证书需要说明）</li>
<li>客户端收到服务端的证书并验证是否有效，验证通过会再生成一个随机值，通过服务端证书的公钥去加密这个随机值并发送给服务端，如果服务端需要验证客户端证书的话会附带证书</li>
<li>服务端收到加密过的随机值并使用私钥解密获得第三个随机值，这时候两端都拥有了三个随机值，可以通过这三个随机值按照之前约定的加密方式生成密钥，接下来的通信就可以通过该密钥来加密解密.</li>
</ol>
<p>通过以上步骤可知，在 TLS 握手阶段，两端使用非对称加密的方式来通信，但是因为非对称加密损耗的性能比对称加密大，所以在正式传输数据时，两端使用对称加密的方式通信。</p>
<h2 id="3-http2面试重点">3. HTTP2(面试重点)</h2>
<blockquote>
<p>[!NOTE]
HTTP 2.0 相比于 HTTP 1.X，可以说是大幅度提高了 web 的性能。</p>
</blockquote>
<p>在 HTTP 1.X 中，为了性能考虑，我们会引入雪碧图、将小图内联、使用多个域名等等的方式。这一切都是<strong>因为浏览器限制了同一个域名下的请求数量</strong>，当页面中需要请求很多资源的时候，队头阻塞（Head of line blocking）会导致在达到最大请求数量时，剩余的资源需要等待其他资源请求完成后才能发起请求。</p>
<h3 id="31-二进制传输">3.1 二进制传输</h3>
<p>HTTP 2.0 中所有加强性能的核心点在于此。在之前的 HTTP 版本中，我们是通过文本的方式传输数据。在 HTTP 2.0 中引入了新的编码机制，所有传输的数据都会被分割，并采用二进制格式编码。</p>
<h3 id="32-多路复用">3.2 多路复用</h3>
<p>在 HTTP 2.0 中，有两个非常重要的概念，分别是帧（frame）和流（stream）。</p>
<p>帧代表着最小的数据单位，每个帧会标识出该帧属于哪个流，流也就是多个帧组成的数据流。</p>
<p><strong>多路复用，就是在一个 TCP 连接中可以存在多条流。</strong>换句话说，也就是可以发送多个请求，对端可以通过帧中的标识知道属于哪个请求。通过这个技术，可以避免 HTTP 旧版本中的队头阻塞问题，极大的提高传输性能。</p>
<p><img src="../img/http2Connet.png" alt="http2"></p>
<h3 id="33-header-压缩">3.3 Header 压缩</h3>
<p>在 HTTP 1.X 中，我们使用文本的形式传输 header，在 header 携带 cookie 的情况下，可能每次都需要重复传输几百到几千的字节。</p>
<p>在 HTTP 2.0 中，使用了 HPACK 压缩格式对传输的 header 进行编码，减少了 header 的大小。并在两端维护了索引表，用于记录出现过的 header ，后面在传输过程中就可以传输已经记录过的 header 的键名，对端收到数据后就可以通过键名找到对应的值。</p>
<h3 id="34-服务端-push">3.4 服务端 Push</h3>
<p>在 HTTP 2.0 中，服务端可以在客户端某个请求后，主动推送其他资源。</p>
<p>可以想象以下情况，某些资源客户端是一定会请求的，这时就可以采取服务端 push 的技术，提前给客户端推送必要的资源，这样就可以相对减少一点延迟时间。当然在浏览器兼容的情况下你也可以使用 prefetch。</p>
<h2 id="4-http首部">4. HTTP首部</h2>
<table>
<thead>
<tr>
<th align="center">通用字段</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Cache-Control</td>
<td align="center">控制缓存的行为</td>
</tr>
<tr>
<td align="center">Connection</td>
<td align="center">浏览器想要优先使用的连接类型，比如  <code>keep-alive</code></td>
</tr>
<tr>
<td align="center">Date</td>
<td align="center">创建报文时间</td>
</tr>
<tr>
<td align="center">Pragma</td>
<td align="center">报文指令</td>
</tr>
<tr>
<td align="center">Via</td>
<td align="center">代理服务器相关信息</td>
</tr>
<tr>
<td align="center">Transfer-Encoding</td>
<td align="center">传输编码方式</td>
</tr>
<tr>
<td align="center">Upgrade</td>
<td align="center">要求客户端升级协议</td>
</tr>
<tr>
<td align="center">Warning</td>
<td align="center">在内容中可能存在错误</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">请求字段</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Accept</td>
<td align="center">能正确接收的媒体类型</td>
</tr>
<tr>
<td align="center">Accept-Charset</td>
<td align="center">能正确接收的字符集</td>
</tr>
<tr>
<td align="center">Accept-Encoding</td>
<td align="center">能正确接收的编码格式列表</td>
</tr>
<tr>
<td align="center">Accept-Language</td>
<td align="center">能正确接收的语言列表</td>
</tr>
<tr>
<td align="center">Expect</td>
<td align="center">期待服务端的指定行为</td>
</tr>
<tr>
<td align="center">From</td>
<td align="center">请求方邮箱地址</td>
</tr>
<tr>
<td align="center">Host</td>
<td align="center">服务器的域名</td>
</tr>
<tr>
<td align="center">If-Match</td>
<td align="center">两端资源标记比较</td>
</tr>
<tr>
<td align="center">If-Modified-Since</td>
<td align="center">本地资源未修改返回 304（比较时间）</td>
</tr>
<tr>
<td align="center">If-None-Match</td>
<td align="center">本地资源未修改返回 304（比较标记）</td>
</tr>
<tr>
<td align="center">User-Agent</td>
<td align="center">客户端信息</td>
</tr>
<tr>
<td align="center">Max-Forwards</td>
<td align="center">限制可被代理及网关转发的次数</td>
</tr>
<tr>
<td align="center">Proxy-Authorization</td>
<td align="center">向代理服务器发送验证信息</td>
</tr>
<tr>
<td align="center">Range</td>
<td align="center">请求某个内容的一部分</td>
</tr>
<tr>
<td align="center">Referer</td>
<td align="center">表示浏览器所访问的前一个页面</td>
</tr>
<tr>
<td align="center">TE</td>
<td align="center">传输编码方式</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">响应字段</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Accept-Ranges</td>
<td align="center">是否支持某些种类的范围</td>
</tr>
<tr>
<td align="center">Age</td>
<td align="center">资源在代理缓存中存在的时间</td>
</tr>
<tr>
<td align="center">ETag</td>
<td align="center">资源标识</td>
</tr>
<tr>
<td align="center">Location</td>
<td align="center">客户端重定向到某个 URL</td>
</tr>
<tr>
<td align="center">Proxy-Authenticate</td>
<td align="center">向代理服务器发送验证信息</td>
</tr>
<tr>
<td align="center">Server</td>
<td align="center">服务器名字</td>
</tr>
<tr>
<td align="center">WWW-Authenticate</td>
<td align="center">获取资源需要的验证信息</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">实体字段</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center">Allow</td>
<td align="center">资源的正确请求方式</td>
</tr>
<tr>
<td align="center">Content-Encoding</td>
<td align="center">内容的编码格式</td>
</tr>
<tr>
<td align="center">Content-Language</td>
<td align="center">内容使用的语言</td>
</tr>
<tr>
<td align="center">Content-Length</td>
<td align="center">request body 长度</td>
</tr>
<tr>
<td align="center">Content-Location</td>
<td align="center">返回数据的备用地址</td>
</tr>
<tr>
<td align="center">Content-MD5</td>
<td align="center">Base64加密格式的内容 MD5检验值</td>
</tr>
<tr>
<td align="center">Content-Range</td>
<td align="center">内容的位置范围</td>
</tr>
<tr>
<td align="center">Content-Type</td>
<td align="center">内容的媒体类型</td>
</tr>
<tr>
<td align="center">Expires</td>
<td align="center">内容的过期时间</td>
</tr>
<tr>
<td align="center">Last_modified</td>
<td align="center">内容的最后修改时间</td>
</tr>
</tbody></table>
]]></description><link>https://blog.gaoredu.com/article/e179dad9-4a16-4ca4-9636-5ed6f444e044</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e179dad9-4a16-4ca4-9636-5ed6f444e044</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2024 19:53:14 GMT</pubDate></item><item><title><![CDATA[【性能优化】CDN加速]]></title><description><![CDATA[<h1 id="cdn">CDN</h1>
<h2 id="1-描述一下cdn的概念和底层原理？">1. 描述一下CDN的概念和底层原理？</h2>
<h3 id="11-基本概念">1.1 基本概念</h3>
<blockquote>
<p>[!NOTE]
CDN（Content Delivery Network，内容分发网络）是构建在现有互联网基础之上的一层智能虚拟网络，通过在网络各处部署节点服务器，实现将源站内容分发至所有CDN节点，使用户可以就近获得所需的内容。CDN服务缩短了用户查看内容的访问延迟，提高了用户访问网站的响应速度与网站的可用性，解决了网络带宽小、用户访问量大、网点分布不均等问题。</p>
</blockquote>
<h3 id="12-加速原理">1.2 加速原理</h3>
<p>当用户访问使用CDN服务的网站时，本地DNS服务器通过CNAME方式将最终域名请求重定向到CDN服务。CDN通过一组预先定义好的策略(如内容类型、地理区域、网络负载状况等)，将当时能够最快响应用户的CDN节点IP地址提供给用户，使用户可以以最快的速度获得网站内容。使用CDN后的HTTP请求处理流程如下：</p>
<h4 id="121-cdn节点有缓存场景">1.2.1 CDN节点有缓存场景</h4>
<p><img src="../../img/cdncache.png" alt="cdncache"></p>
<ol>
<li>用户在浏览器输入要访问的网站域名，向本地DNS发起域名解析请求。</li>
<li>域名解析的请求被发往网站授权DNS服务器。</li>
<li>网站DNS服务器解析发现域名已经CNAME到了<a href="http://www.example.com.c.cdnhwc1.com%E3%80%82">www.example.com.c.cdnhwc1.com。</a></li>
<li>请求被指向CDN服务。</li>
<li>CDN对域名进行智能解析，将响应速度最快的CDN节点IP地址返回给本地DNS。</li>
<li>用户获取响应速度最快的CDN节点IP地址。</li>
<li>浏览器在得到速度最快节点的IP地址以后，向CDN节点发出访问请求。</li>
<li>CDN节点将用户所需资源返回给用户。</li>
</ol>
<h4 id="122-cdn节点无缓存场景">1.2.2 CDN节点无缓存场景</h4>
<p><img src="../../img/cdnnocahche.png" alt="无缓存"></p>
<ol>
<li>用户在浏览器输入要访问的网站域名，向本地DNS发起域名解析请求。</li>
<li>域名解析的请求被发往网站授权DNS服务器。</li>
<li>网站DNS服务器解析发现域名已经CNAME到了<a href="http://www.example.com.c.cdnhwc1.com%E3%80%82">www.example.com.c.cdnhwc1.com。</a></li>
<li>请求被指向CDN服务。</li>
<li>CDN对域名进行智能解析，将响应速度最快的CDN节点IP地址返回给本地DNS。</li>
<li>用户获取响应速度最快的CDN节点IP地址。</li>
<li>浏览器在得到速度最快节点的IP地址以后，向CDN节点发出访问请求。</li>
<li>CDN节点回源站拉取用户所需资源。</li>
<li>将回源拉取的资源缓存至节点。</li>
<li>将用户所需资源返回给用户。</li>
</ol>
<blockquote>
<p>[!NOTE]
名称解释：CNAME别名解析是将域名指向一个网址（域名）</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/edc6d868-516e-463f-8587-6e1197f63f2b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/edc6d868-516e-463f-8587-6e1197f63f2b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2024 09:00:48 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】观察者设计模式]]></title><description><![CDATA[<h1 id="js观察者模式">JS观察者模式</h1>
<blockquote>
<p>[!NOTE]
观察者模式:观察者模式（Observer mode）指的是函数自动观察数据对象，一旦对象有变化，函数就会自动执行。而js中最常见的观察者模式就是事件触发机制。</p>
</blockquote>
<p><a href="https://www.jianshu.com/p/10a20df72bf2">ES5/ES6实现观察者模式(自定义事件) - 简书</a></p>
<h3 id="先搭架子">先搭架子</h3>
<ol>
<li>要有一个对象，存储着它自己的触发函数。而且这个对象的触发函数可能有很多种，比如一个onclick可能触发多个事件，那么handler的属性应该是一个数组，每个数组的值都是一个函数。</li>
</ol>
<pre><code class="language-js">handler={
  type1:[func1,func2...],
  type2:[func3,func4...],
  ...
}</code></pre>
<ol start="2">
<li><p>现在这个对象的主体部分已经思考好了，现在就是要它‘动起来’，给它添加各种动作。
一个事件可能有哪些动作呢？</p>
<ul>
<li>add：添加事件某种类型的函数，</li>
<li>remove: 移除某种类型的函数，</li>
<li>fire：触发某种类型的函数,</li>
<li>once:触发某种类型的函数，然后移除掉这个函数</li>
</ul>
</li>
<li><p>现在，自定义事件的架子已经搭建好了</p>
</li>
</ol>
<pre><code class="language-js">eventOb={
  //函数储存
  handler:{
    type1:[func1,func2...],
    type2:[func2,func4...],
    ...
  },

  //主要事件
  add:function(){},
  remove:function(){},
  fire:function(){},
  once:function(){},
}</code></pre>
<h3 id="add">add</h3>
<p>添加一个事件监听，首先传入参数应该是 事件类型type，和触发函数 func，传入的时候检测有没有这个函数，有了就不重复添加。</p>
<pre><code class="language-js">add:function (type,func) {
  //检测type是否存在
  if(eventOb.handleFunc[type]){
    //检测事件是否存在，不存在则添加
    if(eventOb.handleFunc[type].indexOf(func)===-1){
      eventOb.handleFunc[type].push(func);
    }
  }
  else{
    eventOb.handleFunc[type]=[func];
  }
},</code></pre>
<h3 id="remove">remove</h3>
<p>remove有一个潜在的需求，就是如果你的事件不存在，它应该会报错。而这里不会报错，index在func不存在的时候是-1；这时候要报错。</p>
<pre><code class="language-js">remove:function (type,func) {
  try{
    let target = eventOb.handleFunc[type];
    let index = target.indexOf(func);
    if(index===-1) throw error;
    target.splice(index,1);
  }catch (e){
      console.error(&#39;别老想搞什么飞机，删除我有的东西！&#39;);
  }
},</code></pre>
<h3 id="fire">fire</h3>
<p>触发一个点击事件肯定是要触发它全部的函数，这里也是一样，所以只需要传入type，然后事件可能不存在，像上面一样处理。</p>
<pre><code class="language-js">fire:function (type,func) {
  try{
    let target = eventOb.handleFunc[type];
    let count = target.length;
    for (var i = 0; i &lt; count; i++) {
      //加()使立即执行
      target[i]();
    }    
  }
  catch (e){
    console.error(&#39;别老想搞什么飞机，触发我有的东西！&#39;);
  }
},</code></pre>
<h3 id="once">once</h3>
<p>fire，然后remove？</p>
<p>但会有问题，我只想触发并且删除某个事件怎么办，fire一下就全触发了呀。
所以fire的问题就显现出来了。我们还是要给它一个func，但是可选。</p>
<pre><code class="language-js">fire:function (type,func) {
  try{
    let target = eventOb.handleFunc[type];
    if(arguments.length===1) {
      //不传func则全部触发
      let count = target.length;
      for (var i = 0; i &lt; count; i++) {
          target[i]();
      }
    }else{
      //传func则触发func
      let index=target.indexOf(func);
      if(index===-1)throw error;
      func();
    }
    //need some code
  }catch (e){
    console.error(&#39;别老想搞什么飞机，触发我有的东西！&#39;);
    //need some code
  }
},</code></pre>
<h3 id="完整代码">完整代码</h3>
<pre><code class="language-js">class eventObs {
  constructor(){
    this.handleFunc={}
  }

  add(type,func){
    if(this.handleFunc[type]){
        if(this.handleFunc[type].indexOf(func)===-1){
            this.handleFunc[type].push(func);
        }
    }else{
        this.handleFunc[type]=[func];
    }
  };

  fire(type,func){
    try{
      if(arguments.length===1) {
          let target = this.handleFunc[type];
          let count = target.length;
          for (var i = 0; i &lt; count; i++) {
              target[i]();
          }
      }else{
          let target = this.handleFunc[type];
          let index=target.indexOf(func);
          if(index===-1)throw error;
          func();
      }
      return true;
    }catch (e){
        console.error(&#39;别老想搞什么飞机，触发我有的东西！&#39;);
        return false;
    }
  };

  remove(type,func){
      try{
          let target = this.handleFunc[type];
          let index=target.indexOf(func);
          if(index===-1)throw error;
          target.splice(index,1);
      }catch (e){
          console.error(&#39;别老想搞什么飞机，删除我有的东西！&#39;);
      }

  };

  once(type,func) {

    this.fire(type, func)
    ? this.remove(type, func)
    : null;
  }
}</code></pre>
<h1 id="使用es6的reflect来实现一个观察者模式">使用ES6的Reflect来实现一个观察者模式</h1>
<blockquote>
<p>[!NOTE]
<strong>函数(观察者)</strong>自动观察<strong>数据对象（观察的目标）</strong>，一旦对象发生变化，函数就会自动执行</p>
</blockquote>
<pre><code class="language-js">    // 观察者设计模式
    const queuedObservers = new Set();

    const observe = fn =&gt; queuedObservers.add(fn);
    const observable = obj =&gt; new Proxy(obj, {set});

    function set(target, key, value, receiver) {
      const result = Reflect.set(target, key, value, receiver);
      queuedObservers.forEach(observer =&gt; observer());
      return result;
    }


    // test
    const person = observable({
      name: &#39;张三&#39;,
      age: 20
    });

    function print() {
      console.log(`${person.name}, ${person.age}`)
    }

    observe(print);
    person.name = &#39;李四&#39;;
    // 输出
    // 李四, 20</code></pre>
]]></description><link>https://blog.gaoredu.com/article/bae09cdd-6438-431b-aecd-4d1f973bef23</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bae09cdd-6438-431b-aecd-4d1f973bef23</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 14 Jan 2024 04:54:27 GMT</pubDate></item><item><title><![CDATA[【JS相关】移动端和Hybrid]]></title><description><![CDATA[<h1 id="移动端和hybrid">移动端和Hybrid</h1>
<h2 id="1hybrid是什么，为何使用hybrid呢？">1.hybrid是什么，为何使用hybrid呢？</h2>
<ol>
<li>概念：<ul>
<li>hybrid就是前端和客户端的混合开发</li>
<li>需要前端开发人员和客户端开发人员配合完成</li>
<li>某些环节也可能会涉及到server端</li>
<li>大前端：网页、APP、前端和server端交互的过程</li>
</ul>
</li>
<li>存在价值：<ul>
<li>可以快速迭代更新【关键】，无需APP审核（hybrid技术可以一天上线多次）</li>
<li>体验流畅（和Native开发的体验基本类似）</li>
<li>减少开发和沟通成本，双端公用一套代码    </li>
</ul>
</li>
<li>webview：<ul>
<li>是APP中的一个组价（App可以有Webview，也可以么有）</li>
<li>主要用于加载H5页面，是一个小型的浏览器内核</li>
</ul>
</li>
<li>file:// 协议<ul>
<li>file协议: 本地文件，快</li>
<li>http(s): 网络加载、慢<ul>
<li>扩展知识：Web标准都有哪些呢？</li>
</ul>
</li>
</ul>
</li>
</ol>
<h2 id="2hybrid的具体实现流程？">2.hybrid的具体实现流程？</h2>
<h3 id="21-使用场景">2.1 使用场景</h3>
<ol>
<li>不是所有场景都适合使用hybrid</li>
<li>使用NA： 体验要求极致，变化不频繁（如头条的首页）</li>
<li>使用hybrid：体验要求高，变化频繁（如头条的新闻详情页面）</li>
<li>使用H5： 体验无要求，不常用（如举报、反馈等页面）</li>
</ol>
<h3 id="22-具体实现">2.2 具体实现</h3>
<ol>
<li>前端做好静态页面（HTML，CSS，JS），将文件交给客户端</li>
<li>客户端拿到前端静态页面，以文件形式存储在APP中</li>
<li>客户端在一个Webview中</li>
<li>使用file协议加载本地静态文件</li>
</ol>
<h2 id="3介绍一下hybrid更新和上线的流程？">3.介绍一下hybrid更新和上线的流程？</h2>
<h3 id="31-优点">3.1 优点</h3>
<ol>
<li>用户体验更好，跟NA体验基本一致</li>
<li>可以快速迭代，无需app审核 【关键】</li>
</ol>
<h3 id="32-缺点：">3.2 缺点：</h3>
<ol>
<li>开发成本高：联调、测试、查bug都比较麻烦</li>
<li>运维成本高。（平台维护）</li>
</ol>
<h3 id="33-适用场景：">3.3 适用场景：</h3>
<ol>
<li>hybrid：产品的稳定功能，用户体验高，迭代频繁</li>
<li>H5：单词的运营活动（如XX红包），或不常用的功能  </li>
</ol>
<h2 id="4前端js和客户端如何通讯？">4.前端JS和客户端如何通讯？</h2>
<ol>
<li>类似于JSONP的数据请求方式</li>
<li>schema协议的简介和使用</li>
<li>通讯的基本形式：调用能力，传递参数监听回调</li>
<li>对schema协议的理解和使用</li>
<li>调用schema代码的封装</li>
<li>内置上线的好处：更快、更安全</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/a12e5936-bf10-4047-8a27-2bf7eb289d2e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a12e5936-bf10-4047-8a27-2bf7eb289d2e</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 06 Jan 2024 07:56:24 GMT</pubDate></item><item><title><![CDATA[【NodeJS相关】面试题]]></title><description><![CDATA[<h1 id="面试题">面试题</h1>
<h2 id="1-为什么javascript是单线程？">1. 为什么JavaScript是单线程？</h2>
<ul>
<li>防止DOM渲染冲突的问题；</li>
<li>Html5中的Web Worker可以实现多线程</li>
</ul>
<h2 id="2什么是任务队列？">2.什么是任务队列？</h2>
<blockquote>
<p>任务队列&quot;是一个先进先出的数据结构，排在前面的事件，优先被主线程读取。主线程的读取过程基本上是自动的，只要执行栈一清空，&quot;任务队列&quot;上第一位的事件就自动进入主线程。</p>
</blockquote>
<h3 id="21-同步和异步任务">2.1 同步和异步任务</h3>
<ol>
<li>同步任务指的是，在主线程上排队执行的任务，只有前一个任务执行完毕，才能执行后一个任务；</li>
<li>异步任务指的是，不进入主线程、而进入&quot;任务队列&quot;（task queue）的任务，只有&quot;任务队列&quot;通知主线程，某个异步任务可以执行了，该任务才会进入主线程执行。</li>
</ol>
<h3 id="22-执行流程">2.2 执行流程</h3>
<ol>
<li>所有同步任务都在主线程上执行，形成一个执行栈（execution context stack）。</li>
<li>主线程之外，还存在一个&quot;任务队列&quot;（task queue）。只要异步任务有了运行结果，就在&quot;任务队列&quot;之中放置一个事件。</li>
<li>一旦&quot;执行栈&quot;中的所有同步任务执行完毕，系统就会读取&quot;任务队列&quot;，看看里面有哪些事件。那些对应的异步任务，于是结束等待状态，进入执行栈，开始执行。</li>
<li>主线程不断重复上面的第三步。</li>
</ol>
<h2 id="3-什么是事件循环（eventloop）？">3. 什么是事件循环（EventLoop）？</h2>
<blockquote>
<p>主线程从&quot;任务队列&quot;中读取事件，这个过程是循环不断的，所以整个的这种运行机制又称为Event Loop（事件循环）。</p>
</blockquote>
<h3 id="31-定时器函数的基本使用方法对比？">3.1 定时器函数的基本使用方法对比？</h3>
<ul>
<li>setTimeout ： 只是将事件插入了&quot;任务队列&quot;，必须等到当前代码（执行栈）执行完，主线程才会去执行它指定的回调函数</li>
<li>process.nextTick ： 在当前&quot;执行栈&quot;的尾部----下一次Event Loop（主线程读取&quot;任务队列&quot;）之前----触发回调函数。（所有的异步任务被触发之前执行）</li>
<li>setImmediate：在当前&quot;任务队列&quot;的尾部添加事件，也就是说，它指定的任务总是在下一次Event Loop时执行，这与setTimeout(fn, 0)很像。</li>
</ul>
<h3 id="32-setimmediate和settimeout-哪个回调函数先执行呢？">3.2 setImmediate和setTimeout 哪个回调函数先执行呢？</h3>
<pre><code class="language-js">setImmediate(function (){
setImmediate(function A() {
  console.log(1);
  setImmediate(function B(){console.log(2);});
});

setTimeout(function timeout() {
  console.log(&#39;TIMEOUT FIRED&#39;);
}, 0);
});
// 1
// TIMEOUT FIRED
// 2</code></pre>
<blockquote>
<p>[!NOTE]
上面代码中，setImmediate和setTimeout被封装在一个setImmediate里面，它的运行结果总是1--TIMEOUT FIRED--2，这时函数A一定在timeout前面触发。至于2排在TIMEOUT FIRED的后面（即函数B在timeout后面触发），是因为setImmediate总是将事件注册到下一轮Event Loop，所以函数A和timeout是在同一轮Loop执行，而函数B在下一轮Loop执行。</p>
</blockquote>
<h3 id="33-processnexttick和setimmediate的区别？">3.3 process.nextTick和setImmediate的区别？</h3>
<p>多个process.nextTick语句总是在当前&quot;执行栈&quot;一次执行完，多个setImmediate可能则需要多次loop才能执行完。</p>
<h2 id="4-说一下nodejs的运行机制？">4. 说一下NodeJS的运行机制？</h2>
<ol>
<li>V8引擎解析JavaScript脚本。</li>
<li>解析后的代码，调用Node API。</li>
<li>libuv库负责Node API的执行。它将不同的任务分配给不同的线程，形成一个Event Loop（事件循环），以异步的方式将任务的执行结果返回给V8引擎。</li>
<li>V8引擎再将结果返回给用户。</li>
</ol>
<h2 id="5-node创建线程的方法和区别？">5. Node创建线程的方法和区别？</h2>
<h3 id="51-node的单线程">5.1 Node的单线程</h3>
<ol>
<li><p>Node.js 是以单线程的模式运行的，但它使用的是事件驱动来处理并发，这样有助于我们在多核 cpu 的系统上创建多个子进程，从而提高性能。</p>
</li>
<li><p>每个子进程总是带有三个流对象：child.stdin, child.stdout 和child.stderr。他们可能会共享父进程的 stdio 流，或者也可以是独立的被导流的流对象。</p>
</li>
<li><p>Node 提供了 child_process 模块来创建子进程</p>
</li>
</ol>
<h3 id="52-创建进程的方法">5.2 创建进程的方法</h3>
<ol>
<li><p><strong>exec - child_process.exec</strong> 使用子进程执行命令，缓存子进程的输出，并将子进程的输出以回调函数参数的形式一次性返回。exec方法会从子进程中返回一个完整的buffer。默认情况下，这个buffer的大小应该是200k。如果子进程返回的数据大小超过了200k，程序将会崩溃，同时显示错误信息“Error：maxBuffer exceeded”。你可以通过在exec的可选项中设置一个更大的buffer体积来解决这个问题，但是你不应该这样做，因为exec本来就不是用来返回很多数据的方法。</p>
</li>
<li><p><strong>spawn - child_process.spawn</strong> 使用指定的命令行参数创建新进程。spawn 会返回一个带有stdout和stderr流的对象。你可以通过stdout流来读取子进程返回给Node.js的数据。stdout拥有’data’,’end’以及一般流所具有的事件。当你想要子进程返回大量数据给Node时，比如说图像处理，读取二进制数据等等，你最好使用spawn方法。</p>
</li>
<li><p><strong>fork - child_process.fork</strong> 是 spawn()的特殊形式，用于在子进程中运行的模块，如 fork(‘./son.js’) 相当于 spawn(‘node’, [‘./son.js’]) 。与spawn方法不同的是，fork会在父进程与子进程之间，建立一个通信管道，用于进程之间的通信。</p>
</li>
</ol>
<h3 id="53-实例分析">5.3 实例分析</h3>
<h4 id="531-exec">5.3.1 exec</h4>
<pre><code class="language-js">  require(&#39;child_process&#39;).exec(&#39;dir&#39;, {encoding: ‘utf-8’}, function(err, stdout, stderr) {
      if (err) {
          console.log(error.stack);
          console.log(&#39;Error code: &#39; + error.code);
          console.log(&#39;Signal received: &#39; + error.signal);
      }
      //console.log(err, stdout, stderr);
      console.log(&#39;data : &#39; + stdout);
  }).on(&#39;exit&#39;, function (code) {
      console.log(&#39;子进程已退出, 退出码 &#39; + code);
  });</code></pre>
<h4 id="532-spawn">5.3.2 spawn</h4>
<pre><code class="language-js">  var child_process = require(&#39;child_process&#39;);
  var spawnObj = child_process.spawn(&#39;ping&#39;, [&#39;127.0.0.1&#39;], {encoding: &#39;utf-8&#39;});
  spawnObj.stdout.on(&#39;data&#39;, function(chunk) {
      console.log(chunk.toString());
  });
  spawnObj.stderr.on(&#39;data&#39;, (data) =&gt; {
    console.log(data);
  });
  spawnObj.on(&#39;close&#39;, function(code) {
      console.log(&#39;close code : &#39; + code);
  }
  spawnObj.on(&#39;exit&#39;, (code) =&gt; {
      console.log(&#39;exit code : &#39; + code);
      fs.close(fd, function(err) {
          if(err) {
              console.error(err);
          }
      });
  });</code></pre>
<h4 id="533-fork">5.3.3 fork</h4>
<blockquote>
<p>分为 “父进程”（parent.js） 和”子进程”（child.js）。在命令行执行的时候要切换到上述文件的目录中，否则会找不到子进程。</p>
</blockquote>
<p>parent.js</p>
<pre><code class="language-js">  console.log(&#39;parent pid: &#39; + process.pid);
  var fork = require(&#39;child_process&#39;).fork;
  //fork方法返回的是子进程
  var child = fork(&#39;./child.js&#39;);
  console.log(&#39;fork return pid: &#39; + child.pid);
  child.on(&#39;message&#39;, function(msg){
      console.log(&#39;parent get message: &#39; + JSON.stringify(msg));
  });
  child.send({key: &#39;parent value&#39;});</code></pre>
<p>child.js</p>
<pre><code class="language-js">  console.log(&#39;child pid: &#39; + process.pid);
  process.on(&#39;message&#39;, function(msg){
      console.log(&#39;child get message: &#39; + JSON.stringify(msg));
  });
  process.send({key: &#39;child value&#39;});</code></pre>
<h2 id="6-介绍一下express或koa框架的基本架构？">6. 介绍一下express或koa框架的基本架构？</h2>
<ol>
<li><p>Express 是一个Node.js的基础框架，主要基于 Connect 中间件，并且自身封装了路由(需要配合bodyParser)、视图处理等功能，使用人数众多，弊端是callback回调方式。</p>
</li>
<li><p>Koa 是一个比Express更精简，使用node新特性的中间件框架。其提供的是一个架子，而几乎所有的功能都需要由第三方中间件完成，比如koa-router, koa-view等。</p>
</li>
</ol>
<blockquote>
<p>[!NOTE]
Koa 利用 co 作为底层运行框架，利用 Generator 的特性，实现“无回调”的异步处理</p>
</blockquote>
<h3 id="61-处理路由">6.1 处理路由</h3>
<h4 id="611-express">6.1.1 Express</h4>
<blockquote>
<p>[!NOTE]
使用 express.Router 类来创建可安装的模块化路由处理程序。Router 实例是完整的中间件和路由系统，以下示例将路由器创建为模块，在其中装入中间件，定义一些路由，然后安装在主应用程序的路径中。</p>
</blockquote>
<pre><code class="language-js">  var express = require(&#39;express&#39;);
  var router = express.Router();
  router.use(function timeLog(req, res, next) {
    console.log(&#39;Time: &#39;, Date.now());
    next();
  });
  // define the home page route
  router.get(&#39;/&#39;, function(req, res) {
    res.send(&#39;Birds home page&#39;);
  });
  // define the about route
  router.get(&#39;/about&#39;, function(req, res) {
    res.send(&#39;About birds&#39;);
  });

  module.exports = router;</code></pre>
<p>接着，在应用程序中装入路由器模块：</p>
<pre><code class="language-js">  var routes = require(&#39;./route&#39;);
  ...
  app.use(&#39;/route&#39;, routes);</code></pre>
<h4 id="612-koa">6.1.2 Koa</h4>
<p>路由处理 Express 是自身集成的，而 Koa 需要引入中间件</p>
<pre><code class="language-js">var koa = require(&#39;koa&#39;)
var route = require(&#39;koa-route&#39;) //中间件
var app = koa()
app.use(route.get(&#39;/&#39;, function *(){
  this.body = &#39;Hello World&#39;
}))</code></pre>
<h3 id="62-http-request">6.2 HTTP Request</h3>
<blockquote>
<p>[!NOTE]
两个框架都封装了HTTP Request对象，有一点不同是 Koa v1 使用 this 取代 Express 的 req、res。</p>
</blockquote>
<h4 id="621-express">6.2.1 Express</h4>
<pre><code class="language-js">  var app = require(&#39;express&#39;)()
  app.get(&#39;/room/:id&#39;, function (req, res) {
    console.log(req.params)
  })
  // 获取POST数据需要 body-parser 中间件
  var bodyParser = require(&#39;body-parser&#39;)
  app.use(bodyParser.json())
  app.post(&#39;/sendgift&#39;, function (req, res) {
    console.log(req.body)
  })</code></pre>
<h4 id="622-koa">6.2.2 Koa</h4>
<pre><code class="language-js">  var app = require(&#39;koa&#39;)()
  var route = require(&#39;koa-route&#39;)

  app.use(route.get(&#39;/room/:id&#39;, function *() {
    console.log(this.req.query)
  }))

  // 获取POST数据需要 co-body 中间件
  var parse = require(&#39;co-body&#39;)
  app.use(route.post(&#39;/sendgift&#39;, function *() {
    var post = yield parse(this.request)
    console.log(post)
  }))</code></pre>
<h3 id="63-区别">6.3 区别</h3>
<h4 id="631-异步流程控制">6.3.1 异步流程控制</h4>
<p>Express 采用 callback 来处理异步，Koa v1 采用 generator，Koa v2 采用 async/await。</p>
<h3 id="632-错误处理">6.3.2 错误处理</h3>
<p>Express 使用 callback 捕获异常，对于深层次的异常捕获不了，
Koa 使用 try catch，能更好地解决异常捕获。</p>
<pre><code class="language-js">  // Express callback
  app.use(function (err, req, res, next) {
    console.error(err.stack)
    res.status(500).send(&#39;Something broke!&#39;)
  })
  // Koa generator
  app.use(function *(next) {
    try {
      yield next
    } catch (err) {
      this.status = err.status || 500
      this.body = { message: err.message }
      this.app.emit(&#39;error&#39;, err, this)
    }
  })
  // Koa async/await
  app.use(async (ctx, next) =&gt; {
    try {
      await next()
    } catch (err) {
      ctx.status = err.status || 500
      ctx.body = { message: err.message }
      ctx.app.emit(&#39;error&#39;, err, this)
    }
  })</code></pre>
<h2 id="633-中间件处理">6.3.3 中间件处理</h2>
<ol>
<li><p>Express中app.use就是往中间件数组中塞入新的中间件，中间件处理方式是线性的，next过后继续寻找下一个中间件。 一个请求进来经过一系列中间件处理后再响应给用户，清晰明了。</p>
</li>
<li><p>缺点：基于 callback 组合业务逻辑，业务逻辑复杂时嵌套过多，异常捕获困难。</p>
</li>
<li><p>Koa的中间件处理方式是一个洋葱模型，koa处理完中间件后还会回来走一趟，这就给了我们更加大的操作空间。</p>
</li>
</ol>
<pre><code class="language-js">  const Koa = require(&#39;koa&#39;);
  const app = new Koa();

  // x-response-time
  app.use(async (ctx, next) =&gt; {
    const start = Date.now();
    await next();
    const ms = Date.now() - start;
    ctx.set(&#39;X-Response-Time&#39;, `${ms}ms`);
  });

  // logger
  app.use(async (ctx, next) =&gt; {
    const start = Date.now();
    await next();
    const ms = Date.now() - start;
    console.log(`${ctx.method} ${ctx.url} - ${ms}`);
  });

  // response
  app.use(async ctx =&gt; {
    ctx.body = &#39;Hello World&#39;;
  });</code></pre>
<blockquote>
<p>[!NOTE]
当koa处理中间件遇到await next()的时候会暂停当前中间件进而处理下一个中间件，最后再回过头来继续处理剩下的任务</p>
</blockquote>
]]></description><link>https://blog.gaoredu.com/article/cf0d58bd-65f9-464b-9227-3f4cc7049665</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cf0d58bd-65f9-464b-9227-3f4cc7049665</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 05 Jan 2024 23:47:45 GMT</pubDate></item><item><title><![CDATA[【面经系列】头条面经]]></title><description><![CDATA[<h1 id="头条面经系列">头条面经系列</h1>
<ol>
<li>写一个深度拷贝</li>
<li>cdn原理</li>
<li>尾递归</li>
<li>状态码304 和 2005.null == undefined 为什么</li>
<li>不同数据类型的值的比较，是怎么转换的，有什么规则</li>
<li>jit;jc我不知道是什么</li>
<li>float的元素，display是什么</li>
<li>暂停死区</li>
<li>bootstrap清除浮动的方法</li>
<li>this的指向 哪几种</li>
<li>看一下github</li>
<li>Redis 和 mysql</li>
<li>AngularJS 双向绑定原理</li>
<li>TCP连接，一个包丢了会怎么处理，拥塞控制</li>
<li>HTTP缓存了解吗？如果服务端想更新一个强制缓存，有什么解决方案？</li>
<li>websocket了解吗？</li>
<li>用vue有哪些有点？双向数据绑定原理</li>
<li>路由原理</li>
<li>算法题：写个二叉树，实现插入、前中后任意一种遍历</li>
<li>算法题：基本类型（非引用）数组去重</li>
<li>写个VUE的拖拽组件（vue的api徒手撸不出来，写了个原生的拖拽，不记得属性名用了伪代码，末了加了个节流）</li>
<li>好像有问到VUEX和VUE的双向绑定？（不记得一面有没有问后者了）</li>
<li>让介绍下promise，写了写promise的代码</li>
<li>介绍下promise还有什么api，说了下all，说了race这个api，但是名字一下子想不起来了</li>
<li>让实现一下all，当时忘了（不知道）可以用计数法，写了个setInterval的...</li>
<li>问线性表和链表的区别</li>
<li>写个链表反转，说了可以用递归和非递归，非递归版本写了半天，貌似写的还有bug，写完之后意犹未尽打算写递归版的，面试官说好了就这样吧</li>
<li>JS类型判断</li>
<li>typeof可以检测的类型:string，boolean，number，function，object，undefined es6的symbol</li>
<li>curry的实现</li>
<li>线程与进程，空间分配、资源分配等等</li>
<li>三次握手、四次挥手及标志位、time-wait等等</li>
<li>H5的新特性，语义化</li>
<li>BOM与DOM，及BOM相关的一些属性</li>
<li>写代码：双向绑定、防抖和节流</li>
<li>设计模式：发布订阅、观察者</li>
<li>先聊了一通项目，问了我 decorator 的实现原理，扯了一大堆，感觉良好。</li>
<li>如何判断是不是完全二叉树（没答出来）</li>
<li>编程题：判断一个链表是否有环</li>
<li>一道考异步执行顺序的题，只要了解micro task 和 macro task 应该就可以答出来</li>
<li>编程题：写个函数反转字符串</li>
<li>TCP 握手，分手，拥塞控制，流量控制</li>
<li>https的原理</li>
<li>DHCP 的实现基于啥协议（UDP）</li>
<li>Vue 的双向绑定实现原理</li>
<li>Vue 如何监听一个不会触发 render 的数据</li>
<li>ES6的扩展： ?</li>
<li>基本类型的扩展，比如数值扩展，函数扩展啊，比如剪头函数等等，然后还有Proxy,Reflect,Promise,class,生成器函数，async/await等等，当然他就问Proxy对象能拦截什么，我说总共13个吧，但是我不一定写得全，然后随手就写了，get，set，deleteProperty, has, getPrototypeOf, defineProperty ，....</li>
<li>如果阻塞了JS中的主线程会发生什么情况?</li>
<li>使用发布订阅模式实现一个EventEmitter?</li>
<li>PureComponent，flex布局以及一些css的东西，比如水平垂直居中等</li>
<li>讲讲ES6的箭头函数</li>
<li>await和async 本质</li>
<li>类数组转化成数组的方法</li>
<li>代码题，异步执行的顺序，宏观任务任务理解，promise、setTimeout等，让你写出输出的顺序</li>
<li>http缓存头部相关，Etag过程，cache-control的参数</li>
<li>代码题，思路是将一个嵌套的数组用深度遍历和广度遍历分别写出来</li>
<li>http请求方法有哪些？</li>
<li>跨域问题遇过吗？什么办法可以解决？讲了一下cors，jsonp，websocket，postmessage，反向代理等</li>
<li>讲一下前端安全？xss，csrf，说一下他们具体是什么，如何预防？</li>
<li>TCP连接和断开过程（三次招手，四次挥手）</li>
<li>cookie localStorage sessionStorage有什么区别？</li>
<li>https和http有什么区别？（TLS套接层协议）</li>
<li>如果登陆的请求是https，而其它的请求是http的会出现什么问题？（一开始答了跨域的问题，后来想了一下，答了cookie会加密，可能导致其它请求无法通过身份验证）</li>
<li>最后面试官问我接触过redux吗？我说没有我学的是vue，应该是react里面的状态管理工具，相当于vuex</li>
<li>TCP 协商流程&amp;断开流程</li>
<li>讲一下什么是 prototype</li>
<li>一个矩形，水平垂直居中，且宽高比为 2:1</li>
<li>Vue 双向数据绑定实现（问的很细）</li>
<li>node用过吗，electron了解吗</li>
<li>有没有使用过css3动画，介绍一下,怎么做，关键是怎么做的CSS</li>
<li>单行文本溢出，多行文本溢出把代码实现写出来</li>
<li>bfc布局是什么</li>
<li>js类型，封装一个类型鉴定函数</li>
<li>闭包，平时在哪用到？  立即执行函数解决闭包中访问变量的问题</li>
<li>事件轮训机制</li>
<li>原生js实现bind函数</li>
<li>一个函数，然后让你说他们的值是多少，为什么，预编译，严格模式，作用域链</li>
<li>浏览器渲染原理</li>
<li>说说你做了什么项目，用了什么技术栈？</li>
<li>为什么要使用Redux，是不是所有项目都必须要使用Redux？</li>
<li>你觉得mongoose有什么作用？</li>
<li>如何判断一个IP是不是国内IP？</li>
<li>如何判断一个对象是不是空对象？</li>
<li>0.1+0.2 == 0.3？原因？</li>
<li>在线编程，getUrlParams(url,key); 就是很简单的获取url的某个参数的问题，但要考虑边界情况，多个返回值等等</li>
<li>POST一般可以发送什么类型的文件</li>
<li>说一说你了解的express中间件</li>
<li>git使用过吗？用过哪些指令？git具体工作流是什么？</li>
<li>算法：链表反序输出，不再申请内存空间</li>
<li>Number()的存储空间是多大，如果后台发送了一个超过最大字节的数字怎们办</li>
<li>垂直居中实现方法</li>
<li>跨域、jsonp原理、CORS原理</li>
<li>Proxy</li>
<li>Promise原理</li>
<li>浏览器请求数据问题，请求数据到请求结束与服务器进行了几次交互</li>
<li>TCP为什么要四次挥手</li>
<li>cookie有哪些属性、大小、浏览器如何禁止别人访问cookie</li>
<li>localStorage，sessionStorage的区别。</li>
<li>display:none,visibility:hidden,opactiy:0的区别。</li>
<li>BFC，如何形成BFC</li>
<li>BFC与IFC的区别</li>
<li>BFC会与float元素相互覆盖吗？为什么？举例说明</li>
<li>回流与重绘，如何避免回流</li>
<li>git merge、git rebase的区别</li>
<li>js脚本加载问题，async、defer问题</li>
<li>antd源码相关，使用什么语言写的，按需加载实现</li>
<li>设计模式，有哪些设计模式</li>
<li>在交互过程中如果数据传送完了，还不想断开连接怎么办，怎么维持</li>
<li>websocket与ajax的区别</li>
<li>fetch API与传统request的区别</li>
<li>懒加载的节流和防抖，代码实现，并说明原理去区别还有使用场景</li>
<li>css垂直居中，不定宽高和定宽高的2种实现办法</li>
<li>写一个继承吧，组合继承，然后说出寄生组合继承相对于组合继承的优点</li>
<li>ajax和后台对接传数据如何实现，中间需要注意什么细节，get还是post</li>
<li>es6有学过吗？说一下你了解哪几个，我详细说了let var const的区别各种使用办法</li>
<li>promise有用过吗？他是干啥的？你会在啥场景使用他，promise如何解决回凋地狱？如何和ajax配合？</li>
<li>em和rem如何适配？有啥区别？还有其他适配的办法吗？</li>
<li>前端性能如何优化列举几种吧</li>
<li>你有canvas的经验，你可以大概说一下如何实现一个普通canvas的过程吗？可以写一下吗？</li>
<li>Css 写一个正方形，大小是父级的一半</li>
<li>写函数任意标签转成json文件</li>
<li>抛硬币问题 先抛的人赢的概率</li>
<li>ssr和前后端分离的区别</li>
<li>h5兼容问题</li>
<li>list的无限滚动---节流</li>
<li>align-center中ios8的问题-webkit-align-item: center</li>
<li>算法：数组中map和reduce，如何用reduce实现map</li>
<li>算法：打平数组和规定深度的打平数组</li>
<li>浏览器的渲染机制，为什么使用Virtual DOM，直接操作DOM的弊端是什么？</li>
<li>setTimeOut和promise区别</li>
<li>实现一定时间内事件只触发一次</li>
<li>实现队列函数（先进先出），以实现一次100秒后打印出1，200秒后打印2，300秒后打印3这样</li>
<li>实现类似于模板字符串的功能</li>
<li>常用的块级元素和行内元素有哪些</li>
<li>块级元素的特点</li>
<li>img是什么类型的元素</li>
<li>说一下你了解的浮动</li>
<li>为什么要清除浮动？举个实际场景</li>
<li>说一下你了解的盒模型</li>
<li>css3用过什么</li>
<li>box-sizing的各个属性有什么区别</li>
<li>float和position一起用是什么效果</li>
<li>rem用过吗？做不同手机的适配怎么做？</li>
<li>写个二分查找</li>
<li>箭头函数特点？</li>
<li>vue的双向绑定和依赖收集</li>
<li>vuex是做什么的？缺点？</li>
<li>cookie和session区别？</li>
<li>讲一下登录验证全过程（涉及session）</li>
<li>webpack3升级到4为什么会提升速度？</li>
<li>webpack优化有哪些？</li>
<li>多文件上传</li>
<li>项目里动态建表性能有点低（操作dom次数太多），有什么优化方案？（设置display：none的class，最后统一去除，减少重排）还有别的办法么？（innerhtml）</li>
<li>扑克牌，一张放桌上一张放牌底，直到手中牌全部发完。给出桌上牌的顺序，求最开始时候手中牌的顺序（用了递归，被说性能不好）</li>
<li>html转vdom结构</li>
<li>用css实现一个模态窗口，要从窗口下面向上弹的动画</li>
<li>问一些css的单位比如rem，em，问css的布局方式，就是只用盒子模型布局，position的布局，flex布局，grid布局等等</li>
<li>tcp在哪一层？让你实现一个基于tcp协议之上的协议，你怎么实现。（其实就是实现一个http协议，问的相当细了，近20分钟都在讨论这道题）</li>
<li>webpack打包产物是怎样的，到底是为了什么，优化了什么，为什么要合并文件？</li>
<li>vue的diff是为什么，浏览器重绘重排前会diff吗，为什么？</li>
<li>实现一个单行容器内：左边一行文字，右边一个btn，文字边长过程中，不会把btn挤下去，而是文字超出省略</li>
<li><a href="mailto:vue@3.0">vue@3.0</a>中的preset配置？</li>
<li>父组件A和其子组件B/子组件C，B/C进行通信的方式</li>
<li>组件中eventbus的实现</li>
<li>组件如何设置并被使用</li>
<li>如何来创建多个项目？</li>
<li>多个组件$message如何实现最后触发的在最上面</li>
<li>如何实现在图片被加载之前的占位符一个image，宽高比16:9</li>
<li>H5中边框为1px的设置</li>
<li>.div 和div &gt; div &gt; div的优先级</li>
<li>给定一个字符串如下，请统计字符串中出现最多的字母和次数</li>
<li>给页面注入50万个li怎么做提升性能？</li>
<li>fileReader用过吗？base64编码原理？</li>
<li>setTimeout一定会按时执行吗？</li>
<li>http有哪些方法？option是做什么的？</li>
<li>你一般用的MIME类型有哪些？</li>
<li>让我用css实现一个硬币旋转的效果</li>
<li>又让我用canvas写个在页面上可以拖拽的球。</li>
<li>问了我事件委托以及冒泡原理。</li>
<li>写个函数，可以转化下划线命名到驼峰命名，我用split写了下，然后面试官又让我用正则写了一下。</li>
<li>写一个函数可以实现深拷贝</li>
<li>让用defineProperty实现一个双向绑定，defineProperty的api记不清了，和面试官说明了下，其他的基本写出来了</li>
<li>缓存命中率的问题，怎样确保缓存全部数据，缓存命中率不是100%应该怎么办</li>
<li>说说性能优化的通用架构方案</li>
<li>请求优化和渲染优化的方法</li>
<li>数据类型转换的原理</li>
<li>编程，5个feach请求，请求完成后要求立即执行，但最终的输出顺序要按照要求输出ABCDE（思路是：将每个feach的回调通过a/a的方式输出，但最后没有run出来）</li>
<li>简单介绍一下 body-parser 的作用和原理（没答好）</li>
<li>基于 http 模块，写一个 http server，并且处理 POST 请求</li>
<li>跨域相关的问题</li>
<li>介绍CSRF。CSRF会不会有跨域的问题（不会，这里涉及到跨域的一些原理，跨域请求会被后端接口执行，但是返回的时候会被浏览器拦截）</li>
<li>希望 全栈还是专注做 Node.js</li>
<li>基于你学的信息安全专业你对现在的 web 安全有什么看法，有什么改进意见（没有看法。。。）</li>
<li>问了下进程间通信，我答了管道，信号量以及共享内存（应该还有消息队列，信号，套接字）</li>
<li>编码过程为什么使用虚拟地址而不是物理地址，这个直接说不会了。</li>
<li>给了图，问css实现，大概是五个li，宽高固定，竖直方向间距固定，要求水平方向间距由剩余宽度均分</li>
<li>能否用标准盒模型实现ie盒模型</li>
<li>比较了一下null==undefined，1==‘1’</li>
<li>实现 检查二叉树中是否存在一条路径，使路径上节点和等于给出值</li>
</ol>
]]></description><link>https://blog.gaoredu.com/article/bef06886-c767-45c6-ba5d-8d46ff04bfe3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bef06886-c767-45c6-ba5d-8d46ff04bfe3</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 04 Jan 2024 16:06:18 GMT</pubDate></item><item><title><![CDATA[【编程题与分析题】深浅拷贝]]></title><description><![CDATA[<h3 id="浅拷贝">浅拷贝</h3>
<p>浅拷贝是拷贝第一层的拷贝</p>
<p>使用<code>Object.assign</code>解决这个问题。</p>
<pre><code class="language-js">let a = {
  age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1</code></pre>
<p>通过展开运算符 <code>...</code> 来实现浅拷贝</p>
<pre><code class="language-js">let a = {
  age: 1
}
let b = {...a};
a.age = 2;
console.log(b.age)  // 1</code></pre>
<h3 id="深拷贝">深拷贝</h3>
<p>简单的做法：<code>JSON.parse(JSON.stringfy(obj))</code>
但是该方法也是有局限性的：</p>
<ul>
<li>会忽略<code>undefined</code></li>
<li>会忽略<code>symbol</code>  </li>
<li>会忽略函数   </li>
<li>不能解决循环引用的对象 （会抱错）</li>
</ul>
<p>如果你所需拷贝的对象含有内置类型并且不包含函数，可以使用 <a href="https://www.jianshu.com/p/4f07ef18b5d7"><code>MessageChannel</code></a></p>
<p><strong>自封装深拷贝</strong>
思路：</p>
<ol>
<li>使用for-in遍历对象</li>
<li>因为for-in会遍历原型链上的属性，所以需要判断属性是否在原型链上，不是原型链才拷贝</li>
<li>判断属性值类型是原始类型和引用类型</li>
<li>原始类型直接赋值（注意null）</li>
<li>引用类型判断是对象还是数组，<strong>创建对应的空对象或空数组</strong>，递归调用函数，将值赋值进去</li>
</ol>
<pre><code class="language-js">/**
 * 深度克隆
 * @param   origin 被拷贝的原对象
 * @param   target 拷贝出来的对象
 * @return         拷贝出来的对象
 */
function deepClone(origin, target) {
  target = target || {};
  for(let prop in origin) {   //使用 for-in
    if(origin.hasOwnProperty(prop)) { //是原型链上的
      if(typeof(origin[prop]) === &#39;object&#39; &amp;&amp; origin[prop] ) { //是对象
        // 先判断是不是数组
        if(origin[prop] instanceof Array) {
          target[prop] = [];
          deepClone(origin[prop], target[prop]);
        }
        target[prop] = {};
        deepClone(origin[prop], target[prop]);
      } 
      else {
        target[prop] = origin[prop];
      }
    }
  }
  return target;
}


//使用递归的方式实现数组、对象的深拷贝
function deepClone1(obj) {
  //判断拷贝的要进行深拷贝的是数组还是对象，是数组的话进行数组拷贝，对象的话进行对象拷贝
  var objClone = Array.isArray(obj) ? [] : {};
  //进行深拷贝的不能为空，并且是对象或者是
  if (obj &amp;&amp; typeof obj === &quot;object&quot;) {
    for (key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (obj[key] &amp;&amp; typeof obj[key] === &quot;object&quot;) {
          objClone[key] = deepClone1(obj[key]);
        } else {
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}</code></pre>
<h2 id="jquery的extend方法实现">jQuery的extend方法实现</h2>
<pre><code class="language-js">// 实现jQuery的extend函数

// v1:
function extend() {
    let i = 1;
    let len = arguments.length;
    let target = arguments[0];
    let options, copy;

    // 遍历第一个以后的所有参数
    for (; i &lt; len; i++) {
        options = arguments[i];
        if (options != null) {
            for (let name in options) {
                copy = options[name];
                if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }
    return target;
}


// TODO: 当前的这个版本不能深拷贝，只能覆盖（如果是对象属性的话）
// v2: 实现一个深度拷贝
function extend(){
    // 1. 默认是不进行深拷贝的
    let deep = false;
    let len = arguments.length;
    let i = 1;
    // 第一个参数如果不是一个bool的话，target默认就是第一个参数
    let target = arguments[0] || {};
    let options, src, copy;

    if (typeof target === &#39;boolean&#39;) {
        deep = target;
        target = arguments[i] || {};
        i++;
    }
    // 如果target不是对象的话，无法复制，设置为{}
    if (typeof target !== &#39;object&#39;) {
        target = {};
    }

    // 开始深拷贝
    for (; i &lt; len; i++) {
        options = arguments[i];
        if (options != null) {
            for (let name in options) {
                // 开始准备源数据和目标数据
                src = target[name];
                copy = options[name];

                // 如果是对象的话，就深拷贝
                if (deep &amp;&amp; copy &amp;&amp; typeof copy === &#39;object&#39;) {
                    target[name] = extend(deep, src, copy);
                }
                else if (copy !== undefined) {
                    // 普通数据类型的话
                    target[name] = copy;
                }
            }
        }
    }

    return target;
}


// isPlainObject 函数来自于  [JavaScript专题之类型判断(下) ](https://github.com/mqyqingfeng/Blog/issues/30)
var class2type = {};
var toString = class2type.toString;
var hasOwn = class2type.hasOwnProperty;

function isPlainObject(obj) {
    var proto, Ctor;
    if (!obj || toString.call(obj) !== &quot;[object Object]&quot;) {
        return false;
    }
    proto = Object.getPrototypeOf(obj);
    if (!proto) {
        return true;
    }
    Ctor = hasOwn.call(proto, &quot;constructor&quot;) &amp;&amp; proto.constructor;
    return typeof Ctor === &quot;function&quot; &amp;&amp; hasOwn.toString.call(Ctor) === hasOwn.toString.call(Object);
}


function extend() {
    // 默认不进行深拷贝
    var deep = false;
    var name, options, src, copy, clone, copyIsArray;
    var length = arguments.length;
    // 记录要复制的对象的下标
    var i = 1;
    // 第一个参数不传布尔值的情况下，target 默认是第一个参数
    var target = arguments[0] || {};
    // 如果第一个参数是布尔值，第二个参数是 target
    if (typeof target == &#39;boolean&#39;) {
        deep = target;
        target = arguments[i] || {};
        i++;
    }
    // 如果target不是对象，我们是无法进行复制的，所以设为 {}
    if (typeof target !== &quot;object&quot; &amp;&amp; !isFunction(target)) {
        target = {};
    }

    // 循环遍历要复制的对象们
    for (; i &lt; length; i++) {
        // 获取当前对象
        options = arguments[i];
        // 要求不能为空 避免 extend(a,,b) 这种情况
        if (options != null) {
            for (name in options) {
                // 目标属性值
                src = target[name];
                // 要复制的对象的属性值
                copy = options[name];

                // 解决循环引用
                if (target === copy) {
                    continue;
                }

                // 要递归的对象必须是 plainObject 或者数组
                if (deep &amp;&amp; copy &amp;&amp; (isPlainObject(copy) ||
                    (copyIsArray = Array.isArray(copy)))) {
                    // 要复制的对象属性值类型需要与目标属性值相同
                    if (copyIsArray) {
                        copyIsArray = false;
                        clone = src &amp;&amp; Array.isArray(src) ? src : [];

                    } else {
                        clone = src &amp;&amp; isPlainObject(src) ? src : {};
                    }

                    target[name] = extend(deep, clone, copy);

                } else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

let obj1 = {
    a: 1,
    b: { b1: 1, b2: 2 }
};

let obj2 = {
    b: { b1: 3, b3: 4 , b4: 5},
    c: 3
};

let obj3 = {
    d: 4
}
console.log(extend(obj1, obj2, obj3));

&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
console.log(&#39;---------------------&#39;);

var a = extend(true, [4, 5, 6, 7, 8, 9], [1, 2, 3]);
console.log(a) // ???

console.log(&#39;---------------------&#39;);
var obj11 = {
    value: {
        3: 1
    }
}

var obj22 = {
    value: [5, 6, 7],

}

var b = extend(true, obj11, obj22) // ???
var c = extend(true, obj22, obj11) // ???
console.log(b, c)



// 补充：深度克隆
function deepClone(obj) {
    let res = Array.isArray(obj) ? [] : {};
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (obj[key] &amp;&amp; typeof obj[key] === &#39;object&#39;) {
                res[key] = deepClone(obj[key]);
            }
            else {
                res[key] = obj[key];
            }
        }
    }
    return res;
}


</code></pre>
]]></description><link>https://blog.gaoredu.com/article/cc671808-e402-4c52-a937-b3d14ad25e86</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cc671808-e402-4c52-a937-b3d14ad25e86</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 31 Dec 2023 22:04:11 GMT</pubDate></item><item><title><![CDATA[《Go实战仿百度云盘 实现企业级分布式云存储系统》视频教程免费下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>本课程为 2022 年最新 Go 实战仿百度云盘 实现企业级分布式云存储系统，将通过 Golang 来实现一个支持断点续传和秒传的分布式云存储服务百度网盘系统，课程中老师将手把手带你从快速构建“云存储”原型系统。</p>
</blockquote>
<figure class="wp-block-image size-large"><img title="《Go 实战仿百度云盘 实现企业级分布式云存储系统》视频教程免费下载"
             alt="《Go 实战仿百度云盘 实现企业级分布式云存储系统》视频教程免费下载" loading="lazy" decoding="async" width="1024" height="329" data-src="https://www.gaoredu.com/wp-content/uploads/2022/06/image-6-1024x329.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-963"srcset="https://www.gaoredu.com/wp-content/uploads/2022/06/image-6-1024x329.png 1024w, https://www.gaoredu.com/wp-content/uploads/2022/06/image-6-300x96.png 300w, https://www.gaoredu.com/wp-content/uploads/2022/06/image-6-768x247.png 768w, https://www.gaoredu.com/wp-content/uploads/2022/06/image-6.png 1164w"sizes="(max-width: 1024px) 100vw, 1024px" /></figure/>
<h2 class="wp-block-heading"><strong>主要知识点 </strong><br /><strong> 一、文件上传服务</strong></h2>
<p>一个基本的文件上传服务架构说明 <br />net/http 包用法示例<br /> 文件上传接口 <br /> 网页端上传文件测试 <br /> 文件元信息查询接口 <br /> 文件下载接口</p>
<h2 class="wp-block-heading"><strong>二、分块上传和断点续传</strong></h2>
<p>断点续传原理及系统架构变化 <br /> 分块上传的通用实现方法 <br /> 使用 Redis 存储文件分块信息 <br />Golang 文件分块信息初始化<br />Golang 分块上传逻辑<br />Golang 文件合并<br /> 测试文件分块上传与断点续传场景</p>
<h2 class="wp-block-heading"><strong>三、微服务化</strong></h2>
<p>微服务架构系统设计及架构变化 <br /> 改造上传接口为微服务 Gateway 网关接口 <br /> 微服务之间的 gRPC 调用 <br /> 基于 Docker 容器化部署各服务模块 <br /> 扩展认识 Kubernetes 容器编排技术</p>
<h2 class="wp-block-heading"><strong>四、秒传功能</strong></h2>
<p>秒传原理及系统架构变化 <br /> 客户端计算文件 hash<br />服务端判断 / 计算文件 hash<br />用户上传文件秒传测试</p>
<h2 class="wp-block-heading"><strong>五、阿里云 OSS</strong></h2>
<p>OSS 与 Ceph 技术选型分析对比 <br />OSS 操作文档以及 API 说明<br />Golang 访问 OSS API<br /> 完美结合实际业务操作 OSS 代码实战 <br /> 使用混合云（OSS 或 Ceph）</p>
<h2 class="wp-block-heading">六、课程章节</h2>
<p>第 1 章 课程介绍 <br /> 第 2 章 基础语法 <br /> 第 3 章 内建容器 <br /> 第 4 章 面向“对象”<br />第 5 章 面向接口 <br /> 第 6 章 函数式编程 <br /> 第 7 章 错误处理和资源管理 <br /> 第 8 章 测试与性能调优 <br /> 第 9 章 Goroutine<br />第 10 章 Channel<br />第 11 章 http 及其他标准库 <br /> 第 12 章 迷宫的广度优先搜索 <br /> 第 13 章 开始实战项目 <br /> 第 14 章 单任务版爬虫 <br /> 第 15 章 并发版爬虫 <br /> 第 16 章 数据存储和展示 <br /> 第 17 章 分布式爬虫 <br /> 第 18 章 课程总结</p>
<h2 class="wp-block-heading">视频教程下载</h2>
<p>Go 实战仿百度云盘 实现企业级分布式云存储系统视频教程下载链接: <a href="https://pan.baidu.com/s/1AgsXELxMd96SQQrZWvbA-g" target="_blank" rel="noreferrer noopener" rel="nofollow">https://pan.baidu.com/s/gsAgsXELxMd96SQQrZWvbA-g</a> 提取码: 25cz</p>
<p>如遇下载链接失效，可随时在下方评论，收到消息后也会及时同步更新。</p>
]]></description><link>https://blog.gaoredu.com/article/4327eebd-5840-42b3-a083-035c40043100</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4327eebd-5840-42b3-a083-035c40043100</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 05 Jun 2022 04:32:41 GMT</pubDate></item><item><title><![CDATA[2022程序员必备的10大VS Code扩展插件推荐]]></title><description><![CDATA[<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-15-56.png)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">10 个必备的 VsCode 插件</p>
</div>
</div>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://code.visualstudio.com/" target="_blank"  rel="nofollow">Visual Studio Code</a>是开发人员社区中使用最广泛的代码编辑器之一，本文将分享给大家 2021 年每个开发人员都应该知道的 10 个<a href="https://code.visualstudio.com/docs/editor/extension-gallery" target="_blank"  rel="nofollow">VS Code 扩展</a>，每个都堪称是黑科技。这些工具旨在改善开发人员体验并以各种方式提高你的工作效率。</p>
</blockquote>
<p>本文将介绍以下 VS Code 扩展和每一个 vscode 插件的使用教程：</p>
<ol class="wp-block-list">
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#autorenametag" target="_blank"  rel="nofollow">自动重命名标签</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#bracketpaircolorizer" target="_blank"  rel="nofollow">支架对着色器</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#snippets" target="_blank"  rel="nofollow">片段</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#bettercomments" target="_blank"  rel="nofollow">更好的评论</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#markdownallinone" target="_blank"  rel="nofollow">Markdown 多合一</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#Icons" target="_blank"  rel="nofollow">图标</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#prettier" target="_blank"  rel="nofollow">更漂亮</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#importcost" target="_blank"  rel="nofollow">进口成本</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#profileswitcher" target="_blank"  rel="nofollow">配置文件切换器</a></li>
<li><a href="https://blog.logrocket.com/top-10-vs-code-extensions-2021/#GitLens" target="_blank"  rel="nofollow">GitLens</a></li>
</ol>
<h2 class="wp-block-heading" id="autorenametag">1. 自动重命名标签</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag" target="_blank"  rel="nofollow">Auto Rename Tag</a>是一个对 Web 开发人员来说非常有用的 VS Code 扩展。顾名思义，自动重命名标签会在第一个标签更新时重命名第二个标签，反之亦然；你会发现这个扩展不仅对 HTML 很有帮助，而且由于 <a href="https://reactjs.org/docs/introducing-jsx.html" target="_blank"  rel="nofollow">JSX</a> 对 React 也很有帮助。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="730" height="319" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/JSX.gif" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-933"/><figcaption>自动重命名标签示例</figcaption></figure>
</div/>
<p>在上面的例子中，标签内只有文本，但在实际应用中，可能有嵌套的标签和元素，使得手动更新变得困难和乏味。</p>
<h2 class="wp-block-heading" id="bracketpaircolorizer">2. 支架对着色器</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer" target="_blank"  rel="nofollow">Bracket Pair Colorizer</a>是一个扩展，匹配具有相同颜色的相应括号，翻译过来可以叫做支架对着色器。在文件中嵌套组件、函数、对象等可能会因多个圆括号、方括号等而变得混乱。</p>
<p>例如，对于以下代码，乍一看，很难区分代码中的不同代码块，但是 Bracket Pair Colorizer 扩展为相应的括号和括号着色，以便于导航和访问。</p>
<figure class="wp-block-image size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="812" height="502" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-03-06.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-934"srcset="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-03-06.png 812w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-03-06-300x185.png 300w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-03-06-768x475.png 768w"sizes="(max-width: 812px) 100vw, 812px"/><figcaption><a href="https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer"target="_blank"rel="nofollow">Bracket Pair Colorizer</a>工具示例</figcaption></figure/>
<h2 class="wp-block-heading" id="snippets">3. 代码片段工具</h2>
<p><a href="https://code.visualstudio.com/docs/editor/userdefinedsnippets" target="_blank"  rel="nofollow">片段 </a> 是节省时间和提高工作效率的最佳方式。这不是单个扩展，而是具有不同编程语言的各种片段的扩展集合。</p>
<p>下面是一些流行的代码片段扩展：</p>
<ul class="wp-block-list">
<li><a href="https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2" target="_blank"  rel="nofollow">Angular 片段（版本 11）</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python" target="_blank"  rel="nofollow">Python</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets" target="_blank"  rel="nofollow">JavaScript (ES6) 代码片段</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=abusaidm.html-snippets" target="_blank"  rel="nofollow">HTML 片段</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=dsznajder.es7-react-js-snippets" target="_blank"  rel="nofollow">ES7 React/Redux/GraphQL/React-Native 片段</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=hollowtree.vue-snippets" target="_blank"  rel="nofollow">Vue 3 片段</a></li>
</ul>
<p>例如，每次创建新组件时，在 React 中重复函数式组件的语法可能会非常乏味。使用 <a href="https://marketplace.visualstudio.com/items?itemName=dsznajder.es7-react-js-snippets" target="_blank"  rel="nofollow">ES7 React/Redux/GraphQL/React-Native 片段</a> 扩展，您可以使用 <code>rfc</code> 功能组件的简写并按 Enter。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="730" height="425" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/React-Redux-GraphQL-Extension.gif" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-935"/><figcaption>代码片段工具</figcaption></figure>
</div/>
<h2 class="wp-block-heading" id="bettercomments">4. 更好的代码注释</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments" target="_blank"  rel="nofollow">Better Comments</a>旨在帮助您在代码中编写更人性化的注释。</p>
<p>清晰易懂的注释不仅对浏览您的代码的人有益，而且对您也有益。一段时间后，开发人员在访问自己的代码时迷失在自己的代码中是很常见的。拥有描述性评论可以为您和您的团队节省大量时间。</p>
<p>使用 Better Comments VS Code 扩展，您可以将注释分类为警报、查询、待办事项、突出显示等。</p>
<p>您可以在双正斜杠 (&nbsp;<code>//</code>)后使用以下任一字符：</p>
<ul class="wp-block-list">
<li><code>*</code>&nbsp; 对于突出显示的文本</li>
<li><code>!</code>&nbsp; 对于错误和警告</li>
<li><code>?</code>&nbsp; 查询和问题</li>
<li><code>//</code>&nbsp; 删除线</li>
<li><code>TODO</code>&nbsp; 待办事项</li>
</ul>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="801" height="552" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-05-14.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-936"srcset="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-05-14.png 801w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-05-14-300x207.png 300w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-05-14-768x529.png 768w"sizes="(max-width: 801px) 100vw, 801px" /><figcaption>代码注释工具</figcaption></figure>
</div/>
<h2 class="wp-block-heading" id="markdownallinone">5. Markdown 多合一</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one" target="_blank"  rel="nofollow">Markdown All in One</a>是一个单一的扩展，可以满足您 <a href="https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one" target="_blank"  rel="nofollow"> 所有的 Markdown</a>需求，例如自动预览、快捷方式、自动完成等。</p>
<p>自 2004 年发布以来，Markdown 已成为最受欢迎和首选的标记语言之一。世界各地的技术作家广泛使用 Markdown 来撰写文章、博客、文档等，因为其轻量级的简单性和跨平台使用。它的流行催生了 Markdown 的其他变体，例如 <a href="https://github.github.com/gfm/" target="_blank"  rel="nofollow">GitHub Flavored Markdown</a>、<a href="https://mdxjs.com/" target="_blank"  rel="nofollow">MDX</a> 等。</p>
<p>例如，要在 Markdown 中加粗某些文本，您可以选择该文本并使用快捷方式来提高您的工作效率。<code>Ctrl&nbsp;+&nbsp;B</code></p>
<figure class="wp-block-image size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="730" height="391" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Markdown-All-In-One-Extension.gif" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-938"/><figcaption>Markdown 预览工具</figcaption></figure/>
<h2 class="wp-block-heading" id="icons">6. 图标</h2>
<p>拥有描述性图标可以帮助您区分文件和文件夹。图标也让开发变得更有趣。</p>
<p>这是两个 VS Code 选项卡之间的比较。一个有图标，另一个没有。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="805" height="495" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-07-41.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-939"srcset="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-07-41.png 805w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-07-41-300x184.png 300w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-07-41-768x472.png 768w"sizes="(max-width: 805px) 100vw, 805px" /><figcaption>图标扩展插件</figcaption></figure>
</div/>
<p>您可以选择许多图标扩展。流行的图标集合包括：</p>
<ul class="wp-block-list">
<li><a href="https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons" target="_blank"  rel="nofollow">vscode-icons</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme" target="_blank"  rel="nofollow">材质图标主题</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme-icons" target="_blank"  rel="nofollow">材质主题图标</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=LaurentTreguier.vscode-simple-icons" target="_blank"  rel="nofollow">简单的图标</a></li>
</ul>
<h2 class="wp-block-heading" id="prettier">7. 更漂亮的代码</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" target="_blank"  rel="nofollow">Prettier</a>是一个固执的代码格式化程序。它在 GitHub 上拥有超过 38.5 万颗星，是最流行的代码格式化程序之一。在您的代码中使用一致的格式和样式可以节省大量时间，尤其是在与其他开发人员协作时。</p>
<p>以下是 Prettier 如何格式化代码的过程：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="730" height="411" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Prettier-Formatted-Code-Example.gif" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-940"/><figcaption>Prettier 格式化代码</figcaption></figure>
</div/>
<p>当您使用本地解析版本的 Prettier 时，此扩展支持 <a href="https://prettier.io/docs/en/plugins.html" target="_blank"  rel="nofollow">Prettier 插件</a>。<br /> 您可以进一步配置此扩展以满足您的格式需求，甚至可以通过自动保存触发它。</p>
<h2 class="wp-block-heading" id="importcost">8. 进口成本</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost" target="_blank"  rel="nofollow">导入成本 </a> 是一个扩展，它向您显示代码中导入包的估计大小。在处理项目时，重要的是不要通过导入重包来损害用户体验。避免这种情况的一种方法是跟踪代码中附加依赖项的大小。</p>
<div class="wp-block-image">
<figure class="aligncenter"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Import-Cost-Extension-Example.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="导入成本扩展示例" class="wp-image-33140"/></figure>
</div/>
<p>当导入过大时，导入成本会通过以红色显示大小来警告您。您可以配置应视为小、中或大的大小。</p>
<h2 class="wp-block-heading" id="profileswitcher">9. 配置文件切换器</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=aaronpowell.vscode-profile-switcher" target="_blank"  rel="nofollow">Profile Switcher</a>使您能够在 VS Code 中使用各种配置和设置在多个配置文件之间 <a href="https://marketplace.visualstudio.com/items?itemName=aaronpowell.vscode-profile-switcher" target="_blank"  rel="nofollow"> 切换 </a> 和设置。</p>
<p>此扩展对技术博主、YouTubers 等内容创建者特别有用。无需在每次需要显示 VS Code 屏幕时更改设置 / 配置，您可以设置配置文件所需的设置。</p>
<p>两个配置文件之间切换的方法：<code>Default</code>和。<code>Content&nbsp;Creation</code></p>
<h2 class="wp-block-heading" id="gitlens">10. GitLens</h2>
<p><a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens" target="_blank"  rel="nofollow">GitLens</a>是由 <a href="https://www.amod.io/" target="_blank"  rel="nofollow">Eric Amodio</a> 创建、开发和维护的 Visual Studio Code<a href="https://github.com/eamodio/vscode-gitlens" target="_blank"  rel="nofollow">的开源 </a> 扩展。它结合了 Git 和 VS Code 的功能。<a href="https://www.amod.io/" target="_blank"  rel="nofollow"></a></p>
<p>此扩展的最佳功能之一是能够通过 Git 责备注释和代码镜头可视化代码作者身份。</p>
<figure class="wp-block-image size-large"><img title="2022 程序员必备的 10 大 VS Code 扩展插件推荐"
             alt="2022 程序员必备的 10 大 VS Code 扩展插件推荐" loading="lazy" decoding="async" width="807" height="144" data-src="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-11-41.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-941"srcset="https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-11-41.png 807w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-11-41-300x54.png 300w, https://www.gaoredu.com/wp-content/uploads/2021/08/Snipaste_2021-08-28_23-11-41-768x137.png 768w"sizes="(max-width: 807px) 100vw, 807px" /><figcaption>GitLens 扩展插件</figcaption></figure/>
<p>这只是 <a href="https://gitlens.amod.io/#features" target="_blank"  rel="nofollow">GitLens 扩展</a> 的众多 <a href="https://gitlens.amod.io/#features" target="_blank"  rel="nofollow"> 功能之一</a>。其他显着特点包括：</p>
<ul class="wp-block-list">
<li><a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens#revision-navigation-" target="_blank"  rel="nofollow">ř</a><a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens#revision-navigation-" target="_blank"  rel="nofollow">时空视点导航 </a> 通过一个文件的历史记录（向后和向前）</li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens#current-line-blame-" target="_blank"  rel="nofollow">行 </a> 尾的不显眼的 <a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens#current-line-blame-" target="_blank"  rel="nofollow"> 当前行责任 </a> 注释显示提交</li>
<li>一个 <a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens#status-bar-blame-" target="_blank"  rel="nofollow"> 状态栏怪 </a> 注释显示提交和作家谁最后修改了当前行</li>
</ul>
<h2 class="wp-block-heading" id="conclusion">总结</h2>
<p>以上就是高热度网分享给大家 2021 年每个开发人员都应该知道的 10 个 <a href="https://code.visualstudio.com/docs/editor/extension-gallery" target="_blank"  rel="nofollow">VS Code 扩展</a> 插件和 vscode 使用教程，每个都堪称是黑科技，希望每个人都可以通过这些工具提高自己的工作效率。</p>
]]></description><link>https://blog.gaoredu.com/article/7a1c60fc-7f70-4f3e-9aef-5ab9aab089b1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7a1c60fc-7f70-4f3e-9aef-5ab9aab089b1</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 28 Aug 2021 15:25:13 GMT</pubDate></item><item><title><![CDATA[2021阿里家书到了，来看看逍遥子对大家的新年祝福]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>2021 新年也如期而至，详细阿里的小伙伴们也都收到了这份专门为阿里人准备的这份不一样的新年礼物——阿里家书。一起来看看逍遥子对大家的新年祝福吧。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2021/02/20210216134329.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">2021 阿里家书</p>
</div>
</div>
<h2 class="wp-block-heading">2021 年的阿里家书都有些什么？</h2>
<p class="has-drop-cap">牛年伊始，首先给关注高热度网的小伙伴们拜个年哈。祝大家新年快乐，牛年行大运哈。新阿里 2021 新年礼盒以 <strong>“阿里家书”</strong> 为主题，主要包含了阿里家书、台历、红包、春联、福字，贴纸、窗花，<strong>阿里动物园 </strong> 全家福相框，还有一对非常可爱的舞龙舞狮淘公仔。阿里家书这个传统已经延续多年，今年阿里家书的主题为“親”，我们一起来看看吧哈。</p>
<p><iframe loading="lazy" src="//player.bilibili.com/player.html?aid=886474393&bvid=BV14K4y1p7LP&cid=288996247&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" height="500" width="100%"> </iframe></p>
<h2 class="wp-block-heading">逍遥子给阿里家人们的新年祝福</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2021 阿里家书到了，来看看逍遥子对大家的新年祝福"
             alt="2021 阿里家书到了，来看看逍遥子对大家的新年祝福" loading="lazy" decoding="async" width="571" height="665" data-src="https://www.gaoredu.com/wp-content/uploads/2021/02/20210216135717.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-911"srcset="https://www.gaoredu.com/wp-content/uploads/2021/02/20210216135717.jpg 571w, https://www.gaoredu.com/wp-content/uploads/2021/02/20210216135717-258x300.jpg 258w"sizes="(max-width: 571px) 100vw, 571px" /><figcaption>逍遥子给阿里家人们的一封信</figcaption></figure>
</div/>
<p class="has-luminous-vivid-orange-color has-text-color">各位阿里家人，</p>
<p class="has-black-color has-text-color">2020 年马上就要过去了，这一年，我们一起面对突如其来的疫情的挑战，一起投入抗击疫情、助力经济恢复的两场战役中，逐步回到正常的工作和生活状态，共同经历了很多难忘的时刻。</p>
<p class="has-black-color has-text-color">借这个机会，我想诚挚地感谢各位阿里家人，感谢大家一直以来、特别在过去的一年，对我们的陪伴、理解、支持和信任。</p>
<p class="has-black-color has-text-color">在这样特殊的一年里，我们能够取得一些成绩，能够为社会做出一点贡献，都是因为所有阿里人的全情投入，因为阿里的家人们在背后默默的付出和支持。</p>
<p class="has-black-color has-text-color">2020 年年初开始的新冠肺炎疫情，已经改变了整个世界。我们从未像今天一样深切地感受到，阿里巴巴和社会的脉搏、经济的发展、民生的保障、社会的治理，是如此息息相关。阿里一直致力于建设数字经济时代的基础设施，而过去一年的经历，更让我们体会到“基础设施”这几个字沉甸甸的份量，更让我们为“阿里人”这个身份而感动。</p>
<p class="has-black-color has-text-color">在抗击疫情、恢复经济的过程中，阿里巴巴集团始终竭尽全力走在第一线。疫情中，货架滿满的盒马，成为很多城市居民内心温暖的依靠;“请出示您的健康码”，成了人们最熟悉的话语; 出行受限的时候，钉钉等在线沟通工具，让人与人之间重新连接; 阿里携手各方，共担风雨，把救援物资送给了世界上许许多多需要帮助的人;4 月启动的扶助中小企业的特别行动“春雷计划 2020”让千千万万从外贸到农业、从工厂到零售的个体、商家和小微企业，重新找到了生意和市场。疫情后的第一个双 11 购物季，最终 4982 亿的成交总额，更是从一个侧面彰显了中国经济的韧性和内需的强大动力。</p>
<p class="has-black-color has-text-color">得益于时代给予的广阔机遇和中国这个全球最大的市场，阿里在 2020 年继续快速奔跑。2020 财年，我们实现了 5 年前定下的目标，消费平台交易额突破 1 万亿美元，这是历史性的里程碑。持续创新始终是阿里面向未来发展最重要的动力，预计 2021 财年内，创立 10 年的阿里云将实现盈利，创立 7 年的菜鸟的经营活动现金流将转正。</p>
<p class="has-black-color has-text-color">除了业务的快速发展，阿里巴巴继续着在社会公益领域的努力。作为最早探索推进互联网脱贫模式的平台企业，自 2017 年成立 100 亿脱贫基金以来，阿里巴巴全力带动整个生态的力量，从电商、教育、健康、女性和生态等五个方向分进合力. 目前已有 1000 万贫困地区人口因此受益。</p>
<p class="has-black-color has-text-color">迄今为止，阿里的所有成就、所有积累，都得益于这个时代，得益于国家的发展，也来自所有阿里人的努力，来自于所有阿里家人在背后巨大的支持。最近，国家对于互联网发展和平台经济提出了很多新的治理要求，阿里要做一个能活 102 年的好公司，就要不断与时俱进，对自我有更高的要求，对社会有更多的担当，用好我们的能力更多地回馈社会，为社会的发展和美好的生活增加一抹亮色。</p>
<p class="has-black-color has-text-color">不平凡的 2020 年，也让我们重新思考未来、重新理解生活。我们学习和不确定性相处，也更坚定地走在确定性的数字化道路上。我们相信，数字经济时代的大幕才刚刚开启，我们可能面临更多的挑战，未来所有的产业、城市的服务、社会的运行都会被数字化和智能化，在数字化演进的浪潮中，我们也要将业务能力不断转变为服务社会的能力。</p>
<p class="has-black-color has-text-color">人与人之间最宝贵的是信任。很幸运能和各位阿里家人，相逢在阿里这个温暖的大家庭中。我们始终认为，社会发展得好，阿里才会好，所有的阿里人、阿里的家人们好，阿里才会好。在全球范围内疫情还有很多不确定性的大环境下，祝所有的阿里家人们健康、平安。我们一起祝愿 2021 年更美好!</p>
<p class="has-black-color has-text-color">新年快乐!</p>
<p>阿里巴巴集团董事会主席兼首席执行官</p>
<p>张勇(逍遥子)2020 年 12 月 31 日</p>
]]></description><link>https://blog.gaoredu.com/article/17b95dab-ee83-4fb9-b521-ff3f3d01264f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/17b95dab-ee83-4fb9-b521-ff3f3d01264f</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 16 Feb 2021 06:10:04 GMT</pubDate></item><item><title><![CDATA[【免费】2020最新React全套视频教程,Redux视频教程,React源码深入解析前端视频教程下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>本文提供了 2020 年全网最新的免费 React 全套视频教程,Redux 视频教程,React 源码深入解析，React 项目实战视频教程，React 全栈开发前端视频教程免费下载。</p>
</blockquote>
<h2 class="wp-block-heading">一、React 是什么，为什么要学习 React？</h2>
<figure class="wp-block-image size-large"><img title="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载"
             alt="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载" loading="lazy" decoding="async" width="750" height="422" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/timg.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-882"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/timg.jpg 750w, https://www.gaoredu.com/wp-content/uploads/2020/12/timg-300x169.jpg 300w"sizes="(max-width: 750px) 100vw, 750px" /><figcaption>React 是什么？为什么学习 React？</figcaption></figure/>
<p>React 是一个简单的 javascript UI 库，用于构建高效、快速的用户界面。它遵循组件设计模式、<em><strong>声明式编程范式 </strong></em> 和<em><strong>函数式编程 </strong></em> 概念，以使前端应用程序更高效。是目前前端单页面应用程序开发者使用最多的框架。与此并驾齐驱的还有 Vue，Angular，是三大主流的前端开发框架。&nbsp;</p>
<p>由于 React 具有</p>
<p>由于 React 具有 <strong> 易于学习 </strong>、<strong> 丰富的用户界面 </strong>、<strong> 提高工作效率 </strong>、<strong> 受到伟大公司的信赖 </strong>、<strong> 这是热门和趋势 </strong>，以及<strong> 强大的社区支持 </strong> 这 6 个特点，学习 React 以及成为开发者必备的技能。</p>
<h2 class="wp-block-heading">二、React（JSX/Redux/Flux）入门视频教程</h2>
<p>最新《从 0 开始彻底征服 ReactJS》全套视频教程，总共有 18 个章节，从基础到原理层面深入剖析 React，该视频的目录如下：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载"
             alt="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载" loading="lazy" decoding="async" width="595" height="254" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_195555.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-883"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_195555.jpg 595w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_195555-300x128.jpg 300w"sizes="(max-width: 595px) 100vw, 595px" /><figcaption>彻底征服 React.js 视频教程</figcaption></figure>
</div/>
<p>第一章：课程介绍 <br /> 第二章：第一个 React 应用程序 <br /> 第三章：JSX 用法 <br /> 第四章：创建组件 <br /> 第五章：组件的生命周期 <br /> 第六章：组件的属性 <br /> 第七章：组件的事件 <br /> 第八章：组件之间的通信 <br /> 第九章：props 与 state 的博弈 <br /> 第一十章：实用工具 <br /> 第一十一章：开发环境 <br /> 第一十五章：Facebook Flux<br />第一十四章：FLUX 架构 <br /> 第一十三章：树组件开发实战 <br /> 第一十七章：Redux<br />第一十六章：Reflux<br />第一十九章：有问必答</p>
<p>《<strong>彻底征服 React.js + Flux + Redux 实战》全套视频教程 </strong> 链接:&nbsp;<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1sngFsnz" target="_blank" rel="nofollow">https://pan.baidu.com/s/1sngFsnz</a>&nbsp; 密码: w5fv</p>
<h2 class="wp-block-heading">三、React 项目实战视频教程</h2>
<p>React16+React-Router4 从零打造企业级电商后台管理系统课程针对有一些前端基础，但对前端框架还不够了解，不能灵活使用的同学，手把手带你用 React+React-Router 从技术选型开始，直至部署上线，开发一个后台管理系统，让你在实际开发中，打开前端框架的大门，告别小白时代！</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载"
             alt="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载" loading="lazy" decoding="async" width="800" height="291" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200205.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-884"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200205.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200205-300x109.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200205-768x279.jpg 768w"sizes="(max-width: 800px) 100vw, 800px" /><figcaption>React16+React-Router4 项目实战视频教程</figcaption></figure>
</div/>
<h3 class="wp-block-heading">3.1 接触最前沿的技术</h3>
<p>采用 React16 + React-Router4<br />结合 yarn、webpack、ES6 和 Sass<br />等技术，体验最新奇的开发方式</p>
<h3 class="wp-block-heading">3.2 企业级后台管理系统</h3>
<p>典型并且实用的企业级开发模式：<br />前后端分离、分层设计、模块化 <br /> 开发等技术</p>
<h3 class="wp-block-heading">3.3 深入理解技术原理</h3>
<p>开发代码的同时，带你了解相关 <br /> 技术的原理，比如资源请求过程<br />cookie-session 原理，Router 原理等</p>
<p><strong>React16+React-Router4 从零打造企业级电商后台管理系统视频下载 &nbsp;</strong></p>
<p>链接:&nbsp;<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1MgRe5QzTCXa9bnsd7wwbkg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1MgRe5QzTCXa9bnsd7wwbkg</a>&nbsp; 提取码:8t23</p>
<h2 class="wp-block-heading">四、React 源码深入解析视频教程</h2>
<p>React 源码深度解析 高级前端工程师必备技能 React 毫无疑问是前端界主流的框架，而框架本身就是热点。课程以讲解 React 实现原理为主，并在实现过程中讲解这么做的原因，带来的好处以及规避了哪些问题。理解源码之后对于 React 开发过程中出现的一系列问题都可以非常轻松得进行解决，也是能力提升，晋升高级开发工程师的必备技能。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载"
             alt="【免费】2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载" loading="lazy" decoding="async" width="800" height="384" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200535.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-885"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200535.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200535-300x144.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_200535-768x369.jpg 768w"sizes="(max-width: 800px) 100vw, 800px" /><figcaption>React 源码深入解析视频教程</figcaption></figure>
</div/>
<p>链接:&nbsp;<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1oHp6wHASikOrNH_bFilDrQ" target="_blank" rel="nofollow">https://pan.baidu.com/s/1oHp6wHASikOrNH_bFilDrQ</a>&nbsp; 提取码:mjr2</p>
<p>以上就是高热度网分享的 2020 最新 React 全套视频教程,Redux 视频教程,React 源码深入解析前端视频教程下载，欢迎大家下载学习。</p>
]]></description><link>https://blog.gaoredu.com/article/26d4c724-900f-4954-b233-be9c939a05c0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/26d4c724-900f-4954-b233-be9c939a05c0</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 Dec 2020 12:13:29 GMT</pubDate></item><item><title><![CDATA[【免费】2021年最火的WebGL前端视频教程_OpenGL实战视频教程免费下载]]></title><description><![CDATA[<div class="wp-block-cover has-pale-cyan-blue-background-color has-background-dim is-position-center-center">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">最新 WebGL/ThreeJS/OpenGL 游戏实战 / 计算机图形学视频教程下载</p>
</div>
</div>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>这里收集了全网最新的 2020 免费 WebGL 视频教程，OPenGL 入门和游戏引擎实战视频教程和计算机图形学相关的视频教程和学习资料，包括 WebGL 入门，Threee.JS 实战教程、三维粒子引擎开发等精品视频教程，欢迎大家免费下载。</p>
</blockquote>
<h2 class="wp-block-heading">一、计算机图形学基础入门视频教程下载</h2>
<p>对于还没有学习过计算机图形学的萌新来说，建议先去学习一下图形学相关的知识，这里推荐一下上海交通大学的计算机图形学视频教程，搞定坐标变换、图形渲染、光照等基础知识，学习它就够了。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载"
             alt="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载" loading="lazy" decoding="async" width="1015" height="490" data-src="https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_193054.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-866"srcset="https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_193054.jpg 1015w, https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_193054-300x145.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_193054-768x371.jpg 768w"sizes="(max-width: 1015px) 100vw, 1015px" /><figcaption>计算机图形学</figcaption></figure>
</div/>
<p>此外，最近风靡 B 站的黑科技游戏 GAMES101- 现代计算机图形学入门 - 闫令琪视频教程也是很火爆哈，也去试听了一下，感觉讲的还不错，感兴趣的小伙伴们也可以去听听这套教程。</p>
<p><iframe style="width: 100%; height: 500px; max-width: 100%；align:center; padding:20px 0;" src="//player.bilibili.com/player.html?aid=90798049&amp;bvid=BV1X7411F744&amp;cid=155049937&amp;page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe></p>
<p>附件：上海交大计算机图形学视频教程下载链接:&nbsp;<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1M_OeAHJI5jm-VIuezYQdrA" target="_blank" rel="nofollow">https://pan.baidu.com/s/1M_OeAHJI5jm-VIuezYQdrA</a>&nbsp; 提取码: gcbs&nbsp;</p>
<h2 class="wp-block-heading">二、WEBGL 和 ThreeJS 相关视频教程下载</h2>
<p><em>WebGL</em>是一种 3D 绘图标准，这种绘图技术标准允许把 JavaScript 和 OpenGL ES 2.0 结合在一起，通过前端就可以绘制出惊艳的 3D 效果。ThressJS 是基于 WebGL 封装的一个 3D 版的 JS 库，使用它可以降低开发门槛，让你快速上手 3D 游戏的开发。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载"
             alt="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/11/OIP.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-867"width="578"height="458"srcset="https://www.gaoredu.com/wp-content/uploads/2020/11/OIP.jpg 474w, https://www.gaoredu.com/wp-content/uploads/2020/11/OIP-300x238.jpg 300w"sizes="(max-width: 578px) 100vw, 578px" /><figcaption>WebGL 视频教程免费下载</figcaption></figure>
</div/>
<h2 class="wp-block-heading">2.1 WebGL 免费视频教程下载</h2>
<p>这套 WebGL 视频教程总共有 10 个课时，基本上涉及了 WebGL 所有的知识点，从图形学基础，材质、坐标变化、材质、光照，讲解的也是十分全面的。</p>
<p>从 Lesson1-Lesson10【完整版】链接：<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://share.weiyun.com/5JFxEXz" target="_blank" rel="nofollow">https://share.weiyun.com/5JFxEXz</a> 4zu9wy</p>
<p>此外，这里还有一套 ThreeJS 视频教程，也欢迎大家下载：</p>
<p>链接: <a href="https://pan.baidu.com/s/1O1SntjyUdnW5y_JEJZv3PA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1O1SntjyUdnW5y_JEJZv3PA</a> 提取码: 51ij</p>
</p>
<h2 class="wp-block-heading">2.2 WebGL 学习资料下载</h2>
<p>WebGL 编程指南 PDf 电子版免费下载：<a href="https://pan.baidu.com/s/1qYLqGOG" target="_blank"  rel="nofollow">https://pan.baidu.com/s/</a><a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">1qYLqGOG</a> 密码: 2mva</p>
<p>OpenGLES 2.0 编程指南下载：<a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1c165QFI</a> 密码: b4s8</p>
<p>HTML5 与 WEBGL 编程下载：<a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1bpNdfSN</a> 密码: 7ixf</p>
<p>WEBGL learn：<a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1jHVwezk</a> 密码: nnng</p>
<h2 class="wp-block-heading">三、OpenGL 精品视频教程免费下载</h2>
<h2 class="wp-block-heading">3.1 OpenGL 视频教程</h2>
<p>OpenGl<em>OpenGL</em>（英语：Open Graphics Library）是用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口（API）。是基于 C /C++ 语言开发的一门计算机图形库，这里提供了三维粒子引擎和游戏开发的相关视频教程，涉及到安卓手机 app 黑科技游戏的开发。</p>
<figure class="wp-block-image size-large"><img title="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载"
             alt="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载" loading="lazy" decoding="async" width="800" height="413" data-src="https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_195517.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-868"srcset="https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_195517.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_195517-300x155.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/11/2020-11-29_195517-768x396.jpg 768w"sizes="(max-width: 800px) 100vw, 800px" /><figcaption>OpenGL 视频教程免费下载</figcaption></figure/>
<p>入门基础：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1i5tefoL</a>&nbsp; 密码: zbh9<br />中文基础：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1dFm0GUX" target="_blank" rel="nofollow">https://pan.baidu.com/s/</a><a rel="noreferrer noopener" href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank" rel="nofollow">1dFm0GUX&nbsp;</a>密码:iyh4<br />三维粒子引擎制作：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1mhVX232</a>&nbsp; 密码:sgz6<br />OpenGLES 视频：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1slz93MP</a>&nbsp; 密码:ds52<br />安卓黑科技 3D 游戏开发：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1c1FsNyo</a>&nbsp; 密码:ji32</p>
<h2 class="wp-block-heading">3.2 OpenGL 学习资料</h2>
<p>再推荐一本 NeHe 的 OpenGl 教程，很经典，强烈推荐！<br />书籍资料：<a href="http://url.cn/5ZKm4nB" target="_blank" rel="noreferrer noopener" rel="nofollow">http://url.cn/5ZKm4nB</a>&nbsp;&nbsp; 密码：g3BIAr<br />代码：<a href="http://url.cn/5nJEa04" target="_blank" rel="noreferrer noopener" rel="nofollow">http://url.cn/5nJEa04</a>&nbsp; 密码：qrtc6f</p>
<p>OpenGL 库文件：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1hsGgNB2" target="_blank" rel="nofollow">https://pan.baidu.com/s/1hsGgNB2</a>&nbsp; 密码: 55qm</p>
<p>技术文档：链接:&nbsp;<a rel="noreferrer noopener" href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1bpHCVrp</a>&nbsp; 密码: mkmn</p>
<p class="has-luminous-vivid-orange-background-color has-background"><strong>注意 </strong>：<strong> 最新 WebGL/ThreeJS/OpenGL 游戏实战 </strong> 视频教程经过多次更新传播后，经常会出现链接失效的问题，如果大家在使用的过程中发现链接失效或者无法访问的问题，大家可以通过关注下方的微信公众号，回复“webgl”，即可获取最新的 <strong> 下载链接</strong>。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载"
             alt="【免费】2021 年最火的 WebGL 前端视频教程_OpenGL 实战视频教程免费下载" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""/><figcaption>高热度网微信公众号</figcaption></figure>
</div/>
<p>以上就是高热度网分享的 2020 最新的 WebGL 黑科技视频教程，OPenGL 入门和游戏引擎实战视频教程和计算机图形学相关的视频教程和学习资料，欢迎大家下载，学习过程中遇到什么问题也欢迎留言。</p>
]]></description><link>https://blog.gaoredu.com/article/9aacdfcd-ddc8-4a23-9c21-0630fafa2703</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9aacdfcd-ddc8-4a23-9c21-0630fafa2703</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 29 Nov 2020 12:09:28 GMT</pubDate></item><item><title><![CDATA[无需Root可自动定时发送微信和短信的黑科技APP，支持跳过开屏启动广告]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>这款黑科技 APP 软件支持安卓手机在不需要 Root 的条件下自动定时发送微信和短信的黑科技, 自动抢微信红包, 抖音无水印下载, 跳过开屏启动广告等功能，类似于一个手机上的自动化机器人，让你轻松使用一部手机就可以实现非常好玩有趣的手机黑科技。</p>
</blockquote>
<h2 class="wp-block-heading">黑科技 APP 软件介绍</h2>
<p>1. 首先我们打开今天推荐的这款手机黑科技软件，他是这个样子的。界面很简单。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告"
             alt="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-02-956_yu.ouyang.douy_-485x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-823"width="333"height="702"srcset="https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-02-956_yu.ouyang.douy_-485x1024.jpg 485w, https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-02-956_yu.ouyang.douy_-142x300.jpg 142w, https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-02-956_yu.ouyang.douy_.jpg 720w"sizes="(max-width: 333px) 100vw, 333px" /><figcaption>自动发消息抢红包神器主界面</figcaption></figure>
<p></div/></p>
<p>2. 我们先来看看它都有哪些功能，发现支持的功能还挺多的，基本上包含了当前市面上一些主流的黑科技软件，包括自动签到、自动扫码、抖音微信黑科技、QQ 快手等自动回复消息的功能。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告"
             alt="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-11-372_yu.ouyang.douy_-485x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-824"width="339"height="715"srcset="https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-11-372_yu.ouyang.douy_-485x1024.jpg 485w, https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-11-372_yu.ouyang.douy_-142x300.jpg 142w, https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-11-372_yu.ouyang.douy_.jpg 720w"sizes="(max-width: 339px) 100vw, 339px" /><figcaption>签到扫码抖音微信 QQ 快手头条工具主界面</figcaption></figure>
<p></div/></p>
<p>3. 我们先来测试一下自动发送微信消息的功能，这个界面里我们需要配置的东西也很简单，首先把自动定时总开关打开。然后选择你的微信好友，并输入你要发送给微信好友的内容，然后点击测试按钮即可。然后系统就会自动在你设置的时刻将当前的消息发送出去了。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告"
             alt="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告" loading="lazy" decoding="async" width="335" height="606" data-src="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_165157.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-822"srcset="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_165157.jpg 335w, https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_165157-166x300.jpg 166w"sizes="(max-width: 335px) 100vw, 335px" /><figcaption>自动定时发送微信信息配置界面</figcaption></figure>
<p></div/></p>
<p>4. 接着我们再来测试一下自动发送短信的功能，其实和上面的界面很类似。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告"
             alt="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-38-526_yu.ouyang.douy_-485x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-825"width="372"height="785"srcset="https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-38-526_yu.ouyang.douy_-485x1024.jpg 485w, https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-38-526_yu.ouyang.douy_-142x300.jpg 142w, https://www.gaoredu.com/wp-content/uploads/2020/09/Screenshot_2020-09-05-16-58-38-526_yu.ouyang.douy_.jpg 720w"sizes="(max-width: 372px) 100vw, 372px" /><figcaption>黑科技 app 扩展功能主界面</figcaption></figure>
<p></div/></p>
<p>我们同样只需要输入相应电话号码和短信内容就 OK 了，是不是很简单？</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告"
             alt="无需 Root 可自动定时发送微信和短信的黑科技 APP，支持跳过开屏启动广告" loading="lazy" decoding="async" width="370" height="629" data-src="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_165616.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-826"srcset="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_165616.jpg 370w, https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_165616-176x300.jpg 176w"sizes="(max-width: 370px) 100vw, 370px" /><figcaption>自动定时发送短信主界面</figcaption></figure>
<p></div/></p>
<p>此外，这款黑科技手机 APP 软件还内置了其他一些分厂实用的功能：</p>
<p><strong> 1 无需 root 手机可以自动抢微信红包, 支持到最新微信 7.0.18, 在锁屏状态下, 需要 4 秒, 聊天界面只需两秒,</strong>让你以后再也不用关注微信群里面的消息也能轻松抢到红包。<br /><strong> 2 支持自动跳过各大 APP 的启动开屏广告，类似于一个手机广告拦截器，(涵盖率 99%, 还可以自定义规则跳过)</strong>。<br /><strong> 3 支持微信,QQ 消息的简单防撤回 (原理获取手机通知栏消息并保存起来)</strong><br /><strong>4. 小米手机并且已 root, 可以一键修改运动步数, 让你以后不运动也可以成为运动达人的黑科技哈，非常强烈地推荐。也可以每天定时自动修改步数, 可以干嘛, 懂得也懂(微信, 支付宝,QQ, 微博这些用得到步数的都可以)</strong>；同时也支持抖音下载无水印视频功能。<br /><strong> 6 自动连点器，这个功能在某些游戏场景里面用到的会比较多哈。</strong> 让你轻松解放你的双手。</p>
<p>以上的所有功能都只需要这一款 APP 神器就可以全部免费试用。</p>
<h2 class="wp-block-heading">黑科技 APP 软件下载</h2>
<p>自动定时发送微信和短信的黑科技 APP 下载地址：<a href="https://pan.baidu.com/s/1Pqb-kTif6OYikiU7NZovmQ" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1Pqb-kTif6OYikiU7NZovmQ</a> 提取码: r8tu</p>
<p>使用注意事项：</p>
<p>1. 这款黑科技 APP 在使用过程中会申请需要用到的权限, 请授予相关的权限才可以正常使用相关的功能；如：悬浮框权限，锁屏显示权限等；</p>
<p>2. 该软件安全无毒，也可以在应用商店下载，目前仅支持安卓手机；</p>
<p>3. 软件底层是通过安卓提供了一个无障碍服务来实现自动发消息和抢红包的，让你在无需 Root 的情况下就可以使用，非常方便。</p>]]></description><link>https://blog.gaoredu.com/article/317af472-7939-49ba-b6b2-d60a90eaff66</link><guid isPermaLink="true">https://blog.gaoredu.com/article/317af472-7939-49ba-b6b2-d60a90eaff66</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 Sep 2020 09:57:28 GMT</pubDate></item><item><title><![CDATA[揭秘B站（Bilibili）这4个最新非常好用又好玩的黑科技（附黑科技app软件下载）]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>你可知道 B 站（Bilibili）这 4 个非常好玩又好用的黑科技呢？可以让你在看剧的同时，只需要动动手指，就可以轻松实现 B 站视频 AI 变脸，自动抢 B 站礼物，下载 B 站视频、过滤和复制 B 站视频弹幕助手、首页美化等非常好玩的黑科技，同时高热度网也提供了这些黑科技 app 的下载地址。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/bzhan.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"> B 站（Bilibili）最新的黑科技有哪些？</p>
</div>
</div>
<h2 class="wp-block-heading">一、B 站（Bilibili）简介</h2>
<p> B 站（Bilibili）的全称叫做哔哩哔哩站，现为中国年轻世代高度聚集的文化社区和视频平台，被粉丝们亲切的称为“B 站”。这是一个集齐了动画、番剧、国创、音乐、舞蹈、游戏、科技、生活、娱乐等 15 个内容分区的内容创作与分享的视频网站。目前 B 站随着网民的不断增加，也产生了不少黑科技电脑和手机软件 APP 等非常好玩的工具助手，让我们来一起看看都有哪些吧！</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）"
             alt="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）" loading="lazy" decoding="async" width="1024" height="638" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/b_site-1024x638.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="B 站的小 logo 图案" class="wp-image-784" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/b_site-1024x638.jpg 1024w, https://www.gaoredu.com/wp-content/uploads/2020/04/b_site-300x187.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/b_site-768x478.jpg 768w, https://www.gaoredu.com/wp-content/uploads/2020/04/b_site-480x300.jpg 480w, https://www.gaoredu.com/wp-content/uploads/2020/04/b_site.jpg 1084w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption> B 站的小 logo 图案</figcaption></figure>
<p></div/></p>
<h2 class="wp-block-heading">二、B 站的黑科技有哪些？</h2>
<h3 class="wp-block-heading">2.1 B 站的 AI 换脸黑科技</h3>
<p>先来说一下 AI 换脸这项黑科技技术吧，AI 换脸简单来说就是利用机器学习对用户的输入数据进行训练，从而可以将视频中的人脸，通过 AI 算法“PS”换成另一个人的相貌，是不是很恐怖？我们可以之家咋 B 站搜索“换脸”关键词，就可以出现很多相关的视频。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）"
             alt="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）" loading="lazy" decoding="async" width="767" height="558" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-24_210839-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="B 站搜索“换脸”关键词结果页面" class="wp-image-783" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-24_210839-1.jpg 767w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-24_210839-1-300x218.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-24_210839-1-385x280.jpg 385w" sizes="(max-width: 767px) 100vw, 767px" /><figcaption> B 站搜索“换脸”关键词结果页面</figcaption></figure>
<p></div/></p>
<p><strong>AI</strong>换脸的软件首先推荐 <strong>ZAO AI</strong> 换脸神器，这款安卓版手机 APP 是一款非常火的变脸特效软件，最强大的地方在于支持在拍摄的过程中可以变换很多的脸型，需要的用户可以来下载体验一下。而且这款神器支持的地方还挺多的，B 站上很多 AI 换脸就是直接使用这款神器自动生成的哈。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）"
             alt="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）" loading="lazy" decoding="async" width="640" height="360" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/194741o129u4bi3v2qyi3u.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="AI 换脸技术生成的明星正在视频直播" class="wp-image-785" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/194741o129u4bi3v2qyi3u.jpg 640w, https://www.gaoredu.com/wp-content/uploads/2020/04/194741o129u4bi3v2qyi3u-300x169.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>AI 换脸技术生成的明星正在视频直播</figcaption></figure>
<p></div/></p>
<p>此外，如果对于一些朋友想直接在电脑上实现 AI 换脸的话，也可以试试 <strong>Fakeapp</strong> 这款软件，支持 <strong>WIn7</strong> 和<strong>WIn10</strong>系统，与此同时，它集成了 GUI 图形界面，环境安装比较简单，只要下载主程序和 <strong>CORE</strong> 文件安装即可使用。</p>
<p><strong>ZAO AI 换脸安卓黑科技软件下载地址: </strong>https://pan.baidu.com/s/1_Dedam5JPrtlyQaQ7tTjdg 提取码: x83x</p>
<p><strong>Fakeapp</strong> AI 换脸电脑黑科技软件下载地址：https://pan.baidu.com/s/1bKaSypBmiLfDqHhmK3OrNQ 提取码: sqkh</p>
<h3 class="wp-block-heading">2.2 如何下载 B 站视频？</h3>
<p>对于观看 B 站视频的朋友们来说，下载 B 站的视频也是一个大家常见的需求，高热度网这里分享的是一个 bilibili 哔哩哔哩下载助手电脑版软件。这是一个电脑版的下载助手，下载安装后就可以直接使用。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）"
             alt="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200424221522-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="bilibili 哔哩哔哩下载助手" class="wp-image-787" width="482" height="388" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200424221522-1.jpg 429w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200424221522-1-300x241.jpg 300w" sizes="(max-width: 482px) 100vw, 482px" /><figcaption>bilibili 哔哩哔哩下载助手</figcaption></figure>
<p></div/></p>
<p>此外，也推荐一个 <strong>GitHub</strong> 开源的免费下载器工具 <strong>Bilibili_video_download</strong> 程序，当然这个程序也是 Python 编写的，适合有一定编程基础的同学使用，感兴趣的朋友可以自己下去研究一下这个源码。</p>
<p>Bilibili 下载助手电脑版通用软件下载链接: https://pan.baidu.com/s/1gFYoeu4EewMufpLGWqyjxA 提取码: mria </p>
<p><strong>Bilibili_video_download</strong>源码地址：<a href="https://github.com/Henryhaohao/Bilibili_video_download" target="_blank"  rel="nofollow">https://github.com/Henryhaohao/Bilibili_video_download</a></p>
<h3 class="wp-block-heading">2.3 自动抢 B 站抢礼物脚本</h3>
<p>B 站自动领瓜子、直播挂机脚本也是一个开源软件，支持自动抢 B 站礼物，是一个 JavaScript 脚本程序。可以支持自动抢 B 站的礼物，让你在无人值守的环境下成功抢礼物，是一款非常好用的 B 站抢礼物神器。</p>
<figure class="wp-block-table is-style-stripes">
<table class="table table-bordered puock-text">
<thead>
<tr>
<th>plugin</th>
<th>version</th>
<th>description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Auth</td>
<td>19.02.11</td>
<td>帐号登录组件</td>
</tr>
<tr>
<td>Capsule</td>
<td>19.02.12</td>
<td>扭蛋机(普通)</td>
</tr>
<tr>
<td>DailyBag</td>
<td>19.04.22</td>
<td>每日礼包领取</td>
</tr>
<tr>
<td>Group</td>
<td>19.02.11</td>
<td>应援团签到</td>
</tr>
<tr>
<td>Guard</td>
<td>19.05.03</td>
<td>舰长亲密度领取</td>
</tr>
<tr>
<td>Heart</td>
<td>19.02.11</td>
<td>双端直播间心跳</td>
</tr>
<tr>
<td>Silver</td>
<td>19.02.11</td>
<td>免费宝箱领取</td>
</tr>
<tr>
<td>Silver2Coin</td>
<td>19.02.12</td>
<td>银瓜子兑换硬币</td>
</tr>
<tr>
<td>Task</td>
<td>19.02.11</td>
<td>每日任务</td>
</tr>
</tbody>
</table><figcaption> B 站抢礼物助手主要功能</figcaption></figure>
<p> B 站抢礼物助手下载地址：<a href="https://github.com/metowolf/BilibiliHelper" target="_blank"  rel="nofollow">https://github.com/metowolf/BilibiliHelper</a></p>
<h3 class="wp-block-heading">2.4 哔哩哔哩弹幕助手</h3>
<p>哔哩哔哩弹幕助手是一个浏览器插件，适用于 Chrome 内核的浏览器。可以实现 <strong> 下载视频、弹幕查询 </strong> 等功能，是一款非常好用的弹幕助手。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）"
             alt="揭秘 B 站（Bilibili）这 4 个最新非常好用又好玩的黑科技（附黑科技 app 软件下载）" loading="lazy" decoding="async" width="988" height="498" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200424223026.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="哔哩哔哩弹幕助手" class="wp-image-788" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200424223026.jpg 988w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200424223026-300x151.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200424223026-768x387.jpg 768w" sizes="(max-width: 988px) 100vw, 988px" /><figcaption>哔哩哔哩弹幕助手</figcaption></figure>
<p></div/></p>
<p>其次，推荐的是一个但是 <strong> 哔哩哔哩 bilibili</strong>弹幕盒子，这个 APP 是可以直接安装到你的电视机顶盒子里面的，以后在电视上看直播的时候也是可以直接实现的相关弹幕的功能哈。</p>
<p>哔哩哔哩弹幕助手下载地址：https://bilibili-helper.github.io</p>
<p><strong>哔哩哔哩 bilibili</strong>弹幕盒子下载地址：https://pan.baidu.com/s/11fzmovFPrheBorz3JQfAyg 提取码: 9k79</p>
<p>以上就是高热度网分享的这 4 个 B 站最新好玩又好用的黑科技电脑手机 APP 软件下载，欢迎大家下载使用！</p>]]></description><link>https://blog.gaoredu.com/article/d0afb9c6-5914-4d4c-8455-b3d040e55f45</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d0afb9c6-5914-4d4c-8455-b3d040e55f45</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 24 Apr 2020 11:54:09 GMT</pubDate></item><item><title><![CDATA[最新Python视频教程（5套）百度网盘免费下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>高热度网提供的最新 Python 视频教程主要包括 python 全栈工程师完整版黑科技视频教程、中谷教育 python 中文视频教程 (python 视频教程)、<strong>Python 实战</strong> 视频教程、小甲鱼零基础入门学习 Python 视频教程全套 96 集、极速 8 天深入理解 Python 教程这 5 套 Python 视频教程百度网盘免费下载。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/t0194a8e70aa6267543.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">Python 视频教程合集免费下载</p>
</div>
</div>
<h2 class="wp-block-heading">1.python 全栈工程师完整版视频教程</h2>
<p>python 全栈工程师完整版视频教程是目前最新最全的 python 视频教程，总共有 92 天的课程，总共有近 62GB 的大小，这套 Python 视频教程从 Python 的基础篇，前端篇，web 框架篇、项目实战篇基本上涉及到了 Python 开发过程中的所有知识点。</p>
<figure class="wp-block-image size-large"><img title="最新 Python 视频教程（5 套）百度网盘免费下载"
             alt="最新 Python 视频教程（5 套）百度网盘免费下载" loading="lazy" decoding="async" width="678" height="487" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/090620_77833932.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="python 全栈工程师完整版视频教程" class="wp-image-770" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/090620_77833932.jpg 678w, https://www.gaoredu.com/wp-content/uploads/2020/04/090620_77833932-300x215.jpg 300w" sizes="(max-width: 678px) 100vw, 678px" /><figcaption>python 全栈工程师完整版视频教程</figcaption></figure/>
<p>python 全栈工程师完整版视频教程百度网盘下载链接：<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1BmZDHsW_fXquamxoh7JH6A" target="_blank" rel="nofollow">https://pan.baidu.com/s/1BmZDHsW_fXquamxoh7JH6A</a>&nbsp; 密码：hcqb</p>
<h2 class="wp-block-heading">2. 中谷教育 python 中文视频教程(python 视频教程)</h2>
<p>中谷教育 python 中文视频教程 (python 视频教程) 是一个十分实用的 python 中文视频教程。高热度网分享的中谷教育 python 中文视频教程 (python 视频教程) 完整版教程非常适合零基础新手入门想自学 python，视频由新手入门到精通讲解了 Python 程序编程的有关专业知识，期望对需要自学 Python 程序编程的有帮助。</p>
<p>中谷教育 python 中文视频教程 (python 视频教程) 百度网盘下载：<a href="https://pan.baidu.com/s/1LKDPwWB6JmtIdERLiFlCmw" target="_blank" rel="noreferrer noopener" rel="nofollow">https://pan.baidu.com/s/1LKDPwWB6JmtIdERLiFlCmw</a> 密码：7xve</p>
<h2 class="wp-block-heading">3.<strong>Python 实战 </strong> 视频教程</h2>
<h3 class="wp-block-heading">3.1 课程简介</h3>
<p>python 实战演练整套教学视频是一个价值 1680 元的 python 视频教程，该视频教程是 Python 的实战篇视频教程，能够帮助我们深层次理解 python 这门语言，而且通过讲授老师的典型案例和实战演练教程让我们变成 python 顶级高手。</p>
<h3 class="wp-block-heading">3.2 教程目录</h3>
<ul class="wp-block-list">
<li>第一节：爬虫入门之爬虫基础了解</li>
<li>第二节：常用的爬虫模块及使用方法</li>
<li>第三节：12306 官网登录详解</li>
<li>第四节：验证码自动输入</li>
<li>第五节：检测余票机制</li>
<li>第六节：下单 1 </li>
<li>第七节：下单 2 </li>
<li>第八节：下单 3 </li>
</ul>
<h3 class="wp-block-heading">3.3 教程下载</h3>
<p>python 实战全套教学视频百度网盘下载链接：<a href="https://pan.baidu.com/s/1xvBf1oImNvA9nOp4vbwb5A" target="_blank" rel="noreferrer noopener" rel="nofollow">https://pan.baidu.com/s/1xvBf1oImNvA9nOp4vbwb5A</a> 密码: 36gs</p>
<h2 class="wp-block-heading">4. 小甲鱼零基础入门学习 Python 视频教程全套 96 集</h2>
<h3 class="wp-block-heading">4.1 课程简介</h3>
<p>小甲鱼零基础入门学习 Python 视频教程前半段分关键介绍 Python3 的语法特性，后半部分着重介绍 Python3 在爬虫、Tkinter、Pygame 游戏软件开发等范例上的使用。所有全系列共 16 个章节目录，前面 13 个章节目录从 1 个小游戏引入 Python，进一步介绍 Python 的语法和语言特色。末尾 3 个章节目录为范例的演示讲解，是前面主要内容的总结和增强。</p>
<h3 class="wp-block-heading">4.2 教程目录</h3>
<ul class="wp-block-list">
<li>第一章 就这么愉快地开始吧</li>
<li>第二章 用 Python 设计一个游戏</li>
<li>第三章 成为高手前必须知道的一些基础知识</li>
<li>第四章 了不起的分支和循环</li>
<li>第五章 列表、元组和字符串</li>
<li>第六章 函数</li>
<li>第七章 字典和集合</li>
<li>第八章 永久储存</li>
<li>第九章 异常处理</li>
<li>第十章 图形用户界面入门</li>
<li>第十一章 类和对象</li>
<li>第十二章 魔法方法</li>
<li>第十三章 模块</li>
<li>第十四章 论一只爬虫的自我修养</li>
<li>第十五章 GUI 的最终选择：Tkinter</li>
<li>第十六章 Pygame : 游戏开发</li>
</ul>
<h3 class="wp-block-heading">4.3 视频教程下载</h3>
<p>小甲鱼零基础入门学习 Python 视频教程全套 96 集下载链接: <a href="https://pan.baidu.com/s/1eRFZwRo#257c" target="_blank" rel="noreferrer noopener" rel="nofollow">https://pan.baidu.com/s/1eRFZwRo</a> 密码: 257c</p>
<h2 class="wp-block-heading">5. 极速 8 天深入理解 Python 教程</h2>
<h3 class="wp-block-heading">5.1 教程目录</h3>
<ul class="wp-block-list">
<li>第一节 1-python 简介和开发环境构建</li>
<li>第二节 2-python 基础数据类型</li>
<li>第三节 3- 字符串处理函数</li>
<li>第四节 4- 字符串处理函数和函数的参数</li>
<li>第五节 5- 面向对象</li>
<li>第六节 6- 模块</li>
<li>第七节 7- 文件操作</li>
<li>第八节 8- 文件读写指针操作</li>
<li>第九节 9- 应用案例一</li>
<li>第一十节 10- 应用案例二</li>
<li>第一十一节 11- 网络编程 requests 模块</li>
<li>第一十二节 12- 网络编程 socket 编程</li>
<li>第一十三节 13-python 调用 c 和 c ++ 模块</li>
<li>第一十四节 14-python 无缝调用 c </li>
<li>第一十五节 15. 服务器架构</li>
<li>第一十六节 16.django 演示</li>
</ul>
<h3 class="wp-block-heading">5.2 教程下载</h3>
<p> 8 天深入理解 Python 教程下载链接: <a href="https://pan.baidu.com/s/1rwfBKxKUuyiJn_ZvxjYFoQ" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1rwfBKxKUuyiJn_ZvxjYFoQ</a> 提取码: ucj2</p>
<p>以上就是高热度网整理的最新 5 套 Python 视频教程，这对于大伙们无论是 Python 基础入门或者进阶学习都是非常不错的黑科技视频教程下载资源哈，同时提供了相关的百度网盘免费下载地址。</p>
]]></description><link>https://blog.gaoredu.com/article/1deec7d7-c59e-41ac-a0d0-83fbd74bed52</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1deec7d7-c59e-41ac-a0d0-83fbd74bed52</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 22 Apr 2020 13:25:25 GMT</pubDate></item><item><title><![CDATA[最新Windows永久激活,Office激活,Visio,Server,Project全系列万能永久激活教程（亲测可用，附激活工具下载）]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>本套最新 Microsoft 系列黑科技软件万能激活教程适用于 Microsoft Win7 激活、Win8 激活、Win10 激活等所有系列的 Window 操作系统，Office 激活（Word，Excel，PowerPoint 激活），Visio 激活，Project 激活等软件的激活，亲测可用。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/windows10.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">如何激活 Win7，Win8，Win10，Office 呢？</p>
</div>
</div>
<h2 class="wp-block-heading">一、Microsoft 系列产品简介</h2>
<p>微软（微软公司或美国微软公司），英文名称为 <strong>Microsoft</strong>，是一家美国跨国科技公司。目前微软这家黑科技公司开发出了 <strong>Windows、Word、PowerPoint、Excel 和、Outlook、OneNote、Visio、OneDrive </strong> 这些非常好用的黑科技产品。</p>
<p>在这些产品中，<strong>Windows</strong>操作系统也是目前全球使用人数最多的一个黑科技系统了，深受人们的喜欢。但是对于一个正版操作系统，激活成本至少在几千元左右。那么，如何永久免费激活这些微软公司这些非常好用的软件呢？下面我们来一起看一下这个通用的 <strong>Windows</strong> 激活教程，经过笔者的亲自实践测试，发现这也同样适用于 <strong>Microsoft Server，Microsoft Office，Microsoft Visio</strong> 等众多微软的工具软件都可以成功激活。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="640" height="335" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/5ab5c9ea15ce36d3fc942c2b2b97bf83e850b185.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="Microsoft 微软系列产品简介" class="wp-image-752" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/5ab5c9ea15ce36d3fc942c2b2b97bf83e850b185.png 640w, https://www.gaoredu.com/wp-content/uploads/2020/04/5ab5c9ea15ce36d3fc942c2b2b97bf83e850b185-300x157.png 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>Microsoft 微软系列产品简介</figcaption></figure>
<p></div/></p>
<h2 class="wp-block-heading">二、Microsoft 系列软件激活环境准备</h2>
<h3 class="wp-block-heading">2.1 激活环境</h3>
<p>本激活教程主要适用于激活 Microsoft 旗下的 <strong>Windows</strong> 操作系统、<strong>Microsoft Office</strong>，<strong>Visio</strong>绘图软件、<strong>Microsoft Project</strong>等，具体适用的版本范围和激活环境如下。</p>
<p><strong>1.Windows 操作系统 </strong>：主要包含 32 位再到 64 位的系统架构，系统的版本主要有 <strong>Windows95、Windows98、Windows2000、Windows XP、Windows Vista</strong>、<strong>Windows7、Windows8、Windows8.1、Windows 10</strong> 和 <strong>Windows Server</strong>服务器企业级操作系统。该激活教程可以激活 Windows 几乎所有的版本，同时也支持 Windows 服务器版本如 <strong>Server2008 到 Server2016 之间</strong> 的版本。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/win10.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="目前最新的 WIndows10 操作系统" class="wp-image-753" width="518" height="344" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/win10.jpg 400w, https://www.gaoredu.com/wp-content/uploads/2020/04/win10-300x200.jpg 300w" sizes="(max-width: 518px) 100vw, 518px" /><figcaption>目前最新的 WIndows10 操作系统</figcaption></figure>
<p></div/></p>
<p><strong>2.Microsoft Office：</strong>主要有 <strong>Word，Excel，PowerPoint，Visio</strong> 等软件。该激活教程适用于 <strong>Office2010-2019 ProPlus</strong> 之间的版本，对于 <strong>visio</strong> 这个绘图软件也同样适用。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="500" height="239" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/office.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="Microsoft Office 全系列产品" class="wp-image-754" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/office.jpg 500w, https://www.gaoredu.com/wp-content/uploads/2020/04/office-300x143.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><figcaption>Microsoft Office 全系列产品</figcaption></figure>
<p></div/></p>
<p><strong>3.Microsoft Project：</strong>这是微软推出的一款项目管理工具，该软件界面简洁、功能强大，可以帮助你和他人协同办公，进行项目的跟踪、执行等。该激活教程也适用于 <strong>Project 2010-2019 Pro</strong> 之间的版本。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="1024" height="296" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/microsoft_project-1024x296.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-755"srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/microsoft_project-1024x296.png 1024w, https://www.gaoredu.com/wp-content/uploads/2020/04/microsoft_project-300x87.png 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/microsoft_project-768x222.png 768w, https://www.gaoredu.com/wp-content/uploads/2020/04/microsoft_project-1536x444.png 1536w, https://www.gaoredu.com/wp-content/uploads/2020/04/microsoft_project.png 1728w"sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Microsoft Project 项目管理工具</figcaption></figure>
<p></div/></p>
<h3 class="wp-block-heading">2.2 激活工具</h3>
<p>相比于其他软件使用的激活码等方式，这里主要推荐使用 KMS 激活工具、小马激活工具、脚本激活神器 <strong>Microsoft Activation Scripts</strong>、<strong>HEU KMS Activator</strong>、<strong>HWIDGen(Win10 数字激活工具)</strong> 这 5 款亲测好用的激活神器。</p>
<h4 class="wp-block-heading">1.KMS 激活工具</h4>
<p><strong>KMS</strong>激活工具是目前激活成功率最高的 <strong>Windows</strong> 激活工具，可以激活任何版本的 <strong>window 系统</strong> 和任何版本的 <strong>Office 软件</strong>，<strong> 它在无需联网的状态下 </strong> 完美即可激活。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="316" height="445" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418125933.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="Microsoft KMS 神龙版激活神器" class="wp-image-756" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418125933.jpg 316w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200418125933-213x300.jpg 213w" sizes="(max-width: 316px) 100vw, 316px" /><figcaption>Microsoft KMS 神龙版激活神器</figcaption></figure>
<p></div/></p>
<h4 class="wp-block-heading">2. 小马激活工具</h4>
<p><strong>WIn7</strong>专用激活工具适用于 <strong>Windows7</strong> 操作系统，小班激活工具也可以激活 <strong>Windows</strong> 操作系统下的大部分版本。此外，鉴于三星笔记本的特殊性，这里也提供了一款三星笔记本 Win7 激活工具用于专门激活三星电脑的 <strong>Win7</strong> 系统。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="408" height="188" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-757"srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131024.jpg 408w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131024-300x138.jpg 300w"sizes="(max-width: 408px) 100vw, 408px" /><figcaption>Win7 激活程序，三星笔记本 Win7 激活工具，小马激活工具</figcaption></figure>
<p></div/></p>
<h4 class="wp-block-heading">3. 脚本激活神器—Microsoft Activation Scripts</h4>
<p>脚本激活神器 <strong>Microsoft Activation Scripts</strong> 是一款绿色无污染的激活脚本。其中数字激活适用于 <strong>Windows10</strong> 系统，KMS38 激活适用于 <strong>Windows10</strong> 或<strong>Windows Server</strong>服务器的激活，在线 KMS 激活适用于 <strong>WIndows</strong>，<strong>Server</strong> 和<strong>Office</strong>软件的永久激活。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="470" height="346" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131617.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="脚本激活神器—Microsoft Activation Scripts" class="wp-image-758" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131617.jpg 470w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131617-300x221.jpg 300w" sizes="(max-width: 470px) 100vw, 470px" /><figcaption>脚本激活神器—Microsoft Activation Scripts</figcaption></figure>
<p></div/></p>
<h4 class="wp-block-heading">4.HEU KMS Activator</h4>
<p><strong>HEU KMS Activator</strong>在无需联网的条件下（离线全自动激活软件）也可以一键激活你的 <strong>Microsoft Windows</strong> 和<strong>Microsoft Office</strong>软件，可以安装 / 卸载自动续期功能，一键激活 <strong>WIndows</strong>/<strong>Office</strong>，查看<strong>Windows</strong> 和<strong>Office</strong>的激活状态等功能。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="285" height="423" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131941.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="HEU KMS Activator Windows 和 Office 激活工具" class="wp-image-759" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131941.jpg 285w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200418131941-202x300.jpg 202w" sizes="(max-width: 285px) 100vw, 285px" /><figcaption><strong>HEU KMS Activator</strong> Windows 和 Office 激活工具</figcaption></figure>
<p></div/></p>
<h4 class="wp-block-heading">5.HWIDGen(Win10 数字激活工具)</h4>
<p><strong>Windows</strong> <strong>10</strong>系统下专业的数字权利激活工具，这款 <strong>Win10</strong> 数字权利获取工具，可以自动获取 <strong>Windows 10 </strong> 数字许可证激活，无需产品密钥，以最简单的方式永久激活。如果你是要激活 <strong>Win10</strong> 操作系统的话，使用这款激活软件准没错！</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" loading="lazy" decoding="async" width="500" height="275" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418132304.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="HWIDGen(Win10 数字激活工具)" class="wp-image-760" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200418132304.jpg 500w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200418132304-300x165.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><figcaption>HWIDGen(Win10 数字激活工具)</figcaption></figure>
<p></div/></p>
<h2 class="wp-block-heading">二、Microsoft 系列软件万能激活教程</h2>
<p>有了上面的这几款激活小工具之后，成功激 <strong>Windows,Office,Visio,Server,Project</strong> 这些黑科技软件就变得非常简单了，使用方法也很简单，但为了确保你的激活过程万无一失，需要注意以下几点。</p>
<p><strong>1.</strong>激活前请看准你的产品是哪一种类型的。本激活教程适用于 <strong>windows</strong> 系统，<strong>Microsoft office</strong>办公软件，<strong>Microsoft Server</strong>等软件，如果你的软件不是这些的话，可能并不适用。同时看准每一款激活工具使用的激活环境和适用范围。</p>
<p><strong>2.</strong>激活时推荐使用离线激活的方式。这种方式激活很简单，但是需要你断网，无论是拔掉网线或者关闭 <strong>WIFI</strong> 都可以。相比于在线激活的方式，这种方式更加安全可靠。</p>
<p><strong>3.</strong>激活前，请关闭你的电脑杀毒软件。如果你的电脑安装了杀毒软件的话，请提前关闭，因为系统在激活的过程中会有写入注册表等操作，可能会被你的电脑杀毒软件拦截而导致激活失败。</p>
<p>以上就是高热度网的 <strong>Microsoft</strong> 系列软件万能软件激活的黑科技教程，同时也分享了相关的 5 款激活小工具，最后祝大家激活软件顺利。</p>
<p class="has-very-light-gray-background-color has-background"><strong>Microsoft 万能激活小工具合集免费下载链接（2020 年 5 月更新）: <a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1ryHeOGFZgBj_9JLWvs1lWQ</a> 提取码: bukj</strong></p>
<p class="has-very-dark-gray-color has-luminous-vivid-orange-background-color has-text-color has-background"><strong>注意 </strong>：<strong><strong>Microsoft</strong> 系列软件万能激活软件 </strong> 经过多次更新传播后，经常会出现链接失效的问题，如果大家在使用的过程中发现链接失效或者无法访问的问题，大家可以通过关注下方的微信公众号，回复“<strong>万能激活工具 </strong>”，即可获取最新的<strong><strong><strong>Microsoft</strong> 系列软件万能激活软件</strong></strong>。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）"
             alt="最新 Windows 永久激活,Office 激活,Visio,Server,Project 全系列万能永久激活教程（亲测可用，附激活工具下载）" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""/><figcaption>关注“微信公众号”免费获取资源解压密码</figcaption></figure>
<p></div/><br />
<p class="has-luminous-vivid-orange-color has-text-color"></p>]]></description><link>https://blog.gaoredu.com/article/0b427824-7081-4176-bc26-d680673be74f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0b427824-7081-4176-bc26-d680673be74f</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Apr 2020 06:17:43 GMT</pubDate></item><item><title><![CDATA[学霸的黑科技系统是什么？学霸的黑科技系统最新章节txt下载和喜马拉雅有声阅读免费下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>学霸的黑科技系统 </strong> 是什么？学霸的 <strong> 黑科技 </strong> 系统这部小说主要讲述了主角陆舟意外获得一套 <strong> 黑科技系统 </strong>，借助系统不断学习、研究，攻克各种科学难题，登上科学巅峰的故事。高热度网在这里也提供了<strong> 学霸的黑科技系统最新章节 txt 下载 </strong> 和<strong>喜马拉雅有声阅读免费下载</strong>。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/black_technology_system.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">学霸的黑科技系统是什么？</p>
</div>
</div>
<h2 class="wp-block-heading">一、学霸的黑科技系统是什么？</h2>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="学霸的黑科技系统是什么？学霸的黑科技系统最新章节 txt 下载和喜马拉雅有声阅读免费下载"
             alt="学霸的黑科技系统是什么？学霸的黑科技系统最新章节 txt 下载和喜马拉雅有声阅读免费下载" loading="lazy" decoding="async" width="640" height="597" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/timg-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="学霸的黑科技系统小说封面" class="wp-image-740" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/timg-1.jpg 640w, https://www.gaoredu.com/wp-content/uploads/2020/04/timg-1-300x280.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>学霸的黑科技系统小说封面</figcaption></figure>
<p></div/></p>
<p>“<strong>系统，积分能兑钱吗？”“不能。”“干，那我要你何用！”“本系统能让你当上学霸，全人类的爸爸那种，你还要钱有什么用？</strong>”。这句话出自《学霸的黑科技系统》这本都市科幻小说的一句专业术语，相信它是能让你爱上学习的一本书！最终平步青云，走向学霸之巅！</p>
<p>在高热度网的黑科技百科全书里面，《学霸的黑科技系统》别名也叫做 <strong>《我要当学霸》</strong>，目前这部科幻小说还在更新连载当中，目前已更新至第<strong>1617 章</strong>——<strong> 从火星寄来的信 </strong>，现在已发布的文字总共高达<strong>385.5 万字</strong>。是连载于起点中文网的一部小说，作者是<strong> 晨星 LL</strong>。该小说讲述了主角陆舟意外获得一套 <strong> 黑科技系统</strong>，借助系统不断学习、研究，攻克各种科学难题，登上科学巅峰的故事。目前这本书在豆瓣上的评分是<strong>7.9 分</strong>，看得出来这本书还是很受大家的欢迎的！</p>
<h2 class="wp-block-heading">二、《学霸的黑科技系统》内容介绍</h2>
<h3 class="wp-block-heading">2.1 剧情人物介绍</h3>
<p><strong>陆舟 </strong>：男主角。现已激活“尊者”基因，“凌云”奖章获得者。因意外获得<strong> 系统 </strong>，在系统帮助下不断攀登科学巅峰。在普林斯顿毕业后留校任教，后回国创立金陵高等研究所。先后解答多个<strong> 数学、化学、物理世界难题 </strong>，统一了<strong> 代数与几何</strong>。Z 粒子的发现者，并使超光速航行成为可能，现已来到 100 年后的世界。</p>
<p><strong>陈玉珊 </strong>：女主角，陆舟学姐，女友。星空科技（陆舟的专利管理公司）公司架构设计者（陆舟在不知情下恰好委托了陈玉珊的导师设计公司架构，陈玉珊也因此忙碌了很久）。曾担任<strong> 星空科技总经理</strong>。在锂空电池之战中一战成名，打破外界对其能力的质疑。现不知去向。</p>
<p><strong>小艾 </strong>：陆舟从系统获得的<strong> 人工智能 </strong>，来自伽蓝文明。拥有自主学习能力，进化潜力巨大，为陆舟的多个科学工程做出重大贡献（仿星器磁场控制，为非正常渠道进口的高精度机床裸机编写系统等）。具有强大的<strong> 网络攻防 </strong> 能力，在针对国际月面强子对撞机研讨会的网络战中打爆对手 <strong> 黑客 </strong> 组织“掠食之鹰”，包括头目等成员落网。</p>
<p><strong>韩梦琪 </strong>：陆舟学生，陈玉珊表妹。因陈玉珊介绍，陆舟给韩梦琪做家教而认识。现就读于<strong> 金陵大学 </strong> 计算材料系并在陆舟手下 <strong> 读研</strong>。</p>
<p><strong>薇拉·普尤伊 </strong>：陆舟最具<strong> 数学天赋 </strong> 的学生。<strong>博士 </strong> 毕业后留在普林斯顿。获得菲尔兹奖后因肺癌晚期，被陆舟将其身体冷冻，送到未来，现已苏醒。</p>
<p><strong>王鹏</strong>：陆舟专职保镖兼司机。退伍军人。</p>
<p><strong>颜研</strong>：陆舟专职医生。</p>
<h3 class="wp-block-heading">2.2 本书目录</h3>
<p>第一章 震惊！年薪十万的工作竟然……<br />第二章 学霸的人生不需要解释第 <br /> 三章 真学霸从来不会无所事事 <br /> 第四章 别人刷题我刷书 <br /> 第五章 论抽奖之前洗脸的重要性 <br /> 第六章 一道证明题的答案 <br /> 第七章 在真学霸面前，一切凡人都是渣渣 <br /> 第八章 线性算子和线性泛函的最优反演理论 <br /> 第九章 我怕是读了个假大学 <br /> 第十章 我有两个女朋友第十一章 即便是学霸，也有不擅长的东西 <br /> 第十二章 嫉妒使我质壁分离 <br /> 第十三章 你们不嫌丢人，我都嫌丢人！<br />第十四章 打工吧学霸 <br /> 第十五章 积分变现的方法？<br />第十六章 整个一三届，无人能出其右！<br />第十七章 论文发表！（为盟主 Eddy1414 加更！）<br />第十八章 逼死强迫症的 100 经验 <br /> 第十九章 以及坑死宿主的三道任务 <br /> 第二十章 两神带一坑？<br />第二十一章 原来是个老实人 <br /> 第二十二章 论文的正确写作姿势 <br /> 第二十三章 商人与随从的经典建模问题 <br /> 第二十四章 磨合训练第二十五章 好气哦 <br /> 第二十六章 我是谁？我在哪？我在写些啥？<br />第二十七章 脑子太空了，多读点书吧！<br />第二十八章 大一的最后一场班会 <br /> 第二十九章 可能，这就是天赋？<br />第三十章 咱们来下跳棋，我让你先 <br /> 第三十一章 我这人怎么吃都不长肉 <br /> 第三十二章 黑科技的正确操作方式其实是爆肝？<br />第三十三章 暴走的小强 <br /> 第三十四章 不拿钱当钱（第三更）第三十五章 我，辅助，贼六 <br /> 第三十六章 陆哥，出大事儿了！<br />第三十七章 我同意 <br /> 第三十八章 雪中送炭 <br /> 第三十九章 律师函，了解一下（第三更）<br />第四十章 简直瞎胡闹 <br /> 第四十一章 下来收个快递 <br /> 第四十二章 我想当科学家第四十三章 得饶人处且饶人？不存在的 <br /> 第四十四章 来自单身狗的怨念 <br /> 第四十五章 细思恐极 <br /> 第四十六章 夜刷 Python<br />第四十七章 开发个 APP 练手 <br /> 第四十八章 原来写论文也能发家致富 <br /> 第四十九章 亏大了！<br />第五十章 不会学以致用的学霸不是真学霸 <br /> 第五十一章 突如其来的灵感 <br /> 第五十二章 又上热搜了 <br /> 第五十三章 送上门来的贷款第 <br /> 五十四章 呵，学弱 <br /> 第五十五章 请不要把系统的资源浪费在弱智的问题上 <br /> 第五十六章 再穷也不能让孩子输在起跑线上 <br /> 第五十七章 人工智能 eye<br />第五十八章 建模队长 <br /> 第五十九章 想要假条？我考你两道 <br /> 第六十章 国赛开幕！<br />第六十一章 爆肝 72 小时 <br /> 第六十二章 你不挂我瞧不起你 <br /> 第六十三章 至少也是个国奖吧！<br />第六十四章 赛区答辩 <br /> 第六十五章 专家面试 <br /> 第六十六章 全国冠军！<br />第六十七章 玄不改命 <br /> 第六十八章 我可以摸摸你的奖杯吗？<br />第六十九章 神奇的数论 <br /> 第七十章 证明周氏猜想！<br />第七十一章 学霸的快乐你想象不到 <br /> 第七十二章 德利涅教授的惊叹 <br /> 第七十三章 我还不想上天第七十四章 关于系统的秘密 <br /> 第七十五章 调教人工智能的正确姿势是？<br />第七十六章 功利点好第七十七章 要人老命的三个任务 <br /> 第七十八章 回答钱学森之问！第七十九章 记者到楼下了！<br />第八十章 陆舟，你火了！第八十一章 陆舟暗中观察 <br /> 第八十二章 课都没法上了第八十三章 我还偏不信了！<br />第八十四章 不足以担此殊荣 <br /> 第八十五章 原来是有高人相助 <br /> 第八十六章 向成功人士取经 <br /> 第八十七章 拉人入伙 <br /> 第八十八章 完了，人设全崩了 <br /> 第八十九章 草台班子们的第一场会议 <br /> 第九十章 自作多情是种病 <br /> 第九十一章 物院的科研任务？<br />第九十二章 论玄学在科学研究中的重要性 <br /> 第九十三章 凭本事甩锅 <br /> 第九十四章 你到底行不行 <br /> 第九十五章 这不物理 <br /> 第九十六章 这很数学！<br />第九十七章 不许放我鸽子！<br />第九十八章 这不科学 <br /> 第九十九章 学霸都是这画风吗？<br />第一百章 结题！第一百零一章 一点微小的贡献 <br /> 第一百零二章 投个五百万试试水 <br /> 第一百零三章 洗脸救不了非洲人第一百零四章 意料之中的结局 <br /> 第一百零五章 人生中最悲伤的事情，莫过于……<br />第一百零六章 因吹斯汀第一百零七章 赢者通吃 <br /> 第一百零八章 这万恶的资本主义 <br /> 第一百零九章 对于学霸而言，证书这东西总不嫌多 <br /> 第一百一十章 祝你前程似锦！<br />第一百一十一章 微笑中透露着贫穷第一百一十二章 年度人物颁奖！<br />第一百一十三章 牛人辈出 <br /> 第一百一十四章 托福考试 <br /> 第一百一十五章 装逼也得找准对象 <br /> 第一百一十六章 不是很懂你们二次元 <br /> 第一百一十七章 抵达普林斯顿！<br />第一百一十八章 见证历史的时刻？<br />第一百一十九章 绅士风度 <br /> 第一百二十章 那一闪而逝的白鸽第一百二十一章 数学家们的舞会 <br /> 第一百二十二章 灵感迸发的世界 <br /> 第一百二十三章 天才？疯子？<br />第一百二十四章 见证伟大的时刻 <br /> 第一百二十五章 我只想回去睡一觉 <br /> 第一百二十六章 闭幕式 <br /> 第一百二十七章 等级突破！</p>
<p>………………</p>
<p>此外，《学霸的黑科技系统》中总共涉及了主干科学、数学、物理学、生物学、工程学、材料学、能源学和信息学这 8 大学科，基本上和我们现在高中生开设的课程也很类似哈，是真正意义上名副其实的的学霸黑科技了!</p>
<p><strong>主干科学</strong>：等级上限十级，科技树满点解锁未来时代。<strong>A. 数学</strong>：一切学科基础，决定其余科技树上限。<strong>B. 物理学</strong>：它能帮助你认清宇宙。<strong>C. 生化学</strong>：它能帮助你认清自己。<strong>D. 工程学</strong>：改造工具，改造环境，改造世界。<strong>E. 材料学</strong>：材料与工程不可分割<strong>F. 能源学</strong>：从化石燃料到氦三，从固态锂空气电池到反物质电池，从无线输电到超远距离激光传导，生命以负熵为食，能源发展的尽头，在遥远的星辰大海……<strong>G. 信息学</strong>：遗传学是上帝的代码，而代码的终极目标是创造上帝。</p>
<h2 class="wp-block-heading">三、最新《学霸的黑科技系统》资源免费下载</h2>
<p>对于《学霸的黑科技》系统这本电子书，高热度网也提供了两种资源类型，如果你是更喜欢阅读原汁原味的电子书的话，那么推荐你直接下载学霸的黑科技系统最新章节 <strong>txt 电子书</strong>，你也可以直接<strong> 在线阅读 </strong> 这本科幻小说。</p>
<p><strong>《学霸的黑科技系统》喜马拉雅有声阅读 mp3 格式百度网盘下载链接: https://pan.baidu.com/s/1roMhWYQU1iiBs1RvCdEKWA 提取码: hem8</strong></p>
<p>如果你更喜欢夜读的方式，那么推荐你直接使用喜马拉雅有声阅读的类型。</p>
<p><strong>《学霸的黑科技系统》txt 下载百度网盘下载链接: https://pan.baidu.com/s/1I5mQJeVAtDqz6bryx9REuw 提取码: s4xa</strong></p>
<p>以上就是高热度网整理了关于目前互联网最新的非常火热的一部科幻小说，详细你现在也应该对“学霸的黑科技系统”由一定了解了吧，如果你一直热衷于黑科技系统或者沉迷于学习无法自拔的话，这本书就再适合你不过了, 快去试试吧！</p>]]></description><link>https://blog.gaoredu.com/article/d9f04092-35d9-49d3-9194-beb2d96b425b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d9f04092-35d9-49d3-9194-beb2d96b425b</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 16 Apr 2020 00:44:08 GMT</pubDate></item><item><title><![CDATA[黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“黑匣子”这个词对于大家来说应该都不陌生，可能大家在新闻中也听说过这个名词，但是如果真是要大家说一下黑匣子的含义，估计未必会有人能够准确地 描述出黑匣子的定义。那么，我们常说的黑匣子究竟是什么东西呢？黑匣子中一暗藏了哪些黑科技技术呢？让我们来一起一探究竟。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/032b81581f0320648ca042fb13bf8751.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">黑匣子是什么呢？</p>
</div>
</div>
<h2 class="wp-block-heading">一、黑匣子是什么东西？</h2>
<h3 class="wp-block-heading">1.1 黑匣子的概念</h3>
<p><strong>黑匣子 </strong> 英文全称为 <strong>Black Box</strong>，从字面意思上来看意为“黑色的盒子”，但实际上它原本也算是黑色的盒子，只不过现在的黑匣子都已<strong> 被涂成橙色或黄色 </strong>，或者是<strong> 桔红色 </strong>。我们一般说的黑匣子一般指的是飞机或车辆上专用的电子设备，可用来记录<strong> 飞行 </strong> 和<strong>性能 </strong> 等重要参数，当一个飞机或者车辆发生事故或遇难后，在没有留下任何追踪线索的情况下，根据这个 <strong> 外观醒目 </strong> 的“黑匣子”里面的 <strong> 线索 </strong>，可以<strong> 重现事故的过程 </strong>，形象地<strong> 分析事故的原因 </strong>。所以现在我们现在所说的黑匣子也被称作“<strong> 电子飞行数据记录仪</strong>”。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" width="640" height="463" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-13_222236.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="被染成橘红色的黑匣子的外观形状" class="wp-image-705" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-13_222236.jpg 640w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-13_222236-300x217.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-13_222236-385x280.jpg 385w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>被染成橘红色的黑匣子的外观形状</figcaption></figure>
<p></div/></p>
<h2 class="wp-block-heading">1.2 黑匣子的发展史</h2>
<p>自从 1903 年美国莱特兄弟驾驶飞机飞行之后，就开启了人类征服蓝天的大门，但是人类在飞天之路上却付出了和很多次惨痛的代价。对此，人们开始对黑匣子进行了探索，在这个漫长的探索过程中，黑匣子的发展可以概括为四代黑匣子，具体如下：<br /><strong>1. 第一代黑匣子</strong></p>
<p><strong>第一代黑匣子 </strong> 诞生于上世纪 50 年代初，是在飞机设计试飞记录设备的基础上改进而来的，其 <strong> 工作原理 </strong> 为通过在金属箔带上用针留下划痕来反映数据变化曲线，仅能记录 <strong> 航向、高度、空速、垂直过载和时间 </strong> 等 5 个飞行参数。这个时候的黑匣子发展还处于起步阶段。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/t01171cc2c4e47f81cb.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="第一代黑匣子外观形态结构" class="wp-image-706" width="316" height="235"/><figcaption>第一代黑匣子外观形态结构</figcaption></figure>
<p></div/></p>
<p><strong>2. 第二代黑匣子</strong></p>
<p><strong>第二代黑匣子 </strong> 出现于 <strong> 上世纪 50 年代末 </strong>，其<strong> 工作原理 </strong> 类似于普通磁带机，但在磁带机外面加装了具有抗冲击、耐火烧等能力的保护外壳。第二代黑匣子一般可以记录 <strong> 几十个参数</strong>，并同时出现了座舱音频记录器。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" width="570" height="368" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/t0193e4e87903a8b444.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="第二代黑匣子外观形态结构" class="wp-image-707" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/t0193e4e87903a8b444.png 570w, https://www.gaoredu.com/wp-content/uploads/2020/04/t0193e4e87903a8b444-300x194.png 300w" sizes="(max-width: 570px) 100vw, 570px" /><figcaption>第二代黑匣子外观形态结构</figcaption></figure>
<p></div/></p>
<p><strong>3. 第三代黑匣子</strong></p>
<p><strong>第三代黑匣子 </strong> 出现于上世纪 90 年代。随着微电子技术的突飞猛进，黑匣子开始采用 <strong> 半导体存储器 </strong> 记录数据。第三代黑匣子记录参数一般在 <strong> 几百个 </strong>，功能已从飞行事故调查，逐渐延伸到日常<strong> 飞行员监控、飞机故障诊断与维护 </strong> 中。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" width="592" height="414" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/t018e032f0c6f986e11.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="第三代黑匣子外观形态结构" class="wp-image-708" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/t018e032f0c6f986e11.png 592w, https://www.gaoredu.com/wp-content/uploads/2020/04/t018e032f0c6f986e11-300x210.png 300w" sizes="(max-width: 592px) 100vw, 592px" /><figcaption>第三代黑匣子外观形态结构</figcaption></figure>
<p></div/></p>
<p><strong>4. 新一代黑匣子</strong></p>
<p><strong>新一代黑匣子 </strong> 也可以叫做是第四代黑匣子，它可以记录 <strong> 视频信息 </strong>，记录的参数数量也多达<strong> 几千个 </strong>，并且能够通过卫星等数据链定期传输黑匣子的关键数据。此外，新型抛放式黑匣子也已经出现，它能够在飞机坠毁时自动与机体分离，并具备<strong> 水上漂浮和无线电、卫星定位 </strong> 功能。新一代的“黑匣子”这个黑科技系统实际上是由“黑匣子”和飞行员与地面管制中心之间的联络员两部分组成，也就是实现了数据的 <strong> 双重备份与同步 </strong>。新一代“黑匣子”的运作方式，换成比较大众的说法就是在上一代“移动硬盘”的基础上，采用了<strong>“移动硬盘 + 云盘”</strong> 的概念。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" width="640" height="426" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/xinheixiazi.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-709"srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/xinheixiazi.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/04/xinheixiazi-300x200.jpeg 300w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>俄罗斯的的第四代“新黑匣子”外观形态结构</figcaption></figure>
<p></div/></p>
<h2 class="wp-block-heading">二、黑匣子有什么用？</h2>
<p>黑匣子主要由 <strong> 基座 </strong> 和<strong>坠毁生存单元 </strong> 两部分构成。<strong>基座 </strong> 用于 <strong> 支撑和固定坠毁生存单元 </strong>，并与飞机连接。<strong> 坠毁生存单元 </strong> 是黑匣子的 <strong> 核心部件 </strong>，内部安装有数据存储卡，外部被多个保护层包裹，使其<strong> 防撞击挤压、耐高温、抗腐蚀 </strong>。飞机上一般会同时安装“<strong> 飞行数据记录器 </strong>”（简称 FDR）和“<strong> 驾驶舱语音记录器 </strong>”（简称 CVR）这两个黑匣子，<strong> 前者 </strong> 用于记录飞机飞行高度、速度、航向等 <strong> 飞行状况 </strong> 和机上 <strong> 设备工作情况 </strong>，<strong> 后者 </strong> 用于记录驾驶舱机组人员的 <strong> 话音 </strong> 和<strong>舱内其他声响</strong>。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" width="517" height="329" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/c995d143ad4bd113c097ac0b56afa40f4bfb05b4-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-710"srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/c995d143ad4bd113c097ac0b56afa40f4bfb05b4-1.jpg 517w, https://www.gaoredu.com/wp-content/uploads/2020/04/c995d143ad4bd113c097ac0b56afa40f4bfb05b4-1-300x191.jpg 300w"sizes="(max-width: 517px) 100vw, 517px" /><figcaption>黑匣子在整架飞机上的具体位置</figcaption></figure>
<p></div/></p>
<h2 class="wp-block-heading">三、黑匣子中暗藏了什么黑科技呢？</h2>
<p>对于黑匣子，单从名字看起来就是那么神秘，所以在研制黑匣子的过程中也必定暗藏了不少黑科技，我们可以看看下面的这个黑匣子的内部细节图。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技"
             alt="黑匣子是什么东西？揭秘黑匣子中暗藏的黑科技" loading="lazy" decoding="async" width="600" height="509" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/9a504fc2d56285350baa771899ef76c6a7ef6345.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="黑匣子内部涉及到的黑科技技术" class="wp-image-711" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/9a504fc2d56285350baa771899ef76c6a7ef6345.jpg 600w, https://www.gaoredu.com/wp-content/uploads/2020/04/9a504fc2d56285350baa771899ef76c6a7ef6345-300x255.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption>黑匣子内部涉及到的黑科技技术</figcaption></figure>
<p></div/></p>
<p>黑匣子的 <strong> 外壳 </strong> 通常由强度极高的 <strong> 钛合金和铝合金 </strong> 制成，除了抗冲击之外，钛合金外壳还具有极强的 <strong> 耐腐蚀性 </strong>。为了提供<strong> 耐高温性能 </strong>，据相关报道称黑匣子隔热材料包括了<strong> 涂层 </strong>、<strong> 纳米超级隔热材料 </strong>，很有可能是具有极低热导率的<strong> 熔融石英材料 </strong> 或<strong>纤维 - 多孔陶瓷复合材料</strong>。</p>
<p>在这套超强的“黑匣子”外壳之内，黑匣子的心脏是 <strong> 飞行数据记录仪 </strong>，主要包含<strong> 飞行数据记录器、声音记录器、抗冲击存储器、内置电源和信号发生器 </strong> 几个部分，记录了飞机的 <strong> 飞行高度、速度，发生事故 </strong> 前半小时内飞机内的声音等各种信息。记录仪的核心主要是 <strong> 磁记录材料 </strong>，可能用到的黑科技材料是<strong>Fe、Co、Ni 基合金永磁体</strong>，或者采用闪存式存储器；信号发射器以<strong> 铁氧体 </strong> 为基础；而内部电源则是 <strong> 锂电池 </strong>。此外，为了进一步提高黑匣子的<strong> 可靠性 </strong>，我们可<strong> 选择密度更低、强度更高、耐腐蚀性更强的合金外壳 </strong> 来对黑匣子的性能进一步优化；采用 <strong> 存储晶片 </strong> 代替磁性存储元件，提高存储稳定性；采用更稳定的电源，提高黑匣子的供电时间。这对于自身电源是有限的“黑匣子”来说，也大大延长了黑匣子被成功搜索到的几率。</p>
<p>最后，以上就是高热度网分享的这个黑科技百科之黑匣子是什么的话题。通过 2009 年法航事故和 2014 年马航事故可以知道，目前的“黑匣子”和“黑科技”已经暴露出海上航空事故后应急定位功能缺失、传统黑匣子定位和打捞技术手段不足、周期长、耗资巨大等问题。黑匣子如何满足类似事故救援和调查的需要，也仍然当前行业内研究的重要课题。</p>]]></description><link>https://blog.gaoredu.com/article/2bcea156-38b6-4930-8707-9d5994ebbac1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2bcea156-38b6-4930-8707-9d5994ebbac1</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 13 Apr 2020 15:39:16 GMT</pubDate></item><item><title><![CDATA[免费好用的ocr软件有哪些？电脑/手机/在线图片文字识别OCR软件最全汇总]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>OCR 就是我们常说的文字识别软件，当我们遇到大量需要将某些图片转换为文字的时候，你的打字速度可能也比不上这些非常免费好用的 ocr 软件了，下面就让我们一起来盘点汇总一下我们常用的电脑、手机、浏览器在线这几个平台图片文字识别 OCR 黑科技实用软件吧。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/20200410213806.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">OCR 文字识别工具最全汇总</p>
</div>
</div>
<h2 class="wp-block-heading">一、OCR 技术和 OCR 软件简介</h2>
<p><strong>OCR </strong>的英文全称为 <strong>Optical Character Recognition</strong>，翻译成为中文就是“光学字符识别”的意思，通常是指利用扫描仪或数码相机等电子设备采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件，并通过识别软件将图像中的文字转换成文本格式，供文字处理软件进一步编辑加工的技术。我们常说的<strong>OCR 软件</strong> 是指将 JPG、PNG、GIF、BMP、DOC 等图片格式的文字内容，直接转换为可编辑文本的软件。</p>
<p>我们可以从下面的 <strong>OCR 软件处理图像的流程图</strong> 中知道，这个文字处理识别的过程主要是首先对 <strong> 光学输入 </strong> 的信息转换为 <strong> 图像 </strong>，然后再通过<strong> 信息转化 </strong> 流程将图像进行 <strong> 计算机识别处理 </strong>，最后再经过<strong> 对比识别 </strong> 和<strong>校对 </strong> 等流程，就可以输出图像上的 <strong> 文本信息 </strong> 了，感兴趣的朋友可以下去再了解一下这块的文字识别原理哈。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="601" height="210" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410204937.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="OCR 软件处理图像的流程图" class="wp-image-622" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410204937.jpg 601w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200410204937-300x105.jpg 300w" sizes="(max-width: 601px) 100vw, 601px" /><figcaption>OCR 软件处理图像的流程图</figcaption></figure>
</div/>
<h2 class="wp-block-heading">二、免费好用的 OCR 工具有哪些？如何使用这些 OCR 工具？</h2>
<p>在工作中我们对于需要大量把图片中的文字转换为文本格式的时候，就需要借助这些 OCR 软件来帮助我们完成，一方面是效率非常高，其次呢，识别的准确率也是相当高的呢。那么目前免费好用的 OCR 工具有哪些？如何使用这些 OCR 工具呢？高热度网这里也精心整理了一些非常好用的黑科技 <strong> 手机端 OCR 工具、电脑 PC 端 OCR 工具 </strong>，以及一些比较方便好用的<strong> 在线黑科技网站 OCR 工具</strong>。</p>
<h2 class="wp-block-heading">2.1 手机端 OCR 工具</h2>
<h3 class="wp-block-heading">2.1.1 手机 QQ 自带的文字识别工具</h3>
<p>如果在不想安装其他额外的软件的情况下，推荐大家可以直接使用手机 QQ 下隐藏的这一黑科技，估计大家只要上网聊天都还会使用 <a href="https://www.qq.com/" target="_blank"  rel="nofollow"> 腾讯</a>QQ 或者微信吧，所以让我们来看看如何开启这个手机 QQ 下的文字识别黑科技呢？</p>
<p>首先，打开你的手机 QQ，版本尽量是最新版的。接着就可以让你的朋友把需要转换的目标图片发到你的手机 QQ 上面，然后点开他的消息，查看这张图片。接着“<strong>长按图片 </strong>”就会自动出现这个手机黑科技了。就如下图的“<strong> 提取图中文字</strong>”选项。</p>
<p>接着，我们来看看这个转换效果怎么样？</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="796" height="447" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_232518.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="手机 QQ 的崎岖图像中的文字功能" class="wp-image-642" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_232518.jpg 796w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_232518-300x168.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_232518-768x431.jpg 768w" sizes="(max-width: 796px) 100vw, 796px" /><figcaption>手机 QQ 的提取图中文字功能</figcaption></figure>
</div/>
<h3 class="wp-block-heading">2.1.2 安卓手机 APP 下的 OCR 工具推荐</h3>
<p><strong>万能拍照识别 app</strong>这是一款功能较为全面的拍照识别软件，目前可以拍照识别九国文字；可拍照识别 植物花卉品种、动物品种、菜肴名称、车型、商标，还包括通用物品识别；支持从手机内存选取图片识别；识别文字后可一键复制；显示识别结果后可一键搜索更多资料。是目前发现的功能最完善的文字识别工具了，而且不仅仅是文字识别哈！</p>
<p>我们也来看一下这一款 app 识别的效果吧!</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="642" height="451" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410213345.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="万能拍照识别手机 app 文字识别效果" class="wp-image-626" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410213345.jpg 642w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200410213345-300x211.jpg 300w" sizes="(max-width: 642px) 100vw, 642px" /><figcaption>万能拍照识别 APP 文字识别效果</figcaption></figure>
</div/>
<p><strong>万能文字识别软件安卓黑科技 APP 版本免费下载 </strong> 链接: <a href="https://pan.baidu.com/s/1LIvqzz3uaNmwrXYrPqb7hw" target="_blank"  rel="nofollow"><strong>https://pan.baidu.com/s/1LIvqzz3uaNmwrXYrPqb7hw</strong></a> 提取码: 3eas</p>
<h3 class="wp-block-heading">2.1.3 苹果 IOS 手机 APP 下的 OCR 工具</h3>
<p>苹果手机这里主要推荐的是下面这款苹果黑科技手机 app，大家可以直接在苹果商店免费下载使用。支持在拍摄页面, 可以使用手工和自动识别两种功能, 自动识别功能会自动识别文本区域, 手工识别可以可以在拍摄完成后手工剪裁自己需要的识别区域；同时也支持最多 9 张图片批量识别, 批量识别功能，更多功能大家可以下载下来自行尝试。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="344" height="617" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_214532.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="苹果手机 OCR 文字识别效果" class="wp-image-628" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_214532.jpg 344w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-10_214532-167x300.jpg 167w" sizes="(max-width: 344px) 100vw, 344px" /><figcaption>苹果手机 OCR 文字识别效果</figcaption></figure>
</div/>
<p>苹果手机识图取字 Appstore 免费下载链接:</p>
<p><strong><a href="https://apps.apple.com/cn/app/id1442750002" target="_blank"  rel="nofollow">https://apps.apple.com/cn/app/id1442750002</a></strong></p>
<h2 class="wp-block-heading">2.2 电脑（PC）端 OCR 工具</h2>
<p>电脑平台下的 OCR 识别工具就比较多了，这里整理了 2 个非常好用免费的 PC 端的电脑黑科技文字识别软件，分别是：</p>
<p>1.<strong>PandaOCR</strong>——电脑端功能强大的一款 OCR 工具，软件运行时伴有语音提示，识别成功的同时自动翻译为英文并朗读（这个可以在设置里关掉），总体体验非常不错，电脑端首推这款。下面是使用这款电脑软件进行识别的效果。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="576" height="376" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410215806.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="PandaOCR 软件文字识别效果" class="wp-image-629" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410215806.jpg 576w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200410215806-300x196.jpg 300w" sizes="(max-width: 576px) 100vw, 576px" /><figcaption><strong>PandaOCR</strong>软件文字识别效果</figcaption></figure>
</div/>
<p>2.<strong>Coco 多语言图像识别 </strong> 这款识别软件也很不错，而且 <strong> 支持识别日文韩文</strong>，如果你需要识别其他不同语种的话，那么这款软件绝对可以帮到你。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="574" height="330" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410215956.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="Coco 多语言图像文字识别软件" class="wp-image-630" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410215956.jpg 574w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200410215956-300x172.jpg 300w" sizes="(max-width: 574px) 100vw, 574px" /><figcaption>Coco 多语言图像文字识别软件</figcaption></figure>
</div/>
<p>下面，放上这两个电脑版 OCR 文字识别软件的免费下载地址：</p>
<p><a href="https://www.lanzous.com/b05rp2b5g" target="_blank"  rel="nofollow"><strong>https://www.lanzous.com/b05rp2b5g</strong></a></p>
<h2 class="wp-block-heading">2.3 在线 OCR 工具</h2>
<p>如果你只是想临时转换一些资料的话，或者不想安装一些软件的话，下面的这个在线 OCR 黑科技网站转换工具应该可以更快地帮助到你，不妨来试试看。JSOCR 这是一个开源项目，也是免费无广告的，使用简单，功能齐全，你只需要直接将本地图片拖到网页内，几秒钟即可识别，然后左右陈列，方便对比及修改，应该是一个非常实用的在线 OCR 文字识别网站了！</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总"
             alt="免费好用的 ocr 软件有哪些？电脑 / 手机 / 在线图片文字识别 OCR 软件最全汇总" loading="lazy" decoding="async" width="571" height="354" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410222316.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="免费无广告的 OCR 在线文字识别网站" class="wp-image-631" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200410222316.jpg 571w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200410222316-300x186.jpg 300w" sizes="(max-width: 571px) 100vw, 571px" /><figcaption>免费无广告的 OCR 在线文字识别网站</figcaption></figure>
</div/>
<p>GitHub 线上地址：<a href="https://gongpeione.github.io/quick-js-ocr/example/" target="_blank"  rel="nofollow">https://gongpeione.github.io/quick-js-ocr/example/</a></p>
<p>以上就是高热度网分享的最新版图片文字识别 OCR 软件集合，设计到电脑端，安卓和 IOS 苹果移动手机 APP 端，此外，还有一个免费无广告的在线识别网站，大家可以根据自己的需要，选择上面的任意一个黑科技软件工具使用即可。</p>
]]></description><link>https://blog.gaoredu.com/article/3a3ae50a-993e-4374-8f33-d4135219eb2a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3a3ae50a-993e-4374-8f33-d4135219eb2a</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Apr 2020 14:36:12 GMT</pubDate></item><item><title><![CDATA[黑苹果是什么？如何安装黑苹果系统？]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>对于互联网界，对于黑苹果的概念想必大家都不太陌生吧，但是对于一些技术小白或其他领域的一些新人来说，黑苹果这一词就比较晦涩难懂了。那么，黑苹果又是什么黑科技呢？装黑苹果系统的优缺点有哪些呢？本文就带你一探究竟。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/d439b6003af33a87aad674f53fa3f03d5143b5af.jpeg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">黑苹果（系统）究竟是什么呢？</p>
</div>
</div>
<h2 class="wp-block-heading">一、黑苹果（系统）是什么？</h2>
<p>在我们技术领域，我们一般所说的“<strong>苹果 </strong>”一词可不是我们平常吃的苹果哈，一般通常是指苹果公司为 Mac 系列产品开发的专属操作系统<strong>macOS</strong>，macOS 是苹果 Mac 系列产品的预装系统。而我们大部分人使用的苹果手机操作系统<strong>iOS</strong> 实际上也是由苹果公司专门开发的移动操作系统。所以，一般对于互联网这个黑科技领域来说，<strong>苹果公司（Apple）</strong>公司的这些系统都可以统称为“<strong>苹果（系统）</strong>”。</p>
<p>众所周知苹果系统只能是在苹果电脑上使用，它并不像 win 系统一样可以任意安装在 X86 平台的电脑上。因此，<strong>真苹果 </strong> 我们一般叫他 <strong> 白苹果 </strong>，也就是在真正苹果机上安装的苹果系统。但是由于 Mac 系统以其简单易用、设计直观、安全性极高赢得了广大消费者的认可，对于普通人如果需要使用苹果操作系统必须专门购买一个价值上万元的苹果电脑，这对于很多人来说还是比较困难的，但是如何以超级高的性价比来使用苹果操作系统呢？<strong> 黑苹果（系统）</strong>就是一个非常不错的选择。</p>
<p>如果直接把一个原版 macOS 苹果（系统）安装到你的非苹果电脑上面也是不行的。但是，自从苹果采用 Intel 的处理器，<strong>OS X</strong>被黑客破解后可以安装在 <strong>Intel CPU</strong> 与部分 <strong>AMD</strong> CPU 的电脑上。从而出现了一大批非苹果设备就能使用苹果操作系统（<strong> 白苹果系统 </strong>）的机器，这个系统就被称作<strong> 黑苹果</strong>。实际上，在某种意义上来讲，黑苹果也算是一种黑科技系统了吧。</p>
<h2 class="wp-block-heading">二、黑苹果有什么用？</h2>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑苹果是什么？如何安装黑苹果系统？"
             alt="黑苹果是什么？如何安装黑苹果系统？" loading="lazy" decoding="async" width="600" height="338" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/ebcc32d0fede4ffdac809f302c49e3af.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="黑苹果系统四叶草 CLOVER 引导安装界面" class="wp-image-616" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/ebcc32d0fede4ffdac809f302c49e3af.jpg 600w, https://www.gaoredu.com/wp-content/uploads/2020/04/ebcc32d0fede4ffdac809f302c49e3af-300x169.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption>黑苹果系统四叶草 CLOVER 引导安装界面</figcaption></figure>
<p></div/></p>
<p>对于原版的 macOS 操作系统来说，是具有很多优势的。当然，这些优势在被黑客破解之后的系统也同样具有这些优势，我们来看下这个修改后的黑科技电脑系统有什么好处：</p>
<p>1、Mac 系统 <strong> 性能强悍稳定 </strong>，本身<strong> 不会 </strong> 因为电脑安装了大量软件而变的 <strong> 卡顿</strong>；这在我们经常使用的 Windows 操作系统（Win7,Win8,Win10 都存在）这种问题可是一直存在的哦！</p>
<p>2、Mac 系统几乎 <strong> 没有流氓软件 </strong>，所以用 mac 系统根部不需要安装杀毒软件，<strong> 安全性非常高</strong>。因此在你浏览网页的时候不小心下载了流氓软件，那些流氓软件都是针对 win 的，在 mac 下根本没法运行。所以，在 Mac 系统下你的电脑中病毒的概率也是非常低的，你也再也不用安装什么 360 杀毒，金山毒霸和电脑管家等工具了。</p>
<p>3、Mac 系统下只有一些 <strong> 主流的游戏 </strong>，而且系统对<strong> 图形 </strong> 的优化 <strong> 非常好 </strong>，<strong> 显示效果 </strong> 也很棒，但是比如你想在 Mac 系统上玩英雄联盟 LOL 这些网游的话，可就无能无力了。因为英雄联盟并未开发苹果的 ios 系统的游制戏版本（据我所知的网络游戏，包括单机都没有电脑 ios 版本的哈）。</p>
<p>4、非 windows 操作系统能比，具有非常强的 <strong> 办公能力</strong>。同时对高分屏（4K,2K 屏）的支持度很好，这点比 win 做的要好。如果你是打算用来学习或者是商务办公的话，macOS 系统也无疑是首选。</p>
<p>看了上面苹果系统的这些优点，不知道你有没有心动呢？如果你再不打算购买一个苹果电脑的前提下需要直接把你手头的电脑改造成 <strong>macOS 黑苹果系统</strong> 的话，那就动起来吧！</p>
<h2 class="wp-block-heading">三、如何安装使用黑苹果系统？</h2>
<p>这里推荐一个 Windows 安装黑苹果系统的视频教程，大家跟着视频一步步做下来还是很简单的哈。</p>
<p><iframe loading="lazy" src="//player.bilibili.com/player.html?aid=8653761&bvid=BV1Nx411y7Pd&cid=14253125&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" height="500" width="100%"> </iframe></p>
<p>视频中所用镜像和工具下载链接: <a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1o9hRAIY</a> 密码: 4ipx</p>
<p class="has-luminous-vivid-orange-background-color has-background"><strong>注意 </strong>：<strong> 最新黑苹果相应的工具包 </strong> 经过多次更新传播后，经常会出现链接失效的问题，如果大家在使用的过程中发现链接失效或者无法访问的问题，大家可以通过关注下方的微信公众号，回复“黑苹果”，即可获取最新的 <strong> 下载链接</strong>。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter"><a href="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" class="fancybox" data-no-instant target="_blank"><img title="黑苹果是什么？如何安装黑苹果系统？"
             alt="黑苹果是什么？如何安装黑苹果系统？" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""/></a><figcaption>高热度网微信公众号</figcaption></figure>
<p></div/></p>
<p>第一部分是制作 USB 安装引导盘。你想安装系统总要有个介质，要不光盘，要不 U 盘，这是现在最主要的两种安装方式了。然而黑苹果不像普通 Windows，如果是白苹果（正版苹果用户），直接写入镜像就可以像安装 Windows 一样安装，而黑苹果用户，需要用 Clover 进行引导。所以第一部分就是在做引导和写入安装镜像。</p>
<p>第二部分是成功安装。由于黑苹果比较特殊，根据每人的电脑配置不同需要单独调整。并不是像 Windows 安装一样所有的电脑都可以直接装（其实 Windows 也不是都可以装，新老版本的 Windows，不同格式的硬盘，主板，可能都会出现问题，只是相对容易）。所以需要调整 config.plist 和 kexts 来安装。先不考虑所有的功能，能够成功安装好，进入系统，就是第二步的目的。</p>
<p>第三部分是安装驱动文件，从而正常使用大部分功能。包括显卡、网卡、声卡、USB3.0、iCloud 服务。主要也是调整 config.plist 和 kexts。至于为什么不在第二步一次性做好，我举个不恰当的例子，那就是控制变量。我想这点应该都懂，如果出现了问题，变量越少越容易排查。</p>
<p>然后是对于我视频介绍了多种方法，有人建议只推荐一种。这点我并不同意，不同的方法适应不同的人群，今天你自己装觉得用虚拟机装好，明天你给别人远程装也许就希望用 Transmac 一键写入。不同的方法我都说了优劣。以后的视频也会如此。</p>
<h2 class="wp-block-heading">3.1 黑苹果安装步骤</h2>
<p><strong>1. 制作安装盘</strong></p>
<p>在 Mac 下制作安装盘有两个很好用的傻瓜集成软件。两个软件都需要你提前准备好原版的 OSX 安装包和一张 8G 以上的 U 盘。</p>
<p>使用 <strong>myhack</strong> 可以安装 Mavericks 及较早版本的 OSX，只需要插入你的 U 盘，打开 myhack 软件按照提示操作即可，myhack 会帮你把引导和驱动都配置好，接下来只需要重启从 U 盘驱动电脑就可以开始安装啦。</p>
<p>使用 <strong>Unibeast</strong> 可以安装包含 EL Captian 在内的新版本 OSX，同样准备好 U 盘，打开软件一步一步操作，选择你安装对于系统的选项就可以制作好安装盘。接下来也是相同的操作。</p>
<p><strong>2. 引导启动</strong></p>
<p>目前主流的黑苹果引导驱动有 <strong>Clover</strong> 和<strong>Chameleon</strong>两种，现在大多数的笔记本和台式机的主板都支持<strong>UEFI 引导</strong>，它的配置更加简单智能一些，所以推荐大家使用<strong>Clover</strong>。</p>
<p><strong>3. 安装 OSX</strong>系统</p>
<p>当你能成功进入 OSX 的安装界面时，你已经成功一半了。按照正常的步骤流程一步一步进行就好。</p>
<p><strong>4. 配置驱动</strong></p>
<p>当你进入 OSX 的界面后，你还需要给你的黑苹果系统安装驱动，这里推荐大家使用 <strong>Hackintosh Vietnam Tool</strong> 工具，只需要打开软件，选择你电脑对应的声卡、网卡、显卡型号，确认安装即可，安装横岗之后然后重启电脑后你的黑苹果就一切正常了。</p>
<h2 class="wp-block-heading">3.2 黑苹果基本使用</h2>
<p>这里主要就介绍一下黑苹果系统上的一些常用快捷键使用方法教程吧。首先要注意的是由于你只是换了一个系统，但是你的电脑本身并没有换，所有有些按键需要对应起来。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑苹果是什么？如何安装黑苹果系统？"
             alt="黑苹果是什么？如何安装黑苹果系统？" loading="lazy" decoding="async" width="1000" height="463" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/timg.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="苹果电脑的键盘界面" class="wp-image-648" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/timg.jpg 1000w, https://www.gaoredu.com/wp-content/uploads/2020/04/timg-300x139.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/timg-768x356.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /><figcaption>苹果电脑的键盘界面</figcaption></figure>
<p></div/></p>
<p class="has-luminous-vivid-orange-color has-text-color">注意事项：<strong>Windows 按键 Alt 在 Mac 键盘上相当于 Option 键。Windows 按键 Control 在 Mac 键盘上相当于 Command 键。</strong></p>
<p><strong>1. 通用快捷键<br /></strong>Command 是 Mac 里最重要的修饰键，在大多数情况下相当于 Windows 下的 Ctrl。Command + Z 撤销<br />Command + X 剪切<br />Command + C 拷贝（Copy）<br />Command + V 粘贴<br />Command + A 全选（All）<br />Command + S 保存（Save)<br />Command + F 查找（Find）</p>
<p><strong>2. 系统快捷键<br /></strong>Option 开机后立即按下，将显示启动管理器。<br />Command + R 开机后立即按下，可打开 OS X 的恢复功能（Recovery）<br />Command + Option + P + R 开机后立即按下，重置 NVRAM。<br />Command + Option + Control + Power 退出所有应用程序，允许你进行文稿储存，然后关机</p>
<p><strong>3. 截图 <strong> 快捷键</strong><br /></strong>Command + Shift + 3 截取全部屏幕到文件<br />Command + Shift + Control + 3 截取全部屏幕到剪贴板<br />Command + Shift + 4 截取所选屏幕区域到一个文件，或按空格键仅捕捉一个窗口<br />Command + Shift + Control + 4 截取所选屏幕区域到剪贴板，或按空格键仅捕捉一个窗口</p>
<p><strong>4. 文件管理器 <strong> 快捷键 </strong><br /></strong>Command + Shift + N 新建文件夹（New）<br />Command + Shift + G 调出窗口，可输入绝对路径直达文件夹（Go）<br />return 这个其实不算快捷键，点击文件，按下可重命名文件<br />Command + O 打开所选项。在 Mac 里打开文件不像 Windows 里直接按 Enter<br />Command + Option + V 作用相当于 Windows 里的文件剪切。<br /> 在其它位置上对文件复制（Command-C），在目的位置按下这个快捷键，文件将被剪切到此位置<br />Command + ↑ 打开包含当前文件夹的文件夹，相当于 Windows 里的“向上”<br />Command + Delete 将文件移至废纸篓<br />Command + Shift + Delete 清倒废纸篓<br />Space 快速查看选中的文件，也就是预览功能</p>
<p><strong>5. 切换 <strong> 快捷键</strong><br /></strong>Command + Tab 在应用程序间切换<br />Command + Shift + Tab 在应用程序间切换（反向）<br />Command + ~ 在各应用中的窗口间切换</p>
<p><strong>6. 浏览器 <strong> 快捷键</strong><br /></strong>Command + L 光标直接跳至地址栏<br />Control + Tab 转向下一个标签页<br />Control + Shift + Tab 转向上一个标签页<br />Command + '+' 或 '=' 放大页面<br />Command + '-' 缩小页面</p>
<p><strong>7. 应用程序中 <strong> 快捷键 </strong><br /></strong>Command + H 隐藏（Hide）当前正在运行的应用程序窗口<br />Command + Option + H 隐藏（Hide）其他应用程序窗口<br />Command + Q 退出（Quit）最前面的应用程序<br />Command + Shift + Z 重做，也就是撤销的逆向操作<br />Command + Tab 在打开的应用程序列表中转到下一个最近使用的应用程序，<br /> 相当于 Windows 中（Alt+Tab）<br />Command + Option + esc 打开“强制退出”窗口，如果有应用程序无响应，可在窗口列表中选择强制退出 <br /> 文本处理<br />Command + B 切换所选文字粗体（Bold）显示<br />fn + Delete 相当于 PC 全尺寸键盘上的 Delete，也就是向后删除<br />fn + ↑ 向上滚动一页（Page Up）<br />fn + ↓ 向下滚动一页（Page Down）<br />fn + ← 滚动至文稿开头（Home）<br />fn + → 滚动至文稿末尾（End）<br />Command + → 将光标移至当前行的行尾<br />Command + ← 将光标移至当前行的行首<br />Command + ↓ 将光标移至文稿末尾<br />Command + ↑ 将光标移至文稿开头<br />Option + → 将光标移至下一个单词的末尾<br />Option + ← 将光标移至上一个单词的开头<br />Control + A 移至行或段落的开头</p>
<p>以上就是 <strong> 高热度网 </strong> 首发原创的关于苹果这个 <strong> 黑科技公司 </strong> 的这个 <strong> 黑苹果系统 </strong> 的一些知识，从黑苹果是什么、黑苹果有什么用和如何安装使用黑苹果系统三个方面做了一一解答，大家如果还有什么疑问的话欢迎在下方留言。</p>]]></description><link>https://blog.gaoredu.com/article/b335aec4-db70-4f60-b029-dc2f5e58b2ae</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b335aec4-db70-4f60-b029-dc2f5e58b2ae</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 08 Apr 2020 01:12:16 GMT</pubDate></item><item><title><![CDATA[华为最新款MateX 5G折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>华为 Mate X 是华为公司研发的 5G 折叠屏手机，采用可折叠全面屏设计，可实现 0 -180 度自由翻折。这款黑科技产品横空出世在性能上相比于一般手机有了一个很大幅度的提升，那么用它玩游戏是一种怎样的体验呢？</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/20200407121014.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">华为 MateX 5G 折叠屏手机的黑科技有哪些？</p>
</div>
</div>
<h2 class="wp-block-heading">一、华为 MateX 5G 折叠屏手机基本配置</h2>
<p>自华为 2019 年 11 月份上市以来，发布了一系列具有代表性的 <strong> 手机黑科技产品 </strong>。包括新一代的 Mate 系列旗舰手机——<strong> 华为 Mate30、华为 Mate30 Pro、华为 Mate30 Pro 5G、华为 Mate30 RS</strong>保时捷设计这 4 款新品手机。凭借着创新式的超感光徕卡电影四摄、全新的 ID 设计以及超曲面环幕屏，这款华为最新旗舰手机一经发布便备受消费者关注。对于华为这个 <strong> 黑科技公司 </strong> 来说，不仅有不一样的技术实力，同时也有自己的黑科技系统 -- 麒麟系统前来助阵，所以也是的这款手机摆脱了科技的舒服，身价也得到了了很大程度的提升！</p>
<p>下面，我们以华为 <strong> 最新 mate x 5G 折叠屏 手机 XS 折叠屏 </strong> 手机为例，参考京东官网上的最新报价，这款手机是目前 2020 年 3 月份最新上市的一款 mate x 5G 手机，根据华为 matex 的最新消息，该手机的配置参数如下：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？"
             alt="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？" loading="lazy" decoding="async" width="595" height="577" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200407120530.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="华为 mate x 5G 折叠屏 手机屏幕和芯片基本配置参数" class="wp-image-605" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200407120530.jpg 595w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200407120530-300x291.jpg 300w" sizes="(max-width: 595px) 100vw, 595px" /><figcaption>华为 mate x 5G 折叠屏 手机屏幕和芯片基本配置参数</figcaption></figure>
</div/>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？"
             alt="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？" loading="lazy" decoding="async" width="585" height="447" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200407120648.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="华为 mate x 5G 折叠屏 手机像素和电池基本配置参数" class="wp-image-606" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200407120648.jpg 585w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200407120648-300x229.jpg 300w" sizes="(max-width: 585px) 100vw, 585px" /><figcaption>华为 mate x 5G 折叠屏 手机像素和电池基本配置参数</figcaption></figure>
</div/>
<p>当然，这款最新的华为折叠屏手机也是价格不菲啊，在京东官网上的报价也是高达￥<strong>22988.00</strong>人民币，比苹果手机都是要贵的哈！</p>
<h2 class="wp-block-heading">二、华为 MateX 5G 折叠屏手机十大黑科技特性</h2>
<p>以下总结了华为 MateX 5G 折叠屏手机这款黑科技产品的 10 个特效，让你看看这个产品的“科技感”到底体现在哪里？</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？"
             alt="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？" loading="lazy" decoding="async" width="571" height="562" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/20200407123540.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="华为 MateX 5G 折叠屏手机十大黑科技特点" class="wp-image-610" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/20200407123540.jpg 571w, https://www.gaoredu.com/wp-content/uploads/2020/04/20200407123540-300x295.jpg 300w" sizes="(max-width: 571px) 100vw, 571px" /><figcaption>华为 MateX 5G 折叠屏手机十大黑科技特点</figcaption></figure>
</div/>
<p><strong>1、隔空操作：</strong></p>
<p>挥手滑动浏览页面，轻轻一握，截取屏幕。一直幻想拥有“意念超控”超能力的你，可以尽情挥动自己的指尖魔力哦！</p>
<p><strong>2、智能 AI 随心：</strong></p>
<p>可根据你的眼睛观看角度而自动调整手机界面，而不用动手调节，根据人脸朝向，智能显示横竖屏，转屏更聪明，这个确实每个人心之所向的 <strong> 黑科技 </strong> 啊，手癌人士的福音！</p>
<p><strong>3、智能多屏协同：</strong></p>
<p>打破手机与电脑间的传输壁垒，一面工作，一面娱乐，让你不错过任何一个美好瞬间！瞬间让你的手机 <strong> 多屏 </strong> 之间无缝连接！</p>
<p><strong>4、智能识别机主：</strong></p>
<p>多人注视时，私密信息自动隐藏，提供 <strong> 金融级安全保护</strong>。从此告别黑色防窥膜，轻装上阵，为你而来。更有可能获得爱豆同款哦！</p>
<p><strong>5、数字化边框设计：</strong></p>
<p>去除侧边音量键，磁悬发声技术，视觉与触觉双重极简，打造浑然一体的感官体验，顺手即点即用。颠覆传统，引领未来！</p>
<p><strong>6、双 SIM 卡 5G 链接：</strong></p>
<p>华为 <strong>5G 速度比 4G 快了 25 倍</strong>，把目前世界上最为完善的 5G 支持装入了<strong> 麒麟 990 芯片</strong>，再装入 Mate 30 系列。麒麟 990 首次将 5G Modem 集成到 SOC 中，也是世界第一款晶体管数量超过 103 亿的移动终端芯片！</p>
<p><strong>7、40W 超级快充 / 无线车载充电：</strong></p>
<p>可自动检测到手机靠近，超级 <strong> 无线充电器</strong>，华为 Mate30 系列是真正的第二代 5G 手机，它在充电技术上带来了全新的科技跨越！华为 Mate 30 内置 4200mAh 电池，华为 Mate 30 Pro 内置 4500mAh 电池。</p>
<p><strong>8、1/1.7 英寸感光尺寸</strong></p>
<p>拍照时高达 409600 的 IOS，令夜景画质清晰有质感，三倍 <strong> 光学变焦</strong>，五倍混合变焦，30 倍数字变焦，自由切换，远近皆宜。发现更大的天地，发现更美的自己！</p>
<p><strong>9、高速录像可达 7680 帧 / 秒：</strong></p>
<p>堪比专业级高速摄像机，可清晰完整拍摄蜂鸟挥动的翅膀。每秒最高可定格 7680* 个瞬间，捕捉时间行迹，慢到帧帧惊艳！</p>
<p><strong>10、采用 AIS 智慧防抖（智能防抖）：</strong></p>
<p>带来稳定流畅的高清视频录制体验，帮你稳住镜头。重新定义手机录制，怎么抖，都稳如老手！</p>
<h2 class="wp-block-heading">三、使用华为 MateX 5G 折叠屏手机玩游戏是什么体验？</h2>
<p>使用这款手机来玩游戏是什么体验呢？我们不妨用这款手机试玩了《王者荣耀》这款游戏试试看。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？"
             alt="华为最新款 MateX 5G 折叠屏手机黑科技有哪些？用它玩游戏是一种怎样的体验？" loading="lazy" decoding="async" width="732" height="473" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-07_121645.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="华为 MateX 5G 折叠屏手机玩《王者荣耀》屏幕秒变大" class="wp-image-608" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-07_121645.jpg 732w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-07_121645-300x194.jpg 300w" sizes="(max-width: 732px) 100vw, 732px" /><figcaption>华为 MateX 5G 折叠屏手机玩《王者荣耀》屏幕秒变大</figcaption></figure>
</div/>
<p>可以看到当把屏幕展开后，呈现出来的画面宽阔了不少，乍一看好像视野变成了原来的 2 倍！这可真是一个游戏黑科技哈，可是仔细观察后你会发现游戏中玩家视野并没有真的变宽，实际视野反而是变窄了。不过相比之下，还是有点类似于用 IPad 手机玩游戏的体验差不多，感兴趣的朋友可以自己下去亲自尝试看看。</p>
<p>以上就是高热度网分享的华为最新款 MateX 5G 折叠屏手机的十大黑科技，以及使用这款手机来玩游戏时候的游戏玩家感受体验。感兴趣的朋友可以购买一款试试看。</p>
]]></description><link>https://blog.gaoredu.com/article/1a371bfe-23fa-4359-945f-8ccf786155b3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1a371bfe-23fa-4359-945f-8ccf786155b3</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 07 Apr 2020 04:36:54 GMT</pubDate></item><item><title><![CDATA[【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>2020 年的个人所得税退税已经开始了，不少人也都成功申请了自己在过去的 2019 全年的缴税总额，即日起，只需要通过个人所得税这个黑科技 APP 软件申报即可实现退税，你退了多少钱呢？</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/04/20200401110759.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">《个人所得税退税》最全退税教程指南</p>
</div>
</div>
<h2 class="wp-block-heading">一、《个人所得税退税》制度简介</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）"
             alt="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）" loading="lazy" decoding="async" width="640" height="400" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/f3d3572c11dfa9ec2732d85da4760c06908fc18d.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="《个人所得税退税制度》制度简介" class="wp-image-565" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/f3d3572c11dfa9ec2732d85da4760c06908fc18d.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/04/f3d3572c11dfa9ec2732d85da4760c06908fc18d-300x188.jpeg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/f3d3572c11dfa9ec2732d85da4760c06908fc18d-480x300.jpeg 480w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>《个人所得税退税制度》制度简介</figcaption></figure>
</div/>
<p>《个人所得税退税》这项制度实际上来自于《国家税务总局关于办理 2019 年度个人所得税综合所得汇算清缴事项的公告》，这项公告表示，依据税法规定，2019 年度终了后，居民个人（以下称“纳税人”）需要汇总 <strong>2019 年 1 月 1 日至 12 月 31 日</strong> 取得的工资薪金、劳务报酬、稿酬、特许权使用费等四项所得（以下称“<strong>综合所得 </strong>”）的收入额，减除费用 6 万元以及专项扣除、专项附加扣除、依法确定的其他扣除和符合条件的公益慈善事业捐赠（以下简称“捐赠”）后，适用综合所得个人所得税税率并减去速算扣除数，计算本年度最终应纳税额，再减去 2019 年度已预缴税额，得出<strong> 本年度应退或应补税额 </strong>，然后再向税务机关申报并办<strong> 理退税或补税</strong>。</p>
<p> 具体 <strong> 计算公式 </strong> 为：2019 年度汇算应退或应补税额 =[（<strong>综合所得收入额 </strong>-60000 元 -“<strong> 三险一金 </strong>”等专项扣除 -<strong> 子女教育 </strong> 等专项附加扣除 -<strong>依法确定 </strong> 的其他扣除 -<strong>捐赠 </strong>）×<strong> 适用税率 </strong>-<strong> 速算扣除数 </strong>]-2019 年<strong> 已预缴税额</strong>。下面让我们来一起学习一下这个非常简单的黑科技教程吧，最快三步可以搞定！</p>
<h2 class="wp-block-heading">二、《个人所得税退税》退税教程</h2>
<p>上面这个公式乍看还是比较抽象和繁琐的，有没有更简单的方法呢？通过下面的这个黑科技教程就可以完美地解决这个问题。我们可以使用这款个人所得税 APP 软件进行查询即可，而且后面的所有退税流程都是基于这款 APP 来完成的。</p>
<p>首先去手机上的“应用中心”搜索“<strong>个人所得税</strong>”关键字，然后直接下载该软件并打开即可。以下就是这款软件的打开界面。如果你需要查询自己可以退多少钱，你可以通过首页的【常用业务】==&gt;【综合所得年度汇算】进入；或者从【快捷入口】==&gt;【我要办税】菜单进入，然后点击【综合所得年度汇算】就可以进入。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）"
             alt="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）" loading="lazy" decoding="async" width="669" height="593" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/51f597c8aa7342baa61df190b97974d6.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="使用个人所得税手机 APP 进行综合所得年度汇算" class="wp-image-566" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/51f597c8aa7342baa61df190b97974d6.jpeg 669w, https://www.gaoredu.com/wp-content/uploads/2020/04/51f597c8aa7342baa61df190b97974d6-300x266.jpeg 300w" sizes="(max-width: 669px) 100vw, 669px" /><figcaption>使用个人所得税手机 APP 进行综合所得年度汇算</figcaption></figure>
</div/>
<p>下面以就简单介绍一下个人所得税 <strong> 申请退税的流程 </strong>，其他的功能大家也可以自行测试哈。首先你需要去查询一下过去一年自己的<strong> 已缴费账单信息 </strong>，然后再核对一下个人<strong> 基础信息 </strong>、<strong> 汇缴地 </strong>、<strong> 查看收入 </strong> 明细数据，确认 <strong> 已缴税额 </strong> 等信息是否正确。然后就可以看到我们去年一年的可以申请的税额信息，比如这里是 188.1 元，然后点击“<strong>提交申报</strong>”进行申请。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）"
             alt="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）" loading="lazy" decoding="async" width="382" height="745" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/7713c79fe3c3447797b6d7cf08fc60e1.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="个人所得税退税申请" class="wp-image-567" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/7713c79fe3c3447797b6d7cf08fc60e1.jpeg 382w, https://www.gaoredu.com/wp-content/uploads/2020/04/7713c79fe3c3447797b6d7cf08fc60e1-154x300.jpeg 154w" sizes="(max-width: 382px) 100vw, 382px" /><figcaption>个人所得税退税申请</figcaption></figure>
</div/>
<p>最后，就是 <strong> 申报成功 </strong> 的界面了，大家只需要耐心等待即可，这里面还需要绑定一下自己的银行卡等信息，成功之后就只需要等待到账就可以了。在这期间，你也可以直接点进去查看自己的退税进度是否完成。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）"
             alt="【图】来算算你可以退多少钱？个人所得税退税教程（亲测有效）" loading="lazy" decoding="async" width="384" height="773" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/9235c34677374fe3a5661dd33353eb72.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="个人所得税综合所得年度汇算主界面" class="wp-image-568" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/9235c34677374fe3a5661dd33353eb72.jpeg 384w, https://www.gaoredu.com/wp-content/uploads/2020/04/9235c34677374fe3a5661dd33353eb72-149x300.jpeg 149w" sizes="(max-width: 384px) 100vw, 384px" /><figcaption>个人所得税综合所得年度汇算主界面</figcaption></figure>
</div/>
<h2 class="wp-block-heading">三、《个人所得税退税》注意事项</h2>
<ol class="wp-block-list">
<li><strong>退税时间是从 3 月开始，截止至 6 月 30 日，过期不候！</strong></li>
<li><strong>退税申请到账时间以主管税务机关审核进度为准。按照目前的规定，汇算清缴退税的时间为从申请之日起十个工作日内到账，特殊情况可延长三十个工作日。</strong></li>
<li><strong>过去一年的实习生或者以劳务报酬发放给你的工资，但是也扣税了的话，也是可以申请的哟！</strong></li>
</ol>
<p>以上就是高热度网整理的最新《个人所得税退税》最新退税流程以及几个注意事项，大家快去试试看看自己可以退多少钱吧，说不定突然之间你的口袋就鼓起来了呢。</p>
]]></description><link>https://blog.gaoredu.com/article/ab39178d-ec27-45d2-b48d-d090ca06ba90</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ab39178d-ec27-45d2-b48d-d090ca06ba90</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 01 Apr 2020 12:54:49 GMT</pubDate></item><item><title><![CDATA[web前端经典面试题_最新CSS前端面试题_CSS知识点（基础，布局，特效，动画）最全总结]]></title><description><![CDATA[<blockquote>
<p>HTML，CSS，JavaScript 是前端面试中非常重要的一方面，本文总结了前端面试中 CSS 常考的 6 大知识点，帮助你在求职面试中快速梳理和建立起来 CSS 的知识体系和架构。</p>
</blockquote>
<p><p><img title="web 前端经典面试题_最新 CSS 前端面试题_CSS 知识点（基础，布局，特效，动画）最全总结"
             alt="web 前端经典面试题_最新 CSS 前端面试题_CSS 知识点（基础，布局，特效，动画）最全总结" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/03/css-summarize.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="CSS 层叠上下文" /></p/></p>
<h2 id='pk-menu-0'>一、CSS 基础</h2>
<h2 id='pk-menu-1'>1.CSS 样式（选择器）的优先级？</h2>
<h3 id='pk-menu-2'>1.1 权重的计算规则</h3>
<ol>
<li>第一优先级：无条件优先的属性只需要在属性后面使用!important。它会覆盖页面内任何位置定义的元素样式。（ie6 支持上有些 bug）。</li>
<li>第一等：内联样式，如：style="color:red;"，权值为 1000.（该方法会造成 css 难以管理，所以不推荐使用）</li>
<li>第二等：ID 选择器，如：#header，权值为 0100.</li>
<li>第三等：类选择器、如：.bar，权值为 0010.</li>
<li>第四等：类型（标签）选择器和伪元素选择器，如：div ::first-line 权值为 0001.</li>
<li>通配符，子选择器，相邻选择器等。如 *，&gt;,+, 权值为 0000.</li>
<li>继承的样式没有权值。</li>
</ol>
<blockquote>
<p>CSS 选择器的优先级：!important &gt; 行内样式 &gt; ID 选择器 &gt; 类选择器 &gt; 标签选择器 &gt; 其他</p>
</blockquote>
<h3 id='pk-menu-3'>1.2 实际案例</h3>
<pre><code class="language-html">&lt;style&gt;
    a{color: yellow;} /* 权值：0,0,0,1*/
    div a{color: green;} /* 权值：0,0,0,2*/
    .demo a{color: black;} /* 权值：0,0,1,1*/
    .demo input[type="text"]{color: blue;} /* 权值：0,0,2,1*/
    .demo *[type="text"]{color: grey;} /* 权值：0,0,2,0*/
    #demo a{color: orange;} /* 权值：0,1,0,1*/
    div#demo a{color: red;} /* 权值：0,1,0,2*/
&lt;/style&gt;

&lt;body&gt;
    &lt;a href=""&gt; 第一条应该是黄色 &lt;/a&gt; &lt;!- 适用第 1 行规则 -&gt;
    &lt;div class="demo"&gt;
    &lt;input type="text" value="第二条应该是蓝色" /&gt;&lt;!- 适用第 4、5 行规则，第 4 行优先级高 -&gt;
    &lt;a href=""&gt; 第三条应该是黑色 &lt;/a&gt;&lt;!- 适用第 2、3 行规则，第 3 行优先级高 -&gt;
    &lt;/div&gt;
    &lt;div id="demo"&gt;
    &lt;a href=""&gt; 第四条应该是红色 &lt;/a&gt;&lt;!- 适用第 5、6 行规则，第 6 行优先级高 -&gt;
    &lt;/div&gt;
&lt;/body&gt;</code></pre>
<h2 id='pk-menu-4'>2. 雪碧图的作用？</h2>
<blockquote>
<p>减少 HTTP 的请求次数，提高加载的性能 <br /> 在一些情况下可以减少图片的大小 <br /> 关键在于对 background-position 概念的理解和使用</p>
</blockquote>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt; 购物车特效 &lt;/title&gt;
    &lt;style type="text/css"&gt;
        *{
            margin: 0;
            padding: 0;
        }
        .select{
            margin: 0 auto;
            display: block;
            width: 1000px;
            height: 35px;
            background-color:#F5FFFA;
        }
        div{
            width: 42px;
            height: 34px;
            background-image: url(amazon-sprite_.png);
            background-repeat: no-repeat;
            background-position: -8px -335px;
        }
        div:hover{background-image: url(amazon-sprite_.png);
            background-repeat: no-repeat;
            background-position: -55px -335px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href="https://www.baidu.com" target='_blank' class="select"&gt;
        &lt;div&gt;&lt;/div&gt;

    &lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id='pk-menu-5'>3. 自定义字体的使用场景？</h2>
<blockquote>
<p>宣传 / 品牌 /banner 等固定文案 <br /> 字体图标中使用</p>
</blockquote>
<pre><code class="language-html">&lt;style&gt;
@font-face{
     font-family: '字体名称随便起'; 
     src: url('../font/ 字体名称.eot');
     src:url('../font/ 字体名称.woff') format('woff'),
         url('../font/ 字体名称.ttf') format('truetype'),
         url('../font/ 字体名称.svg') format('svg');
}
/* 使用方法：html 中的代码中加一个 h1 或者其他的，里面写你自己想要的特殊文字 */
h1{
    font-size:36px; 
    color:#ccc;
    font-family: "字体名称随便起";
}

&lt;/style&gt;</code></pre>
<h2 id='pk-menu-6'>4.Base64 的使用？</h2>
<h3 id='pk-menu-7'>4.1 概念</h3>
<p>Base64 就是一种基于 64 个可见字符 (26 个大写字母，26 个小写字母，10 个数字，1 个 +，一个 / 刚好 64 个字符) 来表示二进制数据的表示方法。</p>
<blockquote>
<p>扩展：不可见字符其实并不是不显示，只是这些字符在屏幕上显示不出来，比如：换行符、回车、退格...... 字符。</p>
</blockquote>
<p>Base64 字符表中的字符原本用 6 个 bit 就可以表示，现在前面添加 2 个 0，变为 8 个 bit，会造成一定的浪费。因此，Base64 编码之后的文本，要比原文大约三分之一</p>
<h3 id='pk-menu-8'>4.2 原理</h3>
<ul>
<li>第一步，将待转换的字符串每三个字节分为一组，每个字节占 8bit，那么共有 24 个二进制位。</li>
<li>第二步，将上面的 24 个二进制位每 6 个一组，共分为 4 组。</li>
<li>第三步，在每组前面添加两个 0，每组由 6 个变为 8 个二进制位，总共 32 个二进制位，即四个字节。</li>
<li>第四步，根据 Base64 编码对照表（见下图）获得对应的值。</li>
</ul>
<blockquote>
<p>[!NOTE]<br />两个字节：两个字节共 16 个二进制位，依旧按照规则进行分组。此时总共 16 个二进制位，每 6 个一组，则第三组缺少 2 位，用 0 补齐，得到三个 Base64 编码，第四组完全没有数据则用“=”补上。因此，上图中“BC”转换之后为“QKM=”；<br />一个字节：一个字节共 8 个二进制位，依旧按照规则进行分组。此时共 8 个二进制位，每 6 个一组，则第二组缺少 4 位，用 0 补齐，得到两个 Base64 编码，而后面两组没有对应数据，都用“=”补上。因此，上图中“A”转换之后为“QQ==”；</p>
</blockquote>
<h3 id='pk-menu-9'>4.3 作用</h3>
<ul>
<li>用于减少 HTTP 请求</li>
<li>适用于小图片</li>
<li>base64 编码图片之后的体积约为原图的 4 /3</li>
</ul>
<h2 id='pk-menu-10'>5. 伪类和伪元素的区别？</h2>
<ul>
<li>伪元素是真的有元素</li>
<li>前者是单冒号，后者是双冒号</li>
</ul>
<pre><code class="language-html">&lt;style&gt;
li:first-child {
    height: 20px;
    width: 100px;
    background-color: #139aff;
}
li:last-child {
    height: 60px;
    width: 100px;
    background-color: #89ff56;
    line-height: 60px;
}
p:first-of-type {background-color:  red;}
p:last-of-type {background-color:deeppink;}

/* 每个 p 标签之前新增一个 Hello 文本 */
.container p::before {content: 'Hello';}
.container p::after {content: 'Thanks';}
.container p::first-letter {font-size: 32px;}
.container p::first-line {background-color: #f1ffad;}

/* 所有选中的元素会变色 */
.container p::selection {
    background-color: #1025ff;
    color: red;
}
&lt;/style&gt;
&lt;body&gt;
    &lt;ul&gt;
        &lt;li&gt;111&lt;/li&gt;
        &lt;li&gt;222&lt;/li&gt;
        &lt;li&gt;333&lt;/li&gt;
        &lt;li&gt;444&lt;/li&gt;
        &lt;li&gt;555&lt;/li&gt;
    &lt;/ul&gt;
&lt;div&gt;
    &lt;h1&gt;h1 文本 &lt;/h1&gt;
    &lt;p&gt;p 文本 1 &lt;/p&gt;
    &lt;p&gt;p 文本 2 &lt;/p&gt;
    &lt;p&gt;p 文本 3 &lt;/p&gt;
    &lt;p&gt;p 文本 4 &lt;/p&gt;
&lt;/div&gt;

&lt;div class="container"&gt;
    &lt;p&gt; css1 &lt;/p&gt;
    &lt;p&gt; css2 &lt;/p&gt;
    &lt;p&gt; css3 &lt;/p&gt;
    &lt;p&gt; 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素, 我在学伪元素 &lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id='pk-menu-11'>6. 如何美化 CheckBox？</h2>
<blockquote>
<p>[!NOTE]</p>
<ol>
<li>label[for]和 id</li>
<li>隐藏原生的 input</li>
<li>:checked + label 选择器</li>
</ol>
</blockquote>
<pre><code class="language-html">&lt;style&gt;
#value1{display: none;}
#value1:checked+label{
    color:blue;
    background: #4cda60;
}
#value1:checked+label:before{left:31px;}
#value1+label{
    cursor: pointer;
    color:red;
    display: block;
    width:60px;
    height: 30px;
    background: #fafbfa;
    border-radius: 15px;
    position: relative;
    box-shadow:inset 0 0 0 0 #eee,0 0 1px rgba(0,0,0,0.4);
    transition: background 0.1s;
    -webkit-transition: background 0.1s;
    -moz-transition: background 0.1s;
    -o-transition: background 0.1s;
}
#value1+label:before{
    content:'';
    position: absolute;
    background: #fff;
    top:1px;
    left:1px;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    box-shadow:0 3px 1px rgba(0,0,0,0.05), 0 0 1px rgba(0,0,0,0.3);
    transition: left 0.1s;
    -webkit-transition: left 0.1s;
    -moz-transition: left 0.1s;
    -o-transition: left 0.1s;
}
&lt;/style&gt;
&lt;body&gt;
    &lt;input type="checkbox" name="timeType" value="1" id="value1" checked="checked"/&gt;
    &lt;label for="value1"&gt;&lt;/label&gt;
&lt;/body&gt;</code></pre>
<h2 id='pk-menu-12'>二、CSS 布局</h2>
<h2 id='pk-menu-13'>1. 实现两栏 / 三栏布局的方法?</h2>
<ol>
<li>表格布局</li>
<li>float + margin 布局</li>
<li>inline-block 布局</li>
<li>flexbox 布局（兼容性的问题）</li>
</ol>
<h3 id='pk-menu-14'>1.1 基础布局</h3>
<pre><code class="language-html">&lt;style&gt;
    * {
        margin: 0;
        padding: 0;
    }
    .layout {margin-top: 10px;}
    .layout div{min-height: 100px;}
&lt;/style&gt;
&lt;body&gt;
  &lt;!--1. 浮动的方式来实现布局 --&gt;
  &lt;section class="layout float"&gt;
      &lt;style&gt;
          .layout.float .left {
              float: left;
              width: 300px;
              background-color: #48adff;
          }
          .layout.float .main {background-color: #ff4344;}
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt; 浮动两栏布局 &lt;/h1&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--2. 定位的方式来实现布局 --&gt;
  &lt;section class="layout absolute"&gt;
      &lt;style&gt;
          .layout.absolute .left-main {width: 100%;}
          .layout.absolute .left {
              left : 0;
              width: 300px;
              background-color: #48adff;
              position: absolute;
          }
          .layout.absolute .main {
              /* 默认是以正常文档流的方式来展现的 */
              background-color: #ff4344;
              margin-left: 300px;
              right: 0;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt; 绝对定位两栏布局 &lt;/h1&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--3.flex 布局的实现 --&gt;
  &lt;section class="layout flex"&gt;
      &lt;style&gt;
          .layout .left-main {display: flex;}
          .layout .left {
              width: 300px;
              background-color: #48adff;
          }
          .layout .main {
              flex: 1;
              background-color: #ff4344;
          }
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;flex 两栏布局 &lt;/h1&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--4.table 布局的实现 --&gt;
  &lt;section class="layout table"&gt;
      &lt;style&gt;
          .layout .left-main {
              display: table;
              width: 100%;
          }
          .layout .left {
              display : table-cell;
              width: 300px;
              background-color: #48adff;
          }
          .layout .main {background-color: #ff255f;}
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;table 两栏布局 &lt;/h1&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;

  &lt;!--5.grid 布局 --&gt;
  &lt;section class="layout grid"&gt;
      &lt;style&gt;
          .layout.grid .left-main {display: grid;}
          .layout.grid .left-main {
              grid-template-rows : 100px;
              /* 按照顺序指定盒子的宽度 */
              grid-template-columns : 300px  auto;
          }
          .layout.grid .left {background-color: #48adff;}
          .layout.grid .main {background-color: #ff4344;}
      &lt;/style&gt;
      &lt;article class="left-main"&gt;
          &lt;div class="left"&gt;&lt;/div&gt;
          &lt;div class="main"&gt;
              &lt;h1&gt;grid 两栏布局 &lt;/h1&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
              &lt;p&gt; 两栏布局的中间部分 &lt;/p&gt;
          &lt;/div&gt;
      &lt;/article&gt;
  &lt;/section&gt;
&lt;/body&gt;</code></pre>
<h3 id='pk-menu-15'>1.2 圣杯布局</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;title&gt; 实现三栏水平布局之圣杯布局 &lt;/title&gt;
    &lt;style type="text/css"&gt;
      /* 基本样式 */
      .left, .right, .main {min-height: 300px;}
      .left {
        width: 200px;
        background-color:thistle;
      }
      .main {background-color: #999;}
      .right {
        width: 300px;
        background-color: violet;
      }
      /* 圣杯布局关键代码 */
      .left, .main, .right {
        float: left;
        position: relative;
      }
      .main {width: 100%;}
      .container {
        padding-left: 200px;
        padding-right: 300px;
      }
      .left {
        margin-left: -100%;
        left: -200px;
      }
      .right {
        margin-left: -300px;
        right: -300px;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="container"&gt;
      &lt;div class="main"&gt;main&lt;/div&gt;
      &lt;div class="left"&gt;left&lt;/div&gt;
      &lt;div class="right"&gt;right&lt;/div&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h3 id='pk-menu-16'>1.3 双飞翼布局</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&gt;
    &lt;title&gt; 双飞翼布局 &lt;/title&gt;
    &lt;style&gt;
      .left,
      .right,
      .main {min-height: 200px;}
      .left {
        width: 200px;
        background-color: thistle;
      }
      .main {background: #999;}
      .right {
        width: 300px;
        background-color: violet;
      }
      /* 双飞翼布局重点 */
      .left,
      .main,
      .right {float: left;}
      .main {width: 100%;}
      .main-inner {
        margin-left: 200px;
        margin-right: 300px;
      }
      .left {margin-left: -100%;}
      .right {margin-left: -300px;}
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="main"&gt;&lt;div class="main-inner"&gt; 中心区 &lt;/div&gt;&lt;/div&gt;
    &lt;div class="left"&gt;left&lt;/div&gt;
    &lt;div class="right"&gt;right&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id='pk-menu-17'>2.absolute/fixed/static/sticky 定位?</h2>
<ol>
<li>前者相对于最近的 absolute/relative</li>
<li>后者相对于屏幕进行定位</li>
<li>fixed 是相对于屏幕的可视区域的，也会直接脱离于文档流独立存在的</li>
<li>元素未滚动，在当前可视区域他的 top 值不生效，只有 margin 生效，滚动起来后 margin 失效，top 值生效</li>
</ol>
<pre><code class="language-html">&lt;style type="text/css"&gt;
  p{
  font-size:11pt;
  color:#363636;
  text-indent:2em;
  }
  .parent{
  width:500px;
  height:150px;
  margin-top:20px;
  margin-left:20px;
  border:solid 1px #555555;
  background:#aaaaaa;
  }
  .parent div{
  width:100px;
  height:80px;
  float:left;
  background:#708090;
  border:dashed 1px #008B8B;
  font-size:12pt;
  font-weight:bold;
  color:#104E8B;
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;!-- 相对定位!--&gt;
  &lt;h2&gt;relative&lt;/h2&gt;
  &lt;p&gt; 相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位，它将出现在它所在的位置上。然后，可以通过设置垂直或水平位置，让这个元素“相对于”它的起点进行移动。&lt;/p&gt;
  &lt;div class="parent"&gt;
  &lt;div&gt;child 1&lt;/div&gt;
  &lt;div style="position:relative;left:20px;top:20px;"&gt;child 2&lt;/div&gt;
  &lt;div&gt;child 3&lt;/div&gt;
  &lt;/div&gt;

&lt;!-- 绝对定位!--&gt;
&lt;h2&gt;absolute&lt;/h2&gt;
&lt;p&gt; 绝对定位的元素的位置相对于最近的已定位祖先元素，如果元素没有已定位的祖先元素，那么它的位置相对于最初的包含块。对于定位的主要问题是要记住每种定位的意义。&lt;/p&gt;
&lt;p&gt; 绝对定位是“相对于”最近的已定位祖先元素，如果不存在已定位的祖先元素，那么“相对于”最初的包含块。所以如果要设定元素与其父元素的绝对位置定位就必须设定父元素的定位。&lt;/p&gt;
&lt;p&gt; 注释：根据用户代理的不同，最初的包含块可能是画布或 HTML 元素。&lt;/p&gt;
&lt;div class="parent" style="position:relative;"&lt;!-- 如果该处不定位，那么 child5 框的定位是相对于最初的包含块!--&gt;&gt;
&lt;div&gt;child 4&lt;/div&gt;
&lt;div style="position:absolute;left:20px;top:20px;"&gt;child 5&lt;/div&gt;
&lt;div&gt;child 6&lt;/div&gt;
&lt;/div&gt;

&lt;!-- 相对定位!--&gt;
&lt;h2&gt;fixed&lt;/h2&gt;
&lt;p&gt; 元素框的表现类似于将 position 设置为 absolute，不过其包含块是视窗本身。&lt;/p&gt;
&lt;div class="parent"&gt;
&lt;div&gt;child 7&lt;/div&gt;
&lt;div style="position:fixed;right:20px;top:20px;"&gt;child 8&lt;/div&gt;
&lt;div&gt;child 9&lt;/div&gt;
&lt;/div&gt;

&lt;!-- 相对定位!--&gt;
&lt;h2&gt;static&lt;/h2&gt;
&lt;p&gt; 元素框正常生成。块级元素生成一个矩形框，作为文档流的一部分，行内元素则会创建一个或多个行框，置于其父元素中。&lt;/p&gt;
&lt;div class="parent"&gt;
&lt;div&gt;child 10&lt;/div&gt;
&lt;div style="position:static;right:20px;top:20px;"&gt;child 11&lt;/div&gt;
&lt;div&gt;child 12&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;</code></pre>
<h2 id='pk-menu-18'>3. 什么是层叠上下文？如何形层叠上下文？层叠顺序是怎样的？</h2>
<pre><code class="language-html">&lt;style&gt;
    .father-green {
        width:500px;
        height:300px;
        background-color:green;
    }
    .son-red {
        width:200px;
        height:100px;
        background-color:red;
        display:inline-block;
    }
    .subson-yellow {
        height:50px;
        width:200px;
        background-color: yellow;

    }
    .son-purple {
        width: 200px;
        height:100px;
        background-color:purple;
        display:inline-block;
        margin-left:-50px;
    }
    .mather-pink {
        width: 300px;
        height:100px;
        background-color:pink;
    }
    .daughter-blue {
        width:100px;
        height:50px;
        background-color:blue;
        margin-top:-20px;
    }
&lt;/style&gt;
&lt;body&gt;
    &lt;div class="father-green"&gt;
        &lt;div class="son-red"&gt;
            &lt;div class="subson-yellow"&gt;
                我是孙子辈的我是孙子辈的我是孙子辈的
            &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="son-purple"&gt;
            我是第二个子元素
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="mather-pink"&gt;&lt;div class="daughter-blue"&gt;daughter-blue&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;    </code></pre>
<h3 id='pk-menu-19'>3.1 形成层叠上下文的方法？</h3>
<ul>
<li>根元素</li>
<li>position 值为 absolute|relative，且 z-index 值不为 auto</li>
<li>position 值为 fixed|sticky</li>
<li>z-index 值不为 auto 的 flex 元素，即：父元素 display:flex|inline-flex</li>
<li>opacity 属性值小于 1 的元素</li>
<li>transform 属性值不为 none 的元素</li>
<li>mix-blend-mode 属性值不为 normal 的元素</li>
<li>filter、perspective、clip-path、mask、mask-image、mask-border、motion-path 值不为 none 的元素</li>
<li>perspective 值不为 none 的元素</li>
<li>isolation 属性被设置为 isolate 的元素</li>
<li>will-change 中指定了任意 CSS 属性，即便你没有直接指定这些属性的值</li>
<li>-webkit-overflow-scrolling 属性被设置 touch 的元素</li>
</ul>
<blockquote>
<p>[NOTE]</p>
<ul>
<li>层叠上下文可以包含在其他层叠上下文中，并且一起组建了一个有层级的层叠上下文</li>
<li>每个层叠上下文完全独立于它的兄弟元素，当处理层叠时只考虑子元素，这里类似于 BFC</li>
<li>每个层叠上下文是自包含的：当元素的内容发生层叠后，整个该元素将会在父级叠上下文中按顺序进行层叠</li>
</ul>
</blockquote>
<h3 id='pk-menu-20'>3.2 CSS 层叠上下优先级</h3>
<ul>
<li>1. 形成堆叠上下文环境的元素的背景与边框</li>
<li>2. 拥有负 z-index 的子堆叠上下文元素（负的越高越堆叠层级越低）</li>
<li>3. 正常流式布局，非 inline-block，无 position 定位（static 除外）的子元素</li>
<li>4. 无 position 定位（static 除外）的 float 浮动元素</li>
<li>5. 正常流式布局，inline-block 元素，无 position 定位（static 除外）的子元素（包括 display:table 和 display:inline）</li>
<li>6. 拥有 z-index:0 的子堆叠上下文元素</li>
<li>7. 拥有正 z-index: 的子堆叠上下文元素（正的越低越堆叠层级越低）</li>
</ul>
<h3 id='pk-menu-21'>3.3 层叠上下文的堆叠顺序？</h3>
<blockquote>
<p>[NOTE]<br />总结：层叠上下文（border/background）&lt; 负 z -index &lt; block 块状盒子 &lt; 浮动的盒子 &lt; inline/inline-block 水平盒子 &lt; z-index:auto 或者 z-index:0 &lt; 正 z -index（定位并设定了正的 z -index 值，z-index 值越大 层级越高）</p>
</blockquote>
<h2 id='pk-menu-22'>4. 如何解决 inline-block 的间隙问题？</h2>
<h3 id='pk-menu-23'>4.1 字符间距问题</h3>
<pre><code class="language-html">&lt;style&gt;
*{
        margin: 0;
        padding: 0;
    }
    ul{list-style: none;}
    li{
        display: inline-block;
        width: 100px;
        height: 100px;
        background: red;    
    }
&lt;/style&gt;
&lt;ul&gt;
    &lt;li&gt;111&lt;/li&gt;
    &lt;li&gt;222&lt;/li&gt;
    &lt;li&gt;333&lt;/li&gt;
    &lt;li&gt;444&lt;/li&gt;
    &lt;li&gt;555&lt;/li&gt;
&lt;/ul&gt;</code></pre>
<h3 id='pk-menu-24'>4.2 解决方法</h3>
<ul>
<li>1. 解决方法 1：直接删除换行符（IE1 像素残留）</li>
<li>2. 设置父元素的 font-size 为 0，在子元素重新设置字体大小（低版本 safari 兼容性）</li>
<li>3. 父元素 设置 font-size：0；letter-spacing：-3px，子元素重新设置 font-size（推荐方案）</li>
</ul>
<h2 id='pk-menu-25'>5.BFC 是什么？如何清除浮动？</h2>
<blockquote>
<p>BFC：浮动元素和绝对定位元素，非块级盒子的块级容器（例如 inline-blocks, table-cells, 和 table-captions），以及 overflow 值不为“visiable”的块级盒子，都会为他们的内容创建新的 BFC（块级格式上下文）。它是指一个独立的块级渲染区域，只有 Block-level BOX 参与，该区域拥有一套渲染规则来约束块级盒子的布局，且与区域外部无关</p>
</blockquote>
<h3 id='pk-menu-26'>5.1 如何触发 BFC?</h3>
<ul>
<li>float 的值不为 none</li>
<li>overflow 的值不为 visible</li>
<li>display 的值为 inline-block、table-cell、table-caption</li>
<li>position 的值为 absolute 或 fixed</li>
</ul>
<h3 id='pk-menu-27'>5.2 BFC 布局规则</h3>
<ol>
<li>内部的 Box 会在垂直方向，一个接一个地放置。</li>
<li>Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的<strong>margin 会发生重叠（高频考点）</strong></li>
<li>每个元素的 margin box 的左边，与包含块 border box 的左边相接触(对于从左往右的格式化，否则相反)。即使存在浮动也是如此。</li>
<li>BFC 的区域不会与 float box 重叠。</li>
<li>BFC 就是页面上的一个隔离的独立容器，容器里面的子元素不会影响到外面的元素。反之也如此。</li>
<li>计算 BFC 的高度时，浮动元素也参与计算</li>
</ol>
<h3 id='pk-menu-28'>5.3 如何清除浮动？</h3>
<ol>
<li>原因：浮动的元素不会占据父元素的布局空间（父元素布局不会管浮动元素）</li>
<li>清除方式：让盒子负责自己的布局：</li>
</ol>
<h4 id='pk-menu-29'>5.3.1 添加额外标签</h4>
<pre><code class="language-html">&lt;div class="main left"&gt;.main{float:left;}&lt;/div&gt;
&lt;div class="side left"&gt;.side{float:right;}&lt;/div&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="footer"&gt;.footer&lt;/div&gt;</code></pre>
<h4 id='pk-menu-30'>5.3.2 父元素设置 overflow：hidden</h4>
<pre><code class="language-html">&lt;div class="wrap" id="float3" style="overflow:hidden; *zoom:1;"&gt;
&lt;h2&gt;3)父元素设置 overflow &lt;/h2&gt;
&lt;div class="main left"&gt;.main{float:left;}&lt;/div&gt;
&lt;div class="side left"&gt;.side{float:right;}&lt;/div&gt;
&lt;/div&gt;
&lt;div class="footer"&gt;.footer&lt;/div&gt;</code></pre>
<h4 id='pk-menu-31'>5.3.3 使用:after 伪元素</h4>
<pre><code class="language-html">&lt;style type="text/css"&gt;
 .clearfix:after {  
   content: ".";
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden;  
    }  
.clearfix {
  display: inline-block;
  *zoom:1;
  }  /* for IE/Mac */  
&lt;/style&gt;
&lt;!--[if IE]&gt;
 &lt;style type="text/css"&gt;
 .clearfix {zoom: 1;/* triggers hasLayout */  display: block;/* resets display for IE/Win */} &lt;/style&gt;
&lt;![endif]--&gt;</code></pre>
<h4 id='pk-menu-32'>5.3.4 双伪元素清除法(推荐)</h4>
<pre><code class="language-css">.clearfix:before,.clearfix:after{
   content:"";
   display:table;
}
.clearfix:after{clear:both;}
.clearfix{*zoom:1;}</code></pre>
<h2 id='pk-menu-33'>6. 如何适配移动端？</h2>
<h3 id='pk-menu-34'>6.1 viewport 进行缩放</h3>
<pre><code class="language-html">&lt;meta name="viewport" content="width=device-width,initial-scale=1"&gt;</code></pre>
<h3 id='pk-menu-35'>6.2 使用 rem</h3>
<p>rem 是什么(CSS3 新增)，初始值：1rem=16px？<br />rem（font size of the root element）是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位</p>
<blockquote>
<p>[!NOTE]<br />rem(1rem = 16px) / viewport（固定宽度）/ media query（屏幕大小自适应）</p>
</blockquote>
<h3 id='pk-menu-36'>6.3 设计上（响应式方法）</h3>
<p>隐藏（移动端隐藏元素）折行（横排变纵排）自适应（留下自适应的空间）（media query）</p>
<h3 id='pk-menu-37'>6.4 固定宽度做法</h3>
<p>定宽布局（版心）</p>
<h2 id='pk-menu-38'>7.em 和 rem 的区别？</h2>
<ol>
<li>rem 单位翻译为像素值是由 html 元素的字体大小决定的。此字体大小会被浏览器中字体大小的设置影响，除非显式重写一个具体单位。</li>
<li>em 单位转为像素值，取决于他们使用的字体大小。此字体大小受从父元素继承过来的字体大小，除非显式重写与一个具体单位</li>
</ol>
<h2 id='pk-menu-39'>8. 垂直居中的 6 中实现方式？</h2>
<h3 id='pk-menu-40'>8.1 方法一：基于视口的垂直居中</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 垂直居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      overflow: hidden;
      width: 1000px;
      height: 500px;
      background: #999;
    }
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      /* 1vh = 1% * 视口高度 */
      margin: 50vh auto;
      transform: translateY(-50%);
    }

  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt;
        基于视口的垂直居中 &amp;lt;br /&amp;gt;
        不要求原生有固定的宽高。&amp;lt;br /&amp;gt;
        但是这种居中是在整个页面窗口内居中，不是基于父元素 &amp;lt;br /&amp;gt;

      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-41'>8.2 方法二：定宽居中</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 垂直居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      position: absolute;
      top: 50%;
      left: 50%;
      margin-left: -9rem;
      margin-top: -5rem;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="center"&amp;gt;
        要求原生有固定的宽高。&amp;lt;br/&amp;gt;
        position: absolute;&amp;lt;br/&amp;gt;
        top 和 left 为 50%;&amp;lt;br/&amp;gt;
        margin 上为高的一半 &amp;lt;br/&amp;gt;
        margin 左为宽的一半 &amp;lt;br/&amp;gt;
    &amp;lt;/div&amp;gt;

  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-42'>8.3 方法三：calc 居中</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 垂直居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      position: absolute;
      top: calc(50% - 5em);
      left: calc(50% - 9em);
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="center"&amp;gt;
        要求原生有固定的宽高。&amp;lt;br/&amp;gt;
        position: absolute;&amp;lt;br/&amp;gt;
        top 为 calc(50% 剪 一半高)
        left 为 calc(50% 剪 一半宽)
    &amp;lt;/div&amp;gt;

  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-43'>8.4 方法四：transform 居中</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 垂直居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="center"&amp;gt;
        不要求原生有固定的宽高。&amp;lt;br/&amp;gt;
        position: absolute;&amp;lt;br/&amp;gt;
        top 和 left 为 50%;&amp;lt;br/&amp;gt;
        transform: translate(-50%, -50%);
    &amp;lt;/div&amp;gt;

  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-44'>8.5 方法五：flex 居中方法 1 </h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 垂直居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      width: 1000px;
      height: 600px;
      background: #999;

      display: flex;
    }
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;

      margin: auto;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt;
        使用 flex 居中 &amp;lt;br/&amp;gt;
        父元素 display: flex; &amp;lt;br/&amp;gt;
        居中块：margin: auto;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-45'>8.6 方法六: flex 居中方法 2 </h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 垂直居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      width: 1000px;
      height: 600px;
      background: #999;

      display: flex;
      /* 盒子横轴的对齐方式 */
      justify-content: center;
      /* 盒子纵轴的对齐方式 */
      align-items: center;
    }
    .center {
      width: 18em;
      height: 10em;
      text-align: center;
      background-color: orange;
      color: #fff;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt;
        使用 flex 居中 &amp;lt;br/&amp;gt;
        父元素 display: flex; &amp;lt;br/&amp;gt;
        justify-content: center;&amp;lt;br/&amp;gt;
        align-items: center;&amp;lt;br/&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h2 id='pk-menu-46'>9. 水平居中的 4 种实现方式？</h2>
<h3 id='pk-menu-47'>9.1 方法一：text-align 的 center 属性</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 水平元素居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      text-align: center;
      height: 1000px;
    }
    .center {
      display: inline-block;
      width: 500px;
      height: 200px;

      background: orange;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt; 如果需要居中的元素为常规流中 inline / inline-block 元素，为父元素设置 text-align: center;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-48'>9.2 方法二：margin 的 auto 属性</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 水平元素居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      width: 100%;
      height: 500px;

      text-align: center; /* 3 */
    }
    .center {
      width: 500px;
      text-align: left; 
      margin: 0 auto; 

      background-color: orange;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt;
          父元素上设置 text-align: center;&amp;lt;br /&amp;gt;
          居中元素上 margin 为 auto。&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-49'>9.3 方法三：绝对定位</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 水平元素居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      width: 80%;
      height: 500px;
      background: #888;

      position: relative;
    }
    .center {
      width: 500px;
      position: absolute;
      left: 50%;
      margin-left: -250px;

      background-color: orange;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt; 如果元素 positon: absolute; 那么 0）设置父元素 postion: relative 1）为元素设置宽度，2）偏移量设置为 50%，3）偏移方向外边距设置为元素宽度一半乘以 -1&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h3 id='pk-menu-50'>9.4 方法四：相对定位</h3>
<pre><code class="language-html">&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8" /&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="ie=edge" /&amp;gt;
    &amp;lt;title&amp;gt; 水平元素居中 &amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;style&amp;gt;
    .wrapper {
      width: 80%;
      height: 500px;
      background: #888;
    }
    .center {
      width: 500px;
      position: relative;
      left: 50%;
      margin-left: -250px;

      background-color: orange;
    }
  &amp;lt;/style&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;div class="wrapper"&amp;gt;
      &amp;lt;div class="center"&amp;gt; 如果元素 positon: relative。那么 1）为元素设置宽度，2）偏移量设置为 50%，3）偏移方向外边距设置为元素宽度一半乘以 -1&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
</code></pre>
<h2 id='pk-menu-51'>10 居中问题要点总结</h2>
<h3 id='pk-menu-52'>10.1 被居中元素宽高固定</h3>
<h4 id='pk-menu-53'>10.1.1 绝对定位 +margin</h4>
<p>top 和 left 为 50%，margin 的 left 和 top 为自身宽高一半</p>
<pre><code class="language-css">.center {
  position: absolute;
  top: 50%;
  left: 50%;
  margin-left: -9rem;
  margin-top: -5rem;
}</code></pre>
<h4 id='pk-menu-54'>10.1.2 绝对定位 +calc</h4>
<p>top 和 lefe 为父元素一半剪自身一半</p>
<pre><code class="language-css">.center {
  position: absolute;
  top: calc(50% - 5em);
  left: calc(50% - 9em);
}</code></pre>
<h3 id='pk-menu-55'>10.2 被居中元素宽高不定</h3>
<h5>10.2.1 transform 变换</h5>
<p>使用 CSS3 的 <code>transform</code>将位置在中心点平移自身宽高一半</p>
<pre><code class="language-css">.center {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}</code></pre>
<h4 id='pk-menu-56'>10.2.2 flex 布局 +auto</h4>
<pre><code class="language-css">.wrapper {display: flex;}
.center {margin: auto;}</code></pre>
<h4 id='pk-menu-57'>10.2.3 flex 布局 +align</h4>
<p>父元素指定子元素居中。</p>
<pre><code class="language-css">.wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
}</code></pre>
<h3 id='pk-menu-58'>10.3 在浏览器窗口中居中</h3>
<h4 id='pk-menu-59'>10.3.1 基于视口的垂直居中</h4>
<p>不要求原生有固定的宽高，但是这种居中是在整个页面窗口内居中，不是基于父元素</p>
<pre><code class="language-css">.center{
  margin: 50vh auto;
  transform: translateY(-50%);
}</code></pre>
<h2 id='pk-menu-60'>三、CSS 效果</h2>
<h2 id='pk-menu-61'>1. 使用 div 绘制图形（三角形）？</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt;Title&lt;/title&gt;
    &lt;style&gt;
        .triangle-top {
            width: 0;
            height: 0;
            border-width: 0 40px 40px;
            border-style: solid;
            border-color: transparent transparent red;
        }

        .triangle-bottom {
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 40px 40px 0 40px;
            border-color: blueviolet transparent transparent transparent;
        }

        .triangle-left {
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 40px 0 40px 40px;
            border-color: transparent transparent transparent #89ff56;
        }

        .triangle-right {
            width: 0;
            height: 0;
            border-style: solid;
            border-width: 40px 40px 40px 0;
            border-color: transparent yellowgreen transparent;
        }

        /* 缺口的三角形 */
        .box{
            position: absolute;
            left: 0;
            top: 0;
            width: 0;
            height:0;
            border: 6px solid transparent;
        }
        .b1{
            /* 底层的盒子三角形相当于全部是黑色的 */
            border-bottom-color:#000 ;
        }
        .b2{
            /* 上层的为白色覆盖 */
            border-bottom-color:#fff ;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class="triangle-top"&gt;&lt;/div&gt;
&lt;div class="triangle-bottom"&gt;&lt;/div&gt;
&lt;div class="triangle-left"&gt;&lt;/div&gt;
&lt;div class="triangle-right"&gt;&lt;/div&gt;

&lt;div class="box b1"&gt;&lt;/div&gt;
&lt;div class="box b2"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id='pk-menu-62'>2. 如何产生一个不占空间的边框?(box-sizing 属性)?</h2>
<blockquote>
<p>[NOTE]<br />知识点：IE 和标准盒子模型的异同点</p>
<ul>
<li>标准盒子模型：元素的 width 或 height=content 的 width 或 height；</li>
<li>IE 盒子模型：元素的 width 或 height=content 的 width 或 height+padding<em>2+border</em>2；</li>
</ul>
</blockquote>
<pre><code class="language-css">    /*IE 盒子模型：width_sum = margin + width*/
    .border-box-use {
        box-sizing : border-box;
        /* 通过 IE 的盒子模型设置出来之后，这个盒子内容区域的宽度实际只有 180px
            这里指定的 width 实际上是包含了 border 的宽度的
        */
        width: 200px;
        height: 200px;

        border: 10px solid #89ff56;
    }

    /* 标准盒子模型：width_sum = margin + width + padding + width*/
    .border-content-box-use {
        /* 设置为标准的盒子模型，默认值 */
        box-sizing: content-box;

        width: 200px;
        height: 200px;

        padding: 1px;
        border: 10px solid #ff255f;
    }

    .parent-box-inhrit {
        /* 设置当前的盒子模型是从父级盒子中继承，这里相当于是继承了 IE 的盒子模型 */
        box-sizing: inherit;
        width: 50px;
        height: 50px;
        background-color: #48adff;

        border: 1px solid #000;

        /* 对一个元素自身设置 padding，相当于是把盒子撑大了 */
        padding: 5px;
    }</code></pre>
<h3 id='pk-menu-63'>2.1 使用 box-shadow 实现</h3>
<pre><code class="language-css">/*box-shadow 制作边框 */
.box-shadow-border {
    width: 200px;
    height: 200px;
    /* 设置外阴影：x y 模糊区域 扩展区域 */
    box-shadow: 0 0 0 10px red , 0 0 0 10px blue;
}</code></pre>
<h3 id='pk-menu-64'>2.2 使用 outline 实现</h3>
<p>在元素边框边缘的外围绘制一条包围元素的线，包括 outline-color、outline-style、outline-width 三个子属性的设置，可缺省，无固定顺序。轮廓不占据页面空间，也不一定是矩形。即不会增加额外的 width 或者 height。</p>
<pre><code class="language-css">.borner-no-space {
    width: 200px;
    height: 200px;
    outline: 10px solid red;
}</code></pre>
<h2 id='pk-menu-65'>3. 如何实现 IOS 图标的圆角？</h2>
<pre><code class="language-css">/*clip-path 的使用
            1. 对容器进行裁剪
            2. 常见集合图形
            3. 自定义路径
*/
.container-clippath {
    width: 400px;
    height: 300px;
    border: 1px solid #000;
    background-image: url("bg.jpg");
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center center;

    /* 开始进行区域裁剪 */
    /*clip-path: circle(50px at 100px 100px);*/
    /*clip-path: inset(100px 50px);*/
    clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
    /* 同时，也是支持 svg 矢量图的裁剪 */
}

.container-clippath:hover {clip-path: circle(80px at 100px 100px);
}</code></pre>
<h2 id='pk-menu-66'>5. 说下背景图的居中显示 / 重复 / 改变大小?</h2>
<pre><code class="language-css">background-position：背景图片相对容器原点的起始位置
background-repeat
background-size : cover/contain(设置大小)
</code></pre>
<pre><code class="language-css">/* 一个值: 这个值指定图片的宽度，那么第二个值为 auto */
background-size: auto
background-size: 50%
background-size: 3em
background-size: 12px

/* 两个值: 第一个值指定图片的宽度，第二个值指定图片的高度 */
background-size: 50% auto
background-size: 3em 25%
background-size: auto 6px
background-size: auto auto
/* 多重背景，请用逗号隔开，在 CSS 语法中凡语法后跟 * 或者 #，都是可以无限重复的，但是必须用逗号隔开。*/
background-size: auto, auto     /* 不要跟 background-size: auto auto 混淆了 */
background-size: 50%, 25%, 25%
background-size: 6px, auto, contain

background-size: inherit</code></pre>
<h2 id='pk-menu-67'>6. 如何平移 / 放大一个元素？如何实现 0.5px 的边框？</h2>
<blockquote>
<p>[!NOTE]<br />知识点:transform 的灵活使用</p>
</blockquote>
<pre><code class="language-html">&lt;style&gt;
.custom-border{
    width:200px;
    margin:10px auto;
    height:100px;
    border:1px solid #333;
    background-color:#eee;
    padding:10px;
}
.scale-border{
    margin:10px auto;
    height:100px;
    position:relative;
    padding:10px;
    width: 200px;
}
.border{-webkit-transform:scale(0.5);
    transform:scale(0.5);
    position:absolute;
    border:1px solid #333;
    top:-50%;
    right:-50%;
    bottom:-50%;
    left:-50%;
    background-color:#eee;
}
.content{
    position:relative;
    z-index:2;
}
&lt;/style&gt;

&lt;body&gt;
    &lt;div class="custom-border border-color"&gt; 边框宽度 1px&lt;/div&gt;
    &lt;div class="scale-border"&gt;
        &lt;div class="content"&gt; 边框宽度 0.5px&lt;/div&gt;
        &lt;div class="border border-color"&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id='pk-menu-68'>7. 如何实现 3D 效果（旋转的硬币）？</h2>
<pre><code class="language-css">/* 1. 设置一个透视变换，相机距离图像的距离 */
/* perspective : 500px */
/* 2. 设置视觉查看的样式 */
/* transform-style : perspective-3d */
/* 3. 变换图像 */
/* transform : translate rotate */

/* 旋转的硬币效果 */
.money {
    width: 100px;
    height: 100px;
    border-radius: 50px;
    background-color: #48adff;
    border: 2px solid #000;

    /* 开启 3D 效果 */

    perspective: 500px;
    transform-style: preserve-3d;
    /*transform : rotateY(180deg);*/
    animation : rotate 2s linear infinite;
}

@keyframes rotate {
    from {transform : rotateY(0deg);
    }
    to {transform : rotateY(360deg);
    }
}</code></pre>
<h2 id='pk-menu-69'>四、CSS 动画</h2>
<h2 id='pk-menu-70'>1.CSS 动画的实现方式？</h2>
<h3 id='pk-menu-71'>1. transition 补间动画</h3>
<ul>
<li>位置 - 平移：left/right/margin/transform</li>
<li>方位 - 旋转: transform</li>
<li>大小 - 缩放：transform</li>
<li>透明度：opacity</li>
<li>线性变换：transform</li>
</ul>
<h3 id='pk-menu-72'>2. keyframe 关键帧动画</h3>
<h3 id='pk-menu-73'>3. 逐帧动画</h3>
<h2 id='pk-menu-74'>2. 过渡动画和关键帧动画的区别？</h2>
<ol>
<li>过度动画需要有状态的变化</li>
<li>关键帧动画不需要状态的变化</li>
<li>关键帧动画的控制更加精细</li>
</ol>
<h2 id='pk-menu-75'>3. 如何实现逐帧动画？</h2>
<pre><code class="language-css">/* 逐帧动画（关键帧动画的一种特殊情形）*/
/* 1. 适用于无法补间的动画
    2. 猎豹奔跑的过程中实际上是有补间的
    3. 使用 steps(1)去掉补间
    4. 资源较大
*/
.container-every-frame {
 /* 1 的含义：这里需要设置每一个区间之间只有一个动画，那么就不会有补间了 */
    animation-timing-function: steps(1);
}</code></pre>
<h2 id='pk-menu-76'>4.CSS 动画的性能怎么样？</h2>
<ol>
<li>性能不坏</li>
<li>部分情况下优于 JS</li>
<li>JS 可以做到更好</li>
<li>部分高危属性：box-shadow(阴影效果的实现会消耗性能)</li>
</ol>
<h2 id='pk-menu-77'>5. 使用 CSS3 动画实现一个轮播图效果？</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;title&gt; 图片轮换 &lt;/title&gt;
    &lt;style type="text/css"&gt;
        div,img{
            margin: 0;
            padding: 0;
        }
        .div_first{
            width: 1000px;
            height: 300px;
            margin-top: 100px;
            margin-left: 250px;
            overflow: hidden;
        }
        .div_second{
            width: 4000px;
            position: relative;
            animation: myimg 12s linear infinite normal; 
        }
        @keyframes myimg{
            0{left: 0;}
            5%{left: 0;}

            30%{left: -1000px;}
            35%{left: -1000px;}

            60%{left: -2000px;}
            65%{left: -2000px;}

            95%{left: -3000px;}
            100%{left: -3000px;}
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class="div_first"&gt;
        &lt;div class="div_second"&gt;
            &lt;img src="../../img/ 风景 1.jpg" alt=""&gt;
            &lt;img src="../../img/ 风景 1.jpg" alt=""&gt;
            &lt;img src="../../img/ 风景 1.jpg" alt=""&gt;
            &lt;img src="../../img/ 风景 1.jpg" alt=""&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>以上就是高热度网整理的最新 Web 前端面试题，主要涉及到 CSS 的知识（基础，布局，特效，动画）居多，是目前整理的最新 CSS 前端面试题，欢迎大家在线学习。</p>]]></description><link>https://blog.gaoredu.com/article/f83c6833-ba2d-4115-9346-8062590ad4df</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f83c6833-ba2d-4115-9346-8062590ad4df</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 22 Mar 2020 13:59:24 GMT</pubDate></item><item><title><![CDATA[WPS Office2019最新专业版永久激活码（附软件下载地址）]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>WPS Office 是一款办公软件套装，可以实现办公软件最常用的文字、表格、演示等多种功能，最新的 WPS2019 专业版也是新增了不少功能，分享最新可用的几个永久激活码，供大家免费使用。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/03/wps_logo.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">WPS2019 软件新特性和永久激活码免费获取 </p>
</div>
</div>
<p>WPS2019 分为专业版和普通版两个版本，前者是供企业使用，需要激活后才能使用，后者是免费使用的，但是使用过程中难免会有不少广告。我们先来看下最新版本的 WPS2019 有什么新特性吧。</p>
<h2 class="wp-block-heading">WPS2019 软件新特性 </h2>
<p><strong>1. 工作效率大幅度提升 </strong></p>
<ul class="wp-block-list">
<li>WPS Office 2019 企业版内置融合了多个功能组件，随时随地支持多种格式文档，如 Word，Excel，PPT……，统统不在话下 </li>
</ul>
<ul class="wp-block-list">
<li> 内置几千万模板资源可以帮你解决文档的“颜值问题”，轻松有方便 </li>
</ul>
<ul class="wp-block-list">
<li>WPS AI 助手帮你一键智能美化文档，同时支持一键将 PDF 转换为 Word</li>
</ul>
<p><strong>2. 随时随地协作办公 </strong></p>
<ul class="wp-block-list">
<li> 支持云端自动召唤小伙伴，让你随时随地办公，支持多个部门协同完成一个文件 </li>
</ul>
<ul class="wp-block-list">
<li>WPS 专业版 PC 端和移动端完美跨平台兼容，而不用再关心对方是什么系统了 </li>
</ul>
<ul class="wp-block-list">
<li> 支持批量生产链接，一键将文件转换为完美外链 </li>
</ul>
<p><strong>3. 文件超强自动整理 </strong></p>
<ul class="wp-block-list">
<li> 支持关键词检索，帮你在几千份文档的茫茫海中找到熟悉的你 </li>
</ul>
<ul class="wp-block-list">
<li> 文件删除超级安全，内置垃圾回收站，可以快速找到 30 天内删除的文件 </li>
</ul>
<ul class="wp-block-list">
<li> 文件安全锁帮你让别人无法在窥探你的文件内容，火眼金睛也不怕 </li>
</ul>
<ul class="wp-block-list">
<li> 电脑断点也不怕，支持文档一键保存和自动恢复 </li>
</ul>
<p><strong>4.AI 助手智能校正 </strong></p>
<ul class="wp-block-list">
<li>WPS AI 助手，帮你智能自动校正文档内容，这也算是一个小的黑科技了吧 </li>
</ul>
<ul class="wp-block-list">
<li> 支持图片转换文档，一键转存为文字或者 PPT</li>
</ul>
<ul class="wp-block-list">
<li> 文档全部云存储，随时随地，想看就看 </li>
</ul>
<p><strong>5. 界面优化 </strong></p>
<ul class="wp-block-list">
<li> 全新的 UI 界面，不一样的用户体验 </li>
</ul>
<ul class="wp-block-list">
<li> 页面字体太丑了？支持上百种好看字体自定义 </li>
</ul>
<h2 class="wp-block-heading">WPS 20119 永久激活码 </h2>
<p>1. 首先打开软件激活注册页面，输入本站提供的免费 WPS 永久激活码 </p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="WPS Office2019 最新专业版永久激活码（附软件下载地址）"
             alt="WPS Office2019 最新专业版永久激活码（附软件下载地址）" loading="lazy" decoding="async" width="552" height="364" data-src="https://www.gaoredu.com/wp-content/uploads/2020/03/20200320174255.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="WPS 2019 软件激活注册界面" class="wp-image-509" srcset="https://www.gaoredu.com/wp-content/uploads/2020/03/20200320174255.jpg 552w, https://www.gaoredu.com/wp-content/uploads/2020/03/20200320174255-300x198.jpg 300w" sizes="(max-width: 552px) 100vw, 552px" /><figcaption>WPS 2019 软件激活注册界面 </figcaption></figure>
</div/>
<p>2. 输入完成后，点击确定，就可以自动联网激活。激活成功后就可以免费永久使用本软件了。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="WPS Office2019 最新专业版永久激活码（附软件下载地址）"
             alt="WPS Office2019 最新专业版永久激活码（附软件下载地址）" loading="lazy" decoding="async" width="562" height="377" data-src="https://www.gaoredu.com/wp-content/uploads/2020/03/20200320174328.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="WPS 2019 激活成功页面" class="wp-image-510" srcset="https://www.gaoredu.com/wp-content/uploads/2020/03/20200320174328.jpg 562w, https://www.gaoredu.com/wp-content/uploads/2020/03/20200320174328-300x201.jpg 300w" sizes="(max-width: 562px) 100vw, 562px" /><figcaption>WPS 2019 激活成功页面 </figcaption></figure>
</div/>
<h2 class="wp-block-heading"> 最新 WPS 激活码（持续更新）</h2>
<p><strong>WPS 企业版激活码：694BF-YUDBG-EAR69-BPRGB-ATQXH</strong></p>
<ul class="wp-block-list">
<li><code> 某政府版激活码：THUV2-32HH7-6NMHN-PTX7Y-QQCTH</code></li>
<li><code> 某人社局激活码：R7AKQ-KLBXV-RNX3F-BPACQ-NQDGE</code></li>
</ul>
<ul class="wp-block-list">
<li> 企业版序列号 1：R8R8P-MTT6F-KLRPM-J7CAB-PJM8C</li>
<li> 企业版序列号 2：A4XV7-QP9JN-E7FCB-VQFRD-4NLKC</li>
<li> 企业版序列号 3：694BF-YUDBG-EAR69-BPRGB-ATQXH</li>
<li> 企业版序列号 4：7LR67-WTXPA-KLUHV-GEK2E-QW4CK</li>
<li> 企业版序列号 5：EUYTH-3KWKL-PJMX7-XBCPW-9U2DD</li>
<li> 企业版序列号 6：U2PWU-H7D9H-69T3B-JEYC2-3R2NG</li>
<li> 企业版序列号 7：7G2HE-JR8KL-ABB9D-Y7789-GLNFL</li>
<li> 企业版序列号 8：9DP6T-9AGWG-KWV33-9MPC8-JDCVF</li>
</ul>
<p> 大家可以在上面随便输入一个序列号就可以激活 WPS 系列的软件，而且可以免费永久使用。</p>
</p>
<h2 class="wp-block-heading">WPS2019 下载地址 </h2>
<p><strong>WPS Office 2019 下载地址：</strong></p>
<p><a href="http://wdl1.cache.wps.cn/wps/download/ep/WPS2019/WPSPro_11.8.2.8721.exe" target="_blank"  rel="nofollow">http://wdl1.cache.wps.cn/wps/download/ep/WPS2019/WPSPro_11.8.2.8721.exe</a></p>
<p><strong>WPS Office 2019 IOS 手机专业版 APP 下载地址：</strong></p>
<p><a href="http://mo.wps.cn/pc-app/office-pro.html" target="_blank"  rel="nofollow">http://mo.wps.cn/pc-app/office-pro.html</a></p>
<p> <strong>WPS Office 2019 安卓手机专业版 APP 下载地址：</strong> </p>
<p><a href="http://mo.wps.cn/pc-app/office-android.html" target="_blank"  rel="nofollow">http://mo.wps.cn/pc-app/office-android.html</a></p>
<div class="wp-block-group">
<div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="wp-block-group">
<div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow"></div>
</div>
</div>
</div>
<p> 以上就是高热度网首发的 WPS2019 的最新激活码和激活教程，大家可以选择合适的激活码激活即可，</p>
]]></description><link>https://blog.gaoredu.com/article/70d898a1-393f-44a4-be69-7f33e5dd1a3c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/70d898a1-393f-44a4-be69-7f33e5dd1a3c</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Mar 2020 10:18:12 GMT</pubDate></item><item><title><![CDATA[【新】2020最新手机电脑BT种子搜索(边下边播)看片神器下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>对于一些互联网搜索引擎上难以找到的资源，往往需要借助种子搜索神器来帮助我们完成，这款 2020 最新的 BT 种子搜索神器支持各种类型的资源搜索和下载，视频资源在线预览播放，同时也提供了电脑和手机版两个版本供大家下载使用。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/03/logo.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">手机电脑看片神器最新版免费下载</p>
</div>
</div>
<p><strong>1.BT 种子磁力搜索神器电脑版</strong></p>
<p>对于需要使用电脑端搜索种子的老司机来说，高热度网首推的是 P2P 种子搜索神器，这款神器打开之后的界面如下图所示。使用方法也很简单，基本上只需要在你输入 <strong>“关键词”</strong> 点击搜索按钮后就可以检索出来，然后，可以使用第三方工具把“BT 种子”的链接 <strong> 复制下载 </strong> 即可。这款电脑软件可以帮助用户快速搜索需要的 <strong> 任何资源 </strong>，能够让你快速完成下载，还可以快速搜索到<strong> 各种各样的付费影片和会员影片 </strong>，轻松一按即可<strong> 一键下载</strong>，可以让你一次看个够！</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载"
             alt="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载" loading="lazy" decoding="async" width="830" height="593" data-src="https://www.gaoredu.com/wp-content/uploads/2020/03/bt-search-tool.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="BT 种子搜索神器电脑版软件启动界面" class="wp-image-499" srcset="https://www.gaoredu.com/wp-content/uploads/2020/03/bt-search-tool.jpg 830w, https://www.gaoredu.com/wp-content/uploads/2020/03/bt-search-tool-300x214.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/03/bt-search-tool-768x549.jpg 768w" sizes="(max-width: 830px) 100vw, 830px" /><figcaption>BT 种子搜索神器电脑版软件启动界面</figcaption></figure>
</div/>
<p>这款软件的缺点就是不能直接在线观看检索出来的资源，也就是没有资源的 <strong> 预览 </strong> 功能，当然也可以使用本站的免费迅雷黑科技软件的“<strong>边下边播</strong>”功能来解决这个问题。</p>
<p><strong>2. BT 种子搜索手机版</strong></p>
<p>对于喜欢在手机上看片的同学来说，本站推出的这个黑科技神器手机版绝对能解决你的所有需要，而且是可以 <strong> 边下边播 </strong> 的哦，遇到不喜欢的直接跳过即可，当然老司机的话可以直接忽略哈。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载"
             alt="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载" loading="lazy" decoding="async" width="585" height="616" data-src="https://www.gaoredu.com/wp-content/uploads/2020/03/bit-search-app.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="比特知了种子搜索神器搜索结果界面" class="wp-image-500" srcset="https://www.gaoredu.com/wp-content/uploads/2020/03/bit-search-app.jpg 585w, https://www.gaoredu.com/wp-content/uploads/2020/03/bit-search-app-285x300.jpg 285w" sizes="(max-width: 585px) 100vw, 585px" /><figcaption>比特知了种子搜索神器搜索结果界面</figcaption></figure>
</div/>
<p>这款手机神器是目前测试过的最好用的一款，基本上是无卡顿的哦，任何资源都是可以检索到的，支持 <strong>BT 搜索、磁力搜索</strong> 等，内置了 完全 <strong> 免费且速率高 </strong> 的搜索引擎。简直就是专为看片爱好者打造的一款 <strong> 看片神器</strong>。</p>
<p>总结一下，这款手机磁力搜索神器的优点如下：</p>
<ul class="wp-block-list">
<li> 1、一键全网引擎搜索</li>
<li>2、自动判断引擎是否可用</li>
<li>3、自动去除重复下载地址</li>
<li>4、便捷的搜索体验</li>
<li>5、纯净无广告</li>
<li>6、一键复制</li>
<li>7、一键打开下载工具</li>
<li>8、界面简洁美观</li>
<li>9、支持 BT 搜索、磁力搜索、Torrent 搜索、BitComet 搜索 </li>
</ul>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载"
             alt="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载" loading="lazy" decoding="async" width="466" height="516" data-src="https://www.gaoredu.com/wp-content/uploads/2020/03/BT-Player.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="BT 种子磁力播放器" class="wp-image-501" srcset="https://www.gaoredu.com/wp-content/uploads/2020/03/BT-Player.jpg 466w, https://www.gaoredu.com/wp-content/uploads/2020/03/BT-Player-271x300.jpg 271w" sizes="(max-width: 466px) 100vw, 466px" /><figcaption>BT 种子磁力播放器</figcaption></figure>
</div/>
<p>当然这款磁力播放器也是专门为这款磁力搜索神器量身打造的，二者本来就是天生的一对，<strong>“听说，夜晚十分，这款 BT 种子搜索神器和磁力播放器很配哦！”</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载"
             alt="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载" loading="lazy" decoding="async" width="344" height="612" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/screenshot-play-lh-googleusercontent-com-w61o7bja_3vqh4DjYBk_UhOCyR99F-qA1_5jYacat8xB7sgehwSo5CAdKsUe7C6lAA-w1366-h614-rw-1607861371681.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-903"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/screenshot-play-lh-googleusercontent-com-w61o7bja_3vqh4DjYBk_UhOCyR99F-qA1_5jYacat8xB7sgehwSo5CAdKsUe7C6lAA-w1366-h614-rw-1607861371681.png 344w, https://www.gaoredu.com/wp-content/uploads/2020/12/screenshot-play-lh-googleusercontent-com-w61o7bja_3vqh4DjYBk_UhOCyR99F-qA1_5jYacat8xB7sgehwSo5CAdKsUe7C6lAA-w1366-h614-rw-1607861371681-169x300.png 169w"sizes="(max-width: 344px) 100vw, 344px" /><figcaption>种子磁力播放器，安卓 10 可用</figcaption></figure>
</div/>
<p><strong>这款磁力播放器的新特性如下：</strong></p>
<ul class="wp-block-list">
<li>1. 该播放器是一款本地视频播放器，是网上解码强大支持格式较多的视频播放器。</li>
</ul>
<ul class="wp-block-list">
<li>2. 不用下载，直接播放种子 Torrent 和磁力链接 Magnet 里的视频文件。</li>
</ul>
<ul class="wp-block-list">
<li>3. 播放器支持:rmvb,avi,mp4,3gp,rm,flv,wmv,mkv,ts 等格式。</li>
</ul>
<ul class="wp-block-list">
<li>4. 优化解码，做到省电，让连续播放时间更长。</li>
</ul>
<ul class="wp-block-list">
<li>5. 支持自动扫描手机内的视频，也可以按目录浏览播放。</li>
</ul>
<ul class="wp-block-list">
<li>6. 保存播放历史记录。</li>
</ul>
<ul class="wp-block-list">
<li>7. 屏幕锁，让你看电影时防止误按。</li>
</ul>
<ul class="wp-block-list">
<li>8. 实现了简单的文件管理功能，可以用其他软件打开文件</li>
</ul>
<p>最后，放上这几款看片的神器软件，让你一次性看个够！</p>
<p><strong>P2Psearcher V3.5 绿色免费版下载链接：</strong></p>
<p>链接: <a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/18GtviLk8lEmHq50HUnN0bg</a> 提取码: sdru</p>
<p> <strong>比特知了种子搜索神器手机版 APP 下载链接（种子磁力播放器 V1.4.0.apk</strong>免费下载，支持安卓操作系统 10 版本<strong>）：</strong></p>
<p>链接: <a href="https://pan.baidu.com/s/1s8QmJycomaJhQBmBshUwDQ" target="_blank"  rel="nofollow">https://pan.baidu.com/s/</a><a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">1s8QmJycomaJhQBmBshUwDQ </a>提取码: 4hj2</p>
<p><strong>种子磁力播放器下载链接：</strong></p>
<p>链接: <a href="https://pan.baidu.com/s/193Miy58jxqrPsZwmNlIErA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/</a><a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">193Miy58jxqrPsZwmNlIErA </a>提取码: f2os </p>
<p class="has-black-color has-luminous-vivid-orange-background-color has-text-color has-background"><strong>注意 </strong>：<strong>2020 最新手机电脑 BT 种子搜索(边下边播) 看片神器 </strong> 经过多次更新传播后，经常会出现链接失效的问题，如果大家在使用的过程中发现链接失效或者无法访问的问题，大家可以通过关注下方的微信公众号，回复“<strong>看片神器 </strong>”，即可获取最新的<strong> 手机电脑 BT 种子搜索 (边下边播) 看片神器</strong>。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载"
             alt="【新】2020 最新手机电脑 BT 种子搜索 (边下边播) 看片神器下载" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""/><figcaption>微信公众号</figcaption></figure>
</div/>
]]></description><link>https://blog.gaoredu.com/article/c23c4224-2219-4f72-b607-b13aa7b6c617</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c23c4224-2219-4f72-b607-b13aa7b6c617</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 15 Mar 2020 05:04:10 GMT</pubDate></item><item><title><![CDATA[【抢口罩/茅台/华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快0秒下单）]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>对于京东淘宝上面的一些抢购活动如果我们直接抢购的难度是非常大的，通过今天分享的这款抢购黑科技神器可以帮你最快可以实现 0 秒抢购，而且是全自动的！</p>
</blockquote>
<div class="wp-block-cover has-background-dim-40 has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/02/00-8.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）</p>
</div>
</div>
<h2 class="wp-block-heading">一、京东淘宝抢购入口（电脑版）</h2>
<h3 class="wp-block-heading">1.1 <strong>需要准备什么环境？</strong></h3>
<p>需要使用到今天的这款黑科技抢购软件神器即可。目前支持京东抢购和淘宝抢购两种方式。下面是我打开这款软件之后的效果。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）"
             alt="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）" loading="lazy" decoding="async" width="451" height="445" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151149.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="抢口罩神器软件启动界面" class="wp-image-487" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151149.jpg 451w, https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151149-300x296.jpg 300w" sizes="(max-width: 451px) 100vw, 451px" /><figcaption>抢口罩神器软件启动界面</figcaption></figure>
</div/>
<h3 class="wp-block-heading">1.2、<strong>需要怎么使用？</strong></h3>
<p>一、输入抢购商品的 ID，比如这个链接，<a href="https://item.jd.com/100011521400.html" target="_blank"  rel="nofollow">https://item.jd.com/100011521400.html</a>  其中的数字就是 ID，也就是 <a href="https://item.jd.com/100011521400.html" target="_blank"  rel="nofollow">100011521400</a>，这个 ID 实际上就是我们需要抢购的这款商品的唯一标识。这里我们以 <strong>振德（ZHENDE) 口罩一次性医用口罩男女无纺布内里口罩防尘防柳絮防花粉骑行透气 10 只 / 包 浅蓝</strong> 这个商品为例。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）"
             alt="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）" loading="lazy" decoding="async" width="800" height="362" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151611.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="振德（ZHENDE) 口罩一次性医用口罩" class="wp-image-488" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151611.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151611-300x136.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_151611-768x348.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>振德（ZHENDE) 口罩一次性医用口罩</figcaption></figure>
</div/>
<p>二、打开软件，输入你的帐号，目前淘宝建议输入手机验证码登录，京东使用手机扫码登录。登录成功之后，这款抢购神器的主界面也会自动同步下来你的用户信息。我们可以看到上面的这个口罩是每天准时早上 10:00 开始抢，name 我们就按照实际情况设置即可，下面是我的设置。几个关键信息包括：<strong>商品编号 ID、查询时间、下单最多持续时间 </strong>。你只要输入商品 ID 后点击<strong> 定时抢购按钮 </strong> 就行了，系统会自动检测出这个商品的抢购时间，接着就坐着等就行了。</p>
<figure class="wp-block-image size-large"><img title="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）"
             alt="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）" loading="lazy" decoding="async" width="800" height="397" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_152013.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="抢购神器界面的配置信息" class="wp-image-489" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_152013.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_152013-300x149.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-27_152013-768x381.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>抢购神器界面的配置信息</figcaption></figure/>
<p>三、请注意，不是所有商品都支持开发票的，我们如果需要使用 <strong> 优惠券、使用红包或者使用京豆 </strong> 什么高级选项也可以直接在界面中勾选上就可以了。</p>
<h3 class="wp-block-heading">1.3、<strong>最后抢购的结果如何？</strong></h3>
<p>最终通过使用这款抢购神器也成功抢购到了一批口罩，虽然只有 10 个，但也基本上够用了，此外还有 <strong> 袋鼠口罩、3Q 口罩 </strong> 貌似也都不错，大家也可去去试试看，希望大家都能抢购到自己想要的商品。</p>
<h2 class="wp-block-heading">二、淘宝 / 天猫 / 京东 / 拼多多 / 直播 / 华为 / 茅台自动抢购助手手机版</h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）"
             alt="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）" loading="lazy" decoding="async" width="499" height="567" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_183036.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-877"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_183036.jpg 499w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_183036-264x300.jpg 264w"sizes="(max-width: 499px) 100vw, 499px" /><figcaption>京东淘宝抢购助手手机版</figcaption></figure>
</div/>
<p>错过了双十一，难道还要错过双十二吗？这一款淘宝京东手机版抢购助手支持抢购拼多多、华为手机和淘宝京东上的所有商品，淘宝、天猫、京东、拼多多、苏宁易购、抖音直播、小米商城和华为商城等等，当然最近流行的抢购茅台也是可以的。不过目前是只支持安卓手机哈。此外，目前支持页面模式、收藏模式、购物车模式和 BP 模式这 4 种模式。</p>
<h2 class="wp-block-heading">三、抢购视频教程（附源码）</h2>
<p>这里以抢购华为 mate40pro 手机为例，简单演示一下电脑版抢购软件的使用流程。有了它，妈妈再也不用担心你没有手机用了。</p>
<p>首先下载一下安装包，解压之后有两个入口文件，main.exe 是 windows 环境下的入口文件，main.py 是软件的源码。对于如果只是想要实现功能的小伙伴们来说，直接双击打开 main.exe 文件即可。</p>
<p>运行成功之后，主要由三个流程。分别是增加账号 cookies，启动浏览器和全部暂停。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）"
             alt="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）" loading="lazy" decoding="async" width="800" height="423" data-src="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_185036.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-878"srcset="https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_185036.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_185036-300x159.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/12/2020-12-05_185036-768x406.jpg 768w"sizes="(max-width: 800px) 100vw, 800px" /><figcaption>抢购华为 mate14 手机操作流程</figcaption></figure>
</div/>
<p>1. 第一次使用请先点击 [增加账号 cookies] 就是提前在网页中登录好账号, 这个可以登入多个, 会保存在 cookies 目录中，相当于是一个登陆过程。</p>
<p>2. 设置好账号后, 就可以点击[启动浏览器], 意思就是会同时运行 cookies 目录中所有提前设置好的账号</p>
<p>3. 当浏览器都开启了之后, 请自己把产品的尺寸, 规格, 型号等参数, 网页上自己弄!</p>
<p>4. 设置好一切后, 点击[全部开始按钮]</p>
<p>(假如你只有一个号, 你可以多点几次[启动浏览器], 就可以形成一个账号多个页面同时抢购)</p>
<p>下面是一个抢购华为 mate40pro 手机的使用流程教程，上面的流程没太看明白的可以多看几遍下面的视频教程。</p>
<p><iframe loading="lazy" src="//player.bilibili.com/player.html?aid=842799514&amp;bvid=BV1q54y1z7Fc&amp;cid=255261925&amp;page=1" height="500" width="100%" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe></p>
<p>最后，分享 <strong>2020 最新版淘宝京东准点自动抢购这款软件</strong> 的下载链接吧【持续更新】：</p>
<p>以上就是高热度网分享的最新抢口罩等商品的神器，预祝大家抢购成功！</p>
<p>百度网盘下载链接: <a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1ZCBW4rusZy3DUiWjBWwd2g</a> 提取码: 3dcv</p>
<p class="has-black-color has-luminous-vivid-orange-background-color has-text-color has-background"><strong>注意 </strong>：<strong> 最新淘宝京东准点自动抢购（秒杀）神器软件 </strong> 经过多次更新传播后，经常会出现链接失效的问题，如果大家在使用的过程中发现链接失效或者无法访问的问题，大家可以通过关注下方的微信公众号，回复“抢购软件”，即可获取最新的 <strong> 下载链接</strong>。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）"
             alt="【抢口罩 / 茅台 / 华为手机】最新淘宝京东准点自动抢购（秒杀）神器软件下载（最快 0 秒下单）" loading="lazy" decoding="async" width="344" height="344" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="高热度网" class="wp-image-82" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg 344w, https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo-300x300.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo-150x150.jpg 150w" sizes="(max-width: 344px) 100vw, 344px" /><figcaption>高热度网微信公众号</figcaption></figure>
</div/>
]]></description><link>https://blog.gaoredu.com/article/8e59863a-bc92-47ea-b2fc-b02361cccb8c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8e59863a-bc92-47ea-b2fc-b02361cccb8c</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 27 Feb 2020 08:23:35 GMT</pubDate></item><item><title><![CDATA[【新】2020最新Java视频教程（传智+韩顺平+慕课）集合免费下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p> 全网收集的最新 2020 年 java 视频教程，涵盖了 java 基础、进阶、面试等高级课程，可以通过百度网盘免费下载。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/02/00-7.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">2020 最新 java 视频教程百度网盘下载 </p>
</div>
</div>
<p><strong>1. 和韩顺平老师一起学 java</strong></p>
<p> 想当年这可是韩顺平老师非常火爆的 java 视频哈，基本上大江南北，无人不晓的。想当年小编也是学习韩老师的这套视频过来的。这套里面是百度网盘的链接，永久有效。视频共有 95 讲，25 个 G，是韩顺平老师的课程，讲的非常详细透彻，有关于基本语法的知识，也有案例的讲解，适合 Java 初学者和进阶学习者。</p>
<p> 百度网盘链接: <a href="https://pan.baidu.com/s/1gBMxc6zL4pqZpD7bY0fsoA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1gBMxc6zL4pqZpD7bY0fsoA</a> 提取码: xxhw </p>
</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新 Java 视频教程（传智 + 韩顺平 + 慕课）集合免费下载"
             alt="【新】2020 最新 Java 视频教程（传智 + 韩顺平 + 慕课）集合免费下载" loading="lazy" decoding="async" width="500" height="375" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/00-4.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="韩顺平老师和你一起学 java 视频教程" class="wp-image-478" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/00-4.jpg 500w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-4-300x225.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><figcaption> 韩顺平老师和你一起学 java 视频教程 </figcaption></figure>
</div/>
<p><strong>2. 传智博客 java 系列 </strong>（推荐）</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】2020 最新 Java 视频教程（传智 + 韩顺平 + 慕课）集合免费下载"
             alt="【新】2020 最新 Java 视频教程（传智 + 韩顺平 + 慕课）集合免费下载" loading="lazy" decoding="async" width="560" height="395" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/00-5.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="传智播客 java 视频教程" class="wp-image-479" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/00-5.jpg 560w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-5-300x212.jpg 300w" sizes="(max-width: 560px) 100vw, 560px" /><figcaption> 传智播客 java 视频教程 </figcaption></figure>
</div/>
<p> 传智播客旗下的黑马平台出品。这个视频教程涉及的知识点主要包括前端、JAVA 基础、数据库（MySQL+Oracle）、Linux、Maven、SSM 框架、项目实战基本上全部在这个里面了。</p>
<p> 百度网盘链接：<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1Wsvvk1miNbbd7ryahiTbjg" target="_blank" rel="nofollow">https://pan.baidu.com/s/1Wsvvk1miNbbd7ryahiTbjg</a>&nbsp; 密码：1rw6 </p>
<p><strong>3. 某课 java 系列 </strong></p>
<figure class="wp-block-image size-large"><img title="【新】2020 最新 Java 视频教程（传智 + 韩顺平 + 慕课）集合免费下载"
             alt="【新】2020 最新 Java 视频教程（传智 + 韩顺平 + 慕课）集合免费下载" loading="lazy" decoding="async" width="800" height="486" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/00-6.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="慕课网 java 视频教程" class="wp-image-480" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/00-6.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-6-300x182.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-6-768x467.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption> 慕课网 java 视频教程 </figcaption></figure/>
<p>Java 从菜鸟到架构师系列视频教程，包含入门篇、架构篇】进阶篇和高级篇。建议大家可以循序渐进学习这几块的内容。</p>
<p> 百度网盘链接：<a rel="noreferrer noopener" href="http://www.52tech.tech/go/?url=https://pan.baidu.com/s/1SYe685a_5fgQDvJeDHpjLA" target="_blank" rel="nofollow">https://pan.baidu.com/s/1SYe685a_5fgQDvJeDHpjLA</a>&nbsp; 密码：soxf </p>
<p> 以上就是高热度网收集的 2020 年最新的适合初学者和进阶学习的 java 小伙伴的视频教程福利了，如果链接失效的话也会及时补发的哈！</p>
]]></description><link>https://blog.gaoredu.com/article/cdbd98bc-45da-4a33-a9af-9ef85208e45b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cdbd98bc-45da-4a33-a9af-9ef85208e45b</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 25 Feb 2020 14:35:14 GMT</pubDate></item><item><title><![CDATA[2020最新迅雷beta版和SVIP会员版本免费下载（附安卓手机版+电脑版下载地址）]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>迅雷下载速度太慢怎么办？通过今天分享的这款最新免安装 beta 版和 SVIP 去广告精简版迅雷软件可以快速帮你一键开启隐藏的迅雷黑科技下载加速这一神秘功能，同时附该破解版软件的免费下载软件的地址。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/02/00-3.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">最新免安装 SVIP 去广告精简版迅雷免费下载（电脑 + 手机版）</p>
</div>
</div>
<h2 class="wp-block-heading"><strong>迅雷下载速度慢的原因？</strong></h2>
<p>1、可能是资源问题，如果下载一些比较久或者很冷门的资源，那么下载这个资源的人数就比较少，就会导致迅雷下载速度非常慢，这种情况下我们也就只能尝试换一个资源试试看了。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="2020 最新迅雷 beta 版和 SVIP 会员版本免费下载（附安卓手机版 + 电脑版下载地址）"
             alt="2020 最新迅雷 beta 版和 SVIP 会员版本免费下载（附安卓手机版 + 电脑版下载地址）" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/00.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="未开会员情况下的迅雷下载界面" class="wp-image-466" width="532" height="314" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/00.jpg 500w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-300x177.jpg 300w" sizes="(max-width: 532px) 100vw, 532px" /><figcaption>未开会员情况下的迅雷下载界面</figcaption></figure>
</div/>
<p>2、可能是由其他软件占了你的网速，可以试试把浏览器什么占网速的软件全部关闭，再打开迅雷下载。</p>
<p>3、迅雷自身原因</p>
<p>这个原因的可能性一般比较大，由于迅雷自身的限制，必须开通会员才可以下载，否则的话下载速度一直就是 0KB/s，基本上是无法使用的。但是这种限制实际上也是有方法绕过去的。</p>
<p>3、其他原因</p>
<p>如果不是上述原因，由于迅雷搜索可用的下载资源默认线程是 5，我们可以把这个数值改大一些，比如改成 20，当然此时下载的时候你的电脑可能会有点卡顿了！毕竟是多线程下载嘛！但是你的下载速度此时也将至少提升 4 倍！</p>
<h2 class="wp-block-heading"><strong>如何解决迅雷下载速度慢的问题？</strong></h2>
<p>为了彻底解决迅雷下载速度慢的问题，可以使用本站提供的这个黑科技软件，首先来看看这个版本的新特性吧！</p>
<ul class="wp-block-list">
<li>1.  添加本地 SVIP10 年费会员，免费使用会员皮肤、会员播放加速；</li>
<li>2. 去主界面顶部搜索框、消息管理器、去所有广告及各种多余元素；</li>
<li>3. 去主界面底部图片广告、去下载任务文字广告、去右下角广告弹窗；</li>
<li>4. 去个性化皮肤界面文字链接”开通会员”，移除非会员开通会员按钮；</li>
<li>5. 去主界面用户等级旁边的”续费福利”（目前全是推送的狂欢礼包广告）</li>
<li>6. 支持边下边播功能，保留迅雷播放组件；</li>
</ul>
<p>上面的这 6 个新特性应该够你用了吧！而且是完全免费的！下面使用这款 <strong> 最新版迅雷 SVIP 会员去广告版软件</strong> 之后的下载效果！</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2020 最新迅雷 beta 版和 SVIP 会员版本免费下载（附安卓手机版 + 电脑版下载地址）"
             alt="2020 最新迅雷 beta 版和 SVIP 会员版本免费下载（附安卓手机版 + 电脑版下载地址）" loading="lazy" decoding="async" width="690" height="376" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/00-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="使用本站提供的迅雷加速下载软件下载效果" class="wp-image-467" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/00-1.jpg 690w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-1-300x163.jpg 300w" sizes="(max-width: 690px) 100vw, 690px" /><figcaption>使用本站提供的迅雷加速下载软件下载效果</figcaption></figure>
</div/>
<p>再来看看手机版迅雷的加速下载效果</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2020 最新迅雷 beta 版和 SVIP 会员版本免费下载（附安卓手机版 + 电脑版下载地址）"
             alt="2020 最新迅雷 beta 版和 SVIP 会员版本免费下载（附安卓手机版 + 电脑版下载地址）" loading="lazy" decoding="async" width="232" height="476" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/00-2.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="手机版迅雷加速下载效果" class="wp-image-468" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/00-2.jpg 232w, https://www.gaoredu.com/wp-content/uploads/2020/02/00-2-146x300.jpg 146w" sizes="(max-width: 232px) 100vw, 232px" /><figcaption>手机版迅雷加速下载效果</figcaption></figure>
</div/>
<h2 class="wp-block-heading"><strong>最新版迅雷 SVIP 会员 +Beta 版本 + 去广告版软件最新免费下载地址</strong>（持续更新）</h2>
<p>安卓版：链接: <a href="https://pan.baidu.com/s/1cLqB_qoyeTCoMiq2avzxeA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1cLqB_qoyeTCoMiq2avzxeA</a> 提取码: ftit</p>
<p>电脑版：链接: <a href="https://pan.baidu.com/s/1ndudXFbCmyYs7Vajqn9p3g" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1ndudXFbCmyYs7Vajqn9p3g</a> 提取码: s5t2</p>
<p>以上就是高热度网提供的 2020 迅雷 beta 版本免费下载地址，欢迎大家下载使用！</p>
]]></description><link>https://blog.gaoredu.com/article/7ede030d-5006-4755-9e06-f8241afbe639</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7ede030d-5006-4755-9e06-f8241afbe639</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 23 Feb 2020 15:01:36 GMT</pubDate></item><item><title><![CDATA[新手如何10分钟快速搭建一个在线视频直播网站（附完整代码）？]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>不少站长都希望搭建一个自己的黑科技视频网站，尤其是关于视频直播的，但是网上很少有比较全面的教程。小编今天带你只需要 10 分钟就可以搭建起来一个可以观看视频直播的网站，附完整源码下载。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/02/2020-02-11_223546.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">如何快速搭建一个在线视频直播网站？</p>
</div>
</div>
<p>首先呢，假设大家都是小白哈，最好能有点编程基础就更好了，当然 高手就不用向下看了，下面开始今天的教程。</p>
<h2 class="wp-block-heading"><strong>如何在浏览器页面上播放视频？</strong></h2>
<p>目前运行浏览器上的基本上就是前端 HTML、CSS、JavaScript 这三大件的集成体，如果只需要播放视频的话，我们直接使用 HTML5 的 video 标签就可以实现一个简单的播放器。</p>
<figure class="wp-block-video aligncenter"><video autoplay controls loop src="https://www.w3school.com.cn/i/movie.ogg"></video><figcaption>一个简单的视频播放案例</figcaption></figure>
<p>上面的这个很小的视频播放器就只需要下面这部分代码就可以实现了。你只需要吧下面的这个代码全部复制粘贴到一个全新的 HTML 页面就可以了。</p>
<pre class="wp-block-code"><code class='language-default'>&lt;!DOCTYPE HTML>
&lt;html>
&lt;body>

&lt;video src="https://www.w3school.com.cn/i/movie.ogg" controls="controls">
your browser does not support the video tag
&lt;/video>

&lt;/body>
&lt;/html>
</code></pre>
<p>是不是很简单呢？是的。但是大小目前的这个界面可能并不是特别的好看，当然也是完全支持我们自定义属性的，具体的定制大家可以参考下 W3C 的文档。大家可以去自行尝试哈。</p>
<figure class="wp-block-table aligncenter">
<table class="table table-bordered puock-text">
<tbody>
<tr>
<th>属性</th>
<th>值</th>
<th>描述</th>
</tr>
<tr>
<td>autoplay</td>
<td>autoplay</td>
<td>如果出现该属性，则视频在就绪后马上播放。</td>
</tr>
<tr>
<td>controls</td>
<td>controls</td>
<td>如果出现该属性，则向用户显示控件，比如播放按钮。</td>
</tr>
<tr>
<td>height</td>
<td><em>pixels</em></td>
<td>设置视频播放器的高度。</td>
</tr>
<tr>
<td>loop</td>
<td>loop</td>
<td>如果出现该属性，则当媒介文件完成播放后再次开始播放。</td>
</tr>
<tr>
<td>muted</td>
<td>muted</td>
<td>规定视频的音频输出应该被静音。</td>
</tr>
<tr>
<td>poster</td>
<td><em>URL</em></td>
<td>规定视频下载时显示的图像，或者在用户点击播放按钮前显示的图像。</td>
</tr>
<tr>
<td>preload</td>
<td>preload</td>
<td>如果出现该属性，则视频在页面加载时进行加载，并预备播放。如果使用 "autoplay"，则忽略该属性。</td>
</tr>
<tr>
<td>src</td>
<td><em>url</em></td>
<td>要播放的视频的 URL。</td>
</tr>
<tr>
<td>width</td>
<td><em>pixels</em></td>
<td>设置视频播放器的宽度。</td>
</tr>
</tbody>
</table>
</figure>
<p>当然，为了提升我们的开发效率，现在已经有一些开源的封装的很好的插件供我们使用了，比如说 video.js 这个。</p>
<h2 class="wp-block-heading"><strong>如何在短时间开发一个视频直播网站呢？</strong></h2>
<p>其实也是很简单，从左到右包括播放暂停，音量、直播以及右边的视频直播频道切换功能哈。下面来看看实现的代码和最终的实现效果。这个其实是可以借鉴一个论坛的线上地址：<strong>http://vip.52tech.tech/live.php</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="新手如何 10 分钟快速搭建一个在线视频直播网站（附完整代码）？"
             alt="新手如何 10 分钟快速搭建一个在线视频直播网站（附完整代码）？" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-12.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="在线视频直播项目效果图" class="wp-image-451" width="594" height="264" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-12.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-12-300x134.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-12-768x343.jpg 768w" sizes="(max-width: 594px) 100vw, 594px" /><figcaption>在线视频直播项目效果图</figcaption></figure>
</div/>
<p>首先来看看 <strong>HTML</strong> 代码，这块就是页面布局的常见元素哈。</p>
<pre class="wp-block-code"><code class='language-default'>&lt;div id="container">
        &lt;div class="left" id="dplayer">
        &lt;/div>
        &lt;a href="#" class="btn-right" id="btn-right">
            &lt;img src="./images/right.png" alt="">
        &lt;/a>
        &lt;a href="#" class="btn-left" id="btn-left">
            &lt;img src="./images/left.png" alt="">
        &lt;/a>
        &lt;div class="right" id=right>
            &lt;ul id="list">
                &lt;li class="list-item active">&lt;span>CCTV1&lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV2&lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV3 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV4 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV5+ 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV6 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV7 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV- 8 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV- 9 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV-10 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV-11 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV-12 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV-13 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV-14 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CCTV-15 高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>CHC 高清电影 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>北京卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>北京文艺高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>湖南卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>浙江卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>江苏卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>东方卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>安徽卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>黑龙江卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>辽宁卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>深圳卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>广东卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>天津卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>湖北卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>东南卫视高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>北京纪实高清 &lt;/span>&lt;/li>
                &lt;li class="list-item">&lt;span>民视新闻台 &lt;/span>&lt;/li>
            &lt;/ul>
        &lt;/div>
    &lt;/div></code></pre>
<p>接着来看看视频直播的 <strong>CSS</strong> 代码，也就是外表，我们最终看到的效果就是这块实现的哈。</p>
<pre class="wp-block-code"><code class='language-default'>&lt;style>
        #container {
            width: 1000px;
            margin: 0 auto;
            overflow: hidden;
            background-image: url(http://p4.img.cctvpic.com/photoAlbum/templet/common/DEPA1533715906572415/zhibo_out_bg_20190823.jpg);
            display: flex;
            justify-content: center;
            position: relative;
        }

        #container .left {
            float: left;
            width: 800px;
            height: 450px;
            /* background-color: turquoise; */
        }

        #container .right {
            float: right;
            width: 200px;
            height: 450px;
            position: relative;
            overflow-y: scroll;
            overflow-x: hidden;
            transition: cubic-bezier(0.47, 0, 0.745, 0.715);
        }

        #container .btn-right {
            display: inline-block;
            width: 10px;
            height: 28px;
            text-align: center;
            position: absolute;
            z-index: 10;
            transform: translate(-9px, -14px);
            top: 50%;
            right: 190px;
        }

        #container .btn-left {
            display: none;
            width: 10px;
            height: 28px;
            text-align: center;
            position: absolute;
            z-index: 10;
            transform: translate(-9px, -14px);
            top: 50%;
            right: 90px;
        }

        #list {float: left;}

        #list .list-item {
            text-align: center;
            width: 120px;
            list-style: none;
            color: #bbbbbb;
            font-size: 16px;
            height: 48px;
            line-height: 48px;
            cursor: pointer;
        }

        #list .list-item:hover {color: #FF6400;}

        /* 定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸 */
        #container .right::-webkit-scrollbar {
            width: 4px;
            height: 16px;
            background-color: #F5F5F5;
        }

        /* 定义滚动条轨道 内阴影 + 圆角 */
        #container .right::-webkit-scrollbar-track {-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
            background-color: #F5F5F5;
        }

        /* 定义滑块 内阴影 + 圆角 */
        #container .right::-webkit-scrollbar-thumb {
            border-radius: 2px;
            -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
            background-color: #383838;
        }

        .active {color: #FF6400 !important;}
    &lt;/style></code></pre>
<p>最后来看看 <strong>JavaScript</strong> 代码，这块的代码比较核心哈，基本上最终能不能正常播放就看这块的代码了。</p>
<pre class="wp-block-code"><code class='language-default'>&lt;script>
        (function () {const Player = function (list) {this._sourceList = list;};

            Player.prototype = {
                constructor: Player,
                _player: null,
                _sourceContainer: null,

                start() {console.log('start')
                    this._init();},
                _init() {
                    // 初始化播放器参数
                    this._initDPlayer();

                    // 初始化播放列表
                    this._initPlayerList();

                    // 绑定事件相关
                    this._bindEvents();

                    // 开始播放
                    this._player &amp;&amp; this._player.play();},
                _initDPlayer() {
                    this._player = new DPlayer({container: document.getElementById('dplayer'),
                        live: true,
                        danmaku: false,
                        autoplay: true,
                        apiBackend: {read: function (endpoint, callback) {console.log('Pretend to connect WebSocket');
                                callback();},
                            send: function (endpoint, danmakuData, callback) {console.log('Pretend to send danamku via WebSocket', danmakuData);
                                callback();},
                        },
                        video: {url: this._sourceList&#91;0].src,
                            type: 'hls',
                        },
                    });
                },
                _initPlayerList() {let ul = document.getElementById('list');
                    let html = '';
                    this._sourceList.forEach((element, index) => {element.name = element.name.toUpperCase();
                        if (index === 0) {html += `&lt;li class='list-item active'>&lt;span>${element.name}&lt;/span>&lt;/li>`;
                        }
                        else {html += `&lt;li class='list-item'>&lt;span>${element.name}&lt;/span>&lt;/li>`;
                        }
                    });
                    ul.innerHTML = html;
                },
                _bindEvents() {
                    // 电视列表点击事件的绑定
                    this._bindListitemEvent();
                    // 切换按钮的点击事件绑定
                    this._bindToggleButtonEvent();},
                _bindListitemEvent() {let list = document.getElementById("list");
                    let self = this;
                    list.addEventListener('click', function (e) {
                        let nodeName = e.target.nodeName || "";
                        if (nodeName.toLowerCase() === 'span') {
                            // 点击之后，当前的项高亮显示
                            let listItems = document.getElementsByClassName('list-item');
                            for (let i = 0, len = listItems.length; i &lt; len; i++) {if (listItems&#91;i].classList.contains('active')) {listItems&#91;i].classList.remove('active');
                                }
                            }
                            let text = e.target.innerText || "";
                            e.target.parentNode.classList.add('active');
                            let name = text.trim().toLowerCase();
                            let tv = self._sourceList.filter(function (item) {return item.name.trim().toUpperCase() === name.trim().toUpperCase();});

                            // 开始更新播放列表的数据
                            tv.length &amp;&amp; self._playLive(tv&#91;0]);
                        }
                    }, false);
                },
                _bindToggleButtonEvent() {let btnRight = document.getElementById('btn-right');
                    let btnLeft = document.getElementById('btn-left');
                    let list = document.getElementById("list");
                    let right = document.getElementById('right');
                    btnRight.addEventListener('click', function () {
                        right.style.display = 'none';
                        btnRight.style.display = 'none';
                        btnLeft.style.display = 'block';
                    });

                    btnLeft.addEventListener('click', function () {
                        right.style.display = 'block';
                        btnRight.style.display = 'block';
                        btnLeft.style.display = 'none';
                    });
                },
                _playLive(tv) {
                    this._player.switchVideo(
                        {
                            type: 'hls',
                            url: tv.src
                        }
                    );
                }
            }

            const sourceList = &#91;
                {name: 'cctv1', src: 'http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8'},
                {name: 'cctv2', src: 'http://ivi.bupt.edu.cn/hls/cctv2.m3u8'},
                {name: 'CCTV3 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8'},
                {name: 'CCTV4 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv4.m3u8'},
                {name: 'CCTV5+ 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8'},
                {name: 'CCTV6 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8'},
                {name: 'CCTV7 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv7.m3u8'},
                {name: 'CCTV- 8 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv8hd.m3u8'},
                {name: 'CCTV- 9 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv9.m3u8'},
                {name: 'CCTV-10 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv10.m3u8'},
                {name: 'CCTV-11 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv11.m3u8'},
                {name: 'CCTV-12 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv12.m3u8'},
                {name: 'CCTV-13 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv13.m3u8'},
                {name: 'CCTV-14 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv14.m3u8'},
                {name: 'CCTV-15 高清', src: 'http://ivi.bupt.edu.cn/hls/cctv15.m3u8'},
                {name: 'CHC 高清电影', src: 'http://ivi.bupt.edu.cn/hls/chchd.m3u8'},
                {name: '北京卫视高清', src: 'http://ivi.bupt.edu.cn/hls/btv1hd.m3u8'},
                {name: '北京文艺高清', src: 'http://ivi.bupt.edu.cn/hls/btv2hd.m3u8'},
                {name: '湖南卫视高清', src: 'http://ivi.bupt.edu.cn/hls/hunanhd.m3u8'},
                {name: '浙江卫视高清', src: 'http://ivi.bupt.edu.cn/hls/zjhd.m3u8'},
                {name: '江苏卫视高清', src: 'http://ivi.bupt.edu.cn/hls/jshd.m3u8'},
                {name: '东方卫视高清', src: 'http://ivi.bupt.edu.cn/hls/dfhd.m3u8'},
                {name: '安徽卫视高清', src: 'http://ivi.bupt.edu.cn/hls/ahhd.m3u8'},
                {name: '黑龙江卫视高清', src: 'http://ivi.bupt.edu.cn/hls/hljhd.m3u8'},
                {name: '辽宁卫视高清', src: 'http://ivi.bupt.edu.cn/hls/lnhd.m3u8'},
                {name: '深圳卫视高清', src: 'http://ivi.bupt.edu.cn/hls/szhd.m3u8'},
                {name: '广东卫视高清', src: 'http://ivi.bupt.edu.cn/hls/gdhd.m3u8'},
                {name: '天津卫视高清', src: 'http://ivi.bupt.edu.cn/hls/tjhd.m3u8'},
                {name: '湖北卫视高清', src: 'http://ivi.bupt.edu.cn/hls/hbhd.m3u8'},
                {name: '东南卫视高清', src: 'http://ivi.bupt.edu.cn/hls/sdhd.m3u8'},
                {name: '北京纪实高清', src: 'http://ivi.bupt.edu.cn/hls/btv11hd.m3u8'},
                {name: '民视新闻台', src: 'https://6.mms.vlog.xuite.net/hls/ftvtv/index.m3u8'},
            ];
            // const url = "http://1252093142.vod2.myqcloud.com/4704461fvodcq1252093142/48c8a9475285890781000441992/playlist.m3u8";
            new Player(sourceList).start();})();
    &lt;/script></code></pre>
<p>这样一来，这个视频播放器也就全部实现完成了，总共也就 320 行代码左右，而且支持视频直播列表的切换哈，感兴趣的朋友可以来试试看！</p>
<h2 class="wp-block-heading">视频直播开源网站项目源码</h2>
<p>最后，再分享一个 GitHub 上面比较完善的 VIP 视频开源项目，目前也已经有 300 多个 star 了，还是不错的。</p>
<figure class="wp-block-image size-large"><img title="新手如何 10 分钟快速搭建一个在线视频直播网站（附完整代码）？"
             alt="新手如何 10 分钟快速搭建一个在线视频直播网站（附完整代码）？" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/1443252-20181013191636976-748718043-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""/><figcaption>VIP 视频免费看项目启动主界面</figcaption></figure/>
<p>开源 VIP 视频免费看项目：<a href="https://github.com/xiugangzhang/video.github.io" target="_blank"  rel="nofollow">https://github.com/xiugangzhang/video.github.io</a></p>
<p>以上就是高热度网提供给大家的这个 10 分钟快速搭建一个视频直播网站的教程哈，如果大家在使用的过程中有任何问题，也欢迎大家评论留言哈。</p>
]]></description><link>https://blog.gaoredu.com/article/3fcbc78b-8736-401f-ab31-38de084c7e71</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3fcbc78b-8736-401f-ab31-38de084c7e71</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 11 Feb 2020 14:39:15 GMT</pubDate></item><item><title><![CDATA[Ten American black technology weapons that can&#8217;t be surpassed!]]></title><description><![CDATA[<h2 class="wp-block-heading"><strong>First, Ford-class aircraft carriers</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="625" height="416" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-425"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001.jpeg 625w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-300x200.jpeg 300w"sizes="(max-width: 625px) 100vw, 625px" /><figcaption>Ford-class aircraft carriers</figcaption></figure>
</div/>
<p>The United States has the largest number of aircraft carriers in the world, and eleven aircraft carriers are in service. The Ford-class aircraft carrier was officially commissioned in 2017 with a hull length of 337 meters and a full-load displacement of 112,000 tons, making it the world's largest nuclear-powered aircraft carrier. The U.S. military plans to build ten Ford-class aircraft carriers by 2058 to replace the Nimitz-class aircraft carriers.</p>
<h2 class="wp-block-heading"><strong>Second, F22 Raptor fighter</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="640" height="360" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/002.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-426"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/002.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/02/002-300x169.jpeg 300w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>F22 Raptor fighter</figcaption></figure>
</div/>
<p>The F-22 fighter is the world's first five-generation stealth fighter to enter service. It officially entered service in 2005 and uses two F119-PW-100 turbocharged turbofan engines with low bypass ratio. The stealth, agility, precision and situational awareness of F22 fighters are all top in the world, and they are called the fifth generation of the world's most comprehensive fighters. After the F22 fighter entered service, the Chinese F-20 and the Russian Su57 were successively born, but their technical aspects were still different from the F22.</p>
<h2 class="wp-block-heading"><strong>Third, B2 strategic bomber</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="640" height="480" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/003.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-427"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/003.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/02/003-300x225.jpeg 300w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>B2 strategic bomber</figcaption></figure>
</div/>
<p>The B2 strategic bomber is the only stealth strategic bomber in the world. It officially entered service in 1997. It has a very low reconnaissance capability and it is difficult to intercept even a strict air defense system. The stealth performance of B2 is not only reflected in the difficult aspect of radar detection, but also can reduce the possibility of detection under different signal conditions such as infrared, visible light and noise. The B2 strategic bomber has a range of 12,000 kilometers (without refueling in the air) and the flight time of each combat is more than 10 hours, achieving the global arrival and global destruction of the strategic bomber.</p>
<h2 class="wp-block-heading"><strong>Fourth, Ohio-class strategic nuclear submarine</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="640" height="316" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/004.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-428"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/004.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/02/004-300x148.jpeg 300w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>Ohio-class strategic nuclear submarine</figcaption></figure>
</div/>
<p>The Ohio-class strategic nuclear submarine, commissioned in 1981, has 18 in service so far. The Ohio class is the world's most powerful strategic nuclear submarine. It can carry 24 Trident II ballistic missiles. It has cutting-edge silent technology and can carry 24 Trident II ballistic missiles. It is the most strategic nuclear submarine in the world carrying ballistic missiles.</p>
<h2 class="wp-block-heading"><strong>Fifth, Minuteman III Intercontinental Ballistic Missile</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/005.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-429"width="567"height="323"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/005.jpeg 500w, https://www.gaoredu.com/wp-content/uploads/2020/02/005-300x171.jpeg 300w"sizes="(max-width: 567px) 100vw, 567px" /><figcaption>Minuteman III Intercontinental Ballistic Missile</figcaption></figure>
</div/>
<p>The militia III intercontinental ballistic missile, commissioned in 1962, is the third generation of ground-to-ground strategic intercontinental missiles in the United States. Different range can be set according to different positions of the target.</p>
<h2 class="wp-block-heading"><strong>Sixth, M1A3 main battle tank</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/006.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-430"width="582"height="387"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/006.jpeg 550w, https://www.gaoredu.com/wp-content/uploads/2020/02/006-300x200.jpeg 300w"sizes="(max-width: 582px) 100vw, 582px" /><figcaption>M1A3 main battle tank</figcaption></figure>
</div/>
<p>M1A3 main battle tank, the latest US main battle Turk, an upgraded version of the M1 main battle tank. The M1A3 weighs about 62 tons and has high firepower accuracy. Using advanced new ceramic composite armor, it has very high impact resistance and anti-penetration performance.</p>
<h2 class="wp-block-heading"><strong>Seventh, F35 fighter</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="640" height="400" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/007.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-431"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/007.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/02/007-300x188.jpeg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/007-480x300.jpeg 480w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>F35 fighter</figcaption></figure>
</div/>
<p>F35 fighter, the world's only carrier-based five-generation aircraft, is also the world's largest single-engine single-seat carrier-based fighter. The F35 fighter is second only to the F22 in terms of comprehensive performance and has strong stealth and maneuverability. As a carrier-based aircraft, the F-35A is suitable for runway take-off and landing, and the F-35B type is suitable for short-range or vertical take-off and landing.</p>
<h2 class="wp-block-heading"><strong>Eighth, Littoral Combat Ship</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="640" height="395" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/008.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-432"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/008.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/02/008-300x185.jpeg 300w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>Littoral Combat Ship</figcaption></figure>
</div/>
<p>Littoral combat ship, commissioned in 2008, is an important milestone in the transformation of U.S. warships after the Cold War. It was originally designed to meet the needs of the US Navy's low-intensity operations. Its main purpose is to project weapons and forces for the Army. An important manifestation of cooperative operations. Littoral battleships have the advantage of being able to withstand waves and stealth, and have high speed. They can also deal with low-intensity coastal threats.</p>
<h2 class="wp-block-heading"><strong>Ninth, Burke-class destroyer</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="640" height="434" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/009.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-433"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/009.jpeg 640w, https://www.gaoredu.com/wp-content/uploads/2020/02/009-300x203.jpeg 300w"sizes="(max-width: 640px) 100vw, 640px" /><figcaption>Burke-class destroyer</figcaption></figure>
</div/>
<p>The Burke-class destroyer, the main destroyer of the United States Navy, is the world's first destroyer equipped with a four-sided phased array radar. Combined with the Aegis combat system and the MK-41 vertical launch system, it is the first destroyer in the world to focus on air defense operations. , Known as the world's most advanced and most comprehensive destroyer.</p>
<h2 class="wp-block-heading"><strong>Tenth, Apache gunship</strong></h2>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="Ten American black technology weapons that can't be surpassed!"alt="Ten American black technology weapons that can't be surpassed!" loading="lazy" decoding="async" width="639" height="465" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/010.jpeg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-434"srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/010.jpeg 639w, https://www.gaoredu.com/wp-content/uploads/2020/02/010-300x218.jpeg 300w"sizes="(max-width: 639px) 100vw, 639px" /><figcaption>Apache gunship</figcaption></figure>
</div/>
<p>Apache gunship, the world's first comprehensive list of military straight, began serving in 1986, is the main force of the US Army. Apache Wuzhi is loved by many countries and regions, and has served in 13 countries and regions, including Japan and Israel.</p>
]]></description><link>https://blog.gaoredu.com/article/d0fa5888-8ac2-4389-955f-f12ebc2eaa56</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d0fa5888-8ac2-4389-955f-f12ebc2eaa56</guid><category><![CDATA[前端]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 06 Feb 2020 09:26:28 GMT</pubDate></item><item><title><![CDATA[【新】idea激活码，jetbrains全系列最新2020激活码和激活教程（亲测可用）]]></title><description><![CDATA[<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/02/001-9.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">JetBrains 全家桶永久激活到 2089 年最新视频教程</p>
</div>
</div>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>本激活教程适用于 <strong>Pycharm、IntelJ IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode</strong> 等 JetBrains 所有的集成开发测试环境（IDE），通过这个黑科技激活教程可以成功激活这些产品到 <strong>2089</strong> 年的？也就是让你可以免费使用 <strong>69</strong> 年。</p>
</blockquote>
<h2 class="has-vivid-red-color has-text-color wp-block-heading">一、<strong>JetBrains</strong>全家桶 2020 激活教程【强烈推荐该方法】</h2>
<p>经过测试，本套 <strong>2020 JetBrains（IntelliJ IDEA，Pycharm，Webstorm</strong>）最新激活教程适用于 JetBrains 的所有 全家桶产品，包括<strong> Pycharm、IntelJ IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode</strong> 等，而且对于 <strong>Windows/Mac/Linux </strong> 系统也同样适用。</p>
<h3 class="wp-block-heading">1.1 环境准备</h3>
<ul class="wp-block-list">
<li><strong>适用 JetBrains 产品 </strong>：不限，适用于<strong>JetBrains</strong> 的全家桶所有产品；</li>
<li><strong>操作系统 </strong>：不限，适用于<strong>Windows/Mac/Linux</strong> 等安装了 <strong>JetBrains</strong> 产品的任意操作系统；</li>
<li><strong>其他环境 </strong>：为了确保激活过程顺利，建议将电脑断网即可，也可以直接拔掉网线或者关闭<strong>WiFi</strong> 即可；</li>
<li>产品下载：建议根据自己的开发需求，可以直接去官网下载自己需要的 <strong>JetBrains</strong> 黑科技产品。</li>
</ul>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-15_161858.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="JetBrains 全家桶官网最新下载地址" class="wp-image-722" width="643" height="343" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-15_161858.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-15_161858-300x160.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/2020-04-15_161858-768x410.jpg 768w" sizes="(max-width: 643px) 100vw, 643px" /><figcaption><strong>JetBrains</strong>全家桶官网最新下载地址</figcaption></figure>
<p></div/></p>
<p>附 <strong>JetBrains</strong> 官网下载地址：<a href="https://www.jetbrains.com/" target="_blank"  rel="nofollow">https://www.jetbrains.com/</a></p>
<h3 class="wp-block-heading">1.2 激活教程</h3>
<p>这里假设大家的电脑上都已经成功安装了 <strong>JetBrains</strong> 官网上的任意一款产品，安装过程因为也是比较简单，这里也就不做过多介绍。这里就以 <strong><code>IntelliJ IDEA2020</code></strong> 最新版的激活过程为例，介绍这款软件的详细激活教程。</p>
<p><strong>1. </strong>当你安装完成后，首先重启 <strong>&nbsp;<code>IntelliJ IDEA</code></strong> 软件 <strong>，</strong> 你也可以双击电脑上的图标进行重启。重启后，会自动弹出一个软件注册对话框，这里我们选择 <strong>&nbsp;<code>Evaluate for free</code></strong>, 然后再点击 &nbsp;<code><strong>Evaluate</strong></code> 按钮。之后就会直接进入到这款 <strong><code>IntelliJ IDEA</code></strong> 软件的主界面。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="725" height="480" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/2424189707-6176ffeb3df812a4_articlex.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="IntelliJ IDEA2020 License Activation 激活注册界面" class="wp-image-723" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/2424189707-6176ffeb3df812a4_articlex.png 725w, https://www.gaoredu.com/wp-content/uploads/2020/04/2424189707-6176ffeb3df812a4_articlex-300x199.png 300w" sizes="(max-width: 725px) 100vw, 725px" /><figcaption>IntelliJ IDEA2020 License Activation 激活注册界面</figcaption></figure>
<p></div/></p>
<p>2. 将高热度网分享的 <strong>JetBrains</strong> 破解补丁 <strong> jetbrains-agent.jar</strong> 文件直接拖入 IDEA 界面中，当然如果是其他 <strong>IDE</strong> 的话，也同理。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="800" height="460" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/497538285-e0261dde015411e9_articlex.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="将 jetbrains-agent 直接拖入到 IDE 的主界面" class="wp-image-724" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/497538285-e0261dde015411e9_articlex.png 800w, https://www.gaoredu.com/wp-content/uploads/2020/04/497538285-e0261dde015411e9_articlex-300x173.png 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/497538285-e0261dde015411e9_articlex-768x442.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>将 <strong>jetbrains-agent</strong> 直接拖入到 IDE 的主界面</figcaption></figure>
<p></div/></p>
<p>3. 当你拖入到 <strong>IDE</strong> 之后，会弹出一个提示框“<strong>IDE and Pligin Updates</strong>”, 然后我们只需要点击“<strong>Restart</strong>”按钮即可。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large is-resized"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/4046408665-b6bd22747fcad6ad_articlex.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-725"width="586"height="121"srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/4046408665-b6bd22747fcad6ad_articlex.png 586w, https://www.gaoredu.com/wp-content/uploads/2020/04/4046408665-b6bd22747fcad6ad_articlex-300x62.png 300w"sizes="(max-width: 586px) 100vw, 586px" /><figcaption>IDE and Plugin Updates</figcaption></figure>
<p></div/></p>
<p>4. 重启之后就会自动进入到 <strong>JetbrainsAgent 配置助手 V3.2.0 版</strong> 小工具中，然后选择这个激活工具的安装目录和激活方式即可，这里有 "<strong>Activation code</strong>" 和 "<strong>License server</strong>" 两种激活方式，我们我们选择默认的激活方式即可，然后再点击“<strong>为 IDEA 安装</strong>”按钮即可。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="590" height="174" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/3703449259-acc9d74e146467ff_articlex.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="JetbrainsAgent 配置助手 V3.2.0 版" class="wp-image-726" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/3703449259-acc9d74e146467ff_articlex.png 590w, https://www.gaoredu.com/wp-content/uploads/2020/04/3703449259-acc9d74e146467ff_articlex-300x88.png 300w" sizes="(max-width: 590px) 100vw, 590px" /><figcaption>JetbrainsAgent 配置助手 V3.2.0 版</figcaption></figure>
<p></div/></p>
<p>到此为止，这款 <strong>IDE</strong> 就激活成功了，基本上是全自动的激活过程，不需要你额外做什么操作，非常实用方便，接下来我们来看一下是不是真的激活了？</p>
<h3 class="wp-block-heading">1.3 激活结果</h3>
<p>我们直接进入到你的 <strong>JetBrains</strong> 界面后，点击 <strong>Help</strong> 下的 <strong>Register</strong> 按钮查看软件激活信息。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="800" height="504" data-src="https://www.gaoredu.com/wp-content/uploads/2020/04/3503029723-7a153f0692d26ce3_articlex.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="JetBrains 产品成功激活到 2089 年界面" class="wp-image-727" srcset="https://www.gaoredu.com/wp-content/uploads/2020/04/3503029723-7a153f0692d26ce3_articlex.png 800w, https://www.gaoredu.com/wp-content/uploads/2020/04/3503029723-7a153f0692d26ce3_articlex-300x189.png 300w, https://www.gaoredu.com/wp-content/uploads/2020/04/3503029723-7a153f0692d26ce3_articlex-768x484.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption><strong>JetBrains</strong>产品成功激活到 2089 年界面</figcaption></figure>
<p></div/></p>
<p><strong>JetBrains</strong>老版本（<strong>2013.3.3</strong>以前）系列产品破解补丁链接: <a href="http://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1DIv4-kdUnzyeczWygizlhiHXg</a> 提取码: 4yji</p>
<p><strong>JetBrains</strong> <strong>2019.3.3</strong>版本破解补丁下载链接: <a href="https://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1DzksAZciRw3-7dYt1asLsImDg</a> 提取码: suyd </p>
<p><strong>JetBrains</strong> <strong>2020</strong>年最新版本破解补丁下载链接: <a href="http://pan.baidu.com/s/1zsAZciRw3-7dYt1asLsIDg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1GkWh9hps2xTXB4WzcvyUxjWUw </a>提取码: s3dx</p>
<p class="has-very-dark-gray-color has-luminous-vivid-orange-background-color has-text-color has-background"><strong>注意 </strong>：<strong>JetBrains</strong> 激活工具经过多次更新传播后，经常会出现链接失效的问题，如果大家在使用的过程中发现链接失效或者无法访问的问题，大家可以通过关注下方的微信公众号，回复“<strong>激活码 </strong>”，即可获取最新的<strong>JetBrains</strong> 全系列所有激活工具和激活码。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/wechat_logo.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""/><figcaption>微信公众号</figcaption></figure>
<p></div/></p>
<p>注意事项，使用该方法的小伙伴们如果没有成功激活，可以按照下面的流程进行排查：</p>
<p class="has-black-color has-text-color">1.<strong><span class="has-inline-color has-vivid-red-color">请确保当前激活的 idea 程序包版本和激活工具中的版本一一对应</span></strong>。比如你的 idea 是 2020 年最新版本的，那么就请使用分享的工具包里面的 2020 最新版本破解补丁 jetbrains-agent.jar 这个工具包来激活；而不是随便使用其他文件夹里的破解补丁。</p>
<p><figure class="wp-block-image size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="542" height="136" data-src="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_154044.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt=""class="wp-image-818"srcset="<a href="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_154044.jpg">https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_154044.jpg</a> 542w, <a href="https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_154044-300x75.jpg">https://www.gaoredu.com/wp-content/uploads/2020/09/2020-09-05_154044-300x75.jpg</a> 300w"sizes="(max-width: 542px) 100vw, 542px" /><figcaption>idea 激活工具和版本信息说明</figcaption></figure/></p>
<p>2.<strong><span class="has-inline-color has-vivid-green-cyan-color">由于激活码随时都可能失效，建议使用破解补丁激活</span></strong>。网上的激活码层出不穷，为了激活的稳定性，激活码需要修改 host，改配置文件等多个操作，而且激活成功率低，往往很快就会过期，所以建议大家使用破解补丁激活会更稳定一些。</p>
<p>3. 如果按照上面的激活流程还是没有激活成功的小伙伴，<strong><span class="has-inline-color has-vivid-cyan-blue-color">可以直接在本帖下留言即可</span></strong>，必要时也会提供远程协助等相关的技术支持哈。</p>
<h2 class="wp-block-heading">二、产品已经过期的如何激活？</h2>
<p>该方法是激活 Jetbrains 产品的另外一种思路，因为默认安装成功之后，是有 30 天的免费试用时间的，因此只需要重新把这个 eval 时间重置即可。高热度网这里提供一款黑科技重置工具帮你轻松激活。</p>
<h3 class="wp-block-heading" id="0x1- 如何安装">0x1. 如何安装</h3>
<h4 class="wp-block-heading" id="1- 插件市场安装：">1). 插件市场安装：</h4>
<ol class="wp-block-list">
<li>在<code>Settings/Preferences...</code>&nbsp;->&nbsp;<code>Plugins</code>&nbsp;内手动添加第三方插件仓库地址：<code>https://plugins.zhile.io</code></li>
<li>搜索：<code>IDE Eval Reset</code>插件进行安装。如果搜索不到请注意是否做好了上一步？网络是否通畅？</li>
<li>插件会提示安装成功。</li>
</ol>
<h4 class="wp-block-heading" id="2- 下载安装：">2). 下载安装：</h4>
<ol class="wp-block-list">
<li>下载插件的 <code>zip</code> 包（macOS 可能会自动解压，然后把 <code>zip</code> 包丢进回收站）</li>
<li>通常可以直接把 <code>zip</code> 包拖进 IDE 的窗口来进行插件的安装。如果无法拖动安装，你可以在<code>Settings/Preferences...</code>&nbsp;->&nbsp;<code>Plugins</code>&nbsp;里手动安装插件（<code>Install Plugin From Disk...</code>）</li>
<li>插件会提示安装成功。</li>
<li>插件下载链接: <a href="https://pan.baidu.com/s/1hzcyhGa7gmlE39lo8sAsVw" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1hzcyhGa7gmlE39lo8sAsVw</a> 提取码: xfgi</li>
</ol>
<h3 class="wp-block-heading" id="0x2- 如何使用">0x2. 如何使用</h3>
<ol class="wp-block-list">
<li>一般来说，在 IDE 窗口切出去或切回来时（窗口失去 / 得到焦点）会触发事件，检测是否长时间（<code>25</code>天）没有重置，给通知让你选择。（初次安装因为无法获取上次重置时间，会直接给予提示）</li>
<li>也可以手动唤出插件的主界面：<ul>
<li>如果 IDE 没有打开项目，在 <code>Welcome</code> 界面点击菜单：<code>Get Help</code>&nbsp;->&nbsp;<code>Eval Reset</code></li>
<li>如果 IDE 打开了项目，点击菜单：<code>Help</code>&nbsp;->&nbsp;<code>Eval Reset</code></li>
</ul>
</li>
<li>唤出的插件主界面中包含了一些显示信息，<code>2</code>个按钮，<code>1</code>个勾选项：<ul>
<li>按钮：<code>Reload</code>&nbsp;用来刷新界面上的显示信息。</li>
<li>按钮：<code>Reset</code>&nbsp;点击会询问是否重置试用信息并 <strong> 重启 IDE</strong>。选择 <code>Yes</code> 则执行重置操作并 <strong> 重启 IDE 生效 </strong>，选择<code>No</code> 则什么也不做。（此为手动重置方式）</li>
<li>勾选项：<code>Auto reset before per restart</code>&nbsp;如果勾选了，则自勾选后 <strong> 每次重启 / 退出 IDE 时会自动重置试用信息</strong>，你无需做额外的事情。（此为自动重置方式）</li>
</ul>
</li>
</ol>
<h3 class="wp-block-heading" id="0x3- 如何更新">0x3. 如何更新</h3>
<h4 class="wp-block-heading" id="1- 插件更新机制（推荐）：">1). 插件更新机制（推荐）：</h4>
<ol class="wp-block-list">
<li>IDE 会自行检测其自身和所安装插件的更新并给予提示。如果本插件有更新，你会收到提示看到更新日志，自行选择是否更新。</li>
<li>点击 IDE 的<code>Check for Updates...</code>&nbsp;菜单手动检测 IDE 和所安装插件的更新。如果本插件有更新，你会收到提示看到更新日志，自行选择是否更新。</li>
<li>插件更新可能会需要 <strong> 重启 IDE</strong>。</li>
</ol>
<h4 class="wp-block-heading" id="2- 手动更新：">2). 手动更新：</h4>
<ol class="wp-block-list">
<li>从本页面下载最新的插件 <code>zip</code> 包安装更新。参考本文：<code>下载安装 </code> 小节。</li>
<li>插件更新需要 <strong> 重启 IDE</strong>。</li>
</ol>
<h3 class="wp-block-heading" id="0x4- 一些说明">0x4. 一些说明</h3>
<ol class="wp-block-list">
<li>本插件默认不会显示其主界面，如果你需要，参考本文：<code>如何使用 </code> 小节。</li>
<li>市场付费插件的试用信息也会 <strong> 一并重置</strong>。</li>
<li>对于某些付费插件（如:&nbsp;<code>Iedis 2</code>,&nbsp;<code>MinBatis</code>）来说，你可能需要去取掉 <code>javaagent</code> 配置（如果有）后重启 IDE：<ul>
<li>如果 IDE 没有打开项目，在 <code>Welcome</code> 界面点击菜单：<code>Configure</code>&nbsp;->&nbsp;<code>Edit Custom VM Options...</code>&nbsp;-> 移除&nbsp;<code>-javaagent:</code>&nbsp;开头的行。</li>
<li>如果 IDE 打开了项目，点击菜单：<code>Help</code>&nbsp;->&nbsp;<code>Edit Custom VM Options...</code>&nbsp;-> 移除&nbsp;<code>-javaagent:</code>&nbsp;开头的行。</li>
</ul>
</li>
<li>重置需要 <strong> 重启 IDE 生效</strong>！</li>
<li>重置后并不弹出 <code>Licenses</code> 对话框让你选择输入 License 或试用，这和之前的重置脚本 / 插件不同（省去这烦人的一步）。</li>
<li>如果长达 <code>25</code> 天不曾有任何重置动作，IDE 会有 <strong> 通知询问 </strong> 你是否进行重置。</li>
<li>如果勾选：<code>Auto reset before per restart</code>，重置是静默无感知的。</li>
<li>简单来说：勾选了 <code>Auto reset before per restart</code> 则无需再管，一劳永逸。</li>
</ol>
<h2 class="wp-block-heading">三、JetBrains 其他系列 IDE 激活教程【备用】</h2>
<p>正常情况下只要按照上面一步步的激活教程来的话，应该是激活成功了，下面的这个激活教程也是一个备用激活方案，在么有正常激活的情况下，也可以试试这种方法。</p>
<p>1、为了确保你后面的操作万无一失，首先请将你的电脑断网，可以直接拔掉网线或者关闭 <strong>WiFi</strong> 即可。</p>
<p>2、然后将激活说明中 <strong>jetbrains-agent.jar</strong>文件复制到软件的安装位置里，这里根据你电脑安装的软件自主选择，比如我安装的是 Intelj Idea 这款软件，那么这款软件的具体安装位置如下：</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="438" height="314" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-8.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="IntelJ Idea2019 软件电脑本地安装位置" class="wp-image-402" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-8.jpg 438w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-8-300x215.jpg 300w" sizes="(max-width: 438px) 100vw, 438px" /><figcaption>IntelJ Idea2019 软件电脑本地安装位置</figcaption></figure>
<p></div/></p>
<p>3、接着直接打开软件（如果打不开软件，可以 <strong> 使用小编提供的离线激活码 </strong> 激活下软件，然后再继续其他操作）</p>
<p><strong>附离线激活码下载链接</strong>: </p>
<p><a href="https://pan.baidu.com/s/1PmAmYTK-hfldiKRLGRKs9A" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1PmAmYTK-hfldiKRLGRKs9A</a> 提取码: biea</p>
<p>附 <strong>jetbrains-agent.jar</strong> 离线下载链接: <a href="https://pan.baidu.com/s/11v0X15I1rk1_sLIlzJq1sA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/11v0X15I1rk1_sLIlzJq1sA</a> 提取码: i7rp</p>
<p>点击菜单栏 <strong>Help -&gt; Edit Custom VM Options</strong>加入下列一行内容：</p>
<pre class="wp-block-code"><code class='language-default'>-javaagent:XX/jetbrains-agent.jar（XX 为软件的安装路径）</code></pre>
<p>4、最后一步，也是最为关键的一步，就是 <strong> 重启软件</strong>，注意必须重启软件，否则是不会生效的哈。然后用激活码 2089 激活下即可。</p>
<p>附 <strong> 激活码 2089 下载链接</strong>: <a href="https://pan.baidu.com/s/1SG_23i722ak91yLu6NmEpA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1SG_23i722ak91yLu6NmEpA</a> 提取码: mh8h</p>
<p>当然如果看了上面的文字教程还不知所云的话，在这里也录制了一个 <strong> 视频教程 </strong>，可以按照视频里面的一步步操作即可顺利激活 JetBrains 全家桶的所有软件，而且上面的这个激活码的<strong> 有效期是到 2089 年 </strong> 的，基本上可以算是永久免费的。</p>
<p>视频教程已上传到百度网盘：</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）"
             alt="【新】idea 激活码，jetbrains 全系列最新 2020 激活码和激活教程（亲测可用）" loading="lazy" decoding="async" width="817" height="447" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-10.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="如何永久激活 JetBrains 全家桶软件到 2089 年视频教程" class="wp-image-405" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-10.jpg 817w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-10-300x164.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-10-768x420.jpg 768w" sizes="(max-width: 817px) 100vw, 817px" /><figcaption>如何永久激活 JetBrains 全家桶软件到 2089 年视频教程</figcaption></figure>
<p></div/></p>
<p> <strong>永久激活 JetBrains 全家桶软件到 2089 年黑科技视频教程百度网盘下载链接</strong>：<a href="https://pan.baidu.com/s/1PM-3AArdRQeKBUf5L2M8yw" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1PM-3AArdRQeKBUf5L2M8yw</a> 提取码: 5gas</p>
<p>由于在官网上面去下载 JetBrains 的软件是比较慢的，最后再放上这几款软件的下载链接: </p>
<p><a href="https://pan.baidu.com/s/1NGIuovxKfeSRytOnBbDL0A" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1NGIuovxKfeSRytOnBbDL0A</a> 提取码: esg3（包含<strong>WebStorm</strong>-2019.3.2、<strong>PhpStorm</strong>-2019.3.1、<strong>pycharm</strong>-professional-2019.3.2、<strong>ideaIU</strong>-2019.3.2 这几个版本的 IDE）</p>
<p><strong>中文汉化包免费下载链接：</strong></p>
<p>如果你更喜欢使用 JetBrains 的中文版，也不用担心哈，高热度网这里整理了 Rider、IntelliJIDEA、PhpStorm、AndroidStudio、WebStorm、PyCharm、CLion、RubyMine、DataGrip、GoLand 等 12 款 IDE 软件的下载链接哈：</p>
<p>12 款 IDE 中文汉化包下载链接: <a href="https://pan.baidu.com/s/1RgOttaDQzynn3ZV84Bm1bQ" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1RgOttaDQzynn3ZV84Bm1bQ</a> 提取码: tzug</p>
<h2 class="wp-block-heading">四、2020 年 4 月更新的 JetBrains 最新可用激活码（持续更新）</h2>
<pre class="wp-block-code"><code class='language-default'>3AGXEJXFK9-eyJsaWNlbnNlSWQiOiIzQUdYRUpYRks5IiwibGljZW5zZWVOYW1lIjoiaHR0cHM6Ly96aGlsZS5pbyIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkRQTiIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJETSIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwODktMDctMDciLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUEMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUk0iLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiV1MiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREMiLCJmYWxsYmFja0RhdGUiOiIyMDg5LTA3LTA3IiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUlNVIiwiZmFsbGJhY2tEYXRlIjoiMjA4OS0wNy0wNyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9XSwiaGFzaCI6IjEyNzk2ODc3LzAiLCJncmFjZVBlcmlvZERheXMiOjcsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-WGTHs6XpDhr+uumvbwQPOdlxWnQwgnGaL4eRnlpGKApEEkJyYvNEuPWBSrQkPmVpim/8Sab6HV04Dw3IzkJT0yTc29sPEXBf69+7y6Jv718FaJu4MWfsAk/ZGtNIUOczUQ0iGKKnSSsfQ/3UoMv0q/yJcfvj+me5Zd/gfaisCCMUaGjB/lWIPpEPzblDtVJbRexB1MALrLCEoDv3ujcPAZ7xWb54DiZwjYhQvQ+CvpNNF2jeTku7lbm5v+BoDsdeRq7YBt9ANLUKPr2DahcaZ4gctpHZXhG96IyKx232jYq9jQrFDbQMtVr3E+GsCekMEWSD//dLT+HuZdc1sAIYrw==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ndaik1GD0nyTdqkZgURQZGW+RGxCdBITPXIwpjhhaD0SXGa4XSZBEBoiPdY6XV6pOfUJeyfi9dXsY4MmT0D+sKoST3rSw96xaf9FXPvOjn4prMTdj3Ji3CyQrGWeQU2nzYqFrp1QYNLAbaViHRKuJrYHI6GCvqCbJe0LQ8qqUiVMA9wG/PQwScpNmTF9Kp2Iej+Z5OUxF33zzm+vg/nYV31HLF7fJUAplI/1nM+ZG8K+AXWgYKChtknl3sW9PCQa3a3imPL9GVToUNxc0wcuTil8mqveWcSQCHYxsIaUajWLpFzoO2AhK4mfYBSStAqEjoXRTuj17mo8Q6M2SHOcwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQBonMu8oa3vmNAa4RQP8gPGlX3SQaA3WCRUAj6Zrlk8AesKV1YSkh5D2l+yUk6njysgzfr1bIR5xF8eup5xXc4/G7NtVYRSMvrd6rfQcHOyK5UFJLm+8utmyMIDrZOzLQuTsT8NxFpbCVCfV5wNRu4rChrCuArYVGaKbmp9ymkw1PU6+HoO5i2wU3ikTmRv8IRjrlSStyNzXpnPTwt7bja19ousk56r40SmlmC04GdDHErr0ei2UbjUua5kw71Qn9g02tL9fERI2sSRjQrvPbn9INwRWl5+k05mlKekbtbu2ev2woJFZK4WEXAd/GaAdeZZdumv8T2idDFL7cAirJwcrbfpawPeXr52oKTPnXfi0l5+g9Gnt/wfiXCrPElX6ycTR6iL3GC2VR4jTz6YatT4Ntz59/THOT7NJQhr6AyLkhhJCdkzE2cob/KouVp4ivV7Q3Fc6HX7eepHAAF/DpxwgOrg9smX6coXLgfp0b1RU2u/tUNID04rpNxTMueTtrT8WSskqvaJd3RH8r7cnRj6Y2hltkja82HlpDURDxDTRvv+krbwMr26SB/40BjpMUrDRCeKuiBahC0DCoU/4+ze1l94wVUhdkCfL0GpJrMSCDEK+XEurU18Hb7WT+ThXbkdl6VpFdHsRvqAnhR2g4b+Qzgidmuky5NUZVfEaZqV/g==</code></pre>
<p><strong>2020JetBrains 激活码 1 下载链接: </strong>https://pan.baidu.com/s/1MR_iqmEueGE8vUrQMbUeGA 提取码: ieqg</p>
<p><strong>2020JetBrains 激活码 2 下载链接: </strong>https://pan.baidu.com/s/1kp6mxTFvybfhIFFmw6SO7Q 提取码: 3bhc</p>
<p><strong>2020JetBrains 激活码 3 下载链接: </strong>https://pan.baidu.com/s/1qudIYmVA5uhGKCoP_8sGoA 提取码: te45</p>
<p>以上就是高热度网提供的 2020 年最新激活 <strong>JetBrains</strong> 全家桶软件到 2089 年的黑科技视频教程，及相关 IDE 的下载链接，欢迎大家下载使用。<strong>Pycharm、IntelJ IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode</strong>等 JetBrains 所有的集成开发测试环境（<strong>IDE</strong>），通过这个激活教程可以成功激活这些产品到 <strong>2089</strong> 年的，也就是让你从现在开始可以永久免费使用 <strong>69</strong> 年，也就是你做程序员的这一辈子应该算是够用了。</p>]]></description><link>https://blog.gaoredu.com/article/f4f63935-808b-40d3-9541-e9d98837e5f5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f4f63935-808b-40d3-9541-e9d98837e5f5</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 05 Feb 2020 11:03:07 GMT</pubDate></item><item><title><![CDATA[如何动态监测新型冠状病毒？掌握这3种方法就可以了]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>2020 年注定是不平凡的一年，随着新型冠状病毒的席卷而来，给我们也带来了一定的恐慌，那么如何才能动态监测新型冠状病毒的资讯动态呢，以下分享的这 3 种黑科技方法掌握一种就可以了。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/02/001.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">如何关注和预防“新型冠状病毒”动态?</p>
</div>
</div>
<p><strong>方法一</strong>：如果不想直接安装什么黑科技电脑软件或者手机 APP 软件的话，那么就推荐使用这第一种方法，直接使用“丁香园. 丁香医生”在线实时疫情这个网址就行了，直接点击下面 的这个网址进入即可：<a href="https://ncov.dxy.cn/ncovh5/view/pneumonia?clicktime=1579579384&amp;enterid=1579579384&amp;isappinstalled=0&amp;from=groupmessage&amp;scene=2" target="_blank"  rel="nofollow">https://ncov.dxy.cn/ncovh5/view/pneumonia?clicktime=1579579384&amp;enterid=1579579384&amp;isappinstalled=0&amp;from=groupmessage&amp;scene=2</a></p>
<p>通过这个网站，我们可以实时地查看疫情地图、辟谣与防护措施、实时播报、疾病防护等模块，基本上是可以完全满足我们对于新型冠状病毒的认识和防护的。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了"
             alt="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了" loading="lazy" decoding="async" width="800" height="345" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-2.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="全国疫情新增趋势图（截止 2020 年 2 月 3 日）" class="wp-image-378" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-2.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-2-300x129.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-2-768x331.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>全国疫情新增趋势图（截止 2020 年 2 月 3 日）</figcaption></figure>
</div/>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了"
             alt="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了" loading="lazy" decoding="async" width="800" height="350" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-3.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="全国疫情死亡 / 治愈累计趋势图（截止 2020 年 2 月 3 日）" class="wp-image-379" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-3.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-3-300x131.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-3-768x336.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>全国疫情死亡 / 治愈累计趋势图（截止 2020 年 2 月 3 日）</figcaption></figure>
</div/>
<p>上面这个在线网站经过测试也是挺好用的，目前的这个网址是手机版本的哈，建议大家使用手机访问，当然使用电脑直接访问也是么有问题的哈。此外，再分享其他几个比较权威的“新型冠状病毒”实时疫情网站：</p>
<p>腾讯：<a href="https://news.qq.com//zt2020/page/feiyan.htm" target="_blank"  rel="nofollow">https://news.qq.com//zt2020/page/feiyan.htm</a></p>
<p>新浪：<a href="https://news.sina.cn/zt_d/yiqing0121" target="_blank"  rel="nofollow">https://news.sina.cn/zt_d/yiqing0121</a></p>
<p>凤凰网：<a href="https://news.ifeng.com/c/special/7tPlDSzDgVk" target="_blank"  rel="nofollow">https://news.ifeng.com/c/special/7tPlDSzDgVk</a></p>
<p>网易：<a href="https://news.163.com/special/epidemic" target="_blank"  rel="nofollow">https://news.163.com/special/epidemic</a></p>
<p>搜狗：<a href="http://sa.sogou.com/new-weball/page/sgs/epidemic?" target="_blank"  rel="nofollow">http://sa.sogou.com/new-weball/page/sgs/epidemic?</a></p>
<p>百度：<a href="https://voice.baidu.com/act/newpneumonia/newpneumonia" target="_blank"  rel="nofollow">https://voice.baidu.com/act/newpneumonia/newpneumonia</a></p>
<p><strong>方法二 </strong>：使用这款“疫情实时播报”黑科技软件即可，使用方法也很简单，直接下载本站提供的这款实时播报软件即可，目前是个电脑版的哈，支持<strong> 疫情概况、全国疫情详细数据、肺炎同程查询、谣言鉴别 </strong> 等功能，基本上和上面的网站内容差不多，大家可以自行选择。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了"
             alt="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了" loading="lazy" decoding="async" width="800" height="442" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-4.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="“新型冠状病毒实时动态监测软件”v1.2.0 版本软件截图" class="wp-image-380" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-4.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-4-300x166.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-4-768x424.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>“新型冠状病毒实时动态监测软件”v1.2.0 版本软件截图</figcaption></figure>
</div/>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了"
             alt="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了" loading="lazy" decoding="async" width="800" height="445" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-5.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="新型冠状病毒谣言鉴别功能" class="wp-image-381" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-5.jpg 800w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-5-300x167.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-5-768x427.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>新型冠状病毒谣言鉴别功能</figcaption></figure>
</div/>
<p>软件下载链接：<a href="https://pan.baidu.com/s/1ZtsXAa7zWNtFrqM88R94cg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1ZtsXAa7zWNtFrqM88R94cg</a> <br /> 提取码：tavr</p>
<p><strong>方法三 </strong>：对于新型冠状病毒，网上的信息种类繁多，一时我们也难以鉴别这么多的信息真假，另外再分享几个“<strong> 谣言鉴别</strong>”和“疫情人群举报”的网站吧。</p>
<p>腾讯实时疫情辟谣平台：<a href="https://vp.fact.qq.com/home?" target="_blank"  rel="nofollow">https://vp.fact.qq.com/home?</a></p>
<p>新型肺炎确诊患者相同行程查询工具：<a href="https://2019ncov.toolmao.com" target="_blank"  rel="nofollow">https://2019ncov.toolmao.com</a></p>
<p>如果你有话要说，可以打开“微信 - 我 - 支付 - 城市服务 - 疫情督查”，进入国务院“互联网 + 督查”平台留言，同时可以微信搜索“国务院客户端”小程序，点击以下图片或长按识别小程序码，也可以打开“国务院客户端”小程序。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了"
             alt="如何动态监测新型冠状病毒？掌握这 3 种方法就可以了" loading="lazy" decoding="async" width="793" height="754" data-src="https://www.gaoredu.com/wp-content/uploads/2020/02/001-6.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="国务院疫情防控线索征集和举报" class="wp-image-382" srcset="https://www.gaoredu.com/wp-content/uploads/2020/02/001-6.jpg 793w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-6-300x285.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/02/001-6-768x730.jpg 768w" sizes="(max-width: 793px) 100vw, 793px" /><figcaption>国务院疫情防控线索征集和举报</figcaption></figure>
</div/>
<p>以上就是高热度网黑科技资讯频道分享的三种可以实现有效动态监测新型冠状病毒的方法，经过测试也都是权威有效的，同时大家也可以根据自己的喜好选择自己的方法来实现疫情动态的关注，相信我们大家只要齐心协力，也一定能打赢这场疫情的防控战！</p>
]]></description><link>https://blog.gaoredu.com/article/2f076571-d03d-4bf6-b89a-2668eb4798bb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2f076571-d03d-4bf6-b89a-2668eb4798bb</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 03 Feb 2020 09:16:49 GMT</pubDate></item><item><title><![CDATA[黑科技教程：2020年最新支付宝集五福最强攻略，最快可一天集齐所有福]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p> 支付宝 2020 年集五福活动已经开始了，不知道你有没有集齐五福呢？还没有的话使用这个最新的黑科技攻略可以帮助你在一天内集齐所有的福字，目前亲测可用，屡试不爽。</p>
</blockquote>
<div class="wp-block-cover aligncenter has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/180109t0g0ndj4vj14zkdq.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">支付宝集五福黑科技，最快可一天集齐所有福</p>
</div>
</div>
<p>这个黑科技集五福的具体实现步骤如下，仅需 4 步可集齐所有福：</p>
<p><strong>步骤一：下载本站提供的支付宝集福神器</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-18_194352.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="支付宝集福神器启动界面" class="wp-image-353" width="590" height="565"/><figcaption>支付宝集福神器启动界面</figcaption></figure>
</div/>
<p><strong>支付宝集福神器（软件）下载链接：</strong> <a href="https://pan.baidu.com/s/14H75nBKpDlfuhYlmh15iXw" target="_blank"  rel="nofollow">https://pan.baidu.com/s/14H75nBKpDlfuhYlmh15iXw</a> 提取码: cq54</p>
<p><strong>注意事项</strong>：打开这个软件的时候，电脑可能会误报为病毒，可以直接添加当前软件为信任软件，或者直接忽略当前警告即可。</p>
<p><strong>步骤二：开始集福</strong></p>
<p>这一步的关键点实际上就是这个支付宝集福黑科技软件的使用方法，我们只需要先解压这个 <strong> 下载的集福神器软件安装包</strong>，然后点击中间的位置就可以实现福字的切换，这些“福”字可不是一般的福字哦，基本上每一个福都可以搜出来一张福。比如下面的这个福字：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-18_195138.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="支付宝集五福“福”字" class="wp-image-354" width="589" height="491"/><figcaption>支付宝集五福“福”字</figcaption></figure>
</div/>
<p><strong>步骤三 </strong>：这一步骤也算是一个关键点，如果你的通过上面的福字切换（<strong> 点击图片即可切换 </strong>）后达到了今日的集福活动最大次数了，你也不用怕，高热度网这里也分享几个<strong> 额外福利</strong>，直接看图吧。</p>
<p>以下是分享的 <strong> 4 个万能福字</strong>（<strong> 划重点</strong>），大家直接使用支付宝手机扫描即可，绝对有惊喜！</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811581884.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="万能福 1：支付宝集五福之万能福字" class="wp-image-355" width="366" height="341" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811581884.jpg 324w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811581884-300x280.jpg 300w" sizes="(max-width: 366px) 100vw, 366px" /><figcaption>万能福 1：支付宝集五福之万能福字</figcaption></figure>
</div/>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" width="440" height="440" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811595188.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="万能福 2：支付宝集五福之万能福字" class="wp-image-356" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811595188.jpg 440w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811595188-300x300.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020011811595188-150x150.jpg 150w" sizes="(max-width: 440px) 100vw, 440px" /><figcaption> 万能福 2：支付宝集五福之万能福字 </figcaption></figure>
</div/>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" width="432" height="432" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812002538.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="万能福 3：支付宝集五福之万能福字" class="wp-image-357" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812002538.jpg 432w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812002538-300x300.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812002538-150x150.jpg 150w" sizes="(max-width: 432px) 100vw, 432px" /><figcaption> 万能福 3：支付宝集五福之万能福字 </figcaption></figure>
</div/>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" width="440" height="365" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812005099.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="万能福 4：支付宝集五福之万能福字" class="wp-image-358" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812005099.jpg 440w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020011812005099-300x249.jpg 300w" sizes="(max-width: 440px) 100vw, 440px" /><figcaption> 万能福 4：支付宝集五福之万能福字 </figcaption></figure>
</div/>
<p><strong>步骤四：</strong>由于上面分享的这个集福神器是一个 <strong> 电脑集福软件 </strong>，如果大家喜欢在手机上直接集福的话，这里再分享一个<strong> 手机集福黑科技软件 APP</strong>吧，目前 <strong> 仅支持安卓手机</strong>，软件启动后如下图所示：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福"
             alt="黑科技教程：2020 年最新支付宝集五福最强攻略，最快可一天集齐所有福" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-18_200510.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="安卓手机支付宝集五福神器" class="wp-image-359" width="580" height="987" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-18_200510.jpg 324w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-18_200510-176x300.jpg 176w" sizes="(max-width: 580px) 100vw, 580px" /><figcaption>安卓手机支付宝集五福神器</figcaption></figure>
</div/>
<p><strong>安卓手机集五福神器 APP 软件下载地址：</strong></p>
<p><a href="https://www.lanzous.com/i8pe4hi" target="_blank"  rel="nofollow">https://www.lanzous.com/i8pe4hi</a></p>
<p>以上就是高热度网原创分享的 2020 年 <strong> 最新支付宝集五福 </strong> 的<strong>黑科技神器</strong>，同时支持电脑和安卓手机，大家直接下载使用即可，按照上面的集福攻略，大家最快可以在一天内集齐所有福，然后只需要坐等开奖了。最后，高热度网祝大家 2020 新年快乐，诸事顺利！</p>
]]></description><link>https://blog.gaoredu.com/article/847b886f-4819-47ed-aaf6-188210b12dd3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/847b886f-4819-47ed-aaf6-188210b12dd3</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Jan 2020 12:20:43 GMT</pubDate></item><item><title><![CDATA[黑科技为什么这么火？火星科技、逆天科技、硬科技又是什么意思？]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“黑科技”是当今社会中比较火热的一个词，对黑科技的认识你究竟了解多少？硬科技、火星科技、逆天科技这些新词又是什么意思呢？本文将带你对这些互联网高热度的新词一探究竟。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/naokexue.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">火星科技、逆天科技、硬科技是什么意思？</p>
</div>
</div>
<p>对于黑科技一词的解读可以看高热度网黑科技百科栏目有关黑科技是什么的相关文章，这里就不再过多解释了，下面我们将重点对火星科技和硬科技这两个互联网热词做一番解释。</p>
<p><strong>黑科技为什么这么火呢？</strong></p>
<p>随着互联网的发展，诞生了很多流行的最有热度的网络热词，比如 <strong> 火星科技、硬科技、黑科技、逆天科技 </strong> 等多种高科技领域的技术新词，一时间我们对于这些网络词语无法下手，一方面增加了用户的 <strong> 好奇心 </strong>，促使很多用户决定对这些热词一探究竟；此外，这些互联网的科技领域发达的黑科技也给用户带来的很多好<strong> 玩有趣的手机 APP、电脑黑科技产品 </strong>，这极大地提升了用户体验，给用户带来了极大的便捷，这无疑也加大了整个<strong> 黑科技领域的这些热词的火热度</strong>，下面就和高热度网一起来对这些生涩难懂的互联网高科技词语一探究竟吧。</p>
<p><strong>“火星科技”、硬科技是什么意思？</strong></p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑科技为什么这么火？火星科技、逆天科技、硬科技又是什么意思？"
             alt="黑科技为什么这么火？火星科技、逆天科技、硬科技又是什么意思？" loading="lazy" decoding="async" width="600" height="400" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/1000.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="究竟什么才是“火星科技”？" class="wp-image-337" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/1000.jpg 600w, https://www.gaoredu.com/wp-content/uploads/2020/01/1000-300x200.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption>究竟什么才是“火星科技”？</figcaption></figure>
<p></div/></p>
<p>首先“<strong>火星 </strong>”实际上是太阳系中 7 大行星中距离太阳第 4 远的一颗行星，由于从外表上看火星具有非常鲜红的颜色，因此有时候也称它为“红色行星”。火星在史前时代就已经为人类所知，被认为是太阳系中除了地球之外的人类最好的住所，所以它<strong> 受到科幻小说家们的喜爱 </strong>。此外，目前人类对于火星的探索还只局限于表面，很多未知的东西在当前的<strong> 科技时代已经探索了近半个世纪了 </strong>，但还是鲜有一些比较重大的发现，因此这也大概就是“<strong> 火星科技 </strong>”一次的由来。其实“火星科技”以小编的理解实际上从本意上来看和<strong>“黑科技”</strong> 一词的含义差不多，也就是指当前 <strong> 人类无法实现 </strong> 或<strong>根本不可能产生的技术或者产品 </strong>，其标准是不符合现实世界常理以及<strong> 现有科技水平。</strong></p>
<p>说到这里，想必你对“<strong>逆天科技 </strong>”应该也有一个大概的认识和了解了吧。“逆天了”这一词本意上原本是指违背天意或天道，后被人们引申为一些网络用语，比如“形容某一个人做某件事很厉害，完全超出了人们正常的认知水平“，我们可以说：“<strong>WoW，这家伙逆天了</strong>！”。实际上，“逆天科技”也大概是这个意思，可以泛指<strong> 科技领域 </strong> 的一些比较有 <strong> 创造力的黑科技产品 </strong>，比如说阿里云的“<strong>ET 工业大脑</strong><br />”、深圳市腾讯计算机系统有限公司（腾讯）的自主研发的<strong> 癌症早筛 AI 技术 </strong> 等都可以统称为“逆天科技”，当这些科技领域派生出来了相关的 <strong> 黑科技产品 </strong> 后，我们也可以说：“<strong>哇，这些黑科技简直逆天了</strong>！”。</p>
<p>然后，我们再来看一下什么是“硬科技”？</p>
<p>我们常说的 <strong>“硬科技”</strong> 实际上是指以人工智能、基因技术、航空航天、脑科学、光子芯片、新材料等为代表的 <strong> 高精尖科技 </strong>，属于能够在全<strong> 球领跑的核心科技 </strong>，同时具有知识产权、壁垒足够高、难以模仿和复制的<strong> 关键核心技术 </strong>。也就是说，“硬科技“从本质上来说也是一种“技术”，但是这个技术和普通一般的技术的最大区别在于它是由科技创新构成的物理世界，需要长期的研发投入、持续的技术积累，具有极高的技术门槛和技术壁垒。也可以简单理解为“<strong> 硬科技就是比高科技还要高的技术</strong>”。</p>
<p>硬科技的产品主要涉及到以下的 <strong> 八个领域</strong>，：1. 人工智能 2. 航空航天 3. 生物技术（含基因技术、脑科学等）4. 光电芯片 5. 信息技术（含量子科学、区块链、物联网、大数据等）6. 新材料 7. 新能源 8. 智能制造</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑科技为什么这么火？火星科技、逆天科技、硬科技又是什么意思？"
             alt="黑科技为什么这么火？火星科技、逆天科技、硬科技又是什么意思？" loading="lazy" decoding="async" width="690" height="390" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/6fe8-imvsvza7076062.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="2019 年度中国生命科学十大进展入选的基因编辑、抗结核新药等成果技术" class="wp-image-336" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/6fe8-imvsvza7076062.jpg 690w, https://www.gaoredu.com/wp-content/uploads/2020/01/6fe8-imvsvza7076062-300x170.jpg 300w" sizes="(max-width: 690px) 100vw, 690px" /><figcaption> 2019 年度中国生命科学十大进展入选的基因编辑、抗结核新药等成果技术</figcaption></figure>
<p></div/></p>
<p>尤其在互联网 + 之后，硬科技已经在中国和世界范围内掀起了一股全新的高科技创新浪潮，比如 <strong> 中国嫦娥四号首次登陆月背 </strong>、<strong> 华为发布的鸿蒙操作系统 </strong>（可以算是一个<strong> 黑科技系统 </strong>），还有最近发现的<strong> 迄今最大黑洞 </strong>，其实都算是“<strong> 硬科技 </strong>”。像国外美国的<strong> 谷歌、FaceBook 和微软 </strong> 这三家科技巨头公司，他们在布局人工智能、基因技术、云计算、大数据、光子芯片做出了不小的成果，而这些领域的成果以及衍生出来的产品都可以统称为“硬科技产品”。</p>
<p>最后，“<strong>火星科技”（逆天科技）、硬科技、黑科技之间是什么关系呢？</strong></p>
<p>简单的来说，<strong>“火星科技”和“逆天科技”</strong>两者的意思实际上差别不大，而对于硬科技来说，“<strong>硬科技 </strong> 之上是 <strong> 黑科技 </strong>、黑科技之上是科幻”，<strong> 硬科技 </strong> 就是比 <strong> 高科技 </strong> 还要高的技术，也就是说 <strong> 黑科技 </strong> 是指更接近于科幻的 <strong> 科技 </strong>。它们三者之间一般都是衍生于科技或技术领域的，只不过，相对于“<strong> 黑科技 </strong>”一词来说，它们<strong>“黑”的程度</strong> 不一样罢了。</p>
<p>好了，以上就是 <strong> 高热度网原创 </strong> 首发的针对黑科技为什么这么火问题的解答，以及衍生出来的 <strong> 火星科技、逆天科技、黑科技、硬科技 </strong> 等科技词语的最新解释，相信大家已经对此有了全面的认识和了解。相信这些科学技术在未来的不断发展，也必将会给社会和人类带来不一样的便利，让我们一起拭目以待！</p>]]></description><link>https://blog.gaoredu.com/article/d7e325e5-b625-4e9a-84b9-31a605b16d7f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d7e325e5-b625-4e9a-84b9-31a605b16d7f</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 11 Jan 2020 13:38:39 GMT</pubDate></item><item><title><![CDATA[【图】黑科技产品有哪些？盘点这10家国内黑科技公司的黑科技产品]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>业界最新的黑科技产品有哪些？哪些互联网黑科技公司的黑科技最有创新度？让我们一起来高热度网的黑科技资讯频道来盘点一下这 10 家国内科技公司的黑科技产品。</p>
</blockquote>
<div class="wp-block-cover has-luminous-vivid-orange-background-color has-background-dim">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">国内哪些公司的黑科技产品最有创新度呢？</p>
</div>
</div>
<p>今天要分享的这 <strong>TOP10 黑科技产品</strong> 和相关的 <strong> 公司 </strong> 如下：</p>
<p>Top1：流利对话的 AI 助手阿里小蜜——<strong>阿里巴巴网络技术有限公司</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品"
             alt="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/001-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="阿里小蜜 AI 智能助手" class="wp-image-314" width="564" height="340" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/001-1.jpg 398w, https://www.gaoredu.com/wp-content/uploads/2020/01/001-1-300x181.jpg 300w" sizes="(max-width: 564px) 100vw, 564px" /><figcaption>阿里小蜜 AI 智能助手</figcaption></figure>
</div/>
<p>“阿里小蜜”这款 <strong> 黑科技产品 </strong> 是阿里巴巴网络技术有限公司（阿里巴巴集团）2015 年就发布的一款人工智能购物助理虚拟机器人，这一套 AI 对话助手彻底打通了整个阿里巴巴集团淘宝网、天猫商城、支付宝等平台日常使用规范、交易规则、平台公告等信息，凭借 <strong> 阿里云 </strong> 在大数据、自然语义分析、机器学习方面技术积累优势，阿里小蜜目前已经实现了超越简单人机问答的自然交互，真正实现了让 <strong> 会员专享 1 对 1 </strong>的客户顾问服务、全程陪伴式、安全有保障的购物体验。而且这个 <strong> 黑科技 </strong> 在 2019 年《麻省理工科技评论》评出的“十大突破性技术”中，“流利对话的 AI 助手阿里小蜜”作为人工智能的代表入选，获得客座评选人 <strong> 比尔·盖茨的点赞</strong>，阿里巴巴也因此成为唯一入选该榜单行业引领者的中国企业。</p>
<p>Top2：腾讯觅影结直肠肿瘤筛查 AI 系统：发现并鉴别直肠息肉——<strong>深圳市腾讯计算机系统有限公司</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品"
             alt="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品" loading="lazy" decoding="async" width="600" height="330" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/002.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="使用“腾讯觅影”结直肠肿瘤筛查 AI 系统实时发现、鉴别息肉" class="wp-image-315" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/002.jpg 600w, https://www.gaoredu.com/wp-content/uploads/2020/01/002-300x165.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption>使用“腾讯觅影”结直肠肿瘤筛查 AI 系统实时发现、鉴别息肉</figcaption></figure>
</div/>
<p>“腾讯觅影”结直肠肿瘤筛查 <strong>AI 系统</strong> 是<strong>国内首个 </strong> 结直肠肿瘤实时筛查 AI 系统，这个 <strong> 黑科技产品 </strong> 主要利用 <strong> 图像识别、深度学习等人工智能技术 </strong>，与消化内镜结合，实现了辅助临床医生实时发现结直肠息肉，并实时鉴别息肉性质，以每秒分析 10 张影像的速度，可以<strong> 为临床医生 </strong> 提供非腺瘤息肉、腺瘤息肉、腺癌等状态的 <strong> 实时提醒 </strong>，辅助临床医生更准确、更高效地诊断结直肠肿瘤，帮助患者利用消化内镜早筛早诊早治，这项“腾讯觅影”的 AI 医学技术黑科技，给我国结直肠内镜技术带来了<strong> 新的突破</strong>。</p>
<p>Top3：荣耀智慧屏：首款搭载鸿蒙操作系统的终端——<strong>华为技术有限公司</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品"
             alt="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品" loading="lazy" decoding="async" width="740" height="416" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/003.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="“华为荣耀智慧屏”HONOR 魔法画质引擎效果" class="wp-image-316" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/003.jpg 740w, https://www.gaoredu.com/wp-content/uploads/2020/01/003-300x169.jpg 300w" sizes="(max-width: 740px) 100vw, 740px" /><figcaption>“华为荣耀智慧屏”HONOR 魔法画质引擎效果</figcaption></figure>
</div/>
<p>“<strong>华为鸿蒙操作系统 </strong>“是华为技术有限公司（华为）自主研发的国产操作系统，鸿蒙 OS 一直是大家的热点关注对象。与此同时，全球首款搭载鸿蒙操作系统终端 -<strong> 荣耀智慧屏 </strong> 也横空出世了，这款由华为打造的 55 英寸 4K UHD 超清大屏，基于鸿鹄 818 智慧芯片和 7 大技术打造荣耀智慧屏的 <strong> 魔法画质引擎</strong>，画质更加清晰细腻，全方位提升用户的使用体验，是一项深受用户喜欢的黑科技产品。</p>
<p>Top4：5G 智慧急救移动单元救护车、5G 智慧消防系统——<strong>浙江大华技术股份有限公司</strong></p>
<p>由浙江移动湖州公司、爱立信、大华股份联合开发的 <strong>5G 智慧消防系统</strong> 为 5G 网络之下的高科技设备完成灭火救援提供了一套最优方案，可以实现在危急的火场里，机器人能代替消防员率先突破、实时反馈现场情况，以便消防指挥官兵制定灭火救援最优化方案。这辆便携式远程 B 超、VR 实时诊疗装置、高清音视频会诊平台、医疗无人机等先进设备于一身的“5G 智慧急救移动单元救护车”的 <strong> 黑科技系统 </strong> 可以在将患者送往医院的途中完成院前诊断工作，并实时回传患者的生命体征，这使得整体的抢救工作效率提高一半以上。</p>
<p>Top5：“自由精灵”14 英寸柔性屏：可像电子画卷一样展开——<strong>京东方科技集团股份有限公司</strong></p>
<p> <strong>京东方科技集团股份有限公司 </strong> (京东方) 通过增强现实技术将智能出行所需的驾驶信息与实际场景融合，使用 <strong>HUD 技术</strong> 把需要呈现的虚拟透射影像，把时速、导航等重要的信息投影到驾驶员前风挡玻璃上，利用 <strong> 柔性屏 </strong> 替代了传统液晶车载屏，这项自主研发的 OLED 像素补偿电路技术，能够有效提高中尺寸 OLED 亮度均匀性，为乘客带来更好的影音娱乐体验，也为全新设计的未来车载显示提供了一种解决方案。此外一款“自由精灵”的 <strong>14 英寸柔性显示屏产品</strong> 看起来更像是一幅悬挂的画卷，观察者只需要触控旁边的按钮，显示屏就会像电子画卷一样慢慢展开，清晰的展示画面内容，这款酷炫的黑科技产品画面感极强。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品"
             alt="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品" loading="lazy" decoding="async" width="592" height="383" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/005.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="京东方画卷屏幕" class="wp-image-318" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/005.png 592w, https://www.gaoredu.com/wp-content/uploads/2020/01/005-300x194.png 300w" sizes="(max-width: 592px) 100vw, 592px" /><figcaption>京东方画卷屏幕</figcaption></figure>
</div/>
<p>Top6：搜狗 AI 合成主播：全球首个全仿真智能 AI 主持人——<strong>北京搜狗科技发展有限公司</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品"
             alt="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/006.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="搜狗 AI 合成主播正在播报新闻" class="wp-image-319" width="465" height="348" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/006.jpg 500w, https://www.gaoredu.com/wp-content/uploads/2020/01/006-300x224.jpg 300w" sizes="(max-width: 465px) 100vw, 465px" /><figcaption>搜狗 AI 合成主播正在播报新闻</figcaption></figure>
</div/>
<p>  "<strong>北京搜狗科技发展有限公司 </strong>" 通过语音合成、唇形合成、表情合成以及深度学习等技术，克隆出的一中一英两位“<strong>AI 合成主播</strong>”黑科技产品目前已生产出 3400 余条新闻报道，累计时长达 10000 多分钟，这项“<strong> 搜狗 AI 合成主播 </strong>”黑科技产品是搜狗与新华社联合发布的<strong> 全球首个全仿真智能 AI 主持人</strong>。随着“搜狗分身”技术能力的提高，已经大幅缩短 了 AI 合成主播的定制周期时间，且合成效果和稳定性也有显著提高，目前已经实现了持续复制不同类型 AI 合成主播的能力。</p>
<p>Top7：宠物狗鼻纹特征识别、图像处理技术：通过鼻纹认证寻找宠物——<strong>北京旷视科技有限公司</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品"
             alt="【图】黑科技产品有哪些？盘点这 10 家国内黑科技公司的黑科技产品" loading="lazy" decoding="async" width="500" height="221" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/008.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="旷视科技鼻纹识别技术 1：1 比对与 1：N 比对" class="wp-image-321" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/008.jpg 500w, https://www.gaoredu.com/wp-content/uploads/2020/01/008-300x133.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><figcaption>旷视科技鼻纹识别技术 1：1 比对与 1：N 比对 </figcaption></figure>
</div/>
<p>鼻纹识别的现阶段意义还在于有效解决了犬只身份识别的难题，目前 <strong> 北京旷视科技有限公司 </strong>“鼻纹识别技术”能达到犬只的 1：1 比对，在误识率为万分之一的情况下，试点场景中准确率 95%；<strong>1：N 检索</strong> 同样适用，凡登记犬只皆可获得高精度匹配，为 <strong> 人工智能寻宠 </strong> 提供了有效的技术支持。用户只需一部手机，在数据采集后，算法将自动完成<strong>AI 匹配</strong>、快速核验、紧急响应等步骤，就可以快速确定犬只身份。</p>
<p>Top8：仅凭照片生成精细 3D 模型的人体重建技术——<strong>杭州云从科技有限公司</strong></p>
<p>日前，云从科技已经在 <strong>3D 人体重建技术</strong> 上取得全新突破，可以仅凭一张照片或一段视频生成完整的 3D 人体模型，并准备将这一黑科技用在身份影像重建、医疗肢体打印与电影制作等领域。这项由云从科技自主创新、自主研发 的 3D 重建技术，算法运行速度提高了 50 倍，由数百毫秒下降到 5 毫秒。而且，运用这款黑科技，不管是在身份影像重建、医疗肢体打印，还是 3D 电影拍摄，都可以抛弃昂贵的专用设备，只使用普通的摄像机进行采集，在电影拍摄方面也大大节省了成本。</p>
<p>Top9：黄山 1 号芯片：全球第一款智能穿戴人工智能芯片——<strong>华米（北京）信息科技有限公司</strong></p>
<p>全球可穿戴领域第一颗智能芯片“黄山 1 号”由 <strong> 华米（北京）信息科技有限公司 </strong> 全新打造，它是全球第一颗采用 RISC- V 指令集的处理器，并集成了 AON（Always On）模块控制器和神经网络加速模块。这款黑科技产品不仅功耗低，还可以自动将传感器数据搬运到内部 SRAM 之中，让数据存储性能更快、更稳定。此外这项人工智能产品比较有特色的一点功能是可以不需要上网在本地就可以直接实现 <strong> 处理 AI 任务 </strong>，提升了芯片工作效率，更让用户体验到真正的人工智能的乐趣，未来<strong> 华米科技 </strong> 在可穿戴领域实现 AI 全线覆盖，即将为用户带来更为智能便捷的使用体验。</p>
<p>Top10：唇语识别系统 - 慧眼小微：在高噪声、无声环境下的语音识别——<strong>中科视拓（北京）科技有限公司</strong></p>
<p><strong>中科视拓（北京）科技有限公司 </strong> 是一家来自中国科学院计算技术研究所的 <strong> 人工智能 </strong> 基础设施服务商，“唇语识别系统 - 慧眼小微“解决了在高噪声环境、无声环境下，通过视觉信息来进行准确语音识别的问题，这项黑科技实现了更加智能、鲁棒的人机交互，可以帮助听力障碍或失语人士正常沟通交流，这个 <strong> 黑科技系统 </strong> 对于解决噪声环境下的语音识别问题，以及智慧教育、移动支付、军事安防等领域都具有重要意义。</p>
<p>以上就是 <strong> 高热度网 </strong> 精心整理的最新这 10 家科技公司研发的这些黑科技产品，涉及到 <strong> 系统、智能芯片、人工智能和 AI 技术 </strong> 等领域，相信这些黑科技产品在未来的不断投入使用，也必将会给人们的日常生活带来极大的便利。</p>
]]></description><link>https://blog.gaoredu.com/article/773f5900-b2f0-4d57-8a35-78dc2310b9ca</link><guid isPermaLink="true">https://blog.gaoredu.com/article/773f5900-b2f0-4d57-8a35-78dc2310b9ca</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Jan 2020 12:38:27 GMT</pubDate></item><item><title><![CDATA[2020年最新8款迷你世界手机黑科技辅助软件免费下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>迷你世界黑科技是网络上一个比较火热的热词，迷你世界黑科技怎么做呢？如何在安卓手机 APP 实现迷你世界的黑科技呢？通过下载今天分享的这 8 款手机版迷你世界黑科技地图和皮肤装备辅助软件，你就可以全部实现。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/15120928308934019.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-large-font-size">迷你世界最新版本的黑科技，你知道多少？</p>
</div>
</div>
<p><strong>迷你世界游戏简介：</strong></p>
<p> 迷你世界是一款高度自由的 <strong>3D 沙盒游戏</strong>，玩家可以<strong> 自由创建 </strong> 城堡、房屋、桥梁等各式各样的 <strong> 城市建筑物 </strong>，打造一个自己理想中的<strong> 迷你世界</strong>。分享的这最新 8 款辅助 APP，用户可以拥有无限皮肤、无限装备、迷你币修改、经验无限增加、黑科技地图等多种炫酷好玩的黑科技手机 app，快来试试看吧。</p>
<p><strong>软件一：迷你世界最新版软件</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2020 年最新 8 款迷你世界手机黑科技辅助软件免费下载"
             alt="2020 年最新 8 款迷你世界手机黑科技辅助软件免费下载" loading="lazy" decoding="async" width="640" height="427" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/34fae6cd7b899e51b7f34826a41ed935c9950dc6.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="迷你世界最新辅助黑科技" class="wp-image-298" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/34fae6cd7b899e51b7f34826a41ed935c9950dc6.jpg 640w, https://www.gaoredu.com/wp-content/uploads/2020/01/34fae6cd7b899e51b7f34826a41ed935c9950dc6-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>迷你世界最新辅助黑科技</figcaption></figure>
</div/>
<p>“工欲善其事，必先利其器”，所以要想实现迷你世界这款游戏黑科技的第一步就是去下载一个最新版的软件，当前这款版本除了游戏原有的各种 <strong> 金币限制 </strong> 等功能外，优化优化了不少其他体验，使用起来也更流畅。</p>
<p>迷你世界最新破解版免费下载地址：链接:  <a href="https://pan.baidu.com/s/1A-ri91JB4YLFIzSPT6-qow" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1A-ri91JB4YLFIzSPT6-qow</a> 提取码: bj27 </p>
<p><strong>软件二：迷你世界助手无限皮肤工具</strong></p>
<p><strong>迷你世界助手无限皮肤工具 </strong> 是一款十分强大的迷你世界刷 <strong> 皮肤辅助助手 </strong>，只需要登录后就可以无限刷皮肤，通过这个黑科技软件用户可以<strong> 一键即可刷永久免费的皮肤 </strong>，而且<strong> 不用担心封号 </strong> 的风险，可以放心使用。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="2020 年最新 8 款迷你世界手机黑科技辅助软件免费下载"
             alt="2020 年最新 8 款迷你世界手机黑科技辅助软件免费下载" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/0456fdc142d507d36cb81165ca864bc5.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="迷你世界百变生物编辑花样 npc 皮肤" class="wp-image-297" width="473" height="788" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/0456fdc142d507d36cb81165ca864bc5.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/0456fdc142d507d36cb81165ca864bc5-180x300.jpg 180w" sizes="(max-width: 473px) 100vw, 473px" /><figcaption>迷你世界百变生物编辑花样 npc 皮肤</figcaption></figure>
</div/>
<p>迷你世界无限皮肤免费下载地址：链接: <a href="https://pan.baidu.com/s/1M9a6MTps-_L6wI9MLPe61g" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1M9a6MTps-_L6wI9MLPe61g</a> 提取码: xg34 </p>
<p><strong>软件三：迷你世界助手无限装备工具</strong></p>
<p>这个迷你世界助手 APP 就是专门用来刷辅助装备的哦，用户可以在手机上对数据进行修改，同时还支持 <strong> 刷皮肤、刷迷你币，刷无限装备 </strong> 操作，而且可以完全 <strong> 免费 </strong> 无限使用，简直就是这款游戏爱好者的福音，喜欢的朋友快来 <strong> 高热度网 </strong> 下载吧。</p>
<p>迷你世界无限辅助装备软件免费下载链接: <a href="https://pan.baidu.com/s/14dgm7AIqQaInUxPxTLIoRw" target="_blank"  rel="nofollow">https://pan.baidu.com/s/14dgm7AIqQaInUxPxTLIoRw</a> 提取码: vdfw</p>
<p><strong>软件四：迷你世界官方精灵盒子</strong></p>
<p>迷你世界精灵盒子版是一款新的迷你世界游戏盒子，功能其实和迷你世界助手差不多，这款软件支持 <strong> 迷你世界游戏资讯获取、迷你世界图文攻略、玩家社区、视频教程攻略 </strong> 等内容，而且比较有特色的一点功能是 <strong> 支持聊天和配图</strong>，通过这个功能在游戏中有多了几分乐趣。</p>
<p>迷你世界游戏盒子免费下载链接: <a href="https://pan.baidu.com/s/1B9qRcqGZUc-6UV04oNHkbg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1B9qRcqGZUc-6UV04oNHkbg</a> 提取码: xgmx</p>
<p><strong>软件五：迷你世界黑科技修改器</strong></p>
<p>这个是一个非常强大的 <strong> 迷你世界黑科技软件 </strong>，支持<strong> 迷你币无限修改、迷你世界黑科技、迷你世作弊器、无限地图存档 </strong> 等多种辅助功能，也就是你可以随便修改游戏中的存档数据，应该是非常有意思的一个小工具了。</p>
<p>迷你世界黑科技修改器下载链接: <a href="https://pan.baidu.com/s/1IcwxSubmHD3Om_rhwGYeLw" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1IcwxSubmHD3Om_rhwGYeLw</a> 提取码: 67rx</p>
<p><strong>软件六：迷你世界黑科技经验无限加到 999+</strong></p>
<p>把 <strong> 迷你世界的游戏经验加到 999+</strong>，这估计是任何一个玩家都梦寐以求的事了吧，好了这个迷你世界无限经验工具就可以满足你的这个需求，只需要轻松几步，就可以实现 <strong> 经验过 999</strong>，快来试试看。</p>
<p>迷你世界刷经验手机软件下载链接: <a href="https://pan.baidu.com/s/1Lb0c327VwjVu8gCXmIUvJA" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1Lb0c327VwjVu8gCXmIUvJA</a> 提取码: t8vr</p>
<p><strong>软件七：迷你世界黑科技地图软件迷你号</strong></p>
<p>迷你世界中有很多大神制作 <strong> 黑科技地图 </strong>，在他们的地图中有很多神奇的动作，比如坐骑，比如<strong> 黑科技物品 </strong>，玩家知道了大神的迷你号之后就能下载地图进入体验高科技，这款<strong> 黑科技地图 </strong> 就是专门来实现这个功能的。</p>
<p>迷你世界黑科技地图链接: <a href="https://pan.baidu.com/s/16cieIeCj3CbTlw80rXIQww" target="_blank"  rel="nofollow">https://pan.baidu.com/s/16cieIeCj3CbTlw80rXIQww</a> 提取码: 9mch </p>
<p><strong>软件八：迷你世界无限金币破解版辅助工具下载</strong></p>
<p><strong>迷你世界无限金币辅助 </strong> 是一款比较好用的游戏辅助软件，可以任意 <strong> 刷金币，购买商品和货物</strong>，这无疑给玩家增加了更多的乐趣。</p>
<p>迷你世界刷无限金币下载链接: <a href="https://pan.baidu.com/s/1FXPn_ftKvCsStPdEulzUFg" target="_blank"  rel="nofollow">https://pan.baidu.com/s/1FXPn_ftKvCsStPdEulzUFg</a> 提取码: i37v </p>
<p>以上就是高热度网精心整理的 2020 年最新 8 款 <strong> 迷你世界黑科技 </strong> 手机 APP 辅助软件大全集合，通过以上工具可以做出属于自己的迷你世界。欢迎大家下载安装。</p>
]]></description><link>https://blog.gaoredu.com/article/59c4f9eb-331b-4c60-b7de-9e0ddd21ee0c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/59c4f9eb-331b-4c60-b7de-9e0ddd21ee0c</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 09 Jan 2020 14:38:20 GMT</pubDate></item><item><title><![CDATA[如何学易语言？50套全新易语言游戏辅助开发vip黑科技视频教程和源码免费下载]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><cite>易语言是一门以中文作为程序代码编程语言，简单好学，对于初学者来说如何才能更好更快地学习易语言呢？今天小编分享的这套简单易学的易语言从入门到精通视频教程总共有 50 套黑科技视频，涵盖了入门进阶到游戏项目辅助实战开发的整套源码免费下载。<br /></cite></p></blockquote>
<div class="wp-block-cover aligncenter has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/001-3.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">易语言基础入门与提高视频教程免费下载</p>
</div>
</div>
<p>对于中国人来说，<strong>使用中文汉字来编程 </strong> 那是一件最好不过的事情，今天分享的这套 <strong> 易语言全新视频教程 </strong> 和<strong>源码 </strong> 总共有 80 套，非常适合小白入门学习下载，当然里面也会有很多黑科技软件供大家下载，相信大家只要从头到尾认真学完这<strong>80 套黑科技视频教程</strong>，水平绝对进阶好几个 level。</p>
<p>首先这个就是易语言的教程：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="如何学易语言？50 套全新易语言游戏辅助开发 vip 黑科技视频教程和源码免费下载"
             alt="如何学易语言？50 套全新易语言游戏辅助开发 vip 黑科技视频教程和源码免费下载" loading="lazy" decoding="async" width="600" height="313" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/001-4.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="易语言 50 套精品视频教程和源码" class="wp-image-282" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/001-4.jpg 600w, https://www.gaoredu.com/wp-content/uploads/2020/01/001-4-300x157.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><figcaption>易语言 50 套精品视频教程和源码</figcaption></figure>
</div/>
<p><strong>整套教程目录如下：</strong></p>
<ul class="wp-block-list">
<li> 000 易语言 <strong> 工具软件</strong></li>
<li> 001 易语言从 <strong> 入门到精通</strong>80 集</li>
<li> 002 易语言入门到精通 1 -100 集百集视频教程</li>
<li> 003【易能者】易语言模块编写系列视频教程</li>
<li> 004 中华隐士易语言全套高清视频教程 1 -20 讲</li>
<li> 005 江中游易语言 <strong> 入门视频教程</strong></li>
<li> 006 易语言 <strong> 速成班 </strong> 第一期、第二期共计 23 课</li>
<li> 007 易语言正则表达式视频教程共 1 -12 课时</li>
<li> 008 天都吧易语言 <strong> 入门到精通 </strong> 全套课程 1 -50 课</li>
<li> 009 柔情似月易语言培训系列视频教程【1-18 课】</li>
<li> 010 仓库管理系统制作系列教程无密码【1-11 课】</li>
<li> 011 基础学易语言教程</li>
<li> 012 黑色风帆 VB 视频编程特训班教程【1-27 课】</li>
<li> 013 之乎者也易语言 Post 教程</li>
<li> 014 觅风易语言入门培训基础视频教程【1-43 课】</li>
<li> 015 网页采集教程</li>
<li> 016 易语言远控开发</li>
<li> 017 黑鹰易语言全套视频教程 1 -35 课</li>
<li> 018 世宝易语言详细教程</li>
<li> 019 世恒百集易语言视频教程(1-100 集)</li>
<li> 020 独立团第一部 VIP 视频教程</li>
<li> 021 内存辅助教程 网游封包教程</li>
<li> 022 易语言魔鬼作坊 1 -106 课视频教程</li>
<li> 023 易语言 <strong>DNF 游戏</strong> 黑科技辅助教程</li>
<li> 024 易语言 <strong> 天龙 3 </strong>辅助 VIP 教程</li>
<li> 025 挂茶馆易语言辅助开发</li>
<li> 026 魔鬼作坊易语言辅助 VIP 培训教程</li>
<li> 027 索马里易语言辅助开发</li>
<li> 028 墨鱼科技易语言游戏辅助编程 VIP 培训教程</li>
<li> 029 易语言“<strong>成吉思汗 2”</strong>辅助教程</li>
<li> 030 制作 <strong>CF 辅助软件</strong> 系列教程</li>
<li> 031-050 易 <strong> 游戏辅助开发 </strong> 系列</li>
</ul>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="如何学易语言？50 套全新易语言游戏辅助开发 vip 黑科技视频教程和源码免费下载"
             alt="如何学易语言？50 套全新易语言游戏辅助开发 vip 黑科技视频教程和源码免费下载" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/001-2.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="基于易语言开发的穿越火线（CF）透视辅助大全" class="wp-image-276" width="564" height="285" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/001-2.jpg 400w, https://www.gaoredu.com/wp-content/uploads/2020/01/001-2-300x152.jpg 300w" sizes="(max-width: 564px) 100vw, 564px" /><figcaption>基于易语言开发的穿越火线（CF）透视辅助大全</figcaption></figure>
</div/>
<p>可以看到，这 50 套教程里面第 0 套就是一些开发软件和基础知识，<strong>第 1 套到 22 套 </strong> 基本都是一些 <strong> 入门到进阶的视频教程 </strong>，建议大家这块好好看和消化这块知识，不然后面学起来难度就比较大了。接着<strong>23-50 套</strong> 就是整套 <strong> 黑科技教程 </strong> 的核心了，其中涉及到 <strong>DNF 游戏、天龙 3 游戏、墨鱼科技游戏、CF 和成吉思汗游戏</strong> 的<strong>辅助开发 </strong>，学会了这块，以后<strong> 打游戏绝对把把开黑 </strong> 了。而且 31 套之后的课程基本上全部是在讲 <strong> 游戏外挂辅助软件开发</strong>，对这块感兴趣的朋友可以下载下来重点看。</p>
<p><strong>最后方式以上分享的这套黑科技视频教程和相关源码的下载地址：</strong></p>
<p><strong>最新下载链接</strong>: https://pan.baidu.com/s/11z_u4EZJdkE3fNSk7yfQUA 提取码: 53qs</p>
<p>以上就是 <strong> 高热度网 </strong> 本期分享的 <strong>50 套</strong> 最新易语言开发游戏辅助软件工具的 <strong> 黑科技 </strong> 视频教程，欢迎大家下载评论留言交流。</p>
]]></description><link>https://blog.gaoredu.com/article/37119492-9e8b-42f7-8cb4-c9ec25a471af</link><guid isPermaLink="true">https://blog.gaoredu.com/article/37119492-9e8b-42f7-8cb4-c9ec25a471af</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 09 Jan 2020 10:45:11 GMT</pubDate></item><item><title><![CDATA[【图】百度网盘下载速度太慢怎么办？20年最新免开会员轻松解决限速的4个可用方法]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>百度网盘是百度推出的一款云存储工具，但是网盘里面下载速度太慢如何解决呢？如何不开通 SVIP 会员就能实现全速下载呢，一起来看小编分享的这 4 个黑科技方法可快速帮你轻松突破百度云盘软件下载限速问题吧。</p>
</blockquote>
<div class="wp-block-cover aligncenter has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/baiduyunpan.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">快速提升百度网盘下载速度的 4 个黑科技软件免费下载</p>
</div>
</div>
<p>下面直接进入正题，这四个方法可以帮你快速 <strong> 突破百度云盘软件下载速度限制 </strong>，好了下面开始看我的<strong> 黑科技技术 </strong> 表演。</p>
<h2 class="wp-block-heading">方法一：使用 <strong> 摆渡网盘 </strong> 提速下载工具（最新测试可用）</h2>
<p>单从名字来看好像也是百度网盘哈，当然不是了，你只需要直接下载本站提供的这个软件安装包即可。具体看图：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法"
             alt="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法" loading="lazy" decoding="async" width="677" height="367" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_222633.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="百度网盘提速下载程序启动界面" class="wp-image-251" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_222633.jpg 677w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_222633-300x163.jpg 300w" sizes="(max-width: 677px) 100vw, 677px" /><figcaption>百度网盘提速下载程序启动界面</figcaption></figure>
</div/>
<p>我们从界面中也是可以看到当前这个程序的使用人数情况和使用次数，比如目前就业 4121 个人在使用。这里高热度网选择了一个大概 5.46G 的文件进行下载测试，可以看到速度稳定在<strong>7.1M/s</strong>，这相比于普通版本速度差不多 100KB 左右来说，提升了有<strong>70 倍左右</strong>，相当于是免费开通了一个年费 SVIP 百度云盘会员。</p>
<p>百度网盘提速下载器软件 1.0.0.7 最新版本免费下载链接:</p>
<p><strong>https://www.lanzous.com/i8ju9de 密码:dq26</strong></p>
<h2 class="wp-block-heading"> 方法二：使用 PanDownload_v2.1.3 网盘下载助手（推荐）</h2>
<p> 首先现在本站提供的 <strong> 百度网盘 PanDownload_v2.1.3</strong>最新版软件，下载完成后直接打开即可，其实与第一种方法比起来，这个软件总的来说还是比较稳定的，至少笔者目前使用的也是这款。打开后软件如下图所示：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img title="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法"
             alt="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法" loading="lazy" decoding="async" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_224301-1.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="PanDownload 多线程下载文件效果图" class="wp-image-254" width="580" height="408" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_224301-1.jpg 715w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_224301-1-300x211.jpg 300w" sizes="(max-width: 580px) 100vw, 580px" /><figcaption> PanDownload 多线程下载文件效果图</figcaption></figure>
</div/>
<p>从上图可以看到，这个软件速度也不亚于第一个软件对吧，而且是批量下载的，从右下角可以看到下载速度为 <strong>10.7MB/s</strong>，这简直是个神黑科技啊，速度整整提升了 100 倍。也相当于完全自己开了一个<strong>SVIP 会员</strong>，这可是要省好几百块钱呢，<strong> 强烈推荐 </strong> 使用这款。好了，这个软件的下载地址如下：</p>
<p>百度网盘 PanDownload_v2.1.3 最新下载链接：<a href="https://www.lanzous.com/i5ql46h" target="_blank"  rel="nofollow">https://www.lanzous.com/i5ql46h</a></p>
<h2 class="wp-block-heading">方法三：利用百度云盘官方软件 6.7.1.9 版本的自身漏洞进行下载</h2>
<p> 这个方法实际上也是小编最近整理资料的时候偶尔发现这个版本的百度云盘有这个漏洞，你只需要用你自己的账号登录进去就可以了。</p>
<p>下面是我使用这个 6.7.1.9 版本的云盘下载的效果图：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法"
             alt="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法" loading="lazy" decoding="async" width="850" height="296" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_225605.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="百度网盘破解软件下载进度界面" class="wp-image-256" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_225605.jpg 850w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_225605-300x104.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_225605-768x267.jpg 768w" sizes="(max-width: 850px) 100vw, 850px" /><figcaption>百度网盘破解软件下载进度界面</figcaption></figure>
</div/>
<p>同样这里我选择了一个文件试试下载速度，显示为<strong>4.5MB/s</strong>，好像速度也不是很高啊，与前面两种方法比起来的话还差点。但是总比你使用官方最新版的百度云盘软件下载东西要快得多吧？所以还是先收藏起来。</p>
<p>百度云盘官方软件 6.7.1.9 下载地址：<a href="https://www.lanzous.com/i71b5sh" target="_blank"  rel="nofollow">https://www.lanzous.com/i71b5sh</a> </p>
<h2 class="wp-block-heading">方法四：使用浏览器插件 +IDM 工具</h2>
<p>这个方法其实相比前面几个软件还是有点麻烦的，不过感兴趣的朋友们也可以看看。具体步骤如下：</p>
<p><strong>步骤一：</strong>去下载一个浏览器插件和 IDM，IDM 实际上也是一个下载加速工具，可以用来下载任意文件，至少比电脑自带的下载要快个几十倍左右吧。浏览器建议使用 Chrome 的，IDM 和插件下载地址如下：</p>
<p> Firefox&nbsp; 浏览器插件下载：<a rel="noreferrer noopener" href="https://www.runningcheese.com/go?url=https://www.lanzous.com/b851982" target="_blank" rel="nofollow">https://www.lanzous.com/b851982</a><br />Chrome&nbsp; 浏览器插件下载：<a rel="noreferrer noopener" href="https://www.runningcheese.com/go?url=https://www.lanzous.com/b851998" target="_blank" rel="nofollow">https://www.lanzous.com/b851998</a> </p>
<p>IDM 6.33.2 软件下载地址：<a href="https://www.lanzous.com/i5sglrc" target="_blank"  rel="nofollow">https://www.lanzous.com/i5sglrc</a> </p>
<p><strong>步骤二：</strong>下载完毕上面的这个百度网盘下载软件之后，然后全部按照正常流程安装即可，两个软件都要装，缺一不可。</p>
<p>1、先 <strong> 打开上面的浏览器插件 </strong>，打开之后先<strong> 登录你的百度网盘帐号</strong>。</p>
<p>2、选择要下载的文件，点击页面里的 <strong> "生成链接" </strong> 按钮来获取加速下载地址。</p>
<p>3、使用鼠标 <strong> 右键 </strong> 点击链接，选择“<strong>使用 IDM 下载</strong>”，然后确定即可。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法"
             alt="【图】百度网盘下载速度太慢怎么办？20 年最新免开会员轻松解决限速的 4 个可用方法" loading="lazy" decoding="async" width="664" height="297" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_231337.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="使用浏览器插件和 IDM 的下载速度情况" class="wp-image-257" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_231337.jpg 664w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_231337-300x134.jpg 300w" sizes="(max-width: 664px) 100vw, 664px" /><figcaption>使用浏览器插件和 IDM 的下载速度情况</figcaption></figure>
</div/>
<p>我们可以看到速度还是快不少哈，大概在 2.6MB/ S 的速度左右，也还是很 OK 的。</p>
<p>以上就是 <strong>2020 年最新</strong> 的可以突破百度云盘下载速度限制的 <strong> 4 个有效方法</strong>，并且提供了几个<strong> 黑科技软件的下载地址 </strong>，目前亲测有效。也算是一个<strong> 百度网盘下载黑科技 </strong> 吧，由 <strong> 高热度网 </strong> 精心原创整理，欢迎大家下载使用。</p>
]]></description><link>https://blog.gaoredu.com/article/1cc44f60-2998-46a6-938e-0d62e3f0d7c9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1cc44f60-2998-46a6-938e-0d62e3f0d7c9</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 08 Jan 2020 15:32:25 GMT</pubDate></item><item><title><![CDATA[【图】安卓和苹果手机APP黑科技教程：轻松无水印批量下载抖音短视频]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://www.douyin.com/" target="_blank"  rel="nofollow">抖音 </a> 是当下人们日常生活中非常火的一款社交软件，但是如何使用苹果或者安装手机去批量下载抖音里面的短视频呢？而且是无水印的呢？今天分享的这个按照手机和苹果黑科技教程绝对能帮助你轻松无水印批量下载抖音上的任意短视频。</p>
</blockquote>
<div class="wp-block-cover aligncenter has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/douyin.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">黑科技教程：如何使用手机轻松下载抖音无水印短视频？</p>
</div>
</div>
<h2 class="wp-block-heading"><strong>安卓手机如何下载到抖音短视频？</strong></h2>
<p>这个方法总的来说是今天介绍的这个 <strong> 黑科技教程 </strong> 中最简单的方法，具体步骤如下，看图：</p>
<p><strong>步骤一：手机打开手机文件管理工具，进入到目录：</strong> <strong>/Android/data/com.ss.android.ugc.aweme/cache/cache/ </strong></p>
<p>或者：</p>
<p><strong> /Android/data/com.ss.android.ugc.aweme/cache/video/cache </strong></p>
<p>上面两个路径二选一即可。下图是我的手机进去的路径：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】安卓和苹果手机 APP 黑科技教程：轻松无水印批量下载抖音短视频"
             alt="【图】安卓和苹果手机 APP 黑科技教程：轻松无水印批量下载抖音短视频" loading="lazy" decoding="async" width="400" height="833" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/v2-6f71de9dafbbbc7dde74518bb01363d3_hd-2.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="抖音短视频视频文件缓存路径" class="wp-image-227" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/v2-6f71de9dafbbbc7dde74518bb01363d3_hd-2.jpg 400w, https://www.gaoredu.com/wp-content/uploads/2020/01/v2-6f71de9dafbbbc7dde74518bb01363d3_hd-2-144x300.jpg 144w" sizes="(max-width: 400px) 100vw, 400px" /><figcaption>抖音短视频视频文件缓存路径</figcaption></figure>
</div/>
<p><strong>步骤二：删除临时缓存的文件夹</strong></p>
<p>我们发现这个路径下面当前有许多缓存文件，为了 <strong> 不会对我们后面的操作造成干扰 </strong>。这里我们选择这个文件夹，并<strong> 将这个文件夹彻底删除掉</strong>。可以放心地删除哈，这个文件夹只是存储了一些临时缓存文件，删除掉之后不会对你的安卓或者苹果手机产生影响的。</p>
<p><strong>步骤三：打开抖音，播放视频，完成下载</strong></p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】安卓和苹果手机 APP 黑科技教程：轻松无水印批量下载抖音短视频"
             alt="【图】安卓和苹果手机 APP 黑科技教程：轻松无水印批量下载抖音短视频" loading="lazy" decoding="async" width="419" height="678" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_130236.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="安卓手机已经下载成功的抖音短视频" class="wp-image-235" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_130236.jpg 419w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-08_130236-185x300.jpg 185w" sizes="(max-width: 419px) 100vw, 419px" /><figcaption>安卓手机已经下载成功的抖音短视频</figcaption></figure>
</div/>
<p>到了这一步，其实我们的准备工作已经全部做好了。接下来，我们去找一个自己想要下载的视频，<strong>直接观看 </strong> 即可，当然你也可以 <strong> 批量观看 </strong> 哈。原理实际上就是你现在打开观看的视频都会缓存到上面的那个路径下面，而且 <strong> 全部都是无水印 </strong> 的。好了，等了几分钟后，我们来看看成果。通常 <strong> 内存最大的那个 </strong> 就是你要的 <strong> 完整视频文件 </strong>，你可以用视频播放器播放一下看看是不是你需要的那个。当然有时候也会出现文件名没有后缀的情况，我们只需要手动在后面添加一个后缀就可正常播放，比如：<strong>.mp4</strong>, <strong>.flv</strong> 这些格式。</p>
<h2 class="wp-block-heading">苹果手机如何下载到抖音短视频？</h2>
<p>由于苹果手机本身的封装性比较好，一般情况下非开发人员是很难进入到系统缓存目录的，上面的方法就不行了，可以试试下面的这个 <strong> 黑科技 </strong> 方法，来实现简单下载都有短视频，具体如下：</p>
<p>步骤一：进入抖音 APP，选择一个你想要观看的视频，然后点击分享按钮即可生成分享链接。然后 <strong> 分享到“多闪”这个 APP 软件 </strong> 中，然后在这个软件直接打开后，<strong>消息记录中长按当前视频 </strong> 就可以 <strong> 保存当前的视频</strong>。</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【图】安卓和苹果手机 APP 黑科技教程：轻松无水印批量下载抖音短视频"
             alt="【图】安卓和苹果手机 APP 黑科技教程：轻松无水印批量下载抖音短视频" loading="lazy" decoding="async" width="512" height="905" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2224281-83a65e478bf3d821-1.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="苹果和安卓手机抖音短视频通用下载方法" class="wp-image-230" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2224281-83a65e478bf3d821-1.png 512w, https://www.gaoredu.com/wp-content/uploads/2020/01/2224281-83a65e478bf3d821-1-170x300.png 170w" sizes="(max-width: 512px) 100vw, 512px" /><figcaption>苹果和安卓手机抖音短视频通用下载方法</figcaption></figure>
</div/>
<p>步骤二：当然如果你不想再下载一个“多闪”APP 软件的话，也可以使用这个抖音视频在线解析工具：<a href="http://aliqb.cn/" target="_blank"  rel="nofollow">http://aliqb.cn/</a>，也可以完成整个视频的解析下载。这个在线视频解析只需要你 <strong> 把生成的短视频分享链接复制到这个输入框 </strong> 里面就行了。</p>
<h2 class="wp-block-heading">最新可用的抖音短视频下载万能解决方案</h2>
<p>最后，如果以上两种方法仍然不能解决你的问题，可以尝试下面的这个万能下载方法：</p>
<p><a href="https://github.com/renyijiu/douyin_downloader" target="_blank"  rel="nofollow"><strong>https://github.com/renyijiu/douyin_downloader</strong></a></p>
<p>这是一个抖音短视频下载的开源项目，<strong>具体使用方法 </strong> 如下：</p>
<p><strong>注意事项：</strong>请在使用项目之前确保你的手机可以正常使用 <strong>adb 控制</strong> 工具（也就是类似于命令行工具）&nbsp;<strong>&nbsp;a</strong>db 工具即 A <strong>ndroid Debug Bridge（安卓调试桥）&nbsp;tools</strong>。它就是一个命令行窗口，用于通过电脑端与模拟器或者真实设备交互。<strong>adb 工具 </strong> 可以解决在某些特殊的情况下 <strong> 进入不了系统 </strong> 的情况，具体信息可以网上搜索。</p>
<p>以下是第三种方法的具体步骤：</p>
<p> <strong>步骤一：环境 </strong> 配置 初始化</p>
<pre class="wp-block-code"><code class='language-default'>$ git clone git@github.com:renyijiu/douyin_downloader.git
$ cd douyin_downloader 
$ virtualenv -p python3.6 douyin
$ source douyin/bin/activate
$ pip install -r requirements.txt</code></pre>
<p><strong>步骤二：</strong>打开抖音 app，<strong>执行命令</strong>：</p>
<pre class="wp-block-code"><code class='language-default'>$ python douyin-bot.py</code></pre>
<p> 上面命令执行完成之后就可以批量下载，之后只需要等待即可。这个方法的好处是可以下载某一个抖音 ID 博主所有的视频，就是不需要去一个个去找链接了，还是比较方便的。</p>
<p>更加具体的流程可以看下这个 GitHub 开源项目说明：<a href="https://github.com/renyijiu/douyin_downloader/blob/master/README.md" target="_blank"  rel="nofollow">https://github.com/renyijiu/douyin_downloader/blob/master/README.md</a> </p>
<p>以上 3 种方法基本上就是是整个完全 <strong> 最新 </strong> 可以满足你无论是安卓还是苹果手机 APP 的 <strong> 黑科技教程 </strong> 了，具体看图，当然第三种方法 <strong> 下载抖音短视频 </strong> 虽然算是万能的，但是也是需要有一点编程基础的哈，只需要按照上面的方法步骤，基本上都是可以 <strong> 批量无水印下载 </strong> 到整个抖音短视频的。</p>
]]></description><link>https://blog.gaoredu.com/article/7774cb20-6469-43a1-83dc-f0f9faaca4c9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7774cb20-6469-43a1-83dc-f0f9faaca4c9</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 08 Jan 2020 05:05:57 GMT</pubDate></item><item><title><![CDATA[黑科技是什么意思？黑科技都具备哪些特点呢？]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>黑科技是什么？我们常说的黑科技更多的是指网络的新名词，那黑科技都有哪些特点呢？</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/black001.jpeg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">什么才算是真正意义上的黑科技？</p>
</div>
</div>
<p><strong>什么是黑科技？</strong></p>
<p>我们常说的黑科技更多的是指网络的新名词，即指高科技泛滥之后演变出来更强大或者更先进的技术以及创新、软硬件结合等，也包括基于现有技术的改进升级和该产品的使用体验等。比如一些业界的各种最新的 <strong> 逆天科技、火星科技、硬科技 </strong> 等各种有意思的科技技术名词，同时黑科技也泛指生活中一切让大家感到 <strong>“不明觉厉”</strong> 的新硬件、新软件、新技术、新工艺、新材料等。总之，也就是当前人类 <strong> 无法实现或根本不可能产生的技术或者产品 </strong> 统称为“黑科技”，其标准是不符合现实世界常理以及现有科技水平。</p>
<p><div class="wp-block-image"></p>
<figure class="aligncenter size-large"><img title="黑科技是什么意思？黑科技都具备哪些特点呢？"
             alt="黑科技是什么意思？黑科技都具备哪些特点呢？" loading="lazy" decoding="async" width="640" height="426" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/640_480_20180112180451540860392853663.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="黑科技产品有哪些" class="wp-image-206" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/640_480_20180112180451540860392853663.jpg 640w, https://www.gaoredu.com/wp-content/uploads/2020/01/640_480_20180112180451540860392853663-300x200.jpg 300w" sizes="(max-width: 640px) 100vw, 640px" /><figcaption>黑科技产品有哪些</figcaption></figure>
<p></div/></p>
<p><strong>黑科技有特点主要包括以下 4 点：</strong></p>
<p><strong>1. 隐形性</strong></p>
<p>黑科技还未被收入词典，“黑”顾名思义，应该属于词中隐蔽的，非法的意思。一是高级且还带有魔法色彩。看不到或看不懂运行过程，但能看到实际效果，如 <strong> 高达的 GN 粒子、星际的幽能、超能力等 </strong>。二是政府、机构或个人不愿、不能公开的核心科技，像 SARS AIDS（HIV）之类以及其变种。一般来说高调宣传不是黑科技，自诩的也不是黑科技，应该由第三方来评价，就像武林高手最后绝招，不到最后关头是不会不轻易示人的。此外还有业界的像阿里巴巴的 <strong> 无感支付</strong>，交通领域的车牌识别和人脸识别、华为手机的指纹解锁。其实这些也都算是科技领域的黑科技。</p>
<p><strong>2. 突破性</strong></p>
<p>从无到有，具有革命性创新。这很容易理解，就是以前没有的东西现在有了，以前做不到的现在能做了，当前很多高科技产品都属于此类，如 <strong> 智能机器人、人造细胞、基因克隆 </strong> 这些<strong>。</strong></p>
<p><strong>3. 超越性</strong></p>
<p>超出人类现有认知和科技水平。通常情况下，当前人类无法实现或根本不可能产生的技术或者产品，其标准是不符合科学定理以及现有科技水平，如能实现的 <strong> 虫洞、时光穿梭机。</strong></p>
<p><strong>4. 开拓性</strong></p>
<p>开拓一个崭新的领域，并带领这一个领域走向繁荣，具有划时代意义，如因特网的发明。</p>
<p>以上的“四个特点”就是黑科技必备的特征，在符合“要求”的前提下，只要具备其中一个“特点”我们就可以认为这是黑科技。此外如果这个科技产品还满足有成熟的产品，并被实践所证明；或者是已经申请发明专利或具备申请发明专利的条件和要求的，都可以算是黑科技产品。如果完全符合以上“四大特点”，那就是超级黑科技！</p>]]></description><link>https://blog.gaoredu.com/article/dedfcf09-d920-43f3-bb31-13ce31105e93</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dedfcf09-d920-43f3-bb31-13ce31105e93</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 06 Jan 2020 15:49:59 GMT</pubDate></item><item><title><![CDATA[【新】电脑搜索文件速度很慢怎么办？这款黑科技软件可以帮你提速至少50倍以上]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p> 为什么你的工作效率这么低，找个文件都得找半天？文件、文件夹没分类，关键时候找个文件半天都找不到。小伙子，别慌，推荐你个黑科技软件试试看，可以瞬间让你的电脑搜索文件速度至少提升 50 倍都不止。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/everything_icon.png)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">Everything is easy？</p>
</div>
</div>
<p><strong> 为什么电脑自带的搜索功能这么慢？</strong></p>
<p> 平时大家使用电脑的时候，都避免不了会产生大量的文件和文件夹，日积月累，产生的文件也日益增多。几个月过去了，突然有一天，发现要找一个文件，突然不知道放哪里了！然后大家肯定第一反应是点开自家电脑的搜索功能，利用系统本身的搜索功能进行文件检索。</p>
<p> …………  结果找了半天，发现：<strong>windows 电脑的系统本身自带的搜索功能搜索文件速度是在是太慢了！</strong> </p>
<p>其实一般情况下主要还是和电脑的配置有关，比如：</p>
<p>1. 电脑<strong>CPU 不够强大</strong>，可以将占用硬盘的进程结束（可以在任务管理器中看到）</p>
<p>2. <strong>机械硬盘 </strong> 坏道就会导致硬盘读写速度降低很多，如果你很在意速度的话，可以换一块 SSD）</p>
<p> 有没有什么方法或者工具，能够又好又快检索到电脑里的文件呢？</p>
<p> 答案肯定是有的，这里高热度网推荐给大家一款黑科技 <strong> 文件检索软件 -Everything</strong>，这款神器最大的有点就是小巧、免安装、速度超快，整个文件安装包只有 3M 左右。当然，使用方法也是非常简单的。</p>
<p>1. 首先下载本站提供的安装包，打开“exe”格式的文件，<strong>Everything</strong>是免安装软件，因此打开就能直接搜索使用：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【新】电脑搜索文件速度很慢怎么办？这款黑科技软件可以帮你提速至少 50 倍以上"
             alt="【新】电脑搜索文件速度很慢怎么办？这款黑科技软件可以帮你提速至少 50 倍以上" loading="lazy" decoding="async" width="660" height="564" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/Everything.Search.Window.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="Everything 软件启动界面" class="wp-image-196" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/Everything.Search.Window.png 660w, https://www.gaoredu.com/wp-content/uploads/2020/01/Everything.Search.Window-300x256.png 300w" sizes="(max-width: 660px) 100vw, 660px" /><figcaption>Everything 软件启动界面</figcaption></figure>
</div/>
<p>2. 在上面搜索框输入你想要检索的文件名或者关键词，下方的结果是实时显示的，这就比电脑自带搜索快了 50 倍不止。天哪，我要飞了！</p>
<p>3. 由于这个小软件是 <strong> 免安装 </strong> 的，因此我们可以直接设置它“<strong>开机自启”</strong>和设置好程序启动 <strong> 快捷键</strong>。</p>
<p>1）打开<strong>“工具”——“选项”——“常规”——“随系统自启动”</strong>，这样设置后，电脑只要一开机就会后台运行。</p>
<p>2）打开 <strong>“工具”——“选项”——“快捷键”</strong>，在这里设置新建和显示窗口的快捷键，建议设置成自己熟悉的组合快捷键，后面你只要按下这个快捷键，<strong>Everything</strong> 就会立即启动。</p>
<p>以上这就是这款实用的黑科技软件的简单操作步骤，如果觉得好用的话，也欢迎分享给你 身边的更多朋友。最后，放上这个软件安装包的下载地址，大家可以免费下载。</p>
<p><strong> Everything 1.4.1.935 这款软件的最新版下载地址</strong>:</p>
<p>安装版 64 位百度云盘下载地址：</p>
<p>链接: https://pan.baidu.com/s/15poC83FFs4G_1LWI9wTm3A 提取码: vn6d</p>
<p>便携版 64 位百度云盘下载地址：</p>
<p> 链接: https://pan.baidu.com/s/1xBbYT6RJCpDDyM4AKp33-A 提取码: ifxc </p>
]]></description><link>https://blog.gaoredu.com/article/8f72b194-8b34-4139-8485-237c40baa5d0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8f72b194-8b34-4139-8485-237c40baa5d0</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 06 Jan 2020 08:43:11 GMT</pubDate></item><item><title><![CDATA[【教程】如何购买域名最便宜？使用这个黑科技购买com域名最高可省30%价格]]></title><description><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>NameCheap、GoDaddy、万网是几家非常不错的域名服务商，但是从域名性价比来说小编推荐 NameCheap，今天分享的这个黑科技教程可以帮助大家只需要简单几个步骤就可以最高可以省 30% 的价格。</p>
</blockquote>
<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/domain.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"> 如何才能购买到超级便宜的 com 域名呢？</p>
</div>
</div>
<h2 class="wp-block-heading">主流三家域名服务商域名价格情况</h2>
<p>首先我们来分别取这几家域名服务商看看购买一个 COM 域名大概需要花费多少钱。</p>
<figure class="wp-block-image size-large"><img title="【教程】如何购买域名最便宜？使用这个黑科技购买 com 域名最高可省 30% 价格"
             alt="【教程】如何购买域名最便宜？使用这个黑科技购买 com 域名最高可省 30% 价格" loading="lazy" decoding="async" width="800" height="496" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_203609.png" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="主流域名服务商 com 域名价格一览表" class="wp-image-178" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_203609.png 800w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_203609-300x186.png 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_203609-768x476.png 768w" sizes="(max-width: 800px) 100vw, 800px" /><figcaption>主流域名服务商 com 域名价格一览表</figcaption></figure/>
<p>这里我们以注册我爱黑科技 (woaiheikeji) 这个域名为例，发现在三个厂家的价格具体如下：</p>
<p>阿里云：55 首年，续费基本上每年都是 69 元</p>
<p> NameCheap：61.91 元 / 年，续费价格基本上也是一样的</p>
<p> GoDaddy：6.99 美元，以最新的汇率算一下是 48.6847 元；续费价格为 $10.69/ 年，也就是 74.4548 人命币</p>
<h2 class="wp-block-heading">如何才能购买到更便宜的 com 域名</h2>
<p>从目前的情况来看，第一年是不是去 GoDaddy  买域名最便宜呢？第二年以后可以把域名转到 NameCheap，这样是不是最实惠呢！</p>
<p>其实我们还可以让我们的域名价格更便宜，下面请看看这个黑科技的核心：</p>
<p>我先来变一个魔术：</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="【教程】如何购买域名最便宜？使用这个黑科技购买 com 域名最高可省 30% 价格"
             alt="【教程】如何购买域名最便宜？使用这个黑科技购买 com 域名最高可省 30% 价格" loading="lazy" decoding="async" width="616" height="217" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_205635.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="com 域名购买账单结算前后对比" class="wp-image-180" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_205635.jpg 616w, https://www.gaoredu.com/wp-content/uploads/2020/01/2020-01-05_205635-300x106.jpg 300w" sizes="(max-width: 616px) 100vw, 616px" /><figcaption>com 域名购买账单结算前后对比</figcaption></figure>
</div/>
<p>咦？这是怎么回事。怎么一下子又省了 13 块钱呢？整整省了 20%。这对于一些学生或者普通用户其实也是一笔不小的开支呢，土豪可以忽略以下内容。</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>实际上以上几个域名服务商都是有活动的，也就是优惠码</p>
</blockquote>
<p>上面实际上是在 NameCheap 这个域名服务商上购买的一个 COM 域名，实际上我们只要在结算之前输入优惠码，就可以省下这笔钱。</p>
<h2 class="wp-block-heading">NameCheap2020 最新可用优惠码（持续更新）</h2>
<p>下面这是一个目前测试可用的域名注册优惠码（namecheap promo codes 2020）：</p>
<p><strong style="color:red">FCNC2019COUPON</strong></p>
<p>通过这个优惠码购买新域名可以打 8 折的。当然这里还找到一个可以 7 折的优惠码，也就是可以让你省掉 30% 的一笔钱，大家也可以试试看：</p>
<p><strong> WELCOME30  </strong></p>
<h2 class="wp-block-heading">购买 com 域名攻略</h2>
<p>通过以上的分析，相信各位读者也应该学会这个黑科技了，重点也就是选择一家合适的域名注册商。比如这里推荐 NameCheap，总的来说就是便宜，使用这个黑科技可购买 com 域名首付续费统统 50 元 / 年，首付和续费价格也都一样的，而且如果使用优惠码购买，从长远看来，可是要省掉不小的一笔钱哦，大家可以自己去算算看！</p>
]]></description><link>https://blog.gaoredu.com/article/1a05a476-4ff7-4e13-b712-833b040f8416</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1a05a476-4ff7-4e13-b712-833b040f8416</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 05 Jan 2020 13:34:14 GMT</pubDate></item><item><title><![CDATA[2020“阿里家书”到了，来看看阿里巴巴CEO张勇写给大家的新年寄语]]></title><description><![CDATA[<div class="wp-block-cover has-background-dim" style="background-image:url(https://www.gaoredu.com/wp-content/uploads/2020/01/1289319350.jpg)">
<div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size">阿里家书已寄出，你收到了吗？</p>
</div>
</div>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>每年春节来临之际，阿里巴巴都有一个传统，就是给亲友和阿里人寄出一本特制的“阿里家书”。今年也不例外，2020“阿里家书”也准时收到了，让我们一起打开这封特别的 2020 年“阿里家书”，来看看阿里巴巴 CEO 张勇给大家的新年寄语有。</p>
</blockquote>
<p><a href="https://www.1688.com/" target="_blank"  rel="nofollow">阿里巴巴 </a> 是国内一家顶尖的互联网黑科技公司，同时也是很多技术人的追求。阿里不仅技术氛围好，比如 <strong> 人工智能、大数据分析、无感支付、人脸识别 </strong> 这些黑科技也无处不在；此外，阿里的人文情怀其实也不错，就拿这次的阿里家书来说吧。<br />好了，话不多说。让我们先来看看今年的阿里家书都有什么，开箱啦！</p>
<div class="wp-block-image">
<figure class="aligncenter size-large"><img title="2020“阿里家书”到了，来看看阿里巴巴 CEO 张勇写给大家的新年寄语"
             alt="2020“阿里家书”到了，来看看阿里巴巴 CEO 张勇写给大家的新年寄语" loading="lazy" decoding="async" width="869" height="1024" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/1158933476-869x1024.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="阿里巴巴 CEO 张勇写给阿里人的一封信" class="wp-image-170" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/1158933476-869x1024.jpg 869w, https://www.gaoredu.com/wp-content/uploads/2020/01/1158933476-255x300.jpg 255w, https://www.gaoredu.com/wp-content/uploads/2020/01/1158933476-768x905.jpg 768w, https://www.gaoredu.com/wp-content/uploads/2020/01/1158933476.jpg 1080w" sizes="(max-width: 869px) 100vw, 869px" /><figcaption>阿里巴巴 CEO 张勇写给阿里人的一封信</figcaption></figure>
</div/>
<p><strong>阿里巴巴今年主要为大家准备了 8 件宝贝，大家一起来看看吧！</strong></p>
<p>No1: 大福字</p>
<p>No2：CEO 张勇的一封信</p>
<p>No3：阿里巴巴企业宣传册</p>
<p>No4：新年台历</p>
<p>No5：20 周年纪念公仔</p>
<p>No6：窗花 &amp; 春联</p>
<p>No7：红包</p>
<p>No8：各业务线卡通识别卡</p>
<div class="wp-block-image is-style-circle-mask">
<figure class="aligncenter size-large"><img title="2020“阿里家书”到了，来看看阿里巴巴 CEO 张勇写给大家的新年寄语"
             alt="2020“阿里家书”到了，来看看阿里巴巴 CEO 张勇写给大家的新年寄语" loading="lazy" decoding="async" width="1024" height="740" data-src="https://www.gaoredu.com/wp-content/uploads/2020/01/1426714813-1024x740.jpg" data-lazy="true" src="https://www.gaoredu.com/wp-content/themes/wordpress-theme-puock-2.8.0/assets/img/z/load.svg" alt="阿里巴巴业务线卡通识别卡" class="wp-image-140" srcset="https://www.gaoredu.com/wp-content/uploads/2020/01/1426714813-1024x740.jpg 1024w, https://www.gaoredu.com/wp-content/uploads/2020/01/1426714813-300x217.jpg 300w, https://www.gaoredu.com/wp-content/uploads/2020/01/1426714813-768x555.jpg 768w, https://www.gaoredu.com/wp-content/uploads/2020/01/1426714813.jpg 1440w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>阿里巴巴业务线卡通识别卡</figcaption></figure>
</div/>
<p><strong>以下是 CEO 张勇写给大家的阿里家书全文：</strong></p>
<p>各位阿里家人，</p>
<p>      在这辞田边新的时刻，很高兴和大家相聚。首先给大家拜年. 谢谢你们一直以来的支持、理解和信任。祝大家在新的一年诸事如意，大吉大利!</p>
<p>      过去一年, 我们共同经历了非常多难忘的时刻。9 月 10 日.11 万员工共同庆祝了阿里巴巴 20 周岁的生日。20 年来。我们经历了从霉到一的艰辛和探索，但正因背后有家人坚定的支持和陪伴, 收获了更多惊喜与奇迹，所有这些进步都是因为你们。我在这! 里，也向各位家人送出最诚挚的感恩!</p>
<p>      20 岁的阿里已巴还非常年轻。无论外部世界如何变幻，阿里已巴“让天下没有雄做的生意”的使命姑终不会改变，数字经济时代的大势不会改变。数字化的发展，必将带来以人为本、合作共赢、开款共事的新商业文明，我们相信，阿里已已要立足成为“一家活 102 年的好公司 "，就要不断为社会创造价值，承担起社会青任。</p>
<p>      阿里巴巴的 20 年，也是与生态合作伙伴一起到造来来的旅程他们同样是阿里巴已的家人、战友和伙伴, 他们共同成键了阿里巴己今日的物物生机。20 周年年会上，我也分享了未来五年的目标一“服务全球消费者，其中有超过 10 亿的中国消費者。创迎 10 万亿人民币以上的消费规模”。这也是我们完成更长远战略目标的坚实基础，那就是“到 2036 年，服务全球 20 他消费者，创造 1 亿就业机会，帮助 1000 万家中小企业盘利”。要实现所有这些目标，离不开家人一样的合作伙伴与我们并肩而行。</p>
<p>      过去一年，阿里巴巴面向企业和面向消费者的各项业务都在高速演进，让更多人事受到数宇经济的红利: 阿里已巴早已不只是一家电商公司，而是服务全球数以干万计企业、十多化消费者，跨越金融、物流、大数据云计算等領域的数宇商业某础设施。2019 年第 11 个双 11, 我们再次见证历史，阿里巴巴以 2684 亿的文易总箱和每秒 54.4 万笔的订单创建峰值，创造了新纪录，开启了新消費时代。</p>
<p>      技术是阿里巴已的基园。阿里已巴如今成为全球首个核心文易系统 100% 运行在公共示上的互联网公司。2019 年云栖大会上，阿里已巴第一颗自主研发、世界上推理性能最强的人工智能芯片“舍光 800”问世。不久前，我们的同事、阿里云创始人王坚博士还当选为中国工程院院士。这是阿里巴已的骄傲，它就是对我们持续技术创新的认可，更是金体阿里巴已技术人努力的缩影。在文化娱乐领域，我们也把越来越多高质量的内容带入中国，阿里影业参投的《绿皮书》获得了奥斯卡年度最佳影片。</p>
<p>      阿里巴巴的商业发展始终与社会责任共进。过去一年，三分之一的中国人都在阿里巴巴平台上做公益，发生公益行为超百亿次，“剁手党”成为全球最大的公益群体。阿里已已则已经是世界上最大的公益平台。</p>
<p>      2019 年 11 月 26 日，我们迎来公司发展中另一重要里程碑回家，回香港上市。家国情怀，社会担当一阿里人常以此自勉。5 年前赴美上市时，我们承诺，只要条件允许，就会回来。沧淺横流，5 年后，我们不仅兑现了承诺，10 位来自 4 大洲 8 个国家的客户来敲锣，也证明了阿里已巴的全球化正迈出坚实的步伐。我们希望能贡献自己的绵薄之力，积极参与到香港的未来建设中。</p>
<p>      阿里巴巴是一个平台，更是一个广阔的舞台。如今遍布世界各地的阿里巴已大家庭的 11 万名员工，正是阿里巴已的未来。他们当中超过 3 成都是非常年轻的“90 后”，一半以上的员工都是近 3 年内入职的新鲜血液。他们为阿里巴巴带来温度，营来创造性，让阿里巴巴变得与众不同。新一年我们的愿望，就是继续为他们创造最好的工作、学习和成长环境，让地们成为更好的自己。</p>
<p>      最后，再次向所有阿里家人道一声幸福安康 | 因为你们，才有我们，因为你们，阿里巴已将会拥有最美的未来!</p>
<p class="has-text-align-right">      张勇 (逍追子) 阿里巴巴集团董事局主席兼首席执行官</p>
<p class="has-text-align-right">      2019 年 12 月 31 日  </p>
]]></description><link>https://blog.gaoredu.com/article/bf82b0ec-e25b-4528-baa8-861d0a57e298</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bf82b0ec-e25b-4528-baa8-861d0a57e298</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 05 Jan 2020 11:59:01 GMT</pubDate></item><item><title><![CDATA[学会这个黑科技可以在线免费下载全网所有主流视频平台如B站/Youtube/爱奇艺等网站视频]]></title><description><![CDATA[我们先来看下这个官方在线的黑科技工具的在线介绍：
urlgot是一个免费的在线媒体下载器应用程序，它使您可以从几乎任何URL（YouTube，Facebook，Twitter，Vimeo，Dailymotion，Bilibili，QQ，iQiyi等）下载视频或音频。当您输入或粘贴URL时，我们的应用程序将尝试检测媒体文件。然后，urlgot将媒体文件下载到我们的一台服务器。在那里，它将转换为您选择的格式，完成转换后，您就可以下载文件了。

好的，废话不多说，我们来测试一下，打开这个地址https://www.urlgot.net/：


1154


我们打开这个地址后，进入b站选择一个视频吧，粘贴地址到上面的输入框中，输入后就会出现下面的效果：1156


我们发现会自动进入到下载的页面，最重要的是这个黑科技网站竟然还提供了四种下载格式，也就是分辨率吧，640x360 896x504        1280x720        1920x1080        

格式看到的是mp4格式的哈，
然后我们点击一下离线下载就会下载这个视频了。
下载的过程中还有进度条显示这些，还是很人性化的哈。
1157




我这边又在爱奇艺上面找了一个网址试了下，也是可以的，这个黑科技网站简直太牛逼了，以后再也不用去抓包分析下载网站视频了。
这个可以在线下载所有的主流视频平台如B站/Youtube/等网站的在线工具你知道吗？


原理简单说一下，其实这个网站的后台帮我们做了视频抓取的这一步骤，一般我们下载的视频格式都是很多ts文件，然后我们还要借助第三方工具软件才能将它们合并起来，合并之后在用格式工厂等软件进行格式转化如mp4格式，最后才能得到我们想要的资源，现在想想这个黑科技网站还是很良心的，无需安装，全部在线下载。



]]></description><link>https://blog.gaoredu.com/article/f70aeda3-db22-4f7a-aa3b-f7754279aecc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f70aeda3-db22-4f7a-aa3b-f7754279aecc</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Dec 2019 21:40:15 GMT</pubDate></item><item><title><![CDATA[【站点帮助】关于我爱科技论坛解压密码的统一说明]]></title><description><![CDATA[我爱科技论坛自成立以来，已经不断丰富完善了论坛中的考研资料、编程学习、黑科技/科学上网、开源软件等资源模块，并免费分享传播了很对优质资源，同时也得到了各位网友们的积极支持和响应，这无疑极大地促进了论坛和谐的健康发展。同时为了避免一些伸手党，我爱科技论坛在发布部分优质资源的时候也添加了相关的压缩密码，一方面可以保证资源短时间内不被和谐，同时也对于部分资源进行了安全加密处理，保证了用户分享的资源的安全。目前获取论坛部分优质资源的解压密码的渠道主要有以下2种方式，下面统一针对论坛解压密码做统一说明：
方式一：通过“微信扫一扫“屏幕右侧的微信二维码，即可关注我爱科技论坛官方微信公众号，然后回复密码，即可得到资源的统一解压密码。



https://www.52tech.tech/data/attachment/forum/201804/28/194611qzaaazea3z1rbnrg.jpg


方式二：直接点击右侧的QQ图标即可立即加入我爱科技论坛的官方QQ群，入群成功之后关注群公告消息就可以获取资源的解压密码，这里面大佬云集，加群的朋友们也可以在群内畅聊。


https://www.52tech.tech/data/attachment/forum/201804/28/193515susww8fnzkpag7ww.jpg


注意事项：目前论坛仅支持当前两种方式获取论坛的统一解压密码，其他方式或渠道一律不可信。
]]></description><link>https://blog.gaoredu.com/article/feffe8c5-ab9e-4fdb-8185-b8b04e012af5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/feffe8c5-ab9e-4fdb-8185-b8b04e012af5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 02 Dec 2019 21:09:38 GMT</pubDate></item><item><title><![CDATA[【站点公告】关于我爱科技论坛2019年新年资源大放送的通知]]></title><description><![CDATA[我爱科技论坛目前包括考研资料、Web编程学习、黑科技/科学上网、开源软件，VIP视频等资源模块。随着网站的不断扩大，论坛目前也聚集了大量的高手，正所谓高手云集，再次也感谢坛友们积极地分享自己的资源，并同大家一起学习交流，此贴将整理论坛2018-2019年度的论坛精华帖和论坛热帖等资源，新的一年，也欢迎大家不断更新分享更多的优质资源……。
资源，因分享而具有价值；我爱科技论坛，2019，因你们而精彩！


@全体成员


1090










]]></description><link>https://blog.gaoredu.com/article/5ea0cbcf-dcb6-4e40-92ca-0fc8afa6c4dc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5ea0cbcf-dcb6-4e40-92ca-0fc8afa6c4dc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 30 Dec 2018 21:19:42 GMT</pubDate></item><item><title><![CDATA[【资料共享】使用python打造自己专属的分布式爬虫搜索引擎（强力推荐）]]></title><description><![CDATA[视频教程的目录结构如下：

1013

爬虫源码.zip
爬虫讲师源代码.zip
第10章 elasticsearch搜索引擎的使用
第12章 scrapyd部署scrapy爬虫
第13章 课程总结
第1章 课程介绍
第2章 windows下搭建开发环境
第3章 爬虫基础知识回顾
第4章 scrapy爬取知名技术文章网站
第5章 scrapy爬去知名问答网站
第6章 通过CrawlSpider对招聘网站进行整站爬取
第7章 Scrapy突破反爬虫的限制
第8章 scrapy进阶开发




资料共享链接：https://pan.baidu.com/s/1hrXsOD2
]]></description><link>https://blog.gaoredu.com/article/b1c22ae9-9169-4088-b408-35f99e8efc01</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b1c22ae9-9169-4088-b408-35f99e8efc01</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 01 Dec 2018 21:11:56 GMT</pubDate></item><item><title><![CDATA[【编程艺术】使用Yii 2.0开发一个企业级的京东商城平台全套视频教程]]></title><description><![CDATA[教程目录如下：首先来看下什么是Yii，
Yii Framework 是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架，简单来说，就是一个PHP框架吧。一般来说，使用原生的PHP开发效率肯定是比较低的，因此这里就采用Yii这个PHP框架来开发这个电商系统了。


1008


第01章 课程简介
第02章 项目的准备工作
第03章 项目前台页面的搭建
第04章 项目后台页面的搭建
第05章 管理员模块的开发
第06章 会员模块的开发
第07章 商品的分类模块的开发
第08章 商品模块的开发
第09章 购物车模块的开发
第10章 订单模块的开发
第11章 支付模块的开发
第12章 订单的发货管理
第13章 课程总结
课件



资料共享链接：
链接：https://pan.baidu.com/s/1fz_8bidXi7-DhW2aHdIjBg 

提取码：4kdb]]></description><link>https://blog.gaoredu.com/article/3517c74c-1fc5-429a-9bfd-c6122e703926</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3517c74c-1fc5-429a-9bfd-c6122e703926</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 30 Nov 2018 02:41:47 GMT</pubDate></item><item><title><![CDATA[【黑科技】两种方法教你恢复你已删除的QQ好友列表的或QQ群]]></title><description><![CDATA[方法一：
当然是去看下QQ官网有没有提供这个方法，我们可以去找找看下，不过发现，还真的是有一个叫做QQ恢复系统的网站，经过验证，是腾讯官方的，所以也是比较安全的。
我们来到QQ恢复系统的官网：http://huifu.qq.com/
1006




进去之后，发现有一个恢复QQ群和一个恢复QQ好友的选项，我们根据自己的需要，可以直接进行相关的恢复就行了。


方法二：
使用工具恢复，这里也就提供一个QQ账号恢复的软件吧，
1007


看到这个界面之后，是不是发现和QQ官网提供的QQ恢复系统基本上没什么两样，只不过提供了一个界面罢了，
操作也是很简单的，只不过这个工具多了一个功能，就是可以把自己已经删除的QQ好友或者QQ群列表导出来。
如果你删除的比较多的话，name就可以试试这个看看。


还有这个黑科技工具吧，貌似只能提供最近1年内的QQ勿删记录，也就是只能找回你的QQ里面最近一年的QQ号码或者QQ群，其他功能请自测吧。
最后放上这个QQ恢复系统桌面版的资料共享链接
共享地址：https://www.lanzous.com/i2hozsb

]]></description><link>https://blog.gaoredu.com/article/c9463ce0-74b4-4c42-9196-3d4f6ca6c87b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c9463ce0-74b4-4c42-9196-3d4f6ca6c87b</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 29 Nov 2018 20:57:27 GMT</pubDate></item><item><title><![CDATA[Vue.js 源码全方位深入解析（视频精讲+源码分析）最新视频教程]]></title><description><![CDATA[1169
Vue.js 源码全方位深入解析
997

998

这一套Vue源码全套视频解析教程包含了Vue的基础和深入等一系列的知识点，讲解了Vue的响应式，模板和编译的基本流程，让你深入掌握Vue的底层原理。

这一整套视频教程目录如下：
第1章 准备工作链接: https://pan.baidu.com/s/1wUt-xkfdsMIpPQ7FWYQEjw 提取码: 4vhw 
第2章 数据驱动
链接: https://pan.baidu.com/s/1ZdM6utEzNCSCvES28oH4yw 提取码: c17i 
第3章 组件化
链接: https://pan.baidu.com/s/1nYwK_nmXa1qXquLrXSr4aw 提取码: nf8a
第4章 深入响应式原理（上）
链接: https://pan.baidu.com/s/1AhCwkC9eLzBSnKaW_2WdOg 提取码: cbg7 
第5章 深入响应式原理（下）
链接: https://pan.baidu.com/s/1Hv_FeTLDj3N1N4V_SXAcAQ 提取码: abim 
第6章 编译（上）
链接: https://pan.baidu.com/s/1W5684407aoQxQVa0rRXusA 提取码: 7ucy
第7章 编译（下）
链接: https://pan.baidu.com/s/1JN8q_ixacbPbpYdJpRjONw 提取码: vhpi 
第8章 扩展（上）
链接: https://pan.baidu.com/s/1cQZv0lz5rSPy7n01CeYZ6A 提取码: wxrr 
第9章 扩展（中）
链接: https://pan.baidu.com/s/1NFuSmTlG3UxUYaYGZm-_fg 提取码: b27s
第10章 扩展（下）
链接: https://pan.baidu.com/s/1T4i7f5-82O4Pzf2i00_4IA 提取码: a1yb
第11章 Vue-Router
链接: https://pan.baidu.com/s/1tQ3hJif62TJfO9k0qx_RCg 提取码: a8ue
第12章 Vuex
链接: https://pan.baidu.com/s/1v_rg0PlvBh1fSLG4HPtAZg 提取码: qasi


附赠：book（随堂电子书）.pdf：链接: https://pan.baidu.com/s/1Q0aZEZ72FBy0W34ckIjxYw 提取码: 2wfn 

（链接更新于2020年3月）
链接: https://pan.baidu.com/s/1KDqWLV6Q-4HunXMLjgbXAQ 提取码: wmu1 复制这段内容后打开百度网盘手机App，操作更方便哦

]]></description><link>https://blog.gaoredu.com/article/4709f0cd-d703-4f9f-a821-0051a71bf192</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4709f0cd-d703-4f9f-a821-0051a71bf192</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 27 Nov 2018 20:34:32 GMT</pubDate></item><item><title><![CDATA[【考研资料】考研英语2019冲刺班精品视频教程（阅读+写作+翻译+完形）]]></title><description><![CDATA[
考研英语冲刺班精品视频教程（新东方版）


996


01 阅读强化
02 写作强化
03 翻译强化
04 完形填空【强化】
05 选择搭配强化
新东方英语一强化





考研资料共享链接:https://pan.baidu.com/s/1lZSLfhNqDXZmmZR4qoLRaA密码:x1i3
]]></description><link>https://blog.gaoredu.com/article/e0b4050e-eeec-46e6-8a3e-35b6b4431960</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e0b4050e-eeec-46e6-8a3e-35b6b4431960</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 27 Nov 2018 03:02:58 GMT</pubDate></item><item><title><![CDATA[【黑科技】不安装任何插件轻松玩转浏览器自带截图功能]]></title><description><![CDATA[不知道大家有没有发现，其实我们使用的浏览器本身就带有截图功能的，比如谷歌浏览器，但是可能由于位置比较隐蔽的原因，大家可能还没有发现如何使用谷歌浏览器自带的截图的功能。
下面我们来探探看？


第一步：打开你的谷歌浏览器，按下按键F12，就会调出开发者调试工具，样子大概长这样。
993


第二步：按下按键CTRL+SHIFT+P按键，就可以调出浏览器自带的截图控制命令窗口了，它长这个样子。
994




第三步：上面的界面是不是还挺好看的呢？然后输入命令screen就可以了，然后有关截图的还是有两个，一个是截取整个网页的，还有一个是专门截取指定的DOM节点的。
大家可以自行测试下。
995
基本上上面箭头指向的3个地方都是可以截图的，点击任意一个就会自动截图成功，然后会弹出一个保存窗口，大家选择一个保存的路径就可以完成本次截图的整个过程了。

]]></description><link>https://blog.gaoredu.com/article/00ac98ef-d0c6-448a-93af-736fd0f793f7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/00ac98ef-d0c6-448a-93af-736fd0f793f7</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 27 Nov 2018 02:52:26 GMT</pubDate></item><item><title><![CDATA[最新使用Vue 2.0 高级实战-开发移动端音乐 WebAPP项目实战视频教程]]></title><description><![CDATA[最终的项目成品展示如下，适合有一定Vue基础和开发经验的学习，涉及到的知识也是比较多的。
990


991

自主开发组件库，直接应用于实际工作中
1.confirm：确认对话框组件
2.listview：通讯录列表组件
3.loading：加载态组件
4.no-result：无结果展示组件
5.progress-bar：进度条组件
6.progress-circle：圆形进度条组件
7.scroll：移动端滚动组件
8.search-box：搜索框组件
9.search-list：搜索列表组件
10.slider：轮播图组件
11.switches：开关切换组件
12.top-tip：顶部消息提示组件
13. song-list：歌曲列表组件

从基础组件到业务组件，一站式全掌握

1.add-song：添加歌曲到列表组件
2.disc：歌单详情页组件
3.m-header：页面头部组件
4.music-list：歌曲列表页面组件
5.player：播放器内核组件
6.playlist：播放列表组件
7.rank：排行榜页面组件
8.recommend：推荐页面组件
9.search：搜索页面组件
10.singer：歌手页面组件
11.singer-detail：歌手详情页组件
12.suggest：搜索提示列表组件
13.tab：顶部导航栏组件
14.top-list：排行榜详情页组件
15.user-center：用户中心页组件

实战Vue.js多种技术栈，编写高质量代码
MVVM框架：Vue.js （版本2.x）
状态管理：Vuex
前端路由：Vue Router
服务端通讯：axios、jsonp
移动端滚动库：better-scroll
构建工具：webpack 2.0
源码：es6


视频项目资料的部分基本目录如下：
7-9 播放歌曲前进后退功能实现（上）.mp4
7-8 播放器歌曲播放功能实现.mp4
7-7 播放器展开收起动画（下）.mp4
7-6 播放器展开收起动画（中）.mp4
7-5 播放器展开收起动画（上）.mp4
7-3 播放器Vuex的相关应用.mp4
7-25 播放器底部播放器适配.mp4
7-24 播放器歌词剩余功能实现.mp4
7-23 播放器歌词左右滑动实现（下）.mp4
7-22 播放器歌词左右滑动实现（上）.mp4
7-21 播放器歌词滚动列表实现.mp4
7-20 播放器歌词数据解析.mp4
7-2 播放器Vuex数据设计.mp4
7-1播放器页面设计详解.mp4
7-19 播放器歌词数据抓取.mp4
7-18 播放器模式切换功能实现（下）.mp4
7-17 播放器模式切换功能实现（中）.mp4
7-16 播放器模式切换功能实现（上）.mp4
7-15 播放器progress-cricle 圆形进度条组件实现.mp4
7-14 播放器progress-bar进度条组件实现（下）.mp4
7-13 播放器progress-bar进度条组件实现（中）.mp4
7-12 播放器progress-bar进度条组件实现（上）.mp4
7-11播放器播放时间获取和更新.mp4
7-10 播放歌曲前进后退功能实现（下）.mp4

9-1排行榜页面布局介绍给排行榜数据抓取.mp4
9-2排行页排行榜数据应用.mp4
9-3榜单详情也布局介绍及Vuex实现路由数据通讯.mp4
9-4榜单详情页数据抓取和应用.mp4
9-5带排行的song-list组件扩展和应用.mp4





https://pan.baidu.com/s/1jkaY00uZwR9pQ9SNzDTxjw（已失效）


Vue 2.0 高级实战-开发移动端音乐 WebAPP项目实战视频教程最新百度网盘下载链接

（更新于2020年4月）: https://pan.baidu.com/s/1jdgwORoV0GnwlUdtXcdQ6g 提取码: wuby

]]></description><link>https://blog.gaoredu.com/article/ff69df54-1a47-4a0d-a934-66d4c5232d21</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ff69df54-1a47-4a0d-a934-66d4c5232d21</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 26 Nov 2018 20:47:52 GMT</pubDate></item><item><title><![CDATA[【资料共享】NodeJS最后一公里之项目上线和运维工程师培训视频教程]]></title><description><![CDATA[989


第9章 服务器配置安装 MongoDB
第8章 利用 DNSPod 管理域名解析
第7章 配置 Nginx 实现反向代理
第6章 搭建 Nodejs 生产环境
第5章 增强服务器安全等级
第4章 远程登录服务器
第3章 选购域名服务器及备案
第2章 待部署的 5 个本地 Nodejs 项目
第1章 课程预热
第11章 使用和配置更安全的 HTTPS 协议
第10章 向服务器正式部署和发布上线 Nodejs 项目


NODE运维工程师培训全套视频教程资料共享链接：
链接: https://pan.baidu.com/s/1nZNbc0Vj5SGpYxN06VT2Uw 密码: tc2v


]]></description><link>https://blog.gaoredu.com/article/77ddce18-7c86-457d-ac40-73a1dddba31c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/77ddce18-7c86-457d-ac40-73a1dddba31c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 26 Nov 2018 02:39:44 GMT</pubDate></item><item><title><![CDATA[【资料分享】最适合初学者入门的2018最新NodeJS经典入门视频教程]]></title><description><![CDATA[NODEJS 视频教程资料完整目录：

988

NodeJS-经典教程 10-37节 视频及课件
nodeJS视频9课件.rar
nodeJS视频9.rar
nodeJS视频8课件.rar
nodeJS视频8.rar
nodeJS视频7课件.rar
nodeJS视频7.rar
nodeJS视频6课件.rar
nodeJS视频6.rar
nodeJS视频5课件.rar
nodeJS视频5.rar
nodeJS视频4课件.rar
nodeJS视频4.rar
nodeJS视频3课件.rar
nodeJS视频3.rar
nodeJS视频2课件.rar
56.8M2018-04-26 19:10
nodeJS视频1课件.rar
nodeJS视频1.rar





2018最新NODEJS视频教程资料链接：https://pan.baidu.com/s/1wfLgMRIotZXJda_AsOfuzA 密码：p31e



]]></description><link>https://blog.gaoredu.com/article/30d0eb6d-4bb1-4ed3-b7b5-7871aee4e738</link><guid isPermaLink="true">https://blog.gaoredu.com/article/30d0eb6d-4bb1-4ed3-b7b5-7871aee4e738</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 26 Nov 2018 02:34:43 GMT</pubDate></item><item><title><![CDATA[【黑科技】不使用PS无需安装任何插件教你3S内搞定抠图的高效方法]]></title><description><![CDATA[对于PS的抠图功能想必大家都是比较熟悉的了，但是对于一些小白来说，PS中的高级抠图功能用起来就不那么顺手了，尤其是一些高难度系数的抠图，比如说口头发丝这样的操作，对于新手来说可就束手无策了，难道就要从头到尾去学习一边PS抠图吗？


今天我们放出的这个黑科技工具，可以让大家可以完全告别PS，无需基础，只需要3s中，轻松教你搞定抠图，甚至包括一些高难度的抠图效果。




1. 首先，我们准备一些我们的环境，就是一个淡单纯的在线工具，无需安装任何插件，我们可以进去看下。
https://www.gaoding.com/koutu
985


这个就是我们今天的助教神器，使用方法也是很简单的。


2. 进去之后，我们直接就是可以上传你需要处理的图片了。
目前支持的图片格式有JPG和PNG的格式，如果不是这两种格式的话，可以使用其他的一些图片格式转换工具转换一下就可以了。
986




3.上传成功之后，我们就会发现这款工具的牛逼之处了。
987


尽然可以支持抠头发丝这样的高难度操作，我们来试试看，同时可以支持羽化功能，我么可以使用画刷随便的涂鸦，同时支持在线下载，我们处理完毕之后就可以直接下载到本地，这无疑就是大大提高了我们的开发效率呀，简直就是一个神器啊，快去试试看吧。


PS抠图神器黑科技工具试用地址：https://www.gaoding.com/koutu

]]></description><link>https://blog.gaoredu.com/article/028c2363-f016-4e66-aff7-5f350940c2d8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/028c2363-f016-4e66-aff7-5f350940c2d8</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 25 Nov 2018 21:01:46 GMT</pubDate></item><item><title><![CDATA[【开源软件】一键把你的照片转换为素描风格的素描大师便携工具软件]]></title><description><![CDATA[983




上面就是转换的效果对比图，使用方法也是很简单的，只要有了这个素描大师，以后做素描头像再也不用怕了，一键转换即可。


素描大师开源软件下载链接：https://www.lanzous.com/i2f78tg

]]></description><link>https://blog.gaoredu.com/article/23e8f0b4-ae0e-40e8-bb59-e837a3c886e9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/23e8f0b4-ae0e-40e8-bb59-e837a3c886e9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 25 Nov 2018 03:19:35 GMT</pubDate></item><item><title><![CDATA[【黑科技】超级牛逼的U盘硬盘加密软件，再也不用担心你的隐私泄露了]]></title><description><![CDATA[这是一个非常牛逼的硬盘/U盘解密加密软件，有了它之后，你的U盘或者硬盘上面的任意资源就可以随便借给别人使用了，而且还不用担心你的资料或者隐私泄露了，除非人家知道你的密码。


这个黑科技软件也是便携版本的，直接点开就可以直接使用，无需安装，简单快捷。
975


当你需要把你的U盘，或者移动硬盘借给别人的时候，或者别人想要使用你的电脑的时候，你电脑的有些隐私文件不想让别人看见，那就到了这个黑科技的用处了。
我们输入你的密码开始进行加密，这时候你就可以放心地借给别人了。




976


使用的时候只会看到这个软件容量大小没有变化，但是你的原文件都是存在的，只不过，全部被隐藏起来了。


977




然后之后输入你的密码，你的所有文件又都出来了，具体看图，是不是很牛逼，快去试试看！
密码武器加密解密黑科技软件下载：
链接: https://pan.baidu.com/s/1Nt2sXLtBOA_Oy_jBBdmS3A 提取码: m6b6 

]]></description><link>https://blog.gaoredu.com/article/ab56a3f4-dba7-4b8a-96a7-12581e360c04</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ab56a3f4-dba7-4b8a-96a7-12581e360c04</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 24 Nov 2018 00:21:09 GMT</pubDate></item><item><title><![CDATA[【黑科技】不安装模拟器直接让你的安卓APP在你的浏览器运行起来]]></title><description><![CDATA[下面的这个就是今天的主角，他是谷歌官方推出的一款可以实现在浏览器上直接运行安卓软件的插件工具。这款黑科技工具可以实现不用安装任何其他的模拟器就可以直接在你的浏览器上跑安卓应用程序了，是不是听起来很酷？
973

安装APK也是很简单的，直接启动后在主界面添加程序就行了，启动之后的界面如下。

974



插件下载地址：https://chrome.google.com/websto ... lhgmfkkmkngdoccbadn




12月最新最好用的科学上网新突破方法【VPN持续更新】
http://www.52tech.tech/forum.php?mod=viewthread&tid=40&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/bd48d449-20a5-4ea8-af16-b1e881136271</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bd48d449-20a5-4ea8-af16-b1e881136271</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 23 Nov 2018 02:34:16 GMT</pubDate></item><item><title><![CDATA[【黑科技】2018最新黑科技之使用你的眼神来控制你的手机状态]]></title><description><![CDATA[972


这个黑科技的使用方法如下：
你可以直接通过你的眼球的移动而移动来控制箭头的移动，眼神让长时间停留在一个地方，就会自动调出菜单，然后就可以直接打开应用了，基本上不需要你的双手，直接就可以用眼神交流了，是不是很神奇，快去试试看。


https://www.lanzous.com/b493718
密码:gr0c
]]></description><link>https://blog.gaoredu.com/article/0a03266f-15cd-4f9d-9d9a-01602d99315f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0a03266f-15cd-4f9d-9d9a-01602d99315f</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 22 Nov 2018 03:07:38 GMT</pubDate></item><item><title><![CDATA[【Go项目】使用GO语言开发一个企业级博客管理系统+流媒体视频网站综合视频教程]]></title><description><![CDATA[基本上实现的功能也就是一个博客系统吧，希望大家可以继续深入学习其他的相关项目，打造自己专属的博客管理系统，就把这个项目的整个过程资料分享给大家。


971
基础项目：
01博客项目设计.rar
02初窥 Web 开发.rar
03模板用法讲解.rar
04登录及分类管理.rar
05文章的添加与删除.rar


https://pan.baidu.com/share/init?surl=hsy72j6
密码:re5h
高级项目：
第1章 课程介绍
第2章 一个例子了解golang工具链
第3章 流媒体网站架构以及API模块的实现
第4章 stream模块
第5章 scheduler模块
第6章 前端服务和模版引擎渲染
第7章 网站上云




https://pan.baidu.com/s/1cMZMqHLTBD5ziw5XuoF6Xw 密码：v7s9

]]></description><link>https://blog.gaoredu.com/article/e637c86b-ac83-4562-979c-ff8f43ddfbda</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e637c86b-ac83-4562-979c-ff8f43ddfbda</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 20 Nov 2018 21:23:41 GMT</pubDate></item><item><title><![CDATA[【考研英语】2018最新中国人名大学考研英语口语专项讲座提升免费课程]]></title><description><![CDATA[970


中国人名大学推出的一套专门提升口语能力的专项视频课程，无论是对考研英语或者英语四六级都是挺有帮助的，希望对考研的同学有帮助。


在线学习地址：http://sope.ruc.edu.cn/more2016.php?cid=351
]]></description><link>https://blog.gaoredu.com/article/a550fdd8-c6df-4537-b765-a8d99fd11f74</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a550fdd8-c6df-4537-b765-a8d99fd11f74</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 20 Nov 2018 21:03:40 GMT</pubDate></item><item><title><![CDATA[【考研资料】2019考研计算机真题资料精讲全程班（基础导学+真题精讲+考前冲刺）]]></title><description><![CDATA[
07 真题精讲 讲师：卫真、白龙飞、崔巍
06 强化巩固 讲师：孙卫真、白龙飞、崔巍
05 基础阶段 计算机网络基础 讲师：白龙飞
04 基础阶段 操作系统基础 讲师：卫真
03 基础阶段 组成原理基础 讲师：白龙飞
02 基础阶段 数据结构基础 讲师：崔巍
01 备考阶段导学 讲师：卫真、白龙飞、崔巍




对于需要其他专业课资料的亲们可以查看帖子：
部分高校的专业课资料
http://www.52tech.tech/forum.php?mod=viewthread&tid=2&fromuid=1
(出处: 我爱科技论坛)




下载链接https://pan.baidu.com/s/1snbqsQL  密码：4bzo

]]></description><link>https://blog.gaoredu.com/article/0e4ae3ce-31e6-422c-8bf2-2a57626576a1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0e4ae3ce-31e6-422c-8bf2-2a57626576a1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 10 Nov 2018 02:51:53 GMT</pubDate></item><item><title><![CDATA[【Windows软件】非常好用的2018最新版Windows注册表管理和清理工具]]></title><description><![CDATA[968



支持注册表清理，系统优化，注册表管理等功能，是Windows平台下管理和清理系统注册表的非常好用的神器。
下载链接：https://pan.baidu.com/s/1AivW8yovCf50u0pjJ0YlLw 提取码: qnrf




]]></description><link>https://blog.gaoredu.com/article/39bae702-1ac3-4453-b373-4b58900e5384</link><guid isPermaLink="true">https://blog.gaoredu.com/article/39bae702-1ac3-4453-b373-4b58900e5384</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 09 Nov 2018 19:46:49 GMT</pubDate></item><item><title><![CDATA[【黑科技】不使用任何工具而善用Windows自带的黑客文件加密命令，学会你就是高手了]]></title><description><![CDATA[不知道各位小白平时加密一些文件是怎样加密的，一般情况下应该都是去找一些加密软件进行加密吧，但是大家可别忘了其实Windows本身就自带一个加密文件的方法，只是大家不知道罢了！


下边就来演示一下如何在一个图片文件里面隐藏一个其他文件，而且原图片可以正常打开的黑科技把。


首先，准备几个文件，这里我准备的是mp3文件和图片文件，然后看图操作：
这里我直接将文件合并成了一个文件，当然你也可以压缩成为ZIp格式，也是完全没有问题的。


965




此时，如果做到这里，很多小白就开始说，我直接把文件的后缀修改一下不就行了？？？哈哈，问题是当你压缩之后，你在用图片查看工具查看图片还可以打开吗？

接下来就是重点。使用如下命令进行文件的转换。
copy /B A文件+B文件=最终文件


A文件就是你最终需要展示的文件
B文件就是你需要隐藏的文件，也就是你需要加密的文件
最终文件：最终的文件就是你需要把A文件转换成为一个什么格式的，为了可以图片正常显示，这里我使用的还是一个图片格式，大家使用其他，比如jpg,png,gifmbpm…………
都是没有问题的。


966




然后执行完毕上面的命令，基本上就大功告成了。
再来点开试试看？？？
967


我们发现，竟然原来转换的最终格式文件也是可以使用图片查看工具正常查看到的，完全没有损坏原来的文件？？？
而且，一般的小白也是不知道这个文件背后竟然有一些不为人知的秘密，就是你自己隐藏的文件。


好了，下面，就是解密文件的过程。
直接把文件的后缀名称修改为ZIP或者RAR格式就可以看到自己加密的文件了，而且还没有损坏，还是可以正常打开的，是不是很神奇啊？？？
快去试试看这个黑科技，不知道你有没有Get到？





]]></description><link>https://blog.gaoredu.com/article/4c58019f-011b-4e70-b024-a64146bddb9f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4c58019f-011b-4e70-b024-a64146bddb9f</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 08 Nov 2018 21:16:16 GMT</pubDate></item><item><title><![CDATA[【java基础】JavaWeb+javaee+java基础开发技术文档大全]]></title><description><![CDATA[深入Java集合学习系列(一)：HashMap的实现原理_尚硅谷_张晓飞.pdf
深入Java集合学习系列(四)：LinkedHashMap的实现原理_尚硅谷_张晓飞.pdf
深入Java集合学习系列(三)：ArrayList实现原理_尚硅谷_张晓飞.pdf
深入Java集合学习系列(二)：ArrayList实现原理_尚硅谷_张晓飞.pdf
尚硅谷_宋红康_参悟Java基础核心技术.pdf
常用sql操作总结_尚硅谷_宋红康.pdf
_张晓飞_Mysql 性能优化教程.pdf
_张晓飞_JDK中的设计模式应用实例.pdf
_宋红康_深度解析Java内存原型.pdf
_宋红康_Java 之23种设计模式解析.pdf
_宋红康_4天贯通JDBC.pdf
JDK中的设计模式应用实例_尚硅谷_张晓飞.pdf
Java反射机制的缺点_尚硅谷_张晓飞.pdf
Java反射机制_尚硅谷_宋红康.pdf
java基础文档：https://pan.baidu.com/s/1o8A5kKy 


缓存技术浅谈_尚硅谷_张晓飞.pdf
版本控制器服务器端安装与配置_尚硅谷_封捷.pdf
_张晓飞_正则表达式学习手册.pdf
_张晓飞_尚硅谷WEB书城.docx
_张晓飞_UML模型图.pdf
_张晓飞_Tomcat系统架构分析.pdf
_张晓飞_Tomcat的设计模式分析.pdf
_封捷_jQuery学习笔记.pdf
_封捷_ModelDriven和Preparable拦截器.pdf
_封捷_JavaScript学习笔记.pdf
_封捷_HTML初步.pdf
_封捷_CSS扫盲.pdf
XML简介_尚硅谷_封捷.pdf
Web应用环境搭建_尚硅谷_封捷.pdf
Web基础架构：负载均衡和LVS_尚硅谷_张晓飞 .pdf
Servlet_尚硅谷_封捷.pdf
JavaWeb知识结构图.jpg
JNDI原理_尚硅谷_张晓飞.pdf
HTTP协议简介_尚硅谷_封捷.pdf


JavaWeb技术文档：https://pan.baidu.com/s/1c1KcMNu 

性能调优之性能参数指标_尚硅谷_张晓飞.pdf
性能调优之Weblogic调优_尚硅谷_张晓飞.pdf
图解Spring AOP_尚硅谷_张晓飞.pdf
尚硅谷_佟刚_使用 PowerDesigner.pdf
_张晓飞_Webservice教学课件.pdf
_张晓飞_Mybatis.pdf
_佟刚_扩展+Spring+Data+JPA.pdf
_佟刚_Struts2 运行流程分析.pdf
_佟刚_SpringSecurity之自定义用户权限信息的存取.pdf
_佟刚_SpringMVC+运行流程解析.pdf
_佟刚_Spring 整合 Struts2 详解.pdf
_佟刚_Spring IOC 容器中 Bean 的生命周期.pdf
_佟刚_JSR303验证.pdf
javaee技术文档：https://pan.baidu.com/s/1dFwAuNR   

再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1

]]></description><link>https://blog.gaoredu.com/article/9c3f4bc2-5657-4bf5-8b46-7cd601524a86</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9c3f4bc2-5657-4bf5-8b46-7cd601524a86</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 08 Nov 2018 03:01:48 GMT</pubDate></item><item><title><![CDATA[【黑科技】如何在不插网线不连接WiFi的情况下上网冲浪]]></title><description><![CDATA[如题，不知道大家有没有这种想法，不插网线，不连接WiFi还能上网吗？？？简直是瞎扯，哈哈，想必大多数人第一眼看到都会有这种想法！今天我们就来实现一个不插网线和不连接WiFi就可以上网的黑科技。

好了下面进入正题。
步骤一：下载一个代理工具，比如小编这里使用的是CCproxy这个代理工具，虽然这个软件还是比较老的，但是用起来都是屡试不爽，因此就推荐大家使用这个。下载链接在最后会一并附上。
962


由于小编推荐的这个小工具已经破解过了，大家直接下载下来就可以直接使用了。

步骤二：打开启动按钮
启动成功之后，你的这台电脑就是一台代理服务器了。
963




上面就是实现的一个简单原理，就是你首先得保证你的局域网里面至少有一台电脑可以正常上网，然后其他的所有和你处于同一个局域网里面的电脑就可以使用你的这台代理服务器来上网了。


步骤三：
其他没有插网线或者没有连接wifi的电脑，此时只需要打开IE浏览器或者其他浏览器，配置一个上网代理IP地址就行。
964


地址就设置为你这台计算机的IP地址，然后端口看下你的代理Proxy，配置成为相应的端口就可以，此时按照同样的方法进行配置，就可以实现你这台电脑周围所有局域网的电脑都可以正常科学上网了，怎么样，这个黑科技有没有Get到，快去试试看！



链接：https://share.weiyun.com/5gXmyeQ 密码：w2h743



]]></description><link>https://blog.gaoredu.com/article/f4fd7333-fb3e-4e3d-9abc-db13e84f4b45</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f4fd7333-fb3e-4e3d-9abc-db13e84f4b45</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Nov 2018 20:55:20 GMT</pubDate></item><item><title><![CDATA[【我爱科技论坛VIP视频影院】西虹市首富VIP电影在线免费观看]]></title><description><![CDATA[电影名称：
西虹市首富 (2018)主演：
主演: 沈腾 / 宋芸桦 / 张一鸣 
豆瓣评分：6.6分
961

电影简介：
王多鱼毫不犹豫签下了“军令状”，与好友庄强（张一鸣 饰）以及财务夏竹（宋芸桦 饰）一起开启了“挥金之旅”，即将成为西虹市首富的王多鱼，第一次感受到了做富人的快乐，同时也发现想要挥金如土实在没有那么简单………


知乎评价：
最后，我想说——《西虹市首富》堪称是《夏洛特烦恼》的升级版。首先，是制作升级。在前作中，由于制作资金不足，导致涉及到真人明星的角色，只能找模仿秀的演员凑合客串。


我爱科技论坛VIP影院在线观影地址：【高清无广告免会员在线观看】
西虹市首富在线播放


其他更多免费VIP电影资源的请查看以下帖子：
【通知公告】我爱科技论坛VIP影院上线的通知
http://www.52tech.tech/forum.php?mod=viewthread&tid=779&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/26566f31-de92-482f-98a2-d324c29d666f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/26566f31-de92-482f-98a2-d324c29d666f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Nov 2018 02:54:43 GMT</pubDate></item><item><title><![CDATA[【黑科技】手机和电脑查看已经连接Wifi的明文密码的几种很方便的方法分享]]></title><description><![CDATA[首先来看下电脑上面如何操作：

方法一：我们直接在我们已经连接上的WiFi上面右键，选择属性选项，这里我选择的是F2614的这个WiFi，这个就是我当前已经连接的一个WiFi网络：
956


然后就会进入到这个无线网络的属性的配置选项
957


接着我们在安全选项卡里面选择显示字符这个按钮，就会立马显示出来你连接的这个WiFi的密码了，而且还是明文的，怎么样，也算是个黑科技，只不过应该不经常使用的话可能也不太关注到这个功能的。


手机上的操作：

方法二：一般的手机现在会有个功能，就是在你手机上已经连接的wifi上面，会有一个分享按钮，也就是这个点击分享密码的按钮


958


然后呢，就会自动生成一个二维码，这个二维码里面就包含了你现在连接的这个wifi的所有信息，包括wifi名称和密码等信息，当然也是明文的，然后你使用手机的微信或者自带的微信扫一扫都可以，就可以看到这个wifi的密码了。


959




第三种方法：
对于经常使用免费wifi的朋友来说，应该经常会用到一个wifi万能钥匙的软件，而且也是有电脑版本的和手机版本的，经常可以直接用来破解Wifi，除了连接成功之后，使用上面的第二种方法之外，小编今天也来推荐一个破解版本的wifi万能破解钥匙的黑科技软件，具体先来看下效果哈。

这个是破解成功的一个情况，wifi密码已经成功GET
960


当然，要想使用这个黑科技，请安装本站提供的这个小软件手机版本的就可以了：
https://www.lanzous.com/i2axtti







]]></description><link>https://blog.gaoredu.com/article/c9ee5c5c-da11-45e0-9caf-0d9a79faaa2c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c9ee5c5c-da11-45e0-9caf-0d9a79faaa2c</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Nov 2018 20:45:51 GMT</pubDate></item><item><title><![CDATA[【开源软件】IOS手机和Pad最新种子搜索神器，支持一键下载缓存本地]]></title><description><![CDATA[苹果手机的福利，支持手机和平板直接下载缓存任何你想找的资源
安装方法，由于是外部费商店的一些软件，需要将手机越狱之后才可以使用，也算是一个开源软件项目了。


下面是我搜索行动关键词搜索出来的结果，基本上就是红海行动了，然后就可以缓存到本地了
955




相进行深入学习研究源码的可以看下这个开软软件项目的GitHub源码：
https://github.com/youusername/magnetX/releases/download/1.1.4/magnetX.zip


IOS苹果手机专用下载链接:https://pan.baidu.com/s/1cTfV3Cm4X3-z9A_DYGWLdg  密码:0wq2




]]></description><link>https://blog.gaoredu.com/article/815001a2-875c-4d12-b1e7-e7e6b75a52ea</link><guid isPermaLink="true">https://blog.gaoredu.com/article/815001a2-875c-4d12-b1e7-e7e6b75a52ea</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Nov 2018 02:39:56 GMT</pubDate></item><item><title><![CDATA[【黑科技】木马病毒程序后台自动专杀检测工具便携版，再也不怕电脑中病毒了]]></title><description><![CDATA[我们先来看下今天推荐的这款黑科技工具长什么样子的：
952


打开这个病毒木马自动检测工具之后，我们呢发现有木马检测和木马检测并分离两个选项，类似于现在各位电脑上面安装的杀毒软件吧。
注意打开程序的时候建议使用管理员权限打开，否则可能会出现软件无法打开的情况，或者被报毒的情形，建议关闭后台的杀毒软件哈。
检测过程中的效果如下：

953


因为一些恶意软件被加壳了，或者软件本身隐藏了一些病毒，需要我们使用一些本站推荐的黑科技工具去自动检测了，当然这个软件也是比较老的版本了，现在也就是作为一些黑科技或者黑客攻击的时候用来使用一下。
上面的这个也就是仅作为测试学习使用，因为这个小工具实际上内部也隐藏了不少木马病毒，因此不推荐使用这个。
小工具下载链接：
http://pan.baidu.com/s/1eQeqvhK 


但是其实这款软件也是比较老了，目前好多都被加壳了，内部也会有木马病毒的，不建议使用这个软件了：

建议大家使用这个火绒杀毒木马隔离工具：（类似于金山毒霸这些杀毒软件吧，不过已经被抽离出来了）
954


这是一个单文件版本的，也是比较安全的一个木马检测隔离工具：
下载地址：https://pan.baidu.com/s/1migAE96

下面的是官方的下载地址：
官方下载:http://www.huorong.cn/downv3.html?20160325
官方离线包：http://www.huorong.cn/downfull.html?20160325


更多的黑客工具本站已经全部整理如下：
我爱科技论坛黑科技工具箱整理专区【黑客工具箱】
http://www.52tech.tech/forum.php?mod=viewthread&tid=690&fromuid=1
(出处: 我爱科技论坛)



]]></description><link>https://blog.gaoredu.com/article/a35fb425-32d9-4be4-b33a-8ce645c93cf9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a35fb425-32d9-4be4-b33a-8ce645c93cf9</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 05 Nov 2018 20:52:21 GMT</pubDate></item><item><title><![CDATA[超强黑科技工具—可加密和反加密逆向破解DotNet加密的WinForm程序]]></title><description><![CDATA[对于现在广泛使用C#开发的WinForm应用程序，一般在整个程序开发完毕之后程序员会手动使用一些软甲加壳（加密工具）进行软件加密，比如常见的代码压缩、混淆等功能，一般情况下就会认为这样子程序基本上就无人能破解了，殊不知山外有山人外有人，一山更比一山高，当然还是会有相关的加壳破解工具。因此对于我们常规使用的软件加壳工具基本上用来对付小白还是可以的哈，但是对于一些逆向工程师的话，基本上还是不得行的，今天就来看下有什么方法可以实现反混淆？？

1.首先我们来看下我们比较常见的加壳破解工具，也就是可以直接查看已经编译完毕的二进制程序的代码：
这个是.Net Reflector工具，是用来对程序进行加密的（可以用来反编译）：
https://pan.baidu.com/s/1jIPKM7W
密码：8jj7



950





2. 下面来看下逆向破解的黑科技工具
首先来看下这个开源的反混淆工具，支持单个文件的反混淆，如果需要研究内部的反破解的实现原理的话就可以直接去下载下来来看下。
https://github.com/CalebFenton/simplify

.NET Reactor：这是一个5.0版本的免费绿色版本的软件，基本上不需要激活既可以直接使用了。
下载地址:http://pan.baidu.com/s/1qXSS49Y


949

这个工具是一个核心工具，主要是用来对程序进行加壳的，加壳以后，比如使用下面的压缩混淆选项之后就使用上面的那个工具就会打不开了，当然也可以使用其他的一些工具进行破解，这块就比较高级了，感兴趣的话可以下去继续深入了解下。


使用这个黑科技软件基本上就可以实现程序的再次加壳，一般的破解工具就是无法破解成功的。
]]></description><link>https://blog.gaoredu.com/article/68c4d4a8-1c7d-45f0-a557-b430adce7152</link><guid isPermaLink="true">https://blog.gaoredu.com/article/68c4d4a8-1c7d-45f0-a557-b430adce7152</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 04 Nov 2018 20:54:10 GMT</pubDate></item><item><title><![CDATA[【原创源码】2018最新安卓开发必备的上万套开发模板及源码分享【源码+不加密】]]></title><description><![CDATA[以下是本次分享的安卓开源软件和开源源码：


948


安卓2014.06.15新增600源码.rar
安卓2014.04.30新增500源码.rar
Android应用安卓初级开发源码313.rar
AndroidApe.com安卓之前的源码.rar
AndroidApe.com-安卓程序源码服务专家起始-1122.rar




项目源码分享：
微商城.zip
糗事百科项目源码.rar
精品源码（每一个都是精品）.rar
订餐最新源码及安装包.zip
超级华丽的仿QQ最新版本.rar
云信理财项目UI设计.zip
童年小游戏超级玛丽项目.rar
天气预报可换肤详细注释项目.zip1
数据口袋.zip
史上最牛开源集合资讯阅读器.zip
三组图标可调连连看.zip
人机五子棋项目源码.zip
企业级discuz论坛安卓苹果客户端.zip
企信通EIM.zip
教务选课学生成绩管理项目.zip
基于XMPP的即时聊天项目.zip
股民邦.zip
高仿微信5.2内测版UI项目.zip
高仿陌陌.zip
高仿安卓捕鱼达人游戏.zip
仿微信基于位置的聊天.zip
仿手机QQ音乐播放器项目.zip
仿唱片机音乐播放器.zip
仿爱乐透安卓版彩票UI项目.zip
仿QQ邮箱安卓客户端项目.zip
仿QQ列表通讯录项目.zip
电子书阅读器项目源码.zip
带详细注释的水果消消看源码.zip
带进度条简易浏览器项目.zip
大学生心理健康职业性格测试.zip
纯java编写2d坦克小游戏.zip
安卓在线txt小说阅读器项目.zip
安卓应用游戏卸载器项目.zip
安卓手机钢琴模拟器项目.zip
安卓蓝牙对战塔防游戏.zip
安卓快递跟踪信息查询急速版.zip
安卓记账本毕业设计项目源码.zip
安卓多功能手机助手项目.zip
安卓多功能手电筒项目.zip
安卓win8风格音乐播放器.zip
安卓wifi搜索连接热点创建项目.zip
Android应用源码我要打车安卓手机打车项目.rar
Android应用源码基于vitamio的网络电视直播源码.rar
以上就是分享的90个分类518套安卓源码例子大全







安卓开源源码链接: https://pan.baidu.com/s/1pLJFMGF 密码: 3fff
]]></description><link>https://blog.gaoredu.com/article/1e3550c4-ef40-42f8-b4c2-732fe475cd61</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1e3550c4-ef40-42f8-b4c2-732fe475cd61</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 04 Nov 2018 03:23:30 GMT</pubDate></item><item><title><![CDATA[【浏览器插件】自动检测并抓取任意网站所有音乐视频等任意文件直接下载到本地的插件]]></title><description><![CDATA[目前测试基本上可以下载网站上任意的音乐视频资源文件，内部应该是使用了正则表达式等手段进行资源的匹配吧，类似于MP3，MP4
这种常见的音乐视频文件，基本上都是可以可以直接检测到并下载到本地的。


重要的一点是可以自定义抓取的数据格式，这样子以后不管你进入什么网站，想要的资源基本上可以全部匹配到了，快去试试看哈！


947






自动抓取插件下载链接：https://pan.baidu.com/s/1H54TJrJC-isE1Z4sAC73Eg 密码：ehsc
]]></description><link>https://blog.gaoredu.com/article/08233a39-ee16-4008-8455-29bb82f0f2ef</link><guid isPermaLink="true">https://blog.gaoredu.com/article/08233a39-ee16-4008-8455-29bb82f0f2ef</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 04 Nov 2018 02:55:49 GMT</pubDate></item><item><title><![CDATA[【项目实战】2018最新使用Go语言实战开发一个WEB项目博客系统视频教程完整版]]></title><description><![CDATA[视频的主要分为下面五个部分，也就是基本的增删改查都实现了吧，有需要的可以自己下载：


946


05文章的添加与删除.rar
04登录及分类管理.rar
03模板用法讲解.rar
02初窥 Web 开发.rar
01博客项目设计.rar


Go语言项目实战：
https://pan.baidu.com/share/init?surl=hsy72j6
密码:re5h




还有这个在线版本也分享出来：
https://study.163.com/course/introduction.htm?courseId=328001

]]></description><link>https://blog.gaoredu.com/article/8fd27e4f-8514-43c6-84ff-c7e774e41947</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8fd27e4f-8514-43c6-84ff-c7e774e41947</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Nov 2018 02:34:38 GMT</pubDate></item><item><title><![CDATA[【黑科技】windows使用指定U盘登录指定电脑免密码登录原理及实现代码分析]]></title><description><![CDATA[最近发现了一个比较有意思的黑科技，如何登录你的电脑之后不用输入密码，而是通过一个你提前准备好的U盘来实现登录，注意不是使用U盘启动电脑哈，这两个是完全不一样的。
最终实现的效果就是，要想登录你的这台计算机，name就必须需要你的这个U盘，如果没有这个U盘或者使用的是其他的U盘，那么统统是不能正常登录的。
我们先来看下登录的效果：
938




下面来看下实现步骤：
1. 下载后面分享的源码，然后下载到本地，然后使用你的一个空闲的U盘，将下载的文件解压拷贝到你的U盘里面。解压之后的文件大概就剩下下面的这些文件了，注意解压之后不要随便双击打开，否则可能会出现不可预知的情况哈。然后我们使用记事本编辑1.bat这个文件。
939


2. 然后修改一下下面的几个位置，主要还是U盘上对应路径的绝对路径地址。
940


第一个位置：I：\…………\你的U盘里面的svs文件的绝对路径地址（jiemi.svs）
第二个位置：I：\…………\你的U盘里面的svs文件的绝对路径地址(jiemi.svs)

注意这里的路径一定要配置正确哈，否则可能会出现无法启动电脑的情况哈。

其实我们还是可以看懂这块代码的大概意思的，就是电脑启动之后就回去寻找你的U盘里面的svs文件，如果找到了的话就验证成功，如果没有验证成功的话，就会立即执行命令 
shutdown -s -t 20
这里的命令就是。要立即关闭你的计算机，20表示20秒之后立即关闭计算机，当然你也可以修改为0，那么就会立即关闭计算机。

3. 上面的是把解密文件以前放到你的U盘里面，然后把1.bat和run.vs这个文件都放到你的电脑磁盘里面【同一个文件夹】，这个文件，其中run.vbs需要设置为一个开机启动（先添加一个快捷方式图标，然后把这个图标放在启动项里面就可以了），这样每次开机之后就会自动去执行这个脚本文件了，从而实现开机自动验证的目的。
942
944944
945


通过正确配置完成以上的步骤之后，就可以来测试一下了。


注意：黑科技测试也是有风险的哈，新手的话建议先准备一个虚拟机，然后再虚拟机测试正常之后再放到你的计算机里面。如果发现测试失败或参数有误，可能会出现进入不了你的计算机的情况，这个时候请提前记一下你的这个文件的启动目录的绝对路径：如：c：/windows/启动/xxx.svs文件，然后启动的时候使用安全模式进入，使用DOS控制台登录后，CD到你的启动文件夹下面，然后使用DOS命令删除这个文件就行。


源代码下载链接：链接: https://pan.baidu.com/s/1U6-noHzklz2FkjsxQO3jOw 提取码: u5vv






]]></description><link>https://blog.gaoredu.com/article/44a42aa2-1bf0-4af8-b682-5b45946c9464</link><guid isPermaLink="true">https://blog.gaoredu.com/article/44a42aa2-1bf0-4af8-b682-5b45946c9464</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 02 Nov 2018 21:39:46 GMT</pubDate></item><item><title><![CDATA[【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程]]></title><description><![CDATA[937




这套2018最新java虚拟机视频教程总共有110集，适合进阶java高级部分的人士学习。
链接: https://pan.baidu.com/s/1o958SyA 密码: iq3j





此外还有一些备用的关于jvm的视频教程：
蚂蚁课堂-JVM快速入门
https://pan.baidu.com/s/1c1UFViw
深入JVM内核—原理、诊断与优化 - 炼数成金
https://pan.baidu.com/s/1o8t67Xo 6r57
背景圣思园JVM视频+深入JVM内核—原理、诊断与优化
https://pan.baidu.com/s/1getJVxD 6tvr
JVM调优实战（ebook）
https://pan.baidu.com/s/1bR8YjICUkJ2chwzrbiYh2Q vmtd
JVM必知必会（ebook）
https://pan.baidu.com/s/1hseoRp6 ffd1
深入理解Java虚拟机（jvm性能调优+内存模型+虚拟机原理）- 叶子猿
https://pan.baidu.com/s/1c3ra7XQ jfde

再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1






]]></description><link>https://blog.gaoredu.com/article/795ba0ff-fd1d-4c08-8b15-6ff10d88c4f4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/795ba0ff-fd1d-4c08-8b15-6ff10d88c4f4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 02 Nov 2018 03:00:42 GMT</pubDate></item><item><title><![CDATA[【windows软件】史上最全的SQLServer历史版本和2016最新版及注册激活码下载分享]]></title><description><![CDATA[936


软件下载：
SQLserver2008版本下载：https://pan.baidu.com/s/1jId7p6e ... mp;parentPath=%2Fid 密码  s1s8 
开发版(Developer): PTTFM-X467G-P7RH2-3Q6CG-4DMYB
企业版(Enterprise): JD8Y6-HQG69-P9H84-XDTPG-34MBB
SQLserver2012版本链接：https://pan.baidu.com/s/1i5lFIYT 密码：t1x3MICROSOFT SQL SERVER 2012 DEVELOPER 版（开发版）
序列号：YQWTX-G8T4R-QW4XX-BVH62-GP68Y MICROSOFT SQL SERVER 2012 ENTERPRISE SERVER/CAL EDITION 版（服务器/ CAL版）
序列号：748RB-X4T6B-MRM7V-RTVFF-CHC8HMICROSOFT SQL SERVER 2012 STANDARD 版（标准版）
序列号：YFC4R-BRRWB-TVP9Y-6WJQ9-MCJQ7MICROSOFT SQL SERVER 2012 WEB 版（WEB 版）
序列号：FB3W8-YRXDP-G8F8F-C46KG-Q998FMICROSOFT SQL SERVER 2012 ENTERPRISE CORE 版（企业版）
序列号：FH666-Y346V-7XFQ3-V69JM-RHW28MICROSOFT SQL SERVER 2012 BUSINESS INTELLIGENCE 版（企业版）
序列号：HRV7T-DVTM4-V6XG8-P36T4-MRYT6
SQLserver2016最新版下载链接：http://pan.baidu.com/s/1qYwRgzM 密码：kugh


MDCJV-3YX8N-WG89M-KV443-G8249
  MDCJV-3YX8N-WG89M-KV443-G8249
 TBR8B-BXC4Y-298NV-PYTBY-G3BCP
 B9GQY-GBG4J-282NY-QRG4X-KQBCR
  BXJTY-X3GNH-WHTHG-8V3XK-T8243

]]></description><link>https://blog.gaoredu.com/article/54badcd4-6232-4c3f-a641-9029ccc7af3d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/54badcd4-6232-4c3f-a641-9029ccc7af3d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Nov 2018 20:51:44 GMT</pubDate></item><item><title><![CDATA[【黑科技】使用DOS命令中的Telnet服务命令远程登录你的电脑]]></title><description><![CDATA[今天来看一些，如何实现远程登录你的电脑，目前大家可以想到的有以下几种方法：


方法一：使用一些现有的工具，比如windows自带的远程链接工具，Teamviewer工具，向日葵远程链接工具，这些工具大都是利用了电脑自带的3389端口或者内网穿透的方式来实现远程连接点的，具体的使用方法大家应该都是比较熟悉的，如果需要下载相关的工具包的话，可以直接去这里下载：


我爱科技论坛黑科技工具箱整理专区【黑客工具箱】
http://www.52tech.tech/forum.php?mod=viewthread&tid=690&fromuid=1
(出处: 我爱科技论坛)







方法二：使用Telnet远程登录，不知道大家有没有听说过这个工具？
下面先来科普一下：
Telnet协议是TCP/IP协议族中的一员，是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。这个是百度上说的，今天我们就来不用安装任何其他工具直接远程连接你的电脑。


步骤一：
开启Telnet服务，貌似从windows2008之后的电脑，windows默认是没有开启这个服务的，因此需要我们手动去开启一下这个服务。在控制面板中去找一下你的启动和关闭windowss功能的这个选项，然后开启Telnet服务器和Telnet客户端这个工具。
930
直接使用Win+R：输入命令
services.msc


步骤二：然后就会进入到你的电脑的服务管理界面，找到Telnet这个服务，选择手动方式并启动这个服务。


931






步骤三：在执行完成上面两个操作，现在直接进入你的DOS控制台，输入命令：
telnet --help 


如果这个命令输入后，出现如下界面，就说明你已经成功安装好了telnet服务。
932




步骤四：这个步骤很关键哈，
开始菜单=>运行中输入：lusrmgr.msc确定，点开组一项，找到TelnetClients，双击打开属性，添加你的用户名到成员，确定。也就是进入你的计算机管理下，需要在Telnet这个组下面把你需要登录的用户添加进去，否则是无法执行成功的。933
添加好了之后，现在基本上就全部配置完毕了。
步骤五：输入命令telnet 127.0.0.1这里当前使用的是本机的地址作为测试，如果本地测试成功了以后，后面就可以在其他任意位置随时随地使用Telnet登录你的电脑了。934
现在按照上面输入你电脑的用户名和密码之后，就可以成功登录了。


这个时候你就可以使用这个黑科技去随便操作目标电脑了，基本上所有的CMD上面的DOS命令都是可以使用的，相当于是你已经成功拿下了这台主机。
然后再试试这个命令看下？
shutdown -s -t 0




发现什么了，你的电脑已经被强制关闭了，哈哈，快去体验一些这个黑科技，以后基本上就不用使用什么工具就可以登录你的电脑了对吧，这才是程序员应该干的事，不得是？？？
]]></description><link>https://blog.gaoredu.com/article/094879e2-9d75-4f8b-a0cb-286e73ead0bd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/094879e2-9d75-4f8b-a0cb-286e73ead0bd</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Nov 2018 03:40:45 GMT</pubDate></item><item><title><![CDATA[【windows软件】最新万能网卡驱动单文件版本（适合所有型号装机必备）]]></title><description><![CDATA[929


目前收集的一款非常好用的电脑装机必备驱动软件，适合所有的电脑，适合所有的无线网卡和有线网卡，基本上安装完毕之后也不存在其他兼容性问题，让你新装的系统快速上网。
.
开源软件下载地址：
链接: http://pan.baidu.com/s/1gd2Qo5l 密码: 75dh




备用链接: https://pan.baidu.com/s/1o8qokS6 密码: cmm8




]]></description><link>https://blog.gaoredu.com/article/6cd9a66f-c544-48b9-891f-977e464e65b5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6cd9a66f-c544-48b9-891f-977e464e65b5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 31 Oct 2018 03:25:48 GMT</pubDate></item><item><title><![CDATA[【Python基础】 Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台视频教程]]></title><description><![CDATA[
这个视频教程基本上有14个章节，其中还包含了项目开发的源代码，以及项目的开发的工具，包括Pycharm，Navicat for Mysql，以及PYthon的环境的搭建等，适合初学者和Python爱好者进阶学习：


928




https://pan.baidu.com/s/13n7dQpS4QxgrS2a2EyGdnA 密码：cn9q
]]></description><link>https://blog.gaoredu.com/article/1f7248ac-bd91-496b-b4aa-7a5716327f34</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1f7248ac-bd91-496b-b4aa-7a5716327f34</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Oct 2018 03:05:10 GMT</pubDate></item><item><title><![CDATA[【黑科技】使用网站目录结构扫描工具一站式扫描各大网站的目录结构]]></title><description><![CDATA[今天小编提供的这个网站目录扫描工具是基于Python写的，目前也是网上的一个开源项目，目前支持可以暴力扫描各大网站的结构目录以及相关的文件，具体的使用方法如下：1. 使用之前，先确保你的电脑上面安装了Python3.x的版本，如果还没有安装好Python的环境的话，可以去官网下载安装。
下载地址：https://www.python.org/ftp/python/3.7.1/python-3.7.1.exe
这是目前最新的版本，大家可以直接下载。
926


2. 配置好了Python的环境之后，现在就可以安装这个程序了，打开你的DOS窗口。
输入命令：
git clone https://github.com/maurosoria/dirsearch.git

然后进入到Git下载的目录：
cd dirsearch/

接下来就可以启动程序了，然后就是等待扫描了：
./dirsearch.py -u 目标网站的网址 -e *

上面的目标地址，就是你想查看的网站的地址，输入任意网址就可以实现全站扫描了。
下面是启动程序的界面：
927


此外，如果不习惯使用Git的方式下载的话，这里也提供了直接下载的通道，直接下载解压即可，其他的步骤同上。
https://github.com/maurosoria/dirsearch/archive/master.zip
]]></description><link>https://blog.gaoredu.com/article/5568abd0-f64f-48a5-b38b-25146e1bb642</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5568abd0-f64f-48a5-b38b-25146e1bb642</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Oct 2018 02:52:10 GMT</pubDate></item><item><title><![CDATA[最新《彻底征服React.js + Flux + Redux 实战》全套视频教程百度网盘免费下载]]></title><description><![CDATA[最新《从0开始彻底征服ReactJS》全套视频教程，总共有18个章节，从基础到原理层面深入剖析React，该视频的目录如下：

1222

第一章：课程介绍
第二章：第一个 React 应用程序
第三章：JSX 用法
第四章：创建组件
第五章：组件的生命周期
第六章：组件的属性
第七章：组件的事件
第八章：组件之间的通信
第九章：props与state的博弈
第一十章：实用工具
第一十一章：开发环境
第一十五章：Facebook Flux
第一十四章：FLUX架构
第一十三章：树组件开发实战
第一十七章：Redux
第一十六章：Reflux
第一十九章：有问必答
第一十八章
 
（链接已更新2020年4月）
最新《从0开始彻底征服ReactJS》全套视频教程百度网盘下载链接: https://pan.baidu.com/s/1sngFsnz 密码: w5fv



]]></description><link>https://blog.gaoredu.com/article/699c572d-e60a-4395-9eb5-dde51702e940</link><guid isPermaLink="true">https://blog.gaoredu.com/article/699c572d-e60a-4395-9eb5-dde51702e940</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 29 Oct 2018 03:04:29 GMT</pubDate></item><item><title><![CDATA[【windows软件】360网站测速小工具单文件绿色提取版]]></title><description><![CDATA[这个小工具就是可以实现网站的测试，也就是本地网络的网速测试，基本上不用安装360就可以使用这个软件，软件也是绿色单文件版的。
918

目前支持宽度介入速度测试，长途网络速度测试，网速排行榜测试等功能。

360网站测速小工具下载链接：https://pan.baidu.com/s/1n2QRk9iw8pBA6kfdLdhlEQ 密码：siqj


]]></description><link>https://blog.gaoredu.com/article/0998cad0-68a1-4dac-88cb-80c198b10a66</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0998cad0-68a1-4dac-88cb-80c198b10a66</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 28 Oct 2018 03:08:57 GMT</pubDate></item><item><title><![CDATA[【黑科技】关闭window10自动update自动更新的几种方法分享]]></title><description><![CDATA[第一种方法：使用命令解决
步骤一：按Win+R打开“运行”，然后在对话框中输入“services.msc”，确定之后就会启动windows服务的管理界面。然后找到下面的这个服务Windows Update服务，就是下面的标红的这个。
915


步骤二：双击“Windows Update”服务程序，就可以打开一个window服务启动类型选项窗口，然后在启动类型处选择“禁用”，“确定之后就可以完美解决win10自动更新的这个问题了。
916




上面两个步骤操作完毕之后，然后重启计算机就可以了。




方法二：使用工具解决
使用一个win10自动禁用的工具，当然就是直接安装并启动，然后运行这个小工具就行，原理和上面的步骤实际上是差不多的。
这个软件是长下面的这个样子，基本上需要使用管理员身份运行就行，然后点击关闭windows更新这个按钮，同样可以解决这个问题了。
917


下载链接：https://pan.baidu.com/s/1-idr50qVJTYjlFgPv045JQ 提取码：52fc




以上就是比较好用的两种不同的方法去解决win10自动更新的问题了，也算是一个黑科技吧，感兴趣的朋友快去试试看。



]]></description><link>https://blog.gaoredu.com/article/9b7fa91d-1b76-417d-8ae3-700490486bec</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9b7fa91d-1b76-417d-8ae3-700490486bec</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 28 Oct 2018 02:57:11 GMT</pubDate></item><item><title><![CDATA[【考研资料】兰州大学数学分析历年考研试题]]></title><description><![CDATA[兰州大学数学分析考研专业课：
2008年兰州大学数学分析考研试题链接: https://pan.baidu.com/s/1O7jnjSK5hRZbrNwY72GSiA 提取码: 8en2

2010年兰州大学数学分析考研试题链接: https://pan.baidu.com/s/1Ml3wXMKmm_MMpr-Eg7Mgbg 提取码: uas2
2009年兰州大学数学分析考研试题链接: https://pan.baidu.com/s/1CryvnqJqPJZObUM_hX3CWQ 提取码: irip




对于其他高校的专业课，也可以参考下面的文章：
部分高校的专业课资料
http://www.52tech.tech/forum.php?mod=viewthread&tid=2&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/027022a7-5126-4c49-816e-93649f84f525</link><guid isPermaLink="true">https://blog.gaoredu.com/article/027022a7-5126-4c49-816e-93649f84f525</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Oct 2018 03:49:26 GMT</pubDate></item><item><title><![CDATA[【黑科技】手机最新黑科技之科学上网手机版，用赛风就够了（安卓APK和IOS版本）]]></title><description><![CDATA[914


这是目前找到的最新版赛风科学上网工具，不过使用的时候一定要低调低调再低调，一般人可别告诉他哈，万一被封了怎么办是吧。


安卓版科学上网工具下载链接：https://pan.baidu.com/s/1vTbkBp5g2shYXYrxHSE4Tg 密码：qhj7

目前测试还是可以使用的，也还比较稳定，如果发现不能使用的话，也可以看下本站分享的其他工具；




目前5款最新最好用的手机翻墙vpn软件，蓝灯专业版已破解 测试可用！
http://www.52tech.tech/forum.php?mod=viewthread&tid=49&fromuid=1
(出处: 我爱科技论坛)




]]></description><link>https://blog.gaoredu.com/article/7b7d39a6-97c3-4308-bb60-10ff56517cac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7b7d39a6-97c3-4308-bb60-10ff56517cac</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Oct 2018 03:36:53 GMT</pubDate></item><item><title><![CDATA[【原创资料】基于bootstrap的精品后台管理系统响应式静态模板大全]]></title><description><![CDATA[911


目前收集了PC版本的和移动端版本的，欢迎大家下载学习交流。


912
移动端后台模板.zip
响应式博客后台模板.zip
企业门户网站后台模板.zip
阿里云风格后台模板.zip
LeaRun_6.3.4.zip
layui-admin.zip
H+2.2.rar
first_admin.zip
Creative_Tim.zip
Cameo_Admin.zip




网站模板下载地址：https://pan.baidu.com/s/1pKTTt71 密码：n1o8    


]]></description><link>https://blog.gaoredu.com/article/29af8037-8548-45e0-b4c4-4d858c02c1e4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/29af8037-8548-45e0-b4c4-4d858c02c1e4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Oct 2018 02:49:41 GMT</pubDate></item><item><title><![CDATA[【原创资料】9款唯美鼠标指针（电脑爱好者必备）分享]]></title><description><![CDATA[910




Powersurge_01.rar
Win10 Style.rar
白蓝鼠标指针
好看.rar
经典.rar
苹果声音.rar
深度技术论坛SMACK.rar
鼠标指针Metro X.rar
小黑鼠标指针黑白方案.rar
左手白色鼠标指针+aero+left_TWQ.rar







链接: https://pan.baidu.com/s/1qAWDUiVjVY8z8gCgl6-BLA 提取码: es1v
]]></description><link>https://blog.gaoredu.com/article/14fc3aae-f68b-4d33-a6db-d0d0d9736b98</link><guid isPermaLink="true">https://blog.gaoredu.com/article/14fc3aae-f68b-4d33-a6db-d0d0d9736b98</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Oct 2018 02:55:18 GMT</pubDate></item><item><title><![CDATA[【windows软件】精简小巧十分好用的绿色版马赛克小工具AddMscv3.0版]]></title><description><![CDATA[这是一个比较小巧的单纯用来打马赛克的小工具，完全绿色，



909
软件也是比较小巧的，只有300kb，适合一些电脑爱好者收藏的马赛克小工具。
接: https://pan.baidu.com/s/1qbwsVgTpVnVk9nncghcxZw 密码: vcu2

]]></description><link>https://blog.gaoredu.com/article/13f6a212-3126-4636-9d5c-a9ab21b11c3b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/13f6a212-3126-4636-9d5c-a9ab21b11c3b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 25 Oct 2018 03:05:59 GMT</pubDate></item><item><title><![CDATA[【CSS布局】实现DIV盒子固定（固定高度或宽度）布局的三种实现思路分析]]></title><description><![CDATA[对于一个盒子，不管这个盒子里面的内容有多少，但是要保证盒子里的内容始终在原来的位置，经过总结，有如下几种实现思路
1. 使用定位的方式（子绝父相定位）
【解决方法1】：内部的盒子使用绝对定位的方式，外部的盒子使用相对定位的方式
    .parent {
        position: relative;
    }
    .child {
        // 定位之后就可以随便设置子盒子的位置了
        position: absolute;
        bottom: 0px;
        right: 0px;
    }

【解决方法二】：使用flex 的布局方式，使用垂直方向贴边的对齐方式就可以解决
// 为了实现盒子里面的内容垂直方向贴边对齐，可以有两种解决方案
            display: flex;
            flex-direction: column;
            justify-content: space-between;
            // 为了防止盒子的图片加载速度不能正确显示，需要设置一个最小的高度
            min-height: 250px;


【解决方法三】：通过空白数据填充的方式，也就是即使没有数据，但是可以造出来一些空白数据，类似于下面的这种。


<c:when test="${message.id == null}">
                                                    <%--<tr style="border: 0px;">
                                                        <td style="border: none">  </td>
                                                        <td style="border: none">  </td>
                                                        <td style="border: none">  </td>
                                                        <td style="border: none">  </td>
                                                    </tr>--%>
                                                </c:when>

]]></description><link>https://blog.gaoredu.com/article/a75e82ef-da12-45e9-9eac-9106c23e1e8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a75e82ef-da12-45e9-9eac-9106c23e1e8d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 25 Oct 2018 02:54:55 GMT</pubDate></item><item><title><![CDATA[【浏览器插件】一款可以高效进行网站技术分析的Wappalyzer插件]]></title><description><![CDATA[Wappalyzer是一个谷歌浏览器进行网站分析的插件：可以揭示网站上使用的技术、同时也可以检测分析工具、网络框架，服务器软件，是一款比较好用的网页分析软件。。


908


谷歌商店插件下载地址：
https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg




如果进不去的话，可以试试这个谷歌镜像的网站：
https://www.gugeapps.com/new

]]></description><link>https://blog.gaoredu.com/article/0e22d272-d63a-48e8-9417-1a9197ae3a1b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0e22d272-d63a-48e8-9417-1a9197ae3a1b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 23 Oct 2018 02:58:22 GMT</pubDate></item><item><title><![CDATA[【黑科技】开发一个可以根据IP地址获取IP归属详细地址的黑科技软件]]></title><description><![CDATA[1. 需求其实很简单，就是开发一个可以获取IP地址的工具，实现方式1就是利用一些现有的接口进行获取，这种方式就是简单快捷，比如可以使用淘宝的接口：http://ip.taobao.com/service/getIpInfo.php?ip=， 后面跟上你的IP地址就行

实现的java的代码如下，基本上传入你的IP地址就可以了。
  /**
     * 发送http请求
     * @param url
     * @param content
     * @return
     */
    public static Map<String, Object> request(String url, String content) {
        Map<String, Object> result = new HashMap<String, Object>();
        String errorStr = "";
        String status = "";
        String response = "";
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            HttpURLConnection httpUrlConnection = (HttpURLConnection) conn;
            // 设置请求属性
            httpUrlConnection.setRequestProperty("Content-Type", "application/json");
            httpUrlConnection.setRequestProperty("x-adviewrtb-version", "2.1");
            // 发送POST请求必须设置如下两行
            httpUrlConnection.setDoOutput(true);
            httpUrlConnection.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(httpUrlConnection.getOutputStream());
            // 发送请求参数
            out.write(content);
            // flush输出流的缓冲
            out.flush();
            httpUrlConnection.connect();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                response += line;
            }
            status = new Integer(httpUrlConnection.getResponseCode()).toString();
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常！" + e);
            errorStr = e.getMessage();
        }
        // 使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) { out.close();}
                if (in != null) {in.close();}
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        result.put("errorStr", errorStr);
        result.put("response", response);
        result.put("status", status);
        return result;

    }

    /**
     * 通过接口获取IP地址
     * @param ip
     * @return
     */
    public static String getLocationByIP(String ip){
        String taobao_server = "http://ip.taobao.com/service/getIpInfo.php?ip="+ip;
        Map<String, Object> objectMap = request(taobao_server, "");
        // 转换为json对象
        String status = objectMap.get("status").toString();
        if (status.equals("200")) {
            Object data = objectMap.get("response");
            JSONObject jsonObject = JSONObject.fromObject(JSONObject.fromObject(data).getString("data"));
            String country = jsonObject.get("country").toString();
            String region = jsonObject.get("region").toString();
            String city = jsonObject.get("city").toString();
            String isp = jsonObject.get("isp").toString();
            String address = country + region+ city + isp;
            return address;
        } else {
            return "未知地址";
        }

    }


2.第二种方法，http://update.cz88.net/soft/setup.zip，到这个网站去下载一个IP地址库，然后到处为一个txt文件，最后通过Navicat等工具直接把数据导入到数据库，最后通过数据查询到 方式来获取IP，这种方式相对来说要更加高效了，基本上也不用受网络因素的影响。所以推荐大家使用第二种，当然如果只是进行测试使用，使用第一种也是更方便些。

]]></description><link>https://blog.gaoredu.com/article/f2c9c18a-d9a6-4e1e-9219-fcd7550bdb83</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f2c9c18a-d9a6-4e1e-9219-fcd7550bdb83</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 22 Oct 2018 02:59:08 GMT</pubDate></item><item><title><![CDATA[【C++游戏开发实战】2018最新的C++系列黑客攻防安全网络工程师全套视频教程完整版]]></title><description><![CDATA[

20160908_游戏服务器开发必备神技-网络模型_蔡老师
20160625_内存管理之引用计数_蔡老师
20160618_内存池的设计与实现_蔡老师
20160306_逆向屠龙刀入手式 - Ollydbg使用入门_左手
20160114_游戏地图编辑器_蔡老师
20160109_PEB进程防护_左手
2015_09_11_hu_函数指针与回调函数
2015_09_06 文件隐藏至BMP位图中
2015_05_06_GameRobot
20151226_自动秒杀外挂_左手
20151217_进程隐藏_左手
20151215_游戏中的寻路算法_蔡老师
20151211_MMORPG炼成记_蔡老师
20151203_远程监听_左手
20151128_管道通信_左手
20151124_开发游戏服务器_蔡
2015-7-29 网站文件嗅探之文件下载
2015-7-28 网站文件嗅探
2015-12-22 国际互联网IP追踪系统
2015-09-13开发第一个病毒
2015-09-12最容易的注入
2015-09-10游戏修改器
2015-08-29 网络服务器开发-EventSelect模型开发实战
2015-08-27 打造抓包工具
2015-08-26 扫雷外挂
2015-08-13 栈的应用之表达式求值
2015-08-12 木马行为初探
2015-08-11 base64编码解码
2015-07-31 网络主机通信进阶
2015-07-30 网络通信编程
2015-07-24约瑟夫问题及链表解决方案
2015-07-22_文件的加密与解密
2015-07-14_C++函数指针
2015-07-11_C++解密
2015-07-09_Windows的秘密,程序员的宝库
2015-07-04_文件生成器
2015-07-02_进程管理模块
2015-06-26_超级终端
2015-06-23远程关机,无限关机,远程shell
2015-06-17_指针揭秘
2015-06-05_内存泄露
2015-05-08_注入
2015-04-27_2小时打造MUD游戏
2015-04-25_价值5000的项目_网吧去广告器
2015-04-23_游戏登录器
2015-04-18_Windows消息机制_窗口
2015-04-15_你不能不知的Hook
2015-04-14_Mark游戏修改器
2015-04-07_搭建社工系统
2015-04-06_Windows核心编程II
2015-04-03window核心编程思想
2015-04-02-WinSocket
2015-03-26反外挂系统
2015-03-25Hook及注入
2015-03-24内存修改器
2015-03-23调戏QQ，让QQ无法登陆
2015-03-21木马那点事,开机启动，下载者，远程后门
2015-03-20键盘记录器
2015-03-17飞鸽传书-多线程高速上传下载系统
2015-03-16黑客是怎么炼成的
搭建社工系统.flv
VS2013安装视频.flv
IAT HOOK.avi
20160616_winpcap原始网络数据包监听_左手.mp4
20160614_原始网络连接_蜜罐_左手.mp4
20160303_游戏外挂基础之输入表HOOK_左手.avi
2015_09_15_hu_多线程扫描编程.flv
2015-11-10_左_UDP打洞原理及实现.avi
2015-11-03_左_编写自己的调试器.avi
2015-10-23_左_非注入添加区段并写入shellcode.avi
2015-10-11windows平台游戏外挂开发基础.avi
2015-10-06缓冲区溢出攻击之SDemo.avi
2015-09-17双进程守护.avi
1_基本概念_左手.mp4






下载链接：

https://pan.baidu.com/s/1mhEpgfu ... B%E5%BC%80%E5%8F%91



C++游戏开发也推荐几个教程：
【游戏开发】玩转C++系列教程之COCOS2D游戏项目实战
https://www.52tech.tech/forum.php?mod=viewthread&tid=65&fromuid=1
(出处: 我爱科技论坛)





【后台进阶】搞定C++游戏编程，这套猎豹网校2018最新视频教程就够了
https://www.52tech.tech/forum.php?mod=viewthread&tid=892&fromuid=1
(出处: 我爱科技论坛)





c++中国象棋实战（大师带你4天开发出一个企业版的中国象棋游戏）
https://www.52tech.tech/forum.php?mod=viewthread&tid=18&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/dded5bcd-162d-428a-a5d6-ea24391994d7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dded5bcd-162d-428a-a5d6-ea24391994d7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Oct 2018 03:14:46 GMT</pubDate></item><item><title><![CDATA[【后台进阶】2018最新IOS架构+底层开发+反编译技术全套视频教程]]></title><description><![CDATA[总共分为三个章节，涉及到IOS开发的方方面面，

链接：https://pan.baidu.com/s/1phKASkRTFQ1JBjuZV_v9-w 密码：kehw
其次这个是尚硅谷大数据：
01_尚硅谷大数据技术之Linux
02_尚硅谷大数据技术之Hadoop
03_尚硅谷大数据技术之Zookeeper
04_尚硅谷大数据技术之Hive
05_尚硅谷大数据技术之Sqoop
06_尚硅谷大数据技术之Flume
07尚硅谷大数据技术之Oozie
08_尚硅谷大数据技术之HBase
09_尚硅谷大数据技术之Kafka



链接: https://pan.baidu.com/s/1Q8I0_1RmVegSVWSJdZCLQg 密码: tvv8


]]></description><link>https://blog.gaoredu.com/article/7577b7d2-f96f-465e-a5f3-19764e45883a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7577b7d2-f96f-465e-a5f3-19764e45883a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Oct 2018 20:55:53 GMT</pubDate></item><item><title><![CDATA[【Eclipse快捷键】让你的开发速度大幅提高的常用开发快捷键总结]]></title><description><![CDATA[主要快捷键的使用（适用于Eclipse开发工具）
## 
# 运行程序： CTRL + R
# 提示补全： ALT + /
# 向下复制一行： CTRL + ALT + DOWN
# 移动代码：ALT +  方向键
# 回车换行： SHIFT(CTRL) + ENTER
# 查看源码： CTRL + SHIFT + ENTER
# 前进/回退： ALT + 左右按键
# 查看继承关系： F4
# 格式化代码： CTRL + SHIFT + F
# 提示方法的参数类型： CTRL + ALT + /
# 查看类的结构：CTRL + O / ctrl + shift + u(图表展示)
# 修改变量名和方法名： ALT + SHIFT + R
# 生成构造器： ALT + SHIFT + S
# 生成try catch： ALT + SHIFT + Z
# 局部变量抽取为成员变量			alt+shift+f
# 抽取方法(Extract Method)					alt+shift+m
# 快速搜索类中的错误(next highlighted error)			ctrl + shift + q
# 查找方法在哪里被调用(Call Hierarchy)				ctrl+shift+h

主要模板快捷键的使用（适用于IntelIEDA这个开发工具）
## 主要模板的使用
# psvm          public static void main
# sout          system.out.println()
# fori / iter / itar   for(int i = 0; i < len;  i++)
# list.for / list.fori / list.forr   顺序，倒序
# ifn/ inn   / arr.nnn / arr.null                        等于/不等于null                             
# prsf  / psf / psfs / psfi             private static final a = 10 
 
]]></description><link>https://blog.gaoredu.com/article/e25a4f3a-77dc-47dc-9d77-4edc4802a657</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e25a4f3a-77dc-47dc-9d77-4edc4802a657</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 16 Oct 2018 03:16:03 GMT</pubDate></item><item><title><![CDATA[【java架构师】2018最新打造从菜鸟到java架构师的高级编程之路实战视频教程]]></title><description><![CDATA[分为入门，进阶、高级和架构师四个模块，建议循序渐进学习，
本部分教程由慕课大巴收集整理，慕课大巴是一个教程分享社区
----------------------------------------------------------


【入门篇】
J2SE的Socket网络编程应用
J2SE的反射机制高级应用
J2SE高深讲解
JAVA编程思想 中级教程
JAVA编程思想 初级教程
JAVA编程思想 高级教程
基于J2SE的QQ聊天工具开发
我来说说面向对象


【进阶篇】
CRM项目
Eclipse
Hibernate
JAVA WEB开发视频
JAVAWEB开发实战经典-高级案例篇
JAVAWEB
JAVA线程并发教程
java网上在线支付实战视频
java设计模式
jdbc
junit
mybatis
spring mvc
SpringMvc+Spring+MyBatis+Maven整合视频
SpringMVC
Spring
Struts2 开发实战讲解
Struts2+Spring3+Hibernate4+Maven+EasyUI整合入门视频
Struts
SVN 
tomcat
weblogic
WebService从入门到上手企业开发
企业系统OA办公自动化
手机进销存系统
数据结构和算法视频
设计模式系列


【高级篇】
Cas单点登录
Extjs4.1+Spring3.2+hibernate4.1+MySql5商城
Git权威指南
groovy入门视频
Java 8新特性
Lucene
Mongodb
node.js
Nutch相关框架
OA办公自动化系统
Quartz Job定时任务
Solr高级应用视频
Spring Security权限控制
Spring源码解读与设计详析
Struts2源码剖析与架构指导
大型CMS内容管理系统项目
微信入门视频
深入JVM内核—原理、诊断与优化
深入浅出微信公众平台实战开发（微网站、LBS云、Api接口调用、服务号高级接口）
银行接口资料


【架构篇】
ActiveMQ实战
Apache-Tomcat集群搭建
Linux集群
Linux高级架构架构方案及实现指南
Memcached分布式集群
Mysql特级优化课程
Nginx+Tomcat+Memcached群集配置软件包
Nginx服务器搭建
Nginx网站架构实战（Web服务器负载均衡与反向代理）
SOA Dubbo
storm入门到精通
storm集群的搭建
storm项目实战
UML建模
互联网公司技术架构系列
京东B2C平台推荐搜索的实践和思考
京东大数据分析与创新应用
京东大规模存储持续研发
京东电商海量订单处理OFC系统的关键技术
优米网架构设计方案
基于SOA 思想下的百万数据架构
大型网站提速之MySQL优化
大型网站架构设计
大数据高并发架构实战案例
数据优化技术Redis
数据库高并发原理
深入Java程序性能调优
深入浅出MongoDB应用实战集群及系统架构
深度揭秘服务器端内幕
电商网站之Solr应用
系统架构设计师
阿里分布式数据库服务实践



链接：https://pan.baidu.com/s/1SYe685a_5fgQDvJeDHpjLA 密码：soxf




此外还可以看看下面这几个：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.php?mod=viewthread&tid=20&fromuid=1
(出处: 我爱科技论坛)



【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1

【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1

【java架构师】2018最新打造从菜鸟到java架构师的高级编程之路实战视频教程
https://www.52tech.tech/forum.ph ... d=796&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/cc9de1a5-f428-4bed-98a3-1c94b52659f4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cc9de1a5-f428-4bed-98a3-1c94b52659f4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 14 Oct 2018 01:25:59 GMT</pubDate></item><item><title><![CDATA[【黑科技】轻松使用一个DOS命令快速获取局域网所有电脑的Mac地址和IP地址]]></title><description><![CDATA[第一步：使用Windows+R快捷键，调出运行窗口，输入CMD，就可以进入电脑的DOS控制台注意，请使用管理员启动CMD , 否则可能会在后续的操作中出现权限不足的情况。

905



第二步：输入命令
arp -a


这个命令输入后回车就可以获得局域网内所有与本机通信的电脑IP地址
906




第三步：通过命令
ipconfig /all 


可以获取我自己的电脑的IP地址以及电脑的MAc物理地址信息
907




下面是一个快速扫描局域网IP的bat文件：


@echo off
FOR /L %%I in (1,1,255) do ping 192.168.1.%%I -n 1 -w 100
arp -a >D:\mac.txt
exit




使用方法，将上面的代码保存成为一个bat文件（先新建一个记事本txt文件,然后修改文件后缀名称为.bat, 文件名字可以随意），然后保存后双击这个文件就可以启动，从而实现一键扫描局域网的所有IP地址和NAC地址了。





]]></description><link>https://blog.gaoredu.com/article/efda966e-bf71-460f-8eed-86c8f357133a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/efda966e-bf71-460f-8eed-86c8f357133a</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 13 Oct 2018 03:39:21 GMT</pubDate></item><item><title><![CDATA[【VIP影院】电视剧《创业时代》免会员免广告在线免费观看]]></title><description><![CDATA[主演: 黄轩 / 杨颖 / 周一围 / 宋轶 / 啜妮 / 更多...
类型: 剧情 / 爱情
上映时间: 2018-10-12(中国大陆)


904


剧情描述：
在一次偶然的机会中，软件工程师郭鑫年找到了新的灵感，他决心开发一款新的手机通讯软件，可以将手机短信以语音的形式在用户之间传送，这个想法让郭鑫年激动不已，他怀着一腔热血，走上了创业之路……


网友评价：
刚看了《创业时代》的第一集。
baby一出来，就直接让人跳戏。仿佛看到跑男里的baby正儿八经地在演戏，说不出的尴尬。
baby出会议室走出来的样子，没一点儿白领应该有的知性优雅气质。失望。


我爱科技论坛VIP在线影院在线观影地址（免VIP，免广告入口）：
http://vip.52tech.tech/play/v_19rr5ez0zg.html






]]></description><link>https://blog.gaoredu.com/article/70e2a791-2212-4541-b0d2-19fe3f0acb7d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/70e2a791-2212-4541-b0d2-19fe3f0acb7d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 13 Oct 2018 02:50:15 GMT</pubDate></item><item><title><![CDATA[【java项目】从SSM到Spring Boot-从零开发校园商铺平台视频教程]]></title><description><![CDATA[慕课网的经典项目实战视频教程：


第9章 前端展示系统
第8章 商品模块
第7章 商品类别模块
第6章 店铺编辑和列表功能
第5章 主从库同步与读写分离
第4章 店铺注册功能模块
第3章 Logback配置与使用
第2章 项目设计和框架搭建
第1章 开发准备
第16章 课程总结
第15章 前端展示系统增强和超级管理员模块
第14章 店家管理系统增强
第13章 框架大换血
第12章 项目2.0设计
第11章 我们可以做得更好
第10章 阿里云部署及远程微信开发调试心得与技巧





链接: https://pan.baidu.com/s/1gg1JEt9 密码: quy8




再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/c84a469d-ede0-4a53-af32-31d0a7b3d94c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c84a469d-ede0-4a53-af32-31d0a7b3d94c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 11 Oct 2018 02:29:17 GMT</pubDate></item><item><title><![CDATA[【java教程】java就业班全套共85天课程全套视频教程完整版]]></title><description><![CDATA[1-反射与枚举
10-cookie和session原理
11-session和转发
12-JavaBean和jsp中文乱码
14-EL与jsp自定义标签-上
15-EL与自定义标签-下
16-EL与JSTL标签练习
17-mysql与jdbc入门
18-JDBC高级查询与事务
19-JUNIT与连接池与jdbc综合
2-注解与XML
20-dbutil与连接池
21-分页查询
22-过滤器与session加强
23-监听器与装饰模式
24-上传下载与国际化
25-web整合与异常处理
26-JavaMail
28-购物车下与报表
29-反射与动态代理与转换器与注解
30-struts-1.3-入门
31-struts-1.3标签与JFreeChart报表
32-struts-1.3综合应用
33-javaScript复习
34-Ajax入门
35-jQuery入门
36-jQuery和AJAX集成
37-Oracle安装与管理
38-分组函数与多表连接
39-视图与约束与TOP分析
40-触发器与PLSQL编程与序列
41-hibernate入门
42-hiernate一对多与多对一以及检索策略
43-批量检索与二级缓存
44-UML
45-Lucene
46-Lucene与Compass实例
47-SVN与CVS
48-OA_1


2018传智最新java教程 :  https://pan.baidu.com/s/1bp0gNXP#list/path=%2F  密：ii5w



再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1



]]></description><link>https://blog.gaoredu.com/article/7c20f797-5813-4d2a-b938-0a25462abb9a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7c20f797-5813-4d2a-b938-0a25462abb9a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 10 Oct 2018 21:25:19 GMT</pubDate></item><item><title><![CDATA[【C语言入门】适合初学者入门的全国各大高校的C语言全套系列入门视频教程]]></title><description><![CDATA[小鱼C语言1-2.rar
小鱼C语言1-1.rar
石油大学C语言33讲.rar
吉大C2.rar
吉大C1.rar
郝斌C2.rar
郝斌C1.rar
边用边学C语言视频教程.rar
Linux下C语言编程入门.rar
C语言题目精讲.rar
C语言程序设计视频教程.徐红波.rar







链接：https://pan.baidu.com/s/11TRvuZJ2DOdlR4CHZst6lQ 密码：6r55




]]></description><link>https://blog.gaoredu.com/article/6d7b3373-0903-4107-bf5e-667da8c40bf0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6d7b3373-0903-4107-bf5e-667da8c40bf0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Oct 2018 02:45:37 GMT</pubDate></item><item><title><![CDATA[【考研英语】2019最新考研英语备考附加资料之新概念英语全套视频教程完整版]]></title><description><![CDATA[
英孚英语培训系列教程
音标发音讲解视频
新概念第一册
新概念第四册
新概念第三册
新概念第二册
谢孟媛发音篇
百词斩象形9000


链接: https://pan.baidu.com/s/1jHFkNm2 密码: 2hjw
]]></description><link>https://blog.gaoredu.com/article/07a5c497-d6c8-4f31-84d6-2e447fd71c68</link><guid isPermaLink="true">https://blog.gaoredu.com/article/07a5c497-d6c8-4f31-84d6-2e447fd71c68</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Oct 2018 02:38:10 GMT</pubDate></item><item><title><![CDATA[【面试宝典】2020最新Java程序员面试宝典系列套题]]></title><description><![CDATA[主要收集的还是一些java基础知识面试题：包括一个面试宝典和java程序员系列总结的相关知识点：


java面试宝典: https://pan.baidu.com/s/1kXgRNF5 密码：nvs9

java面试题整理: https://pan.baidu.com/s/1kW8vVuB 密码：pvkc
]]></description><link>https://blog.gaoredu.com/article/79fda576-6786-43c1-b486-6c89e99fa54b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/79fda576-6786-43c1-b486-6c89e99fa54b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 07 Oct 2018 03:10:48 GMT</pubDate></item><item><title><![CDATA[【web前端】2018最新适合初学者的HTML入门视频教程]]></title><description><![CDATA[HTML5入门视频教程：第一章，概论
HTML5入门视频教程：第五章，CSS3应用plus
HTML5入门视频教程：第四章，CSS3应用
HTML5入门视频教程：第三章，标签、页面结构和表
HTML5入门视频教程：第六章，实例讲解
HTML5入门视频教程：第二章，工具及资料




下载链接：链接: https://pan.baidu.com/s/1hszFNKS 密码: 9pw6
]]></description><link>https://blog.gaoredu.com/article/b44454c6-1458-45b0-a2f9-9354703a1f17</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b44454c6-1458-45b0-a2f9-9354703a1f17</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 04 Oct 2018 03:58:09 GMT</pubDate></item><item><title><![CDATA[【Go语言】 全网最经典的Go语言经典实战视频教程（入门+进阶）]]></title><description><![CDATA[全套视频教程总共分为12个章节，每隔章节都由浅到深，带你快速入门到进阶Go语言：
900
01 Go语言编程自学基础入门
02 Go语言实战开发一个WEB项目博客系统
03 Google资深工程师深度讲解Go语言(2018年1月更新)
04 20小时快速入门go语言视频（2018年2月更新）
05 基于Golang协程实现流量统计系统（2018年3月更新）
06 Go语言入门到实战视频教程
07 Go语言打造区块链（2讲）
08 GopherChina 2017 大会(PPT)
09 GO语言实战(电子书+源码)
10 老男孩教育Go语言第一期(2018年4月更新)
11 Go语言开发微信公众号【加密】（2018年4月更新）
12 公开课


视频教程下载链接：
链接: https://pan.baidu.com/s/1VKFCwG-GlRf04fHWP3TIiQ 
密码: ziih
]]></description><link>https://blog.gaoredu.com/article/ea06200f-bac5-456b-a664-6faeb7ccdcaa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ea06200f-bac5-456b-a664-6faeb7ccdcaa</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 02 Oct 2018 23:28:12 GMT</pubDate></item><item><title><![CDATA[【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程]]></title><description><![CDATA[java高并发，打造重量级服务器及性能优化视频教程目录：
第1章-课程介绍及项目框架搭建
第2章-实现用户登录以及分布式session功能
第3章-秒杀功能开发及管理后台
第4章-秒杀压测-Jmeter压力测试
第5章-页面级高并发秒杀优化（Redis缓存+静态化分离）
第6章-服务级高并发秒杀优化（RabbitMQ+接口优化）
第7章-图形验证码及恶意防刷
第8章-课程总结及重难点回顾




 视频下载链接：  https://pan.baidu.com/s/1-myzErvRzU4UFb4FhU0pXw  提取码： siji     



再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1



]]></description><link>https://blog.gaoredu.com/article/8825c6fe-00e2-4589-bb76-f6766cb1c978</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8825c6fe-00e2-4589-bb76-f6766cb1c978</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 02 Oct 2018 23:20:35 GMT</pubDate></item><item><title><![CDATA[【Vue笔记】使用Vue实现的简单的时间日期格式过滤器]]></title><description><![CDATA[HTML部分：
<table class="table table-bordered table-hover table-striped">
        <thead>
        <tr>
            <td>ID</td>
            <td>NAME</td>
            <td>CTIME</td>
            <td>OPERATION</td>
        </tr>
        </thead>
        <tbody>
        <!--加上冒号表示实际上是一个值
        这里自定义了一个search方法，把所有的关键字，通过传参的方式，传递给了search方法
        -->
        <tr v-for="item in search(keyword)" :key="item.id">
            <td>{{item.id}}</td>
            <td v-text="item.name"></td>
            <td>{{item.ctime | dateFormat('yyyy-mm-dd')}}</td>
            <td><a href="#">删除</a></td>
        </tr>
        </tbody>
    </table>

JavaScript部分：
 // 定义一个全局过滤器
    Vue.filter('dateFormat', function (dataStr, patten) {
        // 根据给定的时间字符串，得到一个特定的时间
        var dt = new Date(dataStr);

        // yyyy-mm-dd
        var y = dt.getFullYear();
        // 由于month 是从0开始的，这里需要初始化
        var m = dt.getMonth() + 1;
        var d = dt.getDate();


        if (patten.toLowerCase() === 'yyyy-mm-dd') {
            // 这里也可以直接使用模板字符串
            return y + '-' + m + '-' + d;
        } else {
            var hh = dt.getHours();
            var mm = dt.getMinutes();
            var ss = dt.getSeconds();
            return y + '-' + m + '-' + d + hh + ':' + mm + ':' + ss;
        }
    });]]></description><link>https://blog.gaoredu.com/article/246eef33-fe22-4efd-9c40-eca158c5c57e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/246eef33-fe22-4efd-9c40-eca158c5c57e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 02 Oct 2018 21:38:35 GMT</pubDate></item><item><title><![CDATA[【考研资料】电子科技大学2019考研专业课资料大全（试题+答案）]]></title><description><![CDATA[无机化学2010
数学分析2010
地理信息系统基础2010答案
二外德语2010答案
思想政治教育原理2010答案
管理学原理2010答案
二外日语2010
244二外英语2010
心理学综合2010
马克思主义基本原理2010答案
线性代数2010
信号与系统和数字电路2010
日语水平测试2010及答案
宪法学2010
英美文学基础知识及应用2010
固体物理2010
国际政治学与国际组织2010
电磁场与电磁波2010答案
无机化学2010答案
控制工程2010答案
815电路分析基础2010
测试技术基础2010
计算机专业基础2010
二外德语2010
二外法语2010
生理学2010
数字图像处理2010答案
大学物理2010
物理光学2010
战后国际关系史2010答案
物理化学2010答案
行政管理综合2010
大学物理2010答案
288英语2010答案
光学基础2010
金融学基础2010
电磁场与电磁波2010
电力电子技术2010
模拟电路与数字电路2010
控制理论与工程基础2010答案
地理信息系统基础2010
数字电路2010
813电磁场与电磁波2010
物理化学2010
688高等数学2010答案
微电子器件2010
理论力学2010答案
电子材料2010
理论力学2010
新闻传播实务2010答案
日语专业基础知识及运用2010
控制工程2010
811大学物理答案2010
微电子器件2010答案
612高等数学2010
数学分析2010答案
通信与信号系统2010
688高等数学2010
自动控制原理2010
生物化学2010
811大学物理2010
测试技术基础2010答案
模拟电路2010答案
遗传学2010答案
数字图像处理2010
288英语2010
分子生物学2010答案
数字电路2010答案
经济学基础2010答案
信号与系统2010答案
管理学原理2010
二外日语2010答案
信号与系统和数字电路2010答案
模拟电路2010
自动控制原理2010答案
电力电子技术2010答案
日语水平测试2010
密码学基础与网络安全2010答案
经济学基础2010
英语水平测试2010答案
行政法与行政诉讼法2010
英语语言学基础及运用2010答案
宪法学2010答案
电路分析基础2010
新闻传播理论2010
国际政治学与国际组织2010答案
物理光学2010答案
生理学2010答案
计算机专业基础2010答案
电子材料2010答案
心理学2010
新闻传播理论答案2010
英语语言学基础及运用2010
战后国际关系史2010
密码学基础与网络安全2010
模拟电路与数字电路2010答案
英语水平测试2010
二外法语2010答案
行政法与行政诉讼法2010答案
日语专业基础知识及运用2010答案
思想政治教育原理2010
固体物理2010答案
612高等数学2010答案
遗传学2010
线性代数2010答案
马克思主义基本原理2010
分子生物学2010
政治理论2010及答案
行政管理综合2010及答案
英美文学基础知识及应用2010答案
813电磁场与电磁波2010答案
固体电子器件2010
生物化学2010答案
光学基础2010答案


链接: https://pan.baidu.com/s/1Edzz4Q9uz9GZXlj-jSYKGA 提取码: j7g8

]]></description><link>https://blog.gaoredu.com/article/5fd8ab35-d120-4ddf-b773-94d379aef03e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5fd8ab35-d120-4ddf-b773-94d379aef03e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 02 Oct 2018 02:50:35 GMT</pubDate></item><item><title><![CDATA[【原创资料】会声会影直接用多帧flash素（透明特效素材）]]></title><description><![CDATA[烟花、鞭炮春节透明flash素材链接: https://pan.baidu.com/s/1NKn9d33v0nbEPSdE9hed6g 提取码: 94rj
透明FLASH链接: https://pan.baidu.com/s/1lhxrk-_khT4WXV9p0lezUQ 提取码: cecf
天女散花多帧透明flash（会声会影直接用）链接: https://pan.baidu.com/s/1vbsSFWRkdDkI75lr_DyB2g 提取码: ipjw
玫瑰链接: https://pan.baidu.com/s/1r5GrEvMM6WgoBM-JvFonwQ 提取码: 9cnu
精品多帧FLASH特效30个（会声会影直接用）链接: https://pan.baidu.com/s/1YZ-QkqIprtMqtBSqgRCHrw 提取码: njh4
精品动感相框链接: https://pan.baidu.com/s/1qCsXWcXr7fgmFjcrye3grg 提取码: zh86
荷花透明flash素材链接: https://pan.baidu.com/s/1h-O7zb-mniEOwBb0yNAWTw 提取码: a6qw
飞鸟系列透明flash素材链接: https://pan.baidu.com/s/1m9f8M0CcfHg1dYNuQ_b1AA 提取码: himd
多帧风景透明FLASH（会声会影直接用）链接: https://pan.baidu.com/s/1myYzDC12ywq2l3r7bmtVmA 提取码: enw7
284个FLASH动画链接: https://pan.baidu.com/s/1PKyXT5Dg0mT1bt01LOXdfg 提取码: 5tw1


]]></description><link>https://blog.gaoredu.com/article/1ca316fe-90b7-4040-a33c-69bb4d42e6b5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1ca316fe-90b7-4040-a33c-69bb4d42e6b5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 01 Oct 2018 02:55:09 GMT</pubDate></item><item><title><![CDATA[【通知公告】我爱科技论坛VIP影院上线的通知]]></title><description><![CDATA[目前我爱科技论坛上线了VIP影院模块，用户可以直接通过：http://vip.52tech.tech/地址直接访问。
目前论坛已经开通的主要功能如下：



用户主页的搭建：


实现了主页轮播图的显示和切换，用户可以从数据库中自由配置和切换轮播图的显示
实现了主页电影列表的显示：从数据库文件读取电影和电视剧列表信息并在前台显示



用户登录和注册页面的搭建：


实现了用户的登录和注册功能
用户注册和登录验证码提示功能



电影播放页面的搭建


对于其他页面的任意可以展现电影列表的页面，用户可以直接点击列表，直接进入播放页面
播放页面电影详细信息的展现
对于加载速度较慢的视频，用户可以自由切换播放接口进行加速
弹幕功能（特色功能）：类似于B站等其他视频网站的弹幕功能，用户在登录之后可以实现在线发言
用户可以在相应的播放页面查看其他用户已经发表的评论，同时也可以在登录之后自由发表评论
电影收藏和取消功能



用户中心的管理


对于已经注册的用户，实现用户基本信息的修改
用户密码的修改
用户评论记录的查看
用户收藏电影的查看和播放
用户登录日志的查看



电影搜索功能（特色功能）


实现了根据视频播放地址和视频名称全网视频的搜索和播放功能
实现了正在热映，即将上映和TOP250的电影列表的展示



其他


页面整体的风格模仿了Discuz等论坛网站的布局
网站首页的轮播图效果模仿了优酷、爱奇艺、腾讯视频等主流视频网站的轮播图效果
电影底部的的友情链接，使用了大部分网站的分栏布局，用户可以添加自己的QQ群以及微信公众号方便增加自己网站的人气
主要列表的分页功能，对于一些内容显示较多的不能再一页显示完整的页面，使用了ajax无刷新分页对数据进行多条展示，提高了用户的体验
目前主流浏览器中也做了相应测试，建议大家使用谷歌或者火狐浏览器，效果可能会更好


此外还包含了一些比较有意思的功能:
比如论坛首页轮播图效果，播放页面的弹幕功能……
899


电影首页模块：
电视剧首页：
895


电影播放页面：
896
电影评论及支持弹幕的页面：


897


电影搜索页面：基本上可以支持全网影视的搜索，并且无需开通VIP会员就可以直接在本站在线免费观看


898
基本上对论坛原有的模块：VIP视频抢先看进行了全面升级, 更多其他功能，欢迎所有用户访问。


在线观影地址：http://vip.52tech.tech/








]]></description><link>https://blog.gaoredu.com/article/c5cfa8b8-3692-475d-9fc1-fe92118defed</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c5cfa8b8-3692-475d-9fc1-fe92118defed</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 30 Sep 2018 21:32:09 GMT</pubDate></item><item><title><![CDATA[【通知公告】关于我爱科技论坛主要功能模块关联域名更新的通知]]></title><description><![CDATA[关于关联域名更新的通知：
为更加方便各位坛友访问我爱科技论坛的相关业务，我爱科技论坛工作人员近期对论坛的部分模块及网站的关联域名进行了升级处理，现将论坛主要模块的域名通知如下：
一、http://www.52tech.tech/      网站根域名
关键词：技术科技，资料共享，考研资料，经验分享，黑科技，开源软件
网站描述：我爱科技论坛，爱科技，更爱分享。致力于营造一个资源丰富、内容完善的大型网络学习交流资源共享平台！


二、http://music.52tech.tech/    我爱科技论坛音乐馆
关键词：我爱科技论坛,我爱科技音乐,我爱科技论坛在线音乐,在线音乐播放器,网易云音乐
网站描述：我爱科技论坛-在线音乐播放器，海量优质音乐资源与你共享




三、http://vip.52tech.tech/      我爱科技论坛VIP在线VIP影院
关键词：VIP视频,VIP影院,我爱科技影院,VIP视频免费看,VIP视频抢先看
网站描述：我爱科技论坛VIP影院-看VIP视频，就来找我






各位坛友需要使用相关模块的功能，请直接通过访问相关域名即可。

]]></description><link>https://blog.gaoredu.com/article/a93ba6c4-7f59-4a0c-86fe-3c5218c79c19</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a93ba6c4-7f59-4a0c-86fe-3c5218c79c19</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 28 Sep 2018 21:27:23 GMT</pubDate></item><item><title><![CDATA[【原创资料】适合做海报宣传栏的海报艺术字特殊字体]]></title><description><![CDATA[艺术字：链接: https://pan.baidu.com/s/1MtdPzlhKtE64PPBKjJylXg 提取码: m7bx
海报设计90款：链接: https://pan.baidu.com/s/1Vk0hLc3w3rPIhxA-EXW40w 提取码: 3e8d
海报艺术字排版视频教程：链接: https://pan.baidu.com/s/1RrGRUxW3jWNIjVD-IUU6qg 提取码: 34my
50款海报艺术字女装：链接: https://pan.baidu.com/s/1_LrjWdOXgXaO2RGvElUbGg 提取码: f5b6
]]></description><link>https://blog.gaoredu.com/article/9f9a1f61-fa80-47f6-b5c3-a285af30e767</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9f9a1f61-fa80-47f6-b5c3-a285af30e767</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 23 Sep 2018 03:11:07 GMT</pubDate></item><item><title><![CDATA[【java入门视频】24天搞定java基础知识（包含java基础，文件操作，网络编程三个部分）]]></title><description><![CDATA[学习Java的三步法，视频教程总共包括三个模块：
步骤一Java基本语法
步骤三 Java常用工具
步骤二 java面向对象


四、Java流程控制之选择控制
六Java数组
五Java流程控制之循环结构
二Java的常量与变量
三、Java运算符
七Java方法
一 Java初识




传智播客的基础版本的JAva视频教程：
https://pan.baidu.com/s/1pJsp571#list/path=%2F




慕课网的基础教程：
链接:https://pan.baidu.com/s/1yZiIZtgxAbc0G3GeqdTyZg  密码:1998




]]></description><link>https://blog.gaoredu.com/article/e9222123-4fe5-436a-b06c-9e8f6145d892</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e9222123-4fe5-436a-b06c-9e8f6145d892</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 22 Sep 2018 01:33:57 GMT</pubDate></item><item><title><![CDATA[【素材大全】价值万元的超精致的视频转场动画，FLASH，绚丽粒子转场效果素材]]></title><description><![CDATA[SWF透明素材：链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9




炫彩光影转场视频素材7个.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
星与光视频素材2个.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
新版花栗鼠婚礼片花.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
威力导演11教程.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
粒子转场+光效转场1.zip
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
粒子转场+光效转场.zip
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
蓝色光影转场视频素材5个.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
高清转场视频素材17个.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
高清粒子素材 经常看到的用于开场的粒子星光划圈.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
高清粒子闪光转场视频20个.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
高清金黄爱心片视频素材.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
高清黑底白色爱心正面冒出视频素材.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
高清白鸽组成心形再散去视频素材.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
分屏时间码滤镜.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
爆炸视频素材.zip
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
psd分层素材 新年晚会.rar
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9
5个杂乱的视频素材.zip
链接: https://pan.baidu.com/s/1dA7NhlMw1YbWXNdcIKU3xQ 提取码: bji9

]]></description><link>https://blog.gaoredu.com/article/8f5e6fb7-be5d-4979-8f3e-16306abea5d6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8f5e6fb7-be5d-4979-8f3e-16306abea5d6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 22 Sep 2018 01:16:17 GMT</pubDate></item><item><title><![CDATA[【视频素材】非常好看的水墨素材（适合转场或者制作一些比较炫的效果）]]></title><description><![CDATA[894


收藏的比较好的水墨素材，适合会声会影制作一些简单的视频，喜欢的话就拿走吧。
水墨素材1链接: https://pan.baidu.com/s/1ugIbT0xIWKL_Hkj011yezw 提取码: ekc4
水墨素材2链接: https://pan.baidu.com/s/1T9asjXqSJmIOrTNzU0OcaQ 提取码: dktg
水墨素材3链接: https://pan.baidu.com/s/1OpRTAw9QQrPZ8Qn6id2GIg 提取码: qk5h
水墨素材4链接: https://pan.baidu.com/s/1--lNdaN3elI6kE4Ghkp9ew 提取码: um6q
水墨素材5链接: https://pan.baidu.com/s/1SrxD_isCDgSJkW2SYvJCKQ 提取码: w555
水墨素材6链接: https://pan.baidu.com/s/1ALZUt4jMhBrK3GAYoXr2cg 提取码: 38b1
]]></description><link>https://blog.gaoredu.com/article/ba33df1b-cc77-4e8b-9a7e-b9028059d781</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ba33df1b-cc77-4e8b-9a7e-b9028059d781</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 20 Sep 2018 02:40:20 GMT</pubDate></item><item><title><![CDATA[【慕课教程】2018最新慕课网上价值上万元的程序员大牛内功全套修炼视频教程]]></title><description><![CDATA[

08 Python核心技术进阶训练篇
1-565个老男孩运维【28期最新完整】
100、Java秒杀系统方案优化 高性能高并发实战
12、程序猿的内功修炼，学好算法与数据结构
15、微信小程序入门与实战 常用组件API开发技巧项目实战
19、高性能可扩展MySQL数据库设计及架构优化 电商项目
27、ThinkPHP5.0正式版第二季：实战开发企业站【完结】
27、Thinkphp 5.0 仿百度糯米开发多商家电商平台
29、聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎
30、Angular 4.0从入门到实战 打造股票管理网站
34、ThinkPHP 5.0开发微信小程序商场打通全栈项目架构
3、前端到后台ThinkPHP开发整站
41、腾讯大牛亲授 Web 前后端漏洞分析与防御技巧
4、MySQL性能管理及架构设计
50、Python操作三大主流数据库
58、企业级刚需Nginx入门，全面掌握Nginx配置+快速搭建高可用架构
5、响应式开发一招致胜
65、让你页面速度飞起来 Web前端性能优化
68、360大牛带你横扫PHP职场 全面解读PHP面试
71、PHP开发高可用高安全App后端
72、看得见的算法 7个经典应用诠释算法精髓
80、PHP秒杀系统 高并发高性能的极致挑战（完整版）
81、Java开发企业级权限管理系统
83、Redis从入门到高可用，分布式实践
84、ES6+ 开发电商网站的账号体系 JS SDK
86、快速上手Linux 玩转典型应用
87、Python接口测试框架实战与自动化进阶
91、精通高级RxJava 2响应式编程思想
95、全面系统讲解CSS 工作应用+面试一步搞定
95、全面系统讲解CSS 工作应用+面试一步搞定(1)
98、BAT大牛亲授 基于ElasticSearch的搜房网实战
98、BAT大牛亲授 基于ElasticSearch的搜房网实战(1)
AngularJS全栈开发知乎
AngularJS全栈开发知乎(1)
MUI视频录制
Mysql DBA 运维
Mysql DBA 运维(1)
PHP+Ajax+jQuery网站开发项目式教程
PHP2015-Linux视频教程-video
PHP2015-Redis视频教程-video
shell高级【2016最新】
微信小程序商城构建全栈应用
微信小程序开发视频教程整理
慕K网-299元-基于Python玩转人工智能最火框架 TensorFlow应用实践
慕课网 PHP从基础语法到原生项目开发【完整版】
网易云python




视频教程下载链接：https://pan.baidu.com/s/1XoAy6VDSqWt5KGdjz3gGgw  密码: e3hs

]]></description><link>https://blog.gaoredu.com/article/a22bf93d-1be9-42f6-a3d9-8f57b9607a0d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a22bf93d-1be9-42f6-a3d9-8f57b9607a0d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 20 Sep 2018 02:21:47 GMT</pubDate></item><item><title><![CDATA[【黑科技】三种方法快速解决局域网内的ARP欺骗或ARP攻击的黑客]]></title><description><![CDATA[1. 什么是ARP？
ARP：是将IP地址通过广播（只能在一个网段里面广播，跨不了路由器）， 目标MAC地址是FF-FF-FF-FF-FF-FF，只要通信了，就会获取对方的MAC地址， 然后就会缓存在本地，下次就可以直接通过Arp –a 命令获取已经连接过的计算机的物理地址。

893
2.  常见的局域网内部ARP欺骗的工具有哪些？
目前用的比较多的是网络执法官和P2P终结者这两款软件，基本上是处于局域网中的电脑，通过这练个工具就可以实现局域网断网攻击，以及局域网流量监听的目的。
对于一般的小白来说，可能也不知道怎么办，今天就教大家下面几种方法，快速解决局域网攻击的问题。




解决方法一：直接输入DOS命令解决
arp -s 192.168.16.254 00-22-aa-00-22-aa
 "arp -d"是清除arp里面的缓存，arp是地址解析协议的简称。
"arp -s"是绑定安全网关的IP和MAC地址，例如将网关地址192.168.16.254的MAC地址为0022aa0022aa


网络执法官的实现原理：通过ARP欺骗修改了mac地址（只要有一边出现了错误的Mac地址，两台计算机之间就不能进行ARP欺骗了），因此就必须保证两台电脑之间的MAC地址都必须完全一致

解决方法二：基本原理和上面一样，只不过因为ARP缓存的MAC地址在每次重启电脑都会失效，这样我们每次重新启动电脑之后，都要去重新配置一下， 但就是有点麻烦了。1.    创建一个记事本文件，修改文件后缀名称为.bat，编辑内容为arp -s 192.168.16.254 00-22-aa-00-22-aa2. 运行 gpedit.msc（组策略编辑）， 设置为脚本自启动，选择刚才的文件bat即可，这样每次重启计算机都会自动运行我们自己定义的那个脚本文件，从而免去我们每次都要去配置的麻烦。

890






解决方案三：安装一个ARP防火墙，这里使用的是金山备课ARP防火墙，原理其实都差不多，只不过这个软件就可以直接使用图形化界面界面进行配置，相比上面的操作，这款软件使用起来就更加方便快捷了。
892




好了，以上三种方法基本上可以解决我们生活中常见的ARP攻击了，此外对于黑客攻击感兴趣的朋友也可以参见本模块的其他帖子，关于黑客攻击的相关视频教程也可以在本论坛搜索到，更多优质经验资源，请关注我爱科技论坛。


【KaliLinux渗透实战】使用ARPSpoof命令实现局域网断网攻击
http://www.52tech.tech/forum.php?mod=viewthread&tid=643&fromuid=1
(出处: 我爱科技论坛)



WEB渗透实战教程【包括无线网/KaliLinux系列教程】
http://www.52tech.tech/forum.php?mod=viewthread&tid=41&fromuid=1



]]></description><link>https://blog.gaoredu.com/article/a9347800-d528-4ad4-9fb5-7f30d9eaf075</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a9347800-d528-4ad4-9fb5-7f30d9eaf075</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 19 Sep 2018 02:40:52 GMT</pubDate></item><item><title><![CDATA[【Shiro框架】2018最新尚硅谷Shiro视频教程完整版]]></title><description><![CDATA[1. 尚硅谷_Shiro_简介.avi
10. 尚硅谷_Shiro_密码的比对.avi
11. 尚硅谷_Shiro_密码的MD5加密.avi
12. 尚硅谷_Shiro_密码的MD5盐值加密.avi
13. 尚硅谷_Shiro_多 Realm 验证.avi
14. 尚硅谷_Shiro_认证策略.avi
15. 尚硅谷_Shiro_把 realms 配置给 SecurityManager.avi
16. 尚硅谷_Shiro_权限配置.avi
17. 尚硅谷_Shiro_授权流程分析.avi
18. 尚硅谷_Shiro_多 Realm 授权的通过标准.avi
19. 尚硅谷_Shiro_实现授权 Realm.avi
2. 尚硅谷_Shiro_HelloWorld.avi
20. 尚硅谷_Shiro_标签.avi
21. 尚硅谷_Shiro_权限注解.avi
22. 尚硅谷_Shiro_从数据表中初始化资源和权限.avi
23. 尚硅谷_Shiro_会话管理.avi
24. 尚硅谷_Shiro_SessionDao.avi
25. 尚硅谷_Shiro_缓存.avi
26. 尚硅谷_Shiro_认证和记住我的区别.avi
27. 尚硅谷_Shiro_实现Rememberme.avi
3. 尚硅谷_Shiro_集成 Spring.avi
4. 尚硅谷_Shiro_工作流程(1).avi
5. 尚硅谷_Shiro_DelegatingFilterProxy.avi
6. 尚硅谷_Shiro_权限 URL 配置细节.avi
7. 尚硅谷_Shiro_认证思路分析.avi
8. 尚硅谷_Shiro_实现认证流程.avi
9. 尚硅谷_Shiro_实现认证 Realm.avi





链接: https://pan.baidu.com/s/1hs4G1Mk 密码: t49b
]]></description><link>https://blog.gaoredu.com/article/1505a9b9-8b9d-4592-94e0-085cf67354c5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1505a9b9-8b9d-4592-94e0-085cf67354c5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 18 Sep 2018 20:37:10 GMT</pubDate></item><item><title><![CDATA[【Jetbrains破解】永久激活Jetbrains系列产品IDEA、webstorm、phpstorm、pycharm等...]]></title><description><![CDATA[第一步：http://idea.lanyus.com/去这个网站上面下载破解补丁，目前这个网站提供了下面三种补丁下载方式破解补丁无需使用注册码，下载地址：http://idea.lanyus.com/jar/JetbrainsCrack-3.1-release-enc.jar 
idea15-2018.1.5激活补丁：http://idea.lanyus.com/jar/JetbrainsCrack-2.10-release-enc.jar 
idea14 keygen下载地址：http://idea.lanyus.com/jar/JetbrainsPatchKeygen-1.2.1.jar
887
当然，进去的朋友会发现，这个网站里面也提供了注册码激活的方式，用户可以直接输入注册码就可以激活Jetbrains系列的所有产品了，基本上是通吃，但是需要注意的两点是
注意1：这种方法需要去本地电脑的hosts文件里面修改“0.0.0.0 account.jetbrains.com”
注意2：修改完毕host文件之后，务必更新一下DNS缓存，不然可能是没有效果的。
ipconfig /flushdns


执行完毕上面的命令，这个软件基本上就是激活完成了，一般是可以用个一年左右的，如果这不够的话，那就看第二种破解激活方法。




第二步：
1. 进入你的jetbrain的产品的安装目录下面，无论是IDEA、webstorm、phpstorm、pycharm等软件，基本上都会有Lib（不区分大小写）这个目录的，然后把你去百度云盘或者那个网站里面下载的jar包复制到这个文件夹里面（如果已存在的话，就直接替换即可）。
888


2.然后在进入到bin目录下面，找到这两个文件找到 软件名称.exe.vmoptions和软件名称64.exe.vmoptions（这里的软件名称就是你安装的软件的名字，安装的是啥，这里就会显示啥，比如是idea，那么就找到，idea.exe.vmoptions以及idea64.exe.vmoptions）这两个配置文件，鼠标右键选择记事本打开即可。


889


注意下面的这个就是和你刚才赋值的那个jar包文件完全一样，否则是不得行的。


-javaagent:D:\Develop\IntelliJ IDEA 15.0.6\bin\JetbrainsCrack-2.6.2.jar




下面就重启你安装的jetbrain公司的产品，之后就会出现激活的界面， 选择Activition code
ThisCrackLicenseId-{
"licenseId":"ThisCrackLicenseId",
"licenseeName":"www.52tech.tech",
"assigneeName":"",
"assigneeEmail":"www.52tech.tech@126.com",
"licenseRestriction":"For This Crack, Only Test! Please support genuine!!!",
"checkConcurrentUse":false,
"products":,
"hash":"2911276/0",
"gracePeriodDays":7,
"autoProlongated":false}






然后，不出差错的话，上面的黑科技软件就破解成功了。

]]></description><link>https://blog.gaoredu.com/article/05f58e16-089d-4d45-8a6b-9a60367dd9fa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/05f58e16-089d-4d45-8a6b-9a60367dd9fa</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 17 Sep 2018 02:54:23 GMT</pubDate></item><item><title><![CDATA[【大数据教程】2018最新整套Hadoop大数据+机器学习+人工智能实战视频教程]]></title><description><![CDATA[书籍：
数据挖掘概念与技术(中文版).pdf
神经网络与机器学习 原书第3版_PDF电子书下载 高清 带索引书签目录_sample.pdf
人工智能：一种现代方法 （第2版中文版）1.pdf
人工智能：复杂问题求解的结构和策略.pdf
机器学习实战.pdf
机器学习〔中文版〕.pdf
PYTHON自然语言处理中文版.pdf
hadoop权威指南第三版(原版).pdf
Hadoop权威指南(第2版).pdf
Hadoop技术内幕：深入解析YARN架构设计与实现原理.pdf
Hadoop技术内幕：深入解析Hadoop Common和HDFS架构设计与实现原理.pdf
Hadoop技术内幕 深入理解MapReduce架构设计与实现原理.pdf
hadoop大数据平台应用案例详细分析.pdf





视频目录：
【12】数据挖掘-聚类算法
【11】数据挖掘-分类算法
【10】数据挖掘-隐马+推荐算法-02
【09】数据挖掘-隐马+推荐算法 01
【08】数据挖掘-中文分词 02
【07】数据挖掘-中文分词 01
【06】NLP-文本相似度 02
【05】NLP-文本相似度 01
【04】系统架构 02
【03】系统架构 01
【02】常见业务详解
【01】前期铺垫 （必看）





链接:https://pan.baidu.com/s/1fbL8SOkVZAkf8KCslV8_JA?密码:15hy
]]></description><link>https://blog.gaoredu.com/article/2f79d110-1da6-47eb-8590-d8d91824df50</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2f79d110-1da6-47eb-8590-d8d91824df50</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 16 Sep 2018 02:49:59 GMT</pubDate></item><item><title><![CDATA[【安卓基础】基于Androidstudio的安卓从入门到精通全套视频教程]]></title><description><![CDATA[这个视频教程总共分为下面五个阶段， 基本上适合小白上手，包括有完整的项目案例和源码，最重要的是基于AndroidStudio这个工具进行开发的：
第一阶段：Android基础


第五阶段：Android应用（选修）


第四阶段：Android能力提升


第三阶段：Android高级应用


第二阶段：Android进阶




密码刮开涂层可见：
https://pan.baidu.com/s/1GeqyJJ5r6dfZwwscTRQqxw 密码：9527 










再分享几个站内的教程：
价值千元的最新版老罗安卓开发从零到精通实战视频教程（共两季）
https://www.52tech.tech/forum.ph ... id=21&fromuid=1
(出处: 我爱科技论坛)

【安卓基础】基于Androidstudio的安卓从入门到精通全套视频教程
https://www.52tech.tech/forum.ph ... d=767&fromuid=1
(出处: 我爱科技论坛)



10天带你Hode住安卓《智慧北京》项目项目实战视频教程
https://www.52tech.tech/forum.ph ... d=637&fromuid=1
(出处: 我爱科技论坛)



传智播客76期安卓视频教程分享
https://www.52tech.tech/forum.ph ... d=526&fromuid=1
(出处: 我爱科技论坛)
]]></description><link>https://blog.gaoredu.com/article/4a2da48f-c0e3-4c09-8b3f-c0de16cafd3c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4a2da48f-c0e3-4c09-8b3f-c0de16cafd3c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 15 Sep 2018 02:52:33 GMT</pubDate></item><item><title><![CDATA[【会声会影素材】非常好看的枫叶视频动画转场动画视频制作素材]]></title><description><![CDATA[
885


目前收藏的比较好看的枫叶视频素材，适合制作转场动画效果，感兴趣的朋友就直接下载吧。
链接: https://pan.baidu.com/s/1pOMAaHSa72oGDPL3_PEGTA 密码: zda3
链接: https://pan.baidu.com/s/1YzjEH98N7jLGwF3xmMiMAA 密码: yyt1
链接: https://pan.baidu.com/s/18xa8vQUbDmUrzS6TWs9NBQ 密码: jtw1
链接: https://pan.baidu.com/s/1kiL9ifHVSGvNS26T79xJKQ 密码: pyap
链接: https://pan.baidu.com/s/1Du_yiJ-N8K_YqaJVmlIZ5A 密码: 9ue6
链接: https://pan.baidu.com/s/1aym4_LUYrvwNMKBkHFOeJA 密码: f9qp
链接: https://pan.baidu.com/s/10UHdSIbaI0H4DuBTgB0NfQ 密码: eet2
链接: https://pan.baidu.com/s/1Ik13dSoD0TV9ZluNwoufMA 密码: tcyc
链接: https://pan.baidu.com/s/1XL-B-QvRmsvdwz4o29p66g 密码: p6xk
链接: https://pan.baidu.com/s/1DaLPv1cDNKhOcJoA0M0SFA 密码: 7mnx
链接: https://pan.baidu.com/s/186Xl1p3ST1Ueu4LcRRgtNg 密码: 57v2
]]></description><link>https://blog.gaoredu.com/article/618bef81-d381-4828-904b-484f5f283e99</link><guid isPermaLink="true">https://blog.gaoredu.com/article/618bef81-d381-4828-904b-484f5f283e99</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 14 Sep 2018 02:14:26 GMT</pubDate></item><item><title><![CDATA[2020最新适合小白进阶的java基础知识加强系列全套视频教程]]></title><description><![CDATA[1.ZZ-Java1707-Day01-01计算机基础(Av20176821,P1).Flv
10.ZZ-Java1707-Day03-01复习(Av20176821,P10).Flv
100.ZZ-Java1707-Day21-04FileReader和FileW(Av20176821,P100).Flv
101.ZZ-Java1707-Day21-05字符流和字节流选择以及歌词解析思(Av20176821,P101).Flv
102.ZZ-Java1707-Day22-01复习(Av20176821,P102).Flv
103.ZZ-Java1707-Day22-02字符缓冲流和StringAPI(Av20176821,P103).Flv
104.ZZ-Java1707-Day22-03字节缓冲流(Av20176821,P104).Flv
105.ZZ-Java1707-Day22-04JavaAPI串讲(Av20176821,P105).Flv
106.ZZ-Java1707-Day22-05JavaAPI串讲2+考试项目思(Av20176821,P106).Flv
107.ZZ-Java1707-Day23-01复习(Av20176821,P107).Flv
108.ZZ-Java1707-Day23-02成员内部类(Av20176821,P108).Flv
109.ZZ-Java1707-Day23-03局部内部类和匿名内部类(Av20176821,P109).Flv
11.ZZ-Java1707-Day03-02变量初步(Av20176821,P11).Flv
110.ZZ-Java1707-Day23-04自定义线程初识(Av20176821,P110).Flv
111.ZZ-Java1707-Day24-01歌词解析01(Av20176821,P111).Flv
112.ZZ-Java1707-Day24-02歌词解决Bug处理(Av20176821,P112).Flv
113.ZZ-Java1707-Day25-01线程常用方法和声明周期(Av20176821,P113).Flv
114.ZZ-Java1707-Day25-02同步代码块和死锁(Av20176821,P114).Flv
175.4M2018-06-16 06:00
115.ZZ-Java1707-Day25-03利用Runnable接口实现线程(Av20176821,P115).Flv
155.3M2018-06-16 06:00
116.ZZ-Java1707-Day25-04线程通讯生产者消费者问题(Av20176821,P116).Flv
121.5M2018-06-16 06:00
117.ZZ-Java1707-Day26-01复习(Av20176821,P117).Flv
34.4M2018-06-16 06:00
118.ZZ-Java1707-Day26-02IP地址解释(Av20176821,P118).Flv
117.9M2018-06-16 06:00
119.ZZ-Java1707-Day26-03UDP下的数据传递使用(Av20176821,P119).Flv
194.5M2018-06-16 06:00
12.ZZ-Java1707-Day03-03变量和运算符(Av20176821,P12).Flv
230.2M2018-06-15 08:03
120.ZZ-Java1707-Day26-04UDP数据丢包演示和FeiQ玩一(Av20176821,P120).Flv
99.5M2018-06-16 06:00
121.ZZ-Java1707-Day26-05TCP演示(Av20176821,P121).Flv
117.5M2018-06-16 06:00
122.ZZ-Java1707-Day27-01反射引入(Av20176821,P122).Flv
19.1M2018-06-16 06:00
123.ZZ-Java1707-Day27-02反射原理，获取Class类对象和(Av20176821,P123).Flv
200.4M2018-06-16 06:00
124.ZZ-Java1707-Day27-03利用反射机制调用成员方法(Av20176821,P124).Flv
157.4M2018-06-16 06:00
125.ZZ-Java1707-Day27-04反射使用成员变量和反射方法总结(Av20176821,P125).Flv
98.3M2018-06-16 06:00
126.ZZ-Java1707-Day28-01复习(Av20176821,P126).Flv
95.6M2018-06-16 06:00
127.ZZ-Java1707-Day28-02BS和CS结构解释(Av20176821,P127).Flv
207.5M2018-06-16 06:00
128.ZZ-Java1707-Day28-03全局架构标签展示(Av20176821,P128).Flv
44.4M2018-06-16 06:00
129.ZZ-Java1707-Day28-04HTML常用标签(Av20176821,P129).Flv
151.8M2018-06-16 06:00
13.ZZ-Java1707-Day03-04算术运算符和关系运算符(Av20176821,P13).Flv
210.6M2018-06-15 08:03
130.ZZ-Java1707-Day29-01复习(Av20176821,P130).Flv
68.1M2018-06-16 06:00
131.ZZ-Java1707-Day29-02Table表格标签(Av20176821,P131).Flv
94.2M2018-06-16 06:00
132.ZZ-Java1707-Day29-03Table练习(Av20176821,P132).Flv
31M2018-06-16 06:00
133.ZZ-Java1707-Day29-04form表单(Av20176821,P133).Flv
173.3M2018-06-16 06:00
134.ZZ-Java1707-Day29-05表单补充，分页和块元素(Av20176821,P134).Flv
120.6M2018-06-16 06:00
135.ZZ-Java1707-Day29-06CSS样式(Av20176821,P135).Flv
146.4M2018-06-16 06:00
136.ZZ-Java1707-Day30-01复习(Av20176821,P136).Flv
35.1M2018-06-16 06:00
137.ZZ-Java1707-Day30-02常用选择器(Av20176821,P137)(1).Flv
100.6M2018-06-16 07:50
137.ZZ-Java1707-Day30-02常用选择器(Av20176821,P137).Flv
100.6M2018-06-16 07:50
138.ZZ-Java1707-Day30-03伪类选择器(Av20176821,P138).Flv
29.4M2018-06-16 07:50
139.ZZ-Java1707-Day30-04常用属性(Av20176821,P139).Flv
109.5M2018-06-16 07:50
14.ZZ-Java1707-Day03-05逻辑运算符和分支结构初步(Av20176821,P14).Flv
129.3M2018-06-15 08:03
140.ZZ-Java1707-Day30-05背景和定位(Av20176821,P140).Flv
249.2M2018-06-16 07:50
141.ZZ-Java1707-Day30-06列表，z-index和盒子模型(Av20176821,P141).Flv
124.6M2018-06-16 07:50
142.ZZ-Java1707-Day30-07浮动(Av20176821,P142).Flv
126M2018-06-16 07:50
143.ZZ-Java1707-Day31-01JS初识(Av20176821,P143).Flv
126.3M2018-06-16 07:50
144.ZZ-Java1707-Day31-02JS中方法和变量的使用(Av20176821,P144).Flv
72M2018-06-16 07:50
145.ZZ-Java1707-Day31-03JS分支循环和变量作用域(Av20176821,P145).Flv
40.6M2018-06-16 07:50
146.ZZ-Java1707-Day31-04JS中String,Date,M(Av20176821,P146).Flv
106.8M2018-06-16 07:50
147.ZZ-Java1707-Day31-05JS数组使用(Av20176821,P147).Flv
42.5M2018-06-16 07:50
148.ZZ-Java1707-Day31-06JSDOM操作和点击事件(Av20176821,P148).Flv
90.1M2018-06-16 07:50
149.ZZ-Java1707-Day31-聊聊天(Av20176821,P149).Flv
45.7M2018-06-16 07:50
15.ZZ-Java1707-Day04-01复习(Av20176821,P15).Flv
92.6M2018-06-15 08:03
150.ZZ-Java1707-Day32-01XML初识(Av20176821,P150).Flv
120.1M2018-06-16 07:50
151.ZZ-Java1707-Day32-01XML解析Dom4j使用1(Av20176821,P151).Flv
196.2M2018-06-16 07:50
152.ZZ-Java1707-Day32-02XML解析Dom4j使用2获取数(Av20176821,P152).Flv
100M2018-06-16 07:50
153.ZZ-Java1707-Day33-01MySQL DDL和DML(Av20176821,P153).Flv
164.1M2018-06-16 07:50
154.ZZ-Java1707-Day33-01MySQL基础知识(Av20176821,P154).Flv
224.4M2018-06-16 07:50
155.ZZ-Java1707-Day34-01复习(Av20176821,P155).Flv
74.5M2018-06-16 07:50
156.ZZ-Java1707-Day34-02(Av20176821,P156).Flv
81.8M2018-06-16 07:50
157.ZZ-Java1707-Day34-03(Av20176821,P157).Flv
83.1M2018-06-16 07:50
158.ZZ-Java1707-Day34-04DQL(Av20176821,P158).Flv
122.6M2018-06-16 07:50
159.ZZ-Java1707-Day34-05DQL(Av20176821,P159).Flv
64.9M2018-06-16 07:50
16.ZZ-Java1707-Day04-02分支结构2(Av20176821,P16).Flv
201.3M2018-06-15 08:03
160.ZZ-Java1707-Day34-06Delete(Av20176821,P160).Flv
65M2018-06-16 07:50
161.ZZ-Java1707-Day34-07update(Av20176821,P161).Flv
26.1M2018-06-16 07:50
162.ZZ-Java1707-Day34-08一对一查询(Av20176821,P162).Flv
59.5M2018-06-16 07:50
163.ZZ-Java1707-Day34-09一对多查询(Av20176821,P163).Flv
44.7M2018-06-16 07:50
164.ZZ-Java1707-Day34-10多对多查询(Av20176821,P164).Flv
79.3M2018-06-16 07:50
165.ZZ-Java1707-Day35-01复习(Av20176821,P165).Flv
46.2M2018-06-16 07:50
166.ZZ-Java1707-Day35-02DCL用户管理和DTL事务处理(Av20176821,P166).Flv
124.1M2018-06-16 07:50
167.ZZ-Java1707-Day35-03MySQL数据库导入导出(Av20176821,P167).Flv
29.4M2018-06-16 07:50
168.ZZ-Java1707-Day35-04JDBC接受和连接数据库(Av20176821,P168).Flv
210.5M2018-06-16 07:50
169.ZZ-Java1707-Day35-05JDBC连接数据库Stateme(Av20176821,P169).Flv
174.6M2018-06-16 07:50
17.ZZ-Java1707-Day04-03switch-case(Av20176821,P17).Flv
259.4M2018-06-15 08:03
170.ZZ-Java1707-Day35-06JDBC的核心API(Av20176821,P170).Flv
70M2018-06-16 07:50
171.ZZ-Java1707-Day35-07SQL注入和PreparedSt(Av20176821,P171).Flv
101.3M2018-06-16 07:50
172.ZZ-Java1707-Day36-01复习(Av20176821,P172).Flv
41.1M2018-06-16 07:50
173.ZZ-Java1707-Day36-02PreparedStatemen(Av20176821,P173).Flv
120.2M2018-06-16 07:50
174.ZZ-Java1707-Day36-03简单页面布置(Av20176821,P174).Flv
26.6M2018-06-16 07:50
175.ZZ-Java1707-Day36-04PreparedStatemen(Av20176821,P175).Flv
86.9M2018-06-16 07:50
176.ZZ-Java1707-Day36-05数据库保存大数据文本图片(Av20176821,P176).Flv
55.3M2018-06-16 07:50
177.ZZ-Java1707-Day36-06获取插入数据自增长值的方式(Av20176821,P177).Flv
64M2018-06-16 07:50
178.ZZ-Java1707-Day36-07Java代码操作数据库事务处理(Av20176821,P178).Flv
93.4M2018-06-16 07:50
179.ZZ-Java1707-Day37-01复习(Av20176821,P179).Flv
49.8M2018-06-16 07:50
18.ZZ-Java1707-Day05-01复习(Av20176821,P18).Flv
142.1M2018-06-15 08:03
180.ZZ-Java1707-Day37-02元数据操作(Av20176821,P180).Flv
78.1M2018-06-16 07:50
181.ZZ-Java1707-Day37-03更新通用方法和查询通用方法参数介(Av20176821,P181).Flv
55.6M2018-06-16 07:50
182.ZZ-Java1707-Day37-04查询方法需要的BeanUtils(Av20176821,P182).Flv
84.2M2018-06-16 07:50
183.ZZ-Java1707-Day37-05数据库查询方法实现和验证(Av20176821,P183).Flv
90.9M2018-06-16 07:50
184.ZZ-Java1707-Day37-06DBUtils查询操作(Av20176821,P184).Flv
147.6M2018-06-16 07:50
185.ZZ-Java1707-Day37-07DBUtils更新操作(Av20176821,P185).Flv
23.7M2018-06-16 07:50
186.ZZ-Java1707-Day37-08自定义实现连接池(了解)(Av20176821,P186).Flv
146M2018-06-16 07:50
187.ZZ-Java1707-Day38-01复习(Av20176821,P187).Flv
44.4M2018-06-16 07:50
188.ZZ-Java1707-Day38-02数据库数据约束(Av20176821,P188).Flv
82.1M2018-06-16 07:50
189.ZZ-Java1707-Day38-03数据库外键约束(Av20176821,P189).Flv
99.9M2018-06-16 07:50
19.ZZ-Java1707-Day05-02循环初步(Av20176821,P19).Flv
74.8M2018-06-15 08:03
190.ZZ-Java1707-Day38-04数据库关联查询(Av20176821,P190).Flv
91.8M2018-06-16 07:50
191.ZZ-Java1707-Day38-05-C3P0连接池使用(Av20176821,P191).Flv
84.4M2018-06-16 07:50
192.ZZ-Java1707-Day39-01复习(Av20176821,P192).Flv
112.5M2018-06-16 07:50
193.ZZ-Java1707-Day39-02软件环境接受和BS,CS区别(Av20176821,P193).Flv
45.3M2018-06-16 07:50
194.ZZ-Java1707-Day39-03服务器基本概念(Av20176821,P194).Flv
77.7M2018-06-16 07:50
195.ZZ-Java1707-Day39-04Tomcat安装，使用和接受(Av20176821,P195).Flv
68.7M2018-06-16 07:50
196.ZZ-Java1707-Day39-05Tomcat共享文件演示(Av20176821,P196).Flv
33.3M2018-06-16 07:50
197.ZZ-Java1707-Day39-06第一个Servlet程序(Av20176821,P197).Flv
160.4M2018-06-16 07:50
198.ZZ-Java1707-Day39-07手动创建Servlet程序总结(Av20176821,P198).Flv
33.2M2018-06-16 07:50
199.ZZ-Java1707-Day39-08MyEclipse创建Servl(Av20176821,P199).Flv
45.8M2018-06-16 07:50
2.ZZ-Java1707-Day01-02DOS命令初识(Av20176821,P2).Flv
191.9M2018-06-15 08:03
20.ZZ-Java1707-Day05-03for循环和分支练习(Av20176821,P20).Flv
227.7M2018-06-15 08:03
200.ZZ-Java1707-Day40-01复习(Av20176821,P200).Flv
55.1M2018-06-16 07:50
201.ZZ-Java1707-Day40-02HTTP协议和请求头(Av20176821,P201).Flv
137.3M2018-06-16 07:50
202.ZZ-Java1707-Day40-03Servlet获取页面请求数据(Av20176821,P202).Flv
69.9M2018-06-16 07:50
203.ZZ-Java1707-Day40-04HTTP响应(Av20176821,P203).Flv
74.8M2018-06-16 07:50
204.ZZ-Java1707-Day40-05Servlet解析前端发送的数据(Av20176821,P204).Flv
65.8M2018-06-16 07:50
205.ZZ-Java1707-Day40-06Servlet映射路径(Av20176821,P205).Flv
74.6M2018-06-16 07:50
206.ZZ-Java1707-Day40-07Tomcat默认Servlet缺(Av20176821,P206).Flv
43.9M2018-06-16 07:50
207.ZZ-Java1707-Day40-08Servlet生命周期(Av20176821,P207).Flv
111.5M2018-06-16 07:50
208.ZZ-Java1707-Day40-09Servlet自动加载(Av20176821,P208).Flv
36.9M2018-06-16 07:51
209.ZZ-Java1707-Day41-01复习(Av20176821,P209).Flv
62.4M2018-06-16 07:51
21.ZZ-Java1707-Day05-04嵌套for循环练习(Av20176821,P21).Flv
191.3M2018-06-15 08:03
210.ZZ-Java1707-Day41-02Servlet共享资源问题演示((Av20176821,P210).Flv
73.7M2018-06-16 07:51
211.ZZ-Java1707-Day41-03ServletConfig对象使(Av20176821,P211).Flv
60.1M2018-06-16 07:51
212.ZZ-Java1707-Day41-04ServletContext域对(Av20176821,P212).Flv
84.3M2018-06-16 07:51
213.ZZ-Java1707-Day41-05转发和重定向(Av20176821,P213).Flv
108.7M2018-06-16 07:51
214.ZZ-Java1707-Day41-06Cookie的基本使用(Av20176821,P214).Flv
133.3M2018-06-16 07:51
215.ZZ-Java1707-Day41-07Cookie实现记录用户上一次访(Av20176821,P215).Flv
63.2M2018-06-16 07:51
216.ZZ-Java1707-Day41-08Session常用方法展示(Av20176821,P216).Flv
106.2M2018-06-16 07:51
217.ZZ-Java1707-Day42-01复习(Av20176821,P217).Flv
46.7M2018-06-16 07:51
218.ZZ-Java1707-Day42-02-ContactSystem项目(Av20176821,P218).Flv
76.9M2018-06-16 07:51
219.ZZ-Java1707-Day42-03-项目01(Av20176821,P219).Flv
242.5M2018-06-16 07:51
22.ZZ-Java1707-Day05-05嵌套for循环练习2(Av20176821,P22).Flv
175.9M2018-06-15 08:03
220.ZZ-Java1707-Day42-04-项目02(Av20176821,P220).Flv
205.4M2018-06-16 07:51
221.ZZ-Java1707-Day43-01复习(Av20176821,P221).Flv
33.6M2018-06-16 07:51
222.ZZ-Java1707-Day43-02JSP介绍(Av20176821,P222).Flv
85.6M2018-06-16 07:51
223.ZZ-Java1707-Day43-03JSP基本语法规范(Av20176821,P223).Flv
95M2018-06-16 07:51
224.ZZ-Java1707-Day43-04JSP三大指令(include,(Av20176821,P224).Flv
141.5M2018-06-16 07:51
225.ZZ-Java1707-Day43-05内置对象和Out使用(Av20176821,P225).Flv
56.6M2018-06-16 07:51
226.ZZ-Java1707-Day43-06JSP域对象使用(Av20176821,P226).Flv
99.3M2018-06-16 07:51
227.ZZ-Java1707-Day43-07JSP和Servlet使用(Av20176821,P227).Flv
123.8M2018-06-16 07:51
228.ZZ-Java1707-Day44-01复习(Av20176821,P228).Flv
51.2M2018-06-16 07:51
229.ZZ-Java1707-Day44-02EL表达式(Av20176821,P229).Flv
139.8M2018-06-16 07:51
23.ZZ-Java1707-Day06-01复习(Av20176821,P23).Flv
25.5M2018-06-15 08:03
230.ZZ-Java1707-Day44-03EL表达式(Av20176821,P230).Flv
108M2018-06-16 07:51
231.ZZ-Java1707-Day44-04JSTL表达式(Av20176821,P231).Flv
246.5M2018-06-16 07:51
232.707-day45过滤器1(Av20176821,P232).Flv
187.3M2018-06-16 07:51
233.707-day45过滤器2(Av20176821,P233).Flv
306M2018-06-16 07:51
234.707-day45过滤器3(Av20176821,P234).Flv
402.1M2018-06-16 06:00
235.707-day45过滤器4(Av20176821,P235).Flv
230.1M2018-06-16 06:00
236.707-day46文件上传1(Av20176821,P236).Flv
303.6M2018-06-16 06:00
237.707-day46文件上传2(Av20176821,P237).Flv
325.1M2018-06-16 06:00
238.707-day46文件下载(Av20176821,P238).Flv
268.4M2018-06-16 06:00
239.707-day46转发(Av20176821,P239).Flv
49.1M2018-06-16 06:00
24.ZZ-Java1707-Day06-02break,continue,条件(Av20176821,P24).Flv
255M2018-06-15 08:03
240.707-day47idcard项目1(Av20176821,P240).Flv
148.4M2018-06-16 06:00
241.707-day47idcard项目2(Av20176821,P241).Flv
320.7M2018-06-16 06:00
242.707-day47idcard项目3(Av20176821,P242).Flv
277.9M2018-06-16 06:00
243.707-day47idcard项目4(Av20176821,P243).Flv
91.5M2018-06-16 06:00
244.707-day47idcard项目5(Av20176821,P244).Flv
50.9M2018-06-16 06:00
245.707-day48ajax1(Av20176821,P245).Flv
182.4M2018-06-16 06:00
246.707-day48ajax2(Av20176821,P246).Flv
226.3M2018-06-16 06:00
247.707-day48监听器1(Av20176821,P247).Flv
261M2018-06-16 06:00
248.707-day48监听器2(Av20176821,P248).Flv
296.7M2018-06-16 06:00
249.707-day49ajaxcitys1(Av20176821,P249).Flv
68.1M2018-06-16 06:00
25.ZZ-Java1707-Day06-03函数讲解和练习(Av20176821,P25).Flv
147.7M2018-06-15 08:03
250.707-day49ajaxcitys2(Av20176821,P250).Flv
312.9M2018-06-16 06:00
251.707-day49ajaxcitys3(Av20176821,P251).Flv
254.9M2018-06-16 06:00
252.707-day49ajaxhome作业(Av20176821,P252).Flv
177.5M2018-06-16 06:00
253.707-day50jq1(Av20176821,P253).Flv
134.2M2018-06-16 06:00
254.707-day50jq2(Av20176821,P254).Flv
288.1M2018-06-16 06:00
255.707day51jq1(Av20176821,P255).Flv
222.5M2018-06-16 06:00
256.707day51jq2(Av20176821,P256).Flv
289.8M2018-06-16 06:00
257.707day51jq3(Av20176821,P257).Flv
188.5M2018-06-16 06:00
258.707day51jq4(Av20176821,P258).Flv
104.4M2018-06-16 06:00
259.707day52jq1(Av20176821,P259).Flv
175.3M2018-06-16 06:00
26.ZZ-Java1707-Day06-04函数探究(Av20176821,P26).Flv
158.1M2018-06-15 08:03
260.707day52jq2(Av20176821,P260).Flv
259.6M2018-06-16 06:00
261.707day52jq3(Av20176821,P261).Flv
189.3M2018-06-16 06:00
262.707day52jq4(Av20176821,P262).Flv
269.8M2018-06-16 06:00
263.707day53jqcity(Av20176821,P263).Flv
190.4M2018-06-16 06:00
264.ZZ-Java1802-Day06-02-数组的引入(1)(Av20176821,P264).Flv
38.6M2018-06-16 06:00
265.707day53复习.flv(Av20176821,P265).Flv
231M2018-06-16 06:00
266.ZZ-Java1802-Day06-03-数组的基本使用(1)(Av20176821,P266).Flv
55.8M2018-06-16 06:00
267.ZZ-Java1802-Day06-04-地址和引用【重点难点知识】(1(Av20176821,P267).Flv
34.2M2018-06-16 06:00
268.ZZ-Java1802-Day06-05-数组内存分析【重点难点知识】((Av20176821,P268).Flv
45.2M2018-06-16 06:00
269.ZZ-Java1802-Day06-06-数组作为函数的参数(1)(1)(Av20176821,P269).Flv
24.5M2018-06-16 06:00
27.ZZ-Java1707-Day07-01复习(Av20176821,P27).Flv
73.5M2018-06-15 08:03
270.ZZ-Java1802-Day06-07-数组作为函数的参数(2)Nul(Av20176821,P270).Flv
37M2018-06-16 06:00
271.ZZ-Java1802-Day06-08-数组CRUD操作之查询(1)(Av20176821,P271).Flv
38M2018-06-16 06:00
272.ZZ-Java1802-Day06-09-数组CRUD操作之查询（2）((Av20176821,P272).Flv
26.3M2018-06-16 06:00
273.ZZ-Java1802-Day07-01-内存地址【重点难点】(1)(Av20176821,P273).Flv
46.9M2018-06-16 06:00
274.ZZ-Java1802-Day07-02-数组操作之查询(1)(1)(Av20176821,P274).Flv
40.4M2018-06-16 06:00
275.ZZ-Java1802-Day07-03-数组查询操作之多数据查询(3)(Av20176821,P275).Flv
36.8M2018-06-16 06:00
276.ZZ-Java1802-Day07-04-数组查询操作之选择排序算法(2(Av20176821,P276).Flv
75.2M2018-06-16 06:00
277.ZZ-Java1802-Day07-05-数组添加元素操作(1)(Av20176821,P277).Flv
59.6M2018-06-16 06:00
278.ZZ-Java1802-Day07-06-数组删除元素操作(1)(Av20176821,P278).Flv
36.1M2018-06-16 06:00
279.ZZ-Java1802-Day08-01-数组和函数复习(1)(Av20176821,P279).Flv
87.8M2018-06-16 06:00
28.ZZ-Java1707-Day07-03数组的内存分析(Av20176821,P28).Flv
134.5M2018-06-15 08:03
280.ZZ-Java1802-Day08-02-数组查询之二分法查找(1)(Av20176821,P280).Flv
50.2M2018-06-16 06:00
29.ZZ-Java1707-Day07-04地址解释和数组作为函数的参数(Av20176821,P29).Flv
94.3M2018-06-15 08:03
3.ZZ-Java1707-Day01-03开发语言介绍(Av20176821,P3).Flv
232M2018-06-15 08:03
30.ZZ-Java1707-Day07-05数组的查找操作(Av20176821,P30).Flv
158.1M2018-06-15 08:03
31.ZZ-Java1707-Day07-05数组的查找操作2和增删思路(Av20176821,P31).Flv
169M2018-06-15 08:03
32.ZZ-Java1707-Day08-01复习(Av20176821,P32).Flv
33.7M2018-06-15 08:03
33.ZZ-Java1707-Day08-02删除和数组自增操作(Av20176821,P33).Flv
182.2M2018-06-15 08:03
34.ZZ-Java1707-Day08-03数组的增加操作(Av20176821,P34).Flv
170.8M2018-06-15 08:03
35.ZZ-Java1707-Day08-04面向对象概念(Av20176821,P35).Flv
158.9M2018-06-15 08:03
36.ZZ-Java1707-Day08-05面向对象代码实现(Av20176821,P36).Flv
121M2018-06-15 08:03
37.ZZ-Java1707-Day09-01复习(Av20176821,P37).Flv
93.4M2018-06-15 08:03
38.ZZ-Java1707-Day09-02对象内存分析(Av20176821,P38).Flv
146.5M2018-06-15 08:03
39.ZZ-Java1707-Day09-03面向对象多类合作(Av20176821,P39).Flv
182.4M2018-06-15 08:03
4.ZZ-Java1707-Day01-04JDK安装(Av20176821,P4).Flv
133.8M2018-06-15 08:03
40.ZZ-Java1707-Day09-04匿名对象和封装初步(Av20176821,P40).Flv
184.3M2018-06-16 07:52
41.ZZ-Java1707-Day09-05封装(Av20176821,P41).Flv
118.1M2018-06-16 07:52
42.ZZ-Java1707-Day09-06selectSort选择排序(Av20176821,P42).Flv
97.1M2018-06-16 07:52
43.ZZ-Java1707-Day10-01复习(Av20176821,P43).Flv
119M2018-06-16 07:52
44.ZZ-Java1707-Day10-02Eclipse的使用(Av20176821,P44).Flv
147.8M2018-06-16 07:52
45.ZZ-Java1707-Day10-03构造方法使用(Av20176821,P45).Flv
218.4M2018-06-16 07:52
46.ZZ-Java1707-Day10-04Eclipse连接源代码(Av20176821,P46).Flv
7.1M2018-06-16 07:52
47.ZZ-Java1707-Day10-05构造代码块和this关键字(Av20176821,P47).Flv
181.2M2018-06-16 07:52
48.ZZ-Java1707-Day10-06this关键字调用构造方法(Av20176821,P48).Flv
86.7M2018-06-16 07:52
49.ZZ-Java1707-Day10-07Eclipse导入Java Pro(Av20176821,P49).Flv
5.6M2018-06-16 07:52
5.ZZ-Java1707-Day02-01复习(Av20176821,P5).Flv
69M2018-06-15 08:03
50.ZZ-Java1707-Day11-01复习(Av20176821,P50).Flv
40.8M2018-06-16 07:52
51.ZZ-Java1707-Day11-02static引入(Av20176821,P51).Flv
202.9M2018-06-16 07:52
52.ZZ-Java1707-Day11-03static修饰成员变量和成员方法(Av20176821,P52).Flv
210.6M2018-06-16 07:52
53.ZZ-Java1707-Day11-04static使用案例.(Av20176821,P53).Flv
182.5M2018-06-16 07:52
54.ZZ-Java1707-Day11-05自定义Java工具类.(Av20176821,P54).Flv
119.8M2018-06-16 07:52
55.ZZ-Java1707-Day12-01复习.(Av20176821,P55).Flv
25.3M2018-06-16 07:52
56.ZZ-Java1707-Day12-02包含关系和继承关系引入.(Av20176821,P56).Flv
192.9M2018-06-16 07:52
57.ZZ-Java1707-Day12-03继承的使用.(Av20176821,P57).Flv
157.8M2018-06-16 07:52
58.ZZ-Java1707-Day12-04super关键字(Av20176821,P58).Flv
132M2018-06-16 07:53
59.ZZ-Java1707-Day12-05重写(Av20176821,P59).Flv
111.1M2018-06-16 07:53
6.ZZ-Java1707-Day02-02第一行Java代码和环境配置(Av20176821,P6).Flv
254.6M2018-06-15 08:03
60.ZZ-Java1707-Day13-01复习(Av20176821,P60).Flv
34.6M2018-06-16 07:53
61.ZZ-Java1707-Day13-02abstract抽象类(Av20176821,P61).Flv
188.9M2018-06-16 07:53
62.ZZ-Java1707-Day13-03interface接口(Av20176821,P62).Flv
167.5M2018-06-16 07:53
63.ZZ-Java1707-Day13-04继承和接口使用案例(Av20176821,P63).Flv
127.5M2018-06-16 07:53
64.ZZ-Java1707-Day13-05多态(Av20176821,P64).Flv
130.5M2018-06-16 07:53
65.ZZ-Java1707-Day14-01复习(Av20176821,P65).Flv
26M2018-06-16 07:53
66.ZZ-Java1707-Day14-01球员管理系统1(Av20176821,P66).Flv
221.4M2018-06-16 07:53
67.ZZ-Java1707-Day14-01球员管理系统2(Av20176821,P67).Flv
113.6M2018-06-16 07:53
68.ZZ-Java1707-Day14-01球员管理系统3(Av20176821,P68).Flv
246.7M2018-06-16 07:53
69.ZZ-Java1707-Day15-01复习(Av20176821,P69).Flv
76M2018-06-16 07:53
7.ZZ-Java1707-Day02-03数据单位和进制转换(Av20176821,P7).Flv
183.3M2018-06-15 08:03
70.ZZ-Java1707-Day15-02异常处理初步(Av20176821,P70).Flv
160.3M2018-06-16 07:53
71.ZZ-Java1707-Day15-03异常处理抛出和捕获(Av20176821,P71).Flv
205.3M2018-06-16 07:53
72.ZZ-Java1707-Day15-04自定义异常(Av20176821,P72).Flv
99.8M2018-06-16 07:53
73.ZZ-Java1707-Day15-05集合入门(Av20176821,P73).Flv
162.3M2018-06-16 07:53
74.ZZ-Java1707-Day16-01复习(Av20176821,P74).Flv
45.9M2018-06-16 07:53
75.ZZ-Java1707-Day16-02重写hashCode和equals(Av20176821,P75).Flv
178.1M2018-06-16 07:53
76.ZZ-Java1707-Day16-03List接口特有方法(Av20176821,P76).Flv
186.5M2018-06-16 07:53
77.ZZ-Java1707-Day16-04ArrayList特征(Av20176821,P77).Flv
193.4M2018-06-16 07:53
78.ZZ-Java1707-Day16-05ArrayList使用案例和Lin(Av20176821,P78).Flv
141.1M2018-06-16 07:53
79.ZZ-Java1707-Day17-01复习(Av20176821,P79).Flv
66.9M2018-06-16 07:53
8.ZZ-Java1707-Day02-04原码反码补码和常量(Av20176821,P8).Flv
188.5M2018-06-15 08:03
80.ZZ-Java1707-Day17-02Set集合和HashSet原理(Av20176821,P80).Flv
149.3M2018-06-16 07:53
81.ZZ-Java1707-Day17-03TreeSet存储要求和Compa(Av20176821,P81).Flv
184.1M2018-06-16 07:53
82.ZZ-Java1707-Day17-04ArrayListSystemV2(Av20176821,P82).Flv
302M2018-06-16 07:53
83.ZZ-Java1707-Day18-01复习(Av20176821,P83).Flv
83.5M2018-06-16 07:53
84.ZZ-Java1707-Day18-02泛型初步(Av20176821,P84).Flv
146M2018-06-16 07:53
85.ZZ-Java1707-Day18-03类内使用泛型和匿名内部类使用初识(Av20176821,P85).Flv
164.8M2018-06-16 07:53
86.ZZ-Java1707-Day18-04泛型的上下限和Map初识(Av20176821,P86).Flv
182.1M2018-06-16 07:53
87.ZZ-Java1707-Day18-05Map常用方法(Av20176821,P87).Flv
95.6M2018-06-16 07:53
88.ZZ-Java1707-Day19-01复习(Av20176821,P88).Flv
73.8M2018-06-16 07:53
89.ZZ-Java1707-Day19-02Map中entrySet方法使用(Av20176821,P89).Flv
77M2018-06-16 07:53
9.ZZ-Java1707-Day02-05字符集解释和标识符规范(Av20176821,P9).Flv
140.8M2018-06-15 08:03
90.ZZ-Java1707-Day19-03创建File类对象(Av20176821,P90).Flv
215.3M2018-06-16 07:53
91.ZZ-Java1707-Day19-04File类常用方法1(Av20176821,P91).Flv
180.2M2018-06-16 07:53
92.ZZ-Java1707-Day19-04File类常用方法2(Av20176821,P92).Flv
213.2M2018-06-16 07:53
93.ZZ-Java1707-Day20-01复习(Av20176821,P93).Flv
202.4M2018-06-16 07:53
94.ZZ-Java1707-Day20-02文件归档操作(Av20176821,P94).Flv
170.1M2018-06-16 07:53
95.ZZ-Java1707-Day20-03单例(Av20176821,P95).Flv
145.6M2018-06-16 07:53
96.ZZ-Java1707-Day20-04HashMap的使用(Av20176821,P96).Flv
144.9M2018-06-16 07:53
97.ZZ-Java1707-Day21-01复习(Av20176821,P97).Flv
24.6M2018-06-16 07:53
98.ZZ-Java1707-Day21-02输入字节流InputStream(Av20176821,P98).Flv
234.1M2018-06-16 07:53
99.ZZ-Java1707-Day21-03输出字节流OutputStream(Av20176821,P99).Flv
196.2M2018-06-16 07:53


视频下载链接: https://pan.baidu.com/s/1XZO9plOrHv6UvEG05RCXLg 密码: m7wx



再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1







]]></description><link>https://blog.gaoredu.com/article/b825a872-1079-48ba-bd66-3e6fb923270c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b825a872-1079-48ba-bd66-3e6fb923270c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 13 Sep 2018 02:47:25 GMT</pubDate></item><item><title><![CDATA[【前端项目】让你心动的近30个WEb项目实战视频教程（前端+后台）]]></title><description><![CDATA[微信小程序商城构建全栈应用
微信小程序开发视频教程整理
网易云python
慕课网 PHP从基础语法到原生项目开发【完整版】
慕K网-299元-基于Python玩转人工智能最火框架 TensorFlow应用实践
shell高级【2016最新】
PHP2015-Redis视频教程-video
PHP2015-Linux视频教程-video
PHP+Ajax+jQuery网站开发项目式教程
Mysql DBA 运维(1)
Mysql DBA 运维
MUI视频录制(1)
MUI视频录制
AngularJS全栈开发知乎(1)
AngularJS全栈开发知乎
98、BAT大牛亲授 基于ElasticSearch的搜房网实战(1)
98、BAT大牛亲授 基于ElasticSearch的搜房网实战
95、全面系统讲解CSS 工作应用+面试一步搞定(1)
95、全面系统讲解CSS 工作应用+面试一步搞定
91、精通高级RxJava 2响应式编程思想
87、Python接口测试框架实战与自动化进阶
86、快速上手Linux 玩转典型应用
84、ES6+ 开发电商网站的账号体系 JS SDK
83、Redis从入门到高可用，分布式实践
81、Java开发企业级权限管理系统
80、PHP秒杀系统 高并发高性能的极致挑战（完整版）
72、看得见的算法 7个经典应用诠释算法精髓
71、PHP开发高可用高安全App后端
68、360大牛带你横扫PHP职场 全面解读PHP面试
65、让你页面速度飞起来 Web前端性能优化
5、响应式开发一招致胜
58、企业级刚需Nginx入门，全面掌握Nginx配置+快速搭建高可用架构
50、Python操作三大主流数据库
4、MySQL性能管理及架构设计
41、腾讯大牛亲授 Web 前后端漏洞分析与防御技巧
3、前端到后台ThinkPHP开发整站
34、ThinkPHP 5.0开发微信小程序商场打通全栈项目架构
30、Angular 4.0从入门到实战 打造股票管理网站
29、聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎
27、ThinkPHP5.0正式版第二季：实战开发企业站【完结】
27、Thinkphp 5.0 仿百度糯米开发多商家电商平台
19、高性能可扩展MySQL数据库设计及架构优化 电商项目
15、微信小程序入门与实战 常用组件API开发技巧项目实战
12、程序猿的内功修炼，学好算法与数据结构
100、Java秒杀系统方案优化 高性能高并发实战
1-565个老男孩运维【28期最新完整】
08 Python核心技术进阶训练篇
下载链接:https://pan.baidu.com/s/1XoAy6VDSqWt5KGdjz3gGgw  密码: e3hs


]]></description><link>https://blog.gaoredu.com/article/a31ea60c-2bf2-4442-bdbd-5906b1cd467b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a31ea60c-2bf2-4442-bdbd-5906b1cd467b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 13 Sep 2018 02:37:59 GMT</pubDate></item><item><title><![CDATA[【工具软件】百度、豆丁、丁香、MBALib、道客巴巴、Book118等文库文档免费下载器]]></title><description><![CDATA[经测试，目前可以正常下载百度、豆丁等文库文档的下载工具，支持免费下载，无需积分。


883
下载链接: https://pan.baidu.com/s/1OzkQk_toYRvVokYWurj7Bg 密码: fggy
]]></description><link>https://blog.gaoredu.com/article/84e0916b-235a-4f02-86f2-ebf4cf261a04</link><guid isPermaLink="true">https://blog.gaoredu.com/article/84e0916b-235a-4f02-86f2-ebf4cf261a04</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 12 Sep 2018 02:41:45 GMT</pubDate></item><item><title><![CDATA[【Discuz建站】新手建立Discuz网站的最全面的视频教程]]></title><description><![CDATA[Discuz全套建站教程
文件名大小修改日期
28.如何确定论坛的安装网址
-2018-05-31 22:44
29.安装DiscuzX2.5（含数据库配置）
-2018-05-31 22:44
3.域名订单申请
-2018-05-31 22:44
30.如何进入论坛的后台
-2018-05-31 22:44
31.后台功能概述
-2018-05-31 22:44
32.忘记管理员或者ucenter密码如何找回
-2018-05-31 22:44
33.如何修改论坛标题，门户标题，家园标题等等
-2018-05-31 22:44
34.模版介绍,模板目录查找,常用文件夹简单功能
-2018-05-31 22:44
35.模版的安装方法（应用安装和上传安装）
-2018-05-31 22:44
36.修改模版如何避免修改默认模版文件的思路和方法
-2018-05-31 22:44
37.DiscuzX2.5静态化（伪静态）的配置教程
-2018-05-31 22:44
38.覆盖替换方法讲解（修改网站重要方法）
-2018-05-31 22:44
39.修改网站重要方法之备份的应用
-2018-05-31 22:44
4.虚拟主机订单
-2018-05-31 22:44
40.修改网站必须掌握的最最基础的东西
-2018-05-31 22:44
41.新手要学会利用工具和搜索引擎
-2018-05-31 22:44
42.备案政策,如何备案,备案规则
-2018-05-31 22:44
43.域名绑定教程
-2018-05-31 22:44
44.域名解析教程
-2018-05-31 22:44
45.如何临时关闭站点和打开站点(升级，维护，搬家时涉及到)
-2018-05-31 22:44
46.如何设置或者修改网站的标题，描述和关键字
-2018-05-31 22:44
47.如何修改网站的LOGO站标以及如何将LOGO站标修改文件名
-2018-05-31 22:44
48.如何添加或者修改主导航？
-2018-05-31 22:44
49.如何添加或者修改顶部导航？
-2018-05-31 22:44
5.如何查看和开通订单
-2018-05-31 22:44
50.如何添加或者修改底部导航？
-2018-05-31 22:44
51.如何添加或者修改快捷导航？
-2018-05-31 22:44
52.如何添加或者其他导航？
-2018-05-31 22:44
53.什么是板块和分区，如何添加板块和分区，如何排序
-2018-05-31 22:44
54.如何设置板块隐藏，如何将隐藏的板块显示
-2018-05-31 22:44
55.论坛分区下板块横排设置教程
-2018-05-31 22:44
56.如何替换板块前面的小气泡图片
-2018-05-31 22:44
57.如何修改板块名称的颜色？
-2018-05-31 22:44
58.如何设置板块图标
-2018-05-31 22:44
59.如何切换论坛默认风格
-2018-05-31 22:44
6.在线支付
-2018-05-31 22:44
60.如何删除版权信息Powered by Discuz!
-2018-05-31 22:44
61.修改数据库密码的操作方法
-2018-05-31 22:44
62.给新手关于插件安装的一些建议
-2018-05-31 22:44
63.首页N格插件的安装教程（新）
-2018-05-31 22:44
64.每日签到插件的安装教程
-2018-05-31 22:44
65.修改在线列表图标，添加在线列表图标，在线列表图标排序
-2018-05-31 22:44
66.友情链接添加,修改,删除,排序设置方法
-2018-05-31 22:44
67.用户组组图标设置教程
-2018-05-31 22:44
68.如何为一个用户颁发勋章,如何取消已经为用户颁发的勋章
-2018-05-31 22:44
69.勋章批量颁发方法，勋章领取方式设置，勋章添加和删除方法（附赠百个勋章素材）
-2018-05-31 22:44
7.订单开通详细过程
-2018-05-31 22:44
70.游客注册成为会员以后才能看帖子内容的设置教程
-2018-05-31 22:44
71.站点访问权限(禁止访问，正常访问，超级访问)的设置方法和演示效果
-2018-05-31 22:44
72.屏蔽广告方法之不允许低用户组会员发表站外URL
-2018-05-31 22:44
73.屏蔽广告方法之防灌水设置（验证码，验证问题等）
-2018-05-31 22:44
74.屏蔽广告方法之会员每小时发帖限制
-2018-05-31 22:44
75.屏蔽广告方法之词语替换
-2018-05-31 22:44
76.屏蔽广告方法之限制用户注册和访问控制
-2018-05-31 22:44
77.屏蔽广告方法之强制验证邮箱，强制上传头像，强制加好友
-2018-05-31 22:44
78.屏蔽广告方法之通过插件限制会员注册
-2018-05-31 22:44
79.如何添加备案号码到论坛，如何删除备案号码对应的超链接指向
-2018-05-31 22:44
8.上传工具Flashfxp下载
-2018-05-31 22:44
80.统计代码的安装（百度统计，cnzz站长统计实例演示）
-2018-05-31 22:44
81.社会化分享按钮的安装（百度分享实例演示）
-2018-05-31 22:44
82.默认的编辑器模式设置，编辑栏样式设置方法
-2018-05-31 22:44
83.如何允许会员发布视频和Flash
-2018-05-31 22:44
84.帖子中如何发布视频和flash
-2018-05-31 22:44
85.如何允许会员发布回复可见的帖子,会员如何发布回复可见的帖子
-2018-05-31 22:44
86.如何添加QQ在线客服到论坛上（以54kefu实例演示）
-2018-05-31 22:44
87.如何自定义404页面
-2018-05-31 22:44
88.如何批量上传图片或者附件
-2018-05-31 22:44
89. 如何将不带www的域名301到带www的域名上
-2018-05-31 22:44
9.flashfxp的安装和注册
-2018-05-31 22:44
90.如果将其他域名301到主域名上
-2018-05-31 22:44
91.教程学习顺序建议，版权问题解释，教程下载方式等问题
-2018-05-31 22:44
92.论坛添加广告位专题之如何利用论坛后台添加广告
-2018-05-31 22:44
93.论坛添加广告位专题之如何添加文字广告以及如何获得广告代码的方法
-2018-05-31 22:44
94.论坛添加广告位专题之如何添加图片广告以及如何获得图片广告代码
-2018-05-31 22:44
95.论坛添加广告位专题之如何添加弹窗广告？
-2018-05-31 22:44
96.论坛添加广告位专题之如何添加漂浮广告？
-2018-05-31 22:44
97.论坛添加广告位专题之如何添加对联广告？
-2018-05-31 22:44
98.论坛添加广告位专题之如何添加广告联盟广告代码
-2018-05-31 22:44
99.论坛添加广告位专题之如何设置置顶广告？
-2018-05-31 22:44
第145课. 站长如何设置允许会员发布个性表情？
-2018-05-31 22:44
第146课. 会员在帖子中如何使用论坛的表情？
-2018-05-31 22:44
第147课. 站长针对不同的用户组设置板块的权限（实例;新注册用户必须到指定板块发布2个帖子才能在其他板块发帖）？
-2018-05-31 22:44
第148课. 实例讲解只有付费VIP会员用户组才能进入到某一个板块看帖，发帖和回复的设置教程
-2018-05-31 22:44
第148课.DIY好后如何简单修改，以及备份说明
-2018-05-31 22:44
第149课. 站长如何设置隐藏没有浏览权限的板块？
-2018-05-31 22:44
第150课. 如何将板块设置为小分区？
-2018-05-31 22:44
第151课. 如何查看板块的fid 如何查看帖子的tid 如何查看会员的uid
-2018-05-31 22:44
第152课. 如何设置图片专版即如何开启图片列表模式
-2018-05-31 22:44
第153课. 如何批量重建图片列表模式下的图片专版的主题封面？
-2018-05-31 22:44
第154课. 如何合理设置图片列表模式下的图片尺寸大小？
-2018-05-31 22:44
第155课. 如何打开门户功能，如何将门户设置为首页？
-2018-05-31 22:44
第156课. 什么是DIY？ DIY能做什么？
-2018-05-31 22:44
第157课. 如何DIY？如何进入到DIY？如何备份DIY效果？如何备份数据？
-2018-05-31 22:44
第159课.什么是框架？框架的属性介绍
-2018-05-31 22:44
第160课.什么是模块？模块的属性介绍
-2018-05-31 22:44
第161课.(重要课程)如何DIY一个文字广告位？
-2018-05-31 22:44
第162课.如何DIY一个图片广告位？
-2018-05-31 22:44
第172课. 门户首页DIY的基础知识
-2018-05-31 22:44
第173课. 如何添加可以DIY的区域？
-2018-05-31 22:44
第174课. 实战：如何制作一个可以DIY的页面
-2018-05-31 22:44


下载链接：https://pan.baidu.com/s/12klqoYl7Lq7pBsUc3o_X1Q#list/path=%2F 密码：ntjl


]]></description><link>https://blog.gaoredu.com/article/62870e31-ccf9-4451-81f5-1e10286eddef</link><guid isPermaLink="true">https://blog.gaoredu.com/article/62870e31-ccf9-4451-81f5-1e10286eddef</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 12 Sep 2018 02:35:17 GMT</pubDate></item><item><title><![CDATA[【黑科技】使用这款小工具快速轻松录制自己专属的GIF动画]]></title><description><![CDATA[目前也发现一些网上的GIF动画效果，或者一些比较炫酷的效果，以前比较好奇这种动画是如何制作的，今天我们来一起看一下究竟。


比如我们发现网上有一些比较好的动画，但是不能下载下来，我们就必须要按照下载的网站要求去下载码？


比如我们再百度或者搜索一下GIF图片，有一些比较好的图片：


879


下面这个工具就派生用处了，
880


我们直接点击录制屏幕，


881


然后直接停止了,
882


这个是我录制的GIF动画效果，


877
这个图片，


878


是不是挺有意思的，然后就可以了。大家快去试一下看。
下载链接：http://pan.baidu.com/s/1miJo4QW 密码：vv1h
]]></description><link>https://blog.gaoredu.com/article/cbfe36c0-2c30-4512-a06c-507cdea1bf48</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cbfe36c0-2c30-4512-a06c-507cdea1bf48</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 11 Sep 2018 03:12:18 GMT</pubDate></item><item><title><![CDATA[【视频教程】适合初学者的ARCGIS全套视频教程（中科院讲解）]]></title><description><![CDATA[arcgis10地理信息系统教程从初学到精通.iso
链接: https://pan.baidu.com/s/1tnRrCsuyWTO63iT2YG5kxw 密码: s3qe
arcgis10教程资料.rar
链接: https://pan.baidu.com/s/1k8sxLZmtz1ghrRUpllo0kQ 密码: mqwc
arcgis10中文帮助-专业库-制图和可视化8制图表达.pdf
链接: https://pan.baidu.com/s/1im4WnrJ9MWPAtAWNZR4u7A 密码: rivt
arcgis9.3及10详细视频教程1010.rar
链接: https://pan.baidu.com/s/11UvsyQQmhfAgC7cHOhHZpg 密码: eg3x
arcgis教程好评后赠送的池老师视频教程.rar
链接: https://pan.baidu.com/s/1TxEu1c4dIP08GL_YNEUhLQ 密码: s2jh
arcgis教程好评后赠送的文档教程.rar
链接: https://pan.baidu.com/s/15NwkwuNTc-cLs27VNiX39A 密码: 7vdu
arcgis教程好评后赠送的中科院视频教程.rar
链接: https://pan.baidu.com/s/1ymEeuo9qjNnv1GaH5w0tgg 密码: sfd8
arcgis中科院完整详细教程(1).rar
链接: https://pan.baidu.com/s/1RtkzvtmZGxTMuWXVgOVO7w 密码: 1j4h

]]></description><link>https://blog.gaoredu.com/article/ede1a353-26b0-4c15-8c14-3888d61eb59f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ede1a353-26b0-4c15-8c14-3888d61eb59f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 11 Sep 2018 02:36:09 GMT</pubDate></item><item><title><![CDATA[【天气项目】从天气项目看Spring Cloud微服务治理项目实战视频教程]]></title><description><![CDATA[从天气项目看Spring Cloud微服务治理

1-1 spring boot简介.mp4
1-2 开启第一个spring boot 项目.mp4
10-1 什么是服务的熔断.mp4
10-2 服务熔断的原理.mp4
10-3 熔断的意义与功能.mp4
10-4 熔断与降级的区别.mp4
10-5 如何集成 hystrix.mp4
10-6 运行测试.mp4
10-7 实现天气预报微服务的熔断机制mp4.mp4
10-8 修改前端的实现.mp4
10-9 实现熔断机制后的运行测试.mp4
11-1 什么是自动扩展.mp4
11-2 自动扩展的意义mp4.mp4
11-3 自动扩展的常见模式.mp4
11-4 容器编排.mp4
11-5 资源分配算法及常用容器编排技术.mp4
2-1 从一个天气预报系统讲起.mp4
327.6M2018-08-09 10:48
2-2 用redis提升应用的并发访问能力.mp4
2-3 quartz scheduler定时获取天气数据.mp4
2-4 准备城市数据.mp4
2-5 获取城市数据.mp4
2-6 给天气预报一个面子-集成thymeleaf.mp4
2-7 给天气预报一个面子-集成bootstrap.mp
3-1 单块架构的概念及优缺点.mp4
3-2 如何将单块架构转为微服务架构.mp4
3-3 微服务概念及颗粒度设计原理.mp4
3-4 微服务架构的其他设计原理.mp4
3-5微服务系统设计.mp4
3-6 微服务拆分的意义及方法.mp4
4-1 天气预报系统的微服务架构设计.mp4
4-2 天气数据采集微服务的实现1.mp4
4-3 天气数据采集服务的实现.mp4
4-4 天气数据api微服务的实现.mp4
4-5天气预报微服务的实现.mp4
4-6 城市api微服务的实现.m
5-1 spring cloud简介.mp4
5-2 spring cloud 配置及子项目介绍.mp4
6-1 服务发现的意义.mp4
6-2集成 eureka server.mp4
6-3 集成 eureka client.mp4
6-4 实现服务的注册与发现-配置.mp4
6-5 实现服务的注册与发现-实现.mp4
6-6 实现服务的注册与发现-运行测试.m
7-1 微服务的消费模式.mp4
7-2 常见微服务的消费者-httpclient用法介绍.m
7-3 常见微服务的消费者-ribbon用法介绍.mp4
7-4 常见微服务的消费者-feign用法介绍.mp4
7-5 天气数据采用微服务使用feign.mp4
7-6天气预报微服务使用feign.mp4
7-7实现服务的负载均衡及高可用-概述.mp4
7-8 实现服务的负载均衡及高可用-运行测试.m
8-1使用api网关的意义.mp4
8-2 使用api网关的利与弊.mp4
8-3 常见api网关的实现方式.mp4
8-4 如何集成zuul.mp
8-5 api网关设计及实现.mp4
8-6 天气预报微服务重构.mp4
8-7 运行测试重构后的系统.mp4
9-1 为什么需要集中化配置.mp4
9-2 使用config实现server端的配置中心.mp4
9-3 概述-使用 config 实现的配置中心 client 端.mp4
9-4 实战-使用 config 实现的配置中心 client 端.mp4下载链接：https://pan.baidu.com/s/1348zcsnuNxuquOnrUsfq2A 密码：ffeq 


再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/1f46b26d-cf64-4263-8371-e1f79ba24ab3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1f46b26d-cf64-4263-8371-e1f79ba24ab3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 11 Sep 2018 02:31:55 GMT</pubDate></item><item><title><![CDATA[【Web项目】2018全网首发mpvue课程小程序全栈开发（视频+代码+笔记）]]></title><description><![CDATA[876




开发技术：Vue.js（WEB技术栈）
项目名称：基于mpvue的WEB微信小程序开发
课时：总共分为10个章节，包括视频教程，以及相关的源代码


链接：https://pan.baidu.com/s/168ST5ySM4kYVnUQKL_ECvg 密码：mcgp 
]]></description><link>https://blog.gaoredu.com/article/565648d7-f991-4be6-b0b0-77f0d1699913</link><guid isPermaLink="true">https://blog.gaoredu.com/article/565648d7-f991-4be6-b0b0-77f0d1699913</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 09 Sep 2018 20:43:48 GMT</pubDate></item><item><title><![CDATA[【项目实战】Vue2.0+Node.js+MongoDB全栈打造商城系统视频教程]]></title><description><![CDATA[875

课程目录
|
|--第01章 课程介绍
|    01-01 课程-导学.mp4
|    01-02 前端框架回顾.mp4
|    01-03 vue概况以及核心思想.mp4
|    01-04 vue框架优缺点对比.mp4
|
|--第02章 Vue基础
|    02-01 nodejs和npm的安装和环境搭建.mp4
|    02-02 vue环境搭建以及vue-cli使用.mp4
|    02-03 vue配置（上）.mp4
|    02-04 vue配置（下）.mp4
|    02-05 vue基础语法.mp4
|
|--第03章 Vue-router
|    03-01 路由基础介绍.mp4
|    03-02 动态路由匹配.mp4
|    03-03 嵌套路由.mp4
|    03-04 编程式路由.mp4
|    03-05 命名路由和命名视图.mp4
|
|--第04章 Vue-resource/Axios
|    04-01 Vue-Resource使用（上）.mp4
|    04-02 Vue-Resource使用（下）.mp4
|    04-03 axios基础介绍.mp4
|
|--第05章 ES6常用语法
|    05-01 ES6简介.mp4
|    05-02 ES6常用命令.mp4
|    05-03 拓展参数讲解.mp4
|    05-04 Promise讲解.mp4
|    05-05 ES6模块化开发讲解.mp4
|    05-06 AMD、CMD、CommonJS和ES6差异.mp4
|
|--第06章 商品列表模块实现
|    06-01 商品列表组件拆分.mp4
|    06-02 商品列表数据渲染实现.mp4
|    06-03 实现图片懒加载.mp4
|
|--第07章 Node.js基础
|    07-01 Linux环境下配置Node环境.mp4
|    07-02 创建http Server容器.mp4
|    07-03 通过node加载静态页面.mp4
|    07-04 搭建基于Express框架的运行环境.mp4
|
|--第08章 MongoDB介绍
|    08-01 window平台下MongoDB的安装和环境搭建.mp4
|    08-02 Linux平台下安装配置MongoDB.mp4
|    08-03 给MongoDB创建用户.mp4
|    08-04 MongoDB基本语法.mp4
|    08-05 表数据设计和插入.mp4
|
|--第09章 基于Node.js开发商品列表接口
|    09-01 Node的启动和调试方式.mp4
|    09-02 基于Express实现商品列表查询接口.mp4
|    09-03 商品列表分页和排序功能实现(上).mp4
|    09-04 商品列表分页和排序功能实现（下）.mp4
|    09-05 价格过滤功能实现.mp4
|    09-06 加入购物车功能实现.mp4
|
|--第10章 登录模块实现
|    10-01 登录功能实现.mp4
|    10-02 登出功能实现.mp4
|    10-03 登录拦截.mp4
|    10-04 全局模态框组件实现.mp4
|
|--第11章 购物车模块实现
|    11-01 购物车列表功能实现.mp4
|    11-02 商品删除功能实现.mp4
|    11-03 商品修改功能实现.mp4
|    11-04 购物车全选和商品实时计算功能实现.mp4
|
|--第12章 地址模块实现
|    12-01 地址列表渲染实现 (上).mp4
|    12-02 地址列表渲染功能实现（下）.mp4
|    12-03 地址列表切换和展开功能实现.mp4
|    12-04 地址设置默认功能实现.mp4
|    12-05 地址删除功能实现.mp4
|
|--第13章 订单确认模块实现
|    13-01 订单确认列表渲染功能实现.mp4
|    13-02 创建订单功能实现.mp4
|
|--第14章 订单成功模块实现
|    14-01 订单成功页面功能实现.mp4
|
|--第15章 基于Vuex改造登录和购物车数量功能
|    15-01 Vuex基本介绍.mp4
|    15-02 Vuex的语法讲解.mp4
|    15-03 通过Vuex实现登录和购物车数量（上）.mp4
|    15-04 通过Vuex实现登录和购物车数量（下）.mp4
|
|--第16章 Webpack使用
|    16-01 webpack基础介绍.mp4
|    16-02 插件静态部分实现.mp4
|    16-03 插件功能实现.mp4
|    16-04 webpack打包功能实现（上）.mp4
|    16-05 webpack打包功能实现（下）.mp4
|    16-06 npm插件发布.mp4
|    16-07 webpack多页面构建(上).mp4
|    16-08 webpack多页面构建（下）.mp4
|    16-09 webpack多页面构建-第三方库.mp4
|    16-10 webpack多页面构建-抽取公共模块.mp4
|
|--第17章 线上部署
|    17-01 线上部署（上）.mp4
|    17-02 线上部署（中）.mp4
|    17-03 线上部署（下）.mp4
|
|--第18章 课程总结
     18-01 课程总结.mp4


项目实战视频下载链接：链接：https://pan.baidu.com/s/1R_vGyetnIvHMKoTSje13Zg 密码：3kst

]]></description><link>https://blog.gaoredu.com/article/695e00db-6bcd-4348-abfe-73b3bffaf9d9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/695e00db-6bcd-4348-abfe-73b3bffaf9d9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 09 Sep 2018 03:00:20 GMT</pubDate></item><item><title><![CDATA[【考研资料】2018武汉大学遥感信息工程学院地理信息系统原理课件]]></title><description><![CDATA[874


这个是武汉大学GIS的课件，总共有9个部分：
1链接: https://pan.baidu.com/s/1UuUmCBA8G40lH0T_qKAa7Q 密码: 85uv
2链接: https://pan.baidu.com/s/1u9NPdGY6uuoy9uUAFPJm0Q 密码: 9s33
3链接: https://pan.baidu.com/s/1XMLp91uK9xgbgAKf5riKbA 密码: r5r3
4链接: https://pan.baidu.com/s/1xiGVf4T_X-_Xn2GATLUHLA 密码: 4h66
5链接: https://pan.baidu.com/s/1PVnFIFwGUZ5Kqs2iCMObhw 密码: wbnv
6链接: https://pan.baidu.com/s/1jliCRXAjDoPdnLMfdBblIQ 密码: 2nsc
7链接: https://pan.baidu.com/s/1iXSERMPQfQh29rH-htY-Iw 密码: mr37
8链接: https://pan.baidu.com/s/1Bb5IyWCV4A0GxTfl_MzA9g 密码: x69d
9链接: https://pan.baidu.com/s/1Iv8JlUUwfRj8yQuEnSKq2A 密码: b3ae



GIS课件：链接: https://pan.baidu.com/s/1ri7cU00PJQdn4pg1wiK-ww 密码: etgq


练习题和参考答案：链接: https://pan.baidu.com/s/1-EuWjPAAGUs_DRNJK5ZviQ 密码: bbbs
]]></description><link>https://blog.gaoredu.com/article/2ac17e97-64d6-4041-96b8-a7665e660424</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2ac17e97-64d6-4041-96b8-a7665e660424</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 09 Sep 2018 02:54:34 GMT</pubDate></item><item><title><![CDATA[最新3DMax全套视频教程,3d溜溜模型免费下载1-6季最新3Dmax模型下载]]></title><description><![CDATA[873教程一共有六季度，这个是基本的模型文件，大家直接就可以下载导入就行，

3dsmax 自学中文基础入门到精通实例视频教程https://pan.baidu.com/s/12U64EBzu5LhOZ9wtnVheRg

模型文件链接: http://pan.baidu.com/s/1jIyewmi 密码: dxwv 

如果还没有装软件的话，就直接到网盘下载吧，3dMAX2018最新安装包。
链接：https://pan.baidu.com/s/1nvqWKaP 密码：bapo

]]></description><link>https://blog.gaoredu.com/article/eca1cbdc-ddc6-4c97-9c1d-4172baac5fd4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eca1cbdc-ddc6-4c97-9c1d-4172baac5fd4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 08 Sep 2018 02:40:29 GMT</pubDate></item><item><title><![CDATA[【CAD教程】Auto CAD2010-2013从入门到精通全套视频教程（视频+书籍）]]></title><description><![CDATA[871






最新CAD室内设计自学教程.zip
最全的AUTO_CAD快捷键命令大全完整版.pdf
中文版AutoCAD2012完整版自学教程.pdf
实用的CAD室内设计教程.zip
教程3d+cad视频.rar
CAD视频教程全集.zip
CAD布局详细教程.pdf
Auto CAD视频教程.rar





CAD视频教程资料：链接：https://pan.baidu.com/s/1sZAXlI9ym2r5qzKsf-NjAw 密码：3vj3
]]></description><link>https://blog.gaoredu.com/article/80f7f210-0940-4621-98a2-4821baf7be8e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/80f7f210-0940-4621-98a2-4821baf7be8e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 05 Sep 2018 02:27:29 GMT</pubDate></item><item><title><![CDATA[一步解决安卓报错Unable to resolve dependency for ':app@debug/compileClasspath']]></title><description><![CDATA[869


只需要设置为本地代理即可，如图所示，解析地址为本地的127.0.0.1即可，其他的不用管就可完美解决这个问题。
]]></description><link>https://blog.gaoredu.com/article/ca18687a-b3f2-4fa6-9349-652962b95d03</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ca18687a-b3f2-4fa6-9349-652962b95d03</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 03 Sep 2018 16:55:00 GMT</pubDate></item><item><title><![CDATA[【Web前端面试】2018最新WEB前端开发工程师面试真题集合]]></title><description><![CDATA[868

100IT 名企前端面试真题.pdf链接: https://pan.baidu.com/s/1JQ1zT40kIOQ7cFsRfUCcKQ 密码: bp3r


2016年Web前端面试题目汇总.pdf链接: https://pan.baidu.com/s/15TS9zNN_G3bQarOq5iNbIw 密码: 229r


BAT及各大互联网公司2016前端笔试面试题(CSS).pdf链接: https://pan.baidu.com/s/15TS9zNN_G3bQarOq5iNbIw 密码: 229r


面试题汇总.pdf链接: https://pan.baidu.com/s/15TS9zNN_G3bQarOq5iNbIw 密码: 229r






]]></description><link>https://blog.gaoredu.com/article/abd145d2-492c-4208-ac4d-45a1e4620a0b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/abd145d2-492c-4208-ac4d-45a1e4620a0b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 03 Sep 2018 02:53:05 GMT</pubDate></item><item><title><![CDATA[【项目实战】MVC三层架构项目实战---网上电子图书商城管理系统]]></title><description><![CDATA[866






图书商城第1天链接: https://pan.baidu.com/s/1sAuN0ymURCMXWAswZgYCfw 密码: 27xz
图书商城第2天链接: https://pan.baidu.com/s/10iqNsnSLAVcgaKWYCbiqmw 密码: kxji
图书商城第3天链接: https://pan.baidu.com/s/1wmTTTTfC5wYO-ixfNKDSwQ 密码: wfww
图书商城第4天链接: https://pan.baidu.com/s/1UrWH9GLjTh5GFKQk8mxvXQ 密码: j598
图书商城第5天链接: https://pan.baidu.com/s/1uh-JpdUakfLkY9VgRqttYQ 密码: 5ug4



]]></description><link>https://blog.gaoredu.com/article/096bffe8-9a30-4bc8-a675-361e489683aa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/096bffe8-9a30-4bc8-a675-361e489683aa</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 01 Sep 2018 21:00:41 GMT</pubDate></item><item><title><![CDATA[【Nodejs学习】NodeJS实现的原理代码分析]]></title><description><![CDATA[// 我来实现一个自己定义的require.js
function myRequire(path) {
    /**
     * 创建一个Module模块
     */
    function Module() {
        this.exports = {};
    }

    // fs模块是Node.计算提供的一个原生的用于读取文件的模块
    var fs = require('fs');
    var sourceCode = fs.readFileSync(path, 'utf-8');
    //  console.log(sourceCode);

    // 读取文件，拼接字符串
    var packSouceCode = '(function(exports, module){' + sourceCode + ' return module.exports; })';
    console.log(packSouceCode);
    // 通过eval()这个函数可以动态地执行JavaScript代码
    var packObj = eval(packSouceCode);      

    // 我自己来创建一个模块
    var module = new Module();

    console.log(typeof packObj);    // function

    // 开始动态执行我自己定义的这个require 函数（ 需要把形参传递给我自定义的函数的实参）
    var executeRes = packObj(module.exports, module);
    //  输出返回的结果
    console.log(executeRes);  // 1234567, 这个函数执行的结果返回的实际上就是一个module.exports
}


//  测试, 直接会输出文件中的内容信息
var res = myRequire('./model4.js');
console.log(res);



 (function(exports, module){
    var name = 'xiuxiu';
    exports.name = name;
    module.exports = function(){
    console.log(arguments);
    } 
    return module.exports; 
})



 // 头部
var str = (function(exports, module){
    var name = 'xiuxiu';
    exports.name = name;
    module.exports = '1234567'; 
    // 尾部
    return module.exports; 
})

// 可以执行一个字符串
var res = eval(str);
console.log(res);
var obj = res('module1', 'module');
console.log(obj);


实际上NodeJS是通过require的方式间接读取文件内容，然后解析js，最后使用eval函数实现模块的加载的


// 我来实现一个自己定义的require.js
function myRequire(path) {
    /**
     * 创建一个Module模块
     */
    function Module() {
        this.exports = {};
    }

    // fs模块是Node.计算提供的一个原生的用于读取文件的模块
    var fs = require('fs');
    var sourceCode = fs.readFileSync(path, 'utf-8');
    //  console.log(sourceCode);

    // 读取文件，拼接字符串
    var packSouceCode = '(function(exports, module){' + sourceCode + ' return module.exports; })';
    console.log(packSouceCode);
    // 通过eval()这个函数可以动态地执行JavaScript代码
    var packObj = eval(packSouceCode);      

    // 我自己来创建一个模块
    var module = new Module();

    console.log(typeof packObj);    // function

    // 开始动态执行我自己定义的这个require 函数（ 需要把形参传递给我自定义的函数的实参）
    var executeRes = packObj(module.exports, module);
    //  输出返回的结果
    console.log(executeRes);  // 1234567, 这个函数执行的结果返回的实际上就是一个module.exports
}


//  测试, 直接会输出文件中的内容信息
var res = myRequire('./model4.js');
console.log(res);



 (function(exports, module){
    var name = 'xiuxiu';
    exports.name = name;
    module.exports = function(){
    console.log(arguments);
    } 
    return module.exports; 
})



 // 头部
var str = (function(exports, module){
    var name = 'xiuxiu';
    exports.name = name;
    module.exports = '1234567'; 
    // 尾部
    return module.exports; 
})

// 可以执行一个字符串
var res = eval(str);
console.log(res);
var obj = res('module1', 'module');
console.log(obj);
]]></description><link>https://blog.gaoredu.com/article/349b5473-0a29-41b4-9cd1-c8a3eb1a7cf3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/349b5473-0a29-41b4-9cd1-c8a3eb1a7cf3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 01 Sep 2018 20:45:30 GMT</pubDate></item><item><title><![CDATA[【windows软件】BaiduDisk百度网盘电脑端2018最新和谐版本下载]]></title><description><![CDATA[865




这个是我最新下载文件测试的速度，基本上在5MB/s的速度左右，而且注意看下，我是没有开启会员加速功能，这款工具目前测试时可以使用的，修改了软件内部加速的一些核心机制，相比于pandownload这个工具来说各有各的好处吧！




下载链接：http://t.cn/RFJ18eo


使用一款黑科技软件YunDownload破解百度云下载加速文件清理重复文件删除等功能
http://www.52tech.tech/forum.php?mod=viewthread&tid=623&fromuid=1


百度云最新下载不限速安卓手机APK软件新鲜出炉
http://www.52tech.tech/forum.php?mod=viewthread&tid=546&fromuid=1









]]></description><link>https://blog.gaoredu.com/article/b11bb6bd-0a79-4873-99a1-2baa03456140</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b11bb6bd-0a79-4873-99a1-2baa03456140</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 31 Aug 2018 02:23:44 GMT</pubDate></item><item><title><![CDATA[【黑科技】超级好用的节约你工作效率的电脑工具软件WGestures最新版]]></title><description><![CDATA[常用的手势分析：
赋值，粘贴，Enter按键，关闭，退出程序，下一首，切换静音，窗口置顶，删除，这些常用的手势这里都有，这个软件基本上把这些常用的东东全部封装好了，用户可以根据自己的习惯重新定义这些功能


862

触发边和摩擦边：
主要定义了用户鼠标移动到屏幕的边缘的一些触发事件，比如上个任务，开始菜单，任务视图和显示桌面等功能



863



此外这款工具还有跟随直觉的功能，类似于机器学习吧，用的越久了，这款软件就会越来越懂你了，
864


总之，对于目前不想再电脑上面操作太多，想避开繁琐的双击，单击等常规方式的话，这款软件就够你用了，其他功能用户就自己测试吧！


下载链接：http://pan.baidu.com/s/1bo3Gt11 密码：ecjt

]]></description><link>https://blog.gaoredu.com/article/656b3d95-8fe0-4c35-884e-f185ee191dbb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/656b3d95-8fe0-4c35-884e-f185ee191dbb</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 30 Aug 2018 02:54:59 GMT</pubDate></item><item><title><![CDATA[【windows软件】金山急救箱桌面工具（免费杀木马、修复系统、修复IE的利器]]></title><description><![CDATA[金山急救箱（免费杀木马、修复系统、修复IE的利器）是一款永久免费的木马查杀软件，可快速诊断系统是否中毒，这个是官网的介绍，基本上这款软件可以用来进行常见的木马检查，杀毒也是极好的。对于迫切想知道自己的电脑是否中毒的，这是一个不错的软件。

860




挂网软件网址：http://labs.duba.net/jjx.shtml
下载地址：www.duba.net/duba/tools/dubatools/ksm3/ksm3.exe]点我下载]]></description><link>https://blog.gaoredu.com/article/9d02c9df-b72a-49ea-b5c8-2aa2f531f2c8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9d02c9df-b72a-49ea-b5c8-2aa2f531f2c8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 29 Aug 2018 20:29:57 GMT</pubDate></item><item><title><![CDATA[【考研资料】2019新东方唐迟考研英语阅读决胜秘籍视频教程]]></title><description><![CDATA[第9讲：完形2链接: https://pan.baidu.com/s/1Qb-yuaGe-VvyT3C75BHRVw 密码: cpsg
第八讲链接: https://pan.baidu.com/s/1GA3MCzH4oUtaIBMVR1k6kg 密码: b526
第二讲：翻译【11.11】链接: https://pan.baidu.com/s/1Eenw-KqEKriY7EeBba-kZA 密码: wmvn
第六讲链接: https://pan.baidu.com/s/1jGymheCrz3-rndP5RTrHJg 密码: krgd
第七讲链接: https://pan.baidu.com/s/1_rNvmnR1mrFCc5B25LgFYg 密码: mjp4
第三讲【排序+填空】链接: https://pan.baidu.com/s/1UTXsAlfmUjQEjpJLbeJO3w 密码: 4hu8




]]></description><link>https://blog.gaoredu.com/article/d666c734-1717-48e8-8554-3c472dc3260c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d666c734-1717-48e8-8554-3c472dc3260c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 28 Aug 2018 20:43:10 GMT</pubDate></item><item><title><![CDATA[【考研资料】中南大学812地理信息系统历年考研真题全套资源分享]]></title><description><![CDATA[859


2006年中南大学地理信息系统原理考研试题.pdf链接: https://pan.baidu.com/s/1hnQxwJP3fIixVMH1QMhYRw 密码: n7xe
2006年中南大学地理信息系统原理考研试题.txt
2007年中南大学2521地理信息系统原理考博真题考博试题博士研究生入学考试试题.pdf链接: https://pan.baidu.com/s/1DZ69v-nZMlHm4-jfEifF7A 密码: mwvt
2007年中南大学2521地理信息系统原理考博真题考博试题博士研究生入学考试试题.txt
2008年中南大学2521地理信息系统原理考博真题考博试题博士研究生入学考试试题.pdf链接: https://pan.baidu.com/s/1J0AAwyqJkJjfKA26iS7Uhg 密码: 3nsk
2008年中南大学2521地理信息系统原理考博真题考博试题博士研究生入学考试试题.txt
2008年中南大学地理信息系统原理考研试题.pdf链接: https://pan.baidu.com/s/1IQNsseLqT6rXRRbb0x8wUA 密码: 72qu
2008年中南大学地理信息系统原理考研试题.txt
2009年中南大学地图学与地理信息系统考研真题考研试题硕士研究生入学考试试题.pdf链接: https://pan.baidu.com/s/1fCVI928Ti_GYcrAHzjlAJQ 密码: 2wfe
2010年中南大学920地理信息系统原理考研真题考研试题硕士研究生入学考试试题.pdf链接: https://pan.baidu.com/s/1jpr6NhGLgVTmALvu1B9NAA 密码: um22
2013年中南大学920地理信息系统原理考研真题考研试题硕士研究生入学考试试题.pdf链接: https://pan.baidu.com/s/1SWgAkBk0tjUC-l-bH7Myaw 密码: v3cg
2014年2015年中南大学地理信息系统原理考研真题及复习笔记.pdf链接: https://pan.baidu.com/s/1MN3oXY-eWEDbh2bh1rDgDw 密码: msex
2014年2015年中南大学地理信息系统原理考研真题及复习笔记.txt
2015年考研中南大学地图学与地理信息系统历年复试真题及答案总结.pdf链接: https://pan.baidu.com/s/1HuXUg7GGk8IE6TSJp5BDSg 密码: d2n9
2015年考研中南大学地图学与地理信息系统历年复试真题及答案总结.txt




中南大学812地理信息系统历年真题总入口：链接: https://pan.baidu.com/s/1HxGH9z9gikFbdS3OqN4KCQ 密码: v5t2

]]></description><link>https://blog.gaoredu.com/article/b125dada-8608-420f-b82f-483bd41594e2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b125dada-8608-420f-b82f-483bd41594e2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 28 Aug 2018 20:39:07 GMT</pubDate></item><item><title><![CDATA[尚硅谷最新Web全栈（前端+后端java）开发工程师视频教程免费下载]]></title><description><![CDATA[珍藏版的《尚硅谷最新Web全栈（前端+后端java）开发工程师》视频教程免费下载，总共包含了前后端开发的18个阶段，从HTML，CSS，JS，JAVA基础知识串讲，一直到java电商项目实战。


1223


第00阶段《简介内容》
第01阶段《JavaSE》
第02阶段《数据库》
第03阶段《jdbc》
第04阶段《HTML+CSS+JS》
第05阶段《Web》
第06阶段《框架》
第07阶段《Linux》
第08阶段《Git》
第09阶段《redis》
第10阶段《mysql高级》
第11阶段《ES》
第12阶段《JVM》
第13阶段《JUC》
第14阶段《zookeeper》
第15阶段《easyUI》
第16阶段《通用maper》
第17阶段《众筹网》
第18阶段《硅谷电商》

1224

总的来说我还是比较喜欢看尚硅谷的视频 ，尚硅谷最新java基础入门有715集，涉及到了java基础知识和数据结构和算法等，此外还有实际的企业级项目实战课程，总的来说课程内容深入浅出，无论对于编程基础入门还是致力于Web前后端全栈开发的工程师来说，都是比较适合的哈。



尚硅谷最新Web全栈（前端+后端java）开发工程师视频教程免费百度网盘下载链接：https://pan.baidu.com/s/1YFeuiESGYz4KlXw9SnWnUw
提取码：cu31


]]></description><link>https://blog.gaoredu.com/article/2151834d-fd0c-4cf6-9590-b398bf60434e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2151834d-fd0c-4cf6-9590-b398bf60434e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 28 Aug 2018 02:32:19 GMT</pubDate></item><item><title><![CDATA[【Bootstrap】快速使用Bootstrap打造的门户网站首页]]></title><description><![CDATA[下面是实现的效果图：
857


具体的网站源码如下：
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--引入bootstrap相关的文件-->
    <!--bootstrap核心css文件-->
    <link rel="stylesheet" href="css/bootstrap.css">

    <!--jQuery核心文件-->
    <script src="js/jquery-1.11.1.min.js" type="text/javascript"></script>

    <!--bootstrap的核心js文件， bootstrap 是依赖于JQuery的-->
    <script src="js/bootstrap.js" type="text/javascript"></script>
    <!--手机端可以缩放网页-->
    <meta name="viewport" content="width=device-width, initial-scale=1">


</head>
<body>
<!--最外层的布局容器-->
<div class="container">
    <!--logo start-->
    <div class="row">
        <div class="col-md-4 col-sm-6">
            <h1 style="color: #e77e2f">我爱科技论坛</h1>
        </div>
        <!--在平板、手机状态下面隐藏这个图标-->
        <div class="col-md-4 hidden-sm hidden-xs">
            <img src="images/header.png" alt="">
        </div>
        <div class="col-md-4 col-sm-6 col-xs-6" style="line-height: 50px; height: 50px;">
            <a href="#">登录</a>
            <a href="#">注册</a>
            <a href="#">购物车</a>
        </div>
    </div>
    <!--logo end-->

    <!--nav start-->
    <div class="row">
        <nav class="navbar navbar-default">
            <div class="container-fluid">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                            data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="#">首页</a>
                </div>

                <!-- Collect the nav links, forms, and other content for toggling -->
                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="#">数码 <span class="sr-only">(current)</span></a></li>
                        <li><a href="#">手机数码</a></li>
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"
                               aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
                            <ul class="dropdown-menu">
                                <li><a href="#">Action</a></li>
                                <li><a href="#">Another action</a></li>
                                <li><a href="#">Something else here</a></li>
                                <li role="separator" class="divider"></li>
                                <li><a href="#">Separated link</a></li>
                                <li role="separator" class="divider"></li>
                                <li><a href="#">One more separated link</a></li>
                            </ul>
                        </li>
                    </ul>
                    <form class="navbar-form navbar-right">
                        <div class="form-group">
                            <input type="text" class="form-control" placeholder="Search">
                        </div>
                        <button type="submit" class="btn btn-default">Submit</button>
                    </form>

                </div><!-- /.navbar-collapse -->
            </div><!-- /.container-fluid -->
        </nav>
    </div>
    <!--nav end-->

    <!--slider start-->
    <div class="row">
        <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
            <!-- Indicators -->
            <ol class="carousel-indicators">
                <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
                <li data-target="#carousel-example-generic" data-slide-to="1"></li>
                <li data-target="#carousel-example-generic" data-slide-to="2"></li>
            </ol>

            <!-- Wrapper for slides -->
            <div class="carousel-inner" role="listbox">
                <div class="item active">
                    <img src="images/1.jpg" alt="...">
                    <div class="carousel-caption">
                        ...
                    </div>
                </div>
                <div class="item">
                    <img src="images/2.jpg" alt="...">
                    <div class="carousel-caption">
                        ...
                    </div>
                </div>
                <div class="item">
                    <img src="images/3.jpg" alt="...">
                    <div class="carousel-caption">
                        ...
                    </div>
                </div>
            </div>

            <!-- Controls -->
            <a class="left carousel-control" href="#carousel-example-generic" role="button" data-slide="prev">
                <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
                <span class="sr-only">Previous</span>
            </a>
            <a class="right carousel-control" href="#carousel-example-generic" role="button" data-slide="next">
                <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
                <span class="sr-only">Next</span>
            </a>
        </div>
    </div>
    <!--slider end-->


    <!--banner start-->
    <div class="row">
        <div class="col-md-12">
            <h3>最新商品<img src="images/title2.jpg"></h3>
        </div>
    </div>
    <!--banner end-->


    <!--main start-->
    <div class="row">
        <!--left 大图部分-->
        <!--这张图片在平板和手机状态都隐藏-->
        <div class="col-md-2 hidden-xs hidden-sm" style="height: 480px;">
            <img src="images/products/hao/big01.jpg" alt="">
        </div>
        <!--right 商品-->
        <div class="col-md-10">
            <!--上面的大图片-->
            <div class="col-md-6 hidden-xs hidden-sm" style="height: 240px;">
                <img src="images/products/hao/middle01.jpg" alt="">
            </div>

            <!--高压锅-->
            <!--平板上面显示4个-->
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2  col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>

            </div>
        </div>
        <!--main end-->

    </div>
    <!--main end-->

    <!--add start-->
    <div class="row">
        <!--ad start   -->
        <div class="col-md-12">
            <!--宽度为父容器的宽度, 默认会继承-->
            <img src="images/products/hao/ad.jpg" alt="" style="width: 100%">
        </div>
        <!--ad end-->
    </div>
    <!--add end-->

    <!--others start-->
    <div class="row">
        <!--left 大图部分-->
        <!--这张图片在平板和手机状态都隐藏-->
        <div class="col-md-2 hidden-xs hidden-sm" style="height: 480px;">
            <img src="images/products/hao/big01.jpg" alt="">
        </div>
        <!--right 商品-->
        <div class="col-md-10">
            <!--上面的大图片-->
            <div class="col-md-6 hidden-xs hidden-sm" style="height: 240px;">
                <img src="images/products/hao/middle01.jpg" alt="">
            </div>

            <!--高压锅-->
            <!--平板上面显示4个-->
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2  col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>
            </div>
            <div class="col-md-2 col-sm-4 col-xs-6" style="text-align: center; height: 240px;">
                <img src="images/products/hao/small09.jpg" alt="">
                <p>微波炉</p>
                <p style="color: red;">$998</p>

            </div>
        </div>
        <!--main end-->

    </div>
    <!--others end-->


    <!--footer start-->
    <div class="row">
        <div class="col-md-12">
            <img src="images/footer.jpg" alt="" style="width: 100%;">
        </div>

        <div style="text-align: center">
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <a href="#">关于我们</a>
            <br/>
            Copyright @ 2010-2018 版权所有
        </div>
    </div>
    <!--footer end-->
</div>
</body>
</html>
]]></description><link>https://blog.gaoredu.com/article/95a831ea-ce3b-4b83-9bf1-5a4663d72e4f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/95a831ea-ce3b-4b83-9bf1-5a4663d72e4f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 27 Aug 2018 20:44:22 GMT</pubDate></item><item><title><![CDATA[Windows .Net程序超强反编译Reflector工具（可查看程序详细源码）]]></title><description><![CDATA[856




这款工具是9.0.1版本，应该是比较新的版本了，基本上可以查看任何.NEt程序的源代码，但是前提是源代码没有经过二次加密，否则也是不行的，只要这个软件没有进行二次加密，基本上就可以拔取这个程序的详细信息，包括实现类，变量命名，函数方法的详细实现等！
https://pan.baidu.com/s/1jIPKM7W
密码：8jj7
]]></description><link>https://blog.gaoredu.com/article/356a110c-3468-42d3-b443-6d869ceb1c47</link><guid isPermaLink="true">https://blog.gaoredu.com/article/356a110c-3468-42d3-b443-6d869ceb1c47</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 26 Aug 2018 20:40:12 GMT</pubDate></item><item><title><![CDATA[【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）]]></title><description><![CDATA[谢谢盆友支持
如果链接有问题，请联系站长
链接：https://pan.baidu.com/s/1Wsvvk1miNbbd7ryahiTbjg 密码：1rw6
第一部分：
2018年java黑马&传智视频 从java基础到架构都有，有很多新的技术加入其中，第一部分包含01.java基础(共300集左右).02.HTML(共21集).03.CSS(共21集).04.JavaScript(共17集).05.JQuery(共18集).06.Bootstrap(共17集).07.MYSQL(共38集).08.JDBC(共30集).09.XML&tomcat;(共28集).10.HTTP&Servlet;(共24集).11.Request&Response;(共26集).12.Cookie&Session;(共22集).13.JSP&EL;&JSTL;(共23集).14.事务&数据库连接池&DBUtiles;(共31集).15.MVC设计模式(共32集).16.Ajax&Jquery;(共28集).17.Listener&Filter;(共25集).18.基础加强(共9集).19.Linux(共12集).20.Redis缓存入门(共13集).21.阶段项目(必看)-电子商务企业实战项目(共61集).22HibernateV5.0 框架(共59集). 23.Struts2 框架(共54集).24-Spring V4.2 框架(共56集).25SSH整合企业案例-客户管理系统(共75集).26-Oracle数据库(共84集).27-Maven(共31集).28-Mybatis V3.2(共34集).29-SpringMVC V4.1+SSM整合(共39集).30-SSM分布式案例-互联网商城-阶段项目-必看(共197集）.31.品优购电商系统开发.32.视频教程用到的所有开发工具 
这是第一部分  后面2个板块之后会陆续更新，谢谢大家支持！
第二部分：
2018年java黑马&传智视频 从java基础到架构都有，有很多新的技术加入其中，第二部分包含
第01项目：SSH 网上商城项目(推荐学习项目）第02项目：SSH杰信商贸版(推荐学习项目）第03项目：SSM药品集中采购系统视频教程(推荐学习项目) 第04项目：淘淘商城(SpringMvc+Spring+Mybatis) 推荐学习 第05项目：电力项目 第06项目：校内网项目第07项目：Java邮件开发教程第08项目：java网上在线支付实战视频 第09项目：俄罗斯方块游戏开发_视频教程第10项目：交通灯管理系统视频教程 第11项目：银行业务调度系统视频教程 第12项目：供应链系统视频教程 第13项目：OA办公项目实战教程 第14项目：宅急送项目 第15项目：杰信商贸SSM版 第16项目：SSH国家税务协同平台项目 第17项目：javaWeb聊天室 第18项目：点餐系统 第19项目：网上书店 第20项目：CRM客户关系管理项目 第21项目：手机进销存系统 第22项目：图书商城 第23项目：物流BOS系统(SSH项目） 第24项目：宜立方商城项目(SSM项目） 第25项目：Spring Boot博客企业开发 第26项目：SSM到Spring Boot-校园商铺平台
第三部分：
2018年java黑马&传智视频 从java基础到架构都有，有很多新的技术加入其中，第三部分包含 01.Spring Boot 02.Spring Cloud 微服务 03 docker构建微服务 04 Dubbo 05 JAVA架构师基础 06 JAVA架构师中级 07 JAVA架构师高级

]]></description><link>https://blog.gaoredu.com/article/7d170dac-a777-439d-9aa2-7f3d459e9311</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7d170dac-a777-439d-9aa2-7f3d459e9311</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 Aug 2018 20:56:51 GMT</pubDate></item><item><title><![CDATA[【JavaScript】结局IE控制台提示缺少标识符、字符串或数字的错误]]></title><description><![CDATA[对于IE平台的调试，可以说是错误经常出现，这不就出现了下面的错误：
error:缺少标识符、字符串或数字


1. 可能的原因一：
但是在Chrome浏览器测试的时候也没有这个错误啊，仔细检查你的代码，可能回会发现，是不是在


xframe.cache = {
        data: ,          // 用于存储本地的数据信息
        /**
         * 用于获取本地存储的json数据信息
         * @param key
         * @return {*}
         */
        get: function (key) {
            var value = null;
            this.data.each(function () {
                if (key.trim() === this.key.trim()) {
                    value = this.value;
                }
            });
            return value;
        },
}


就像上面的代码一样，json对象后面竟然多颗一个逗号，我去，IE浏览器这个错误检查真是牛逼了，去掉这个逗号之后，程序正常运行!




2.可能的原因二：
就是你的代码可能有些关键字和IE内部的关键字冲突了，比如下面的这个：
/**
         * 删除指定的key的数据信息, 经测试这里的delete可能和IE内部的关键字冲突，修改名称deleteData
         * @param key
         * @return {boolean}
         */
        delete: function (key) {
            // 删除指定的key对应的数据信息
            var status = false,     // 定义一个状态码，用于标记删除是否成功的状态信息
                self = this;
            this.data.forEach(function (element, index) {
                // 遍历本地的数据存储信息，进行比对数据信息
                if (key.trim() === element.key.trim()) {
                    // 指定开始的位置，开始删除数组中的数据信息
                    self.data.splice(index, 1);
                    status = true;
                }
            });
            return status;
        }


源程序一直是使用delete，但是也是报和上面一样的错误，修改名字就可以解决。
]]></description><link>https://blog.gaoredu.com/article/112126b5-8d00-4263-afb5-f359dc92cd58</link><guid isPermaLink="true">https://blog.gaoredu.com/article/112126b5-8d00-4263-afb5-f359dc92cd58</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 Aug 2018 00:25:42 GMT</pubDate></item><item><title><![CDATA[轻松解决Discuz网站1054错误的问题]]></title><description><![CDATA[不知道各位站长有没有遇到下面的情况：


855


对，就是网站提示1054错误，下面分析下产生这种问题几种原因：

No.FileLineCode
1forum.php58require(%s)
2source/module/forum/forum_post.php340require_once(%s)
3source/include/post/post_newthread.php800showmessage()
4source/function/function_core.php1333dshowmessage(%s, %s, %s, Array)
5source/function/function_message.php18hookscript()
6source/function/function_core.php1105plugin_luckypost_forum->post_luckypost_message(Array)
7source/plugin/luckypost/luckypost.class.php69plugin_luckypost_forum->_luckypost(%d, %d, %d)
8source/plugin/luckypost/luckypost.class.php160plugin_luckypost_forum->_runthelottery(%d, %d, Array, %d)
9source/plugin/luckypost/luckypost.class.php215discuz_table->insert(Array)
10source/class/discuz/discuz_table.php76discuz_database::insert(%s, Array, false, false, false)
11source/class/discuz/discuz_database.php60discuz_database::query(%s, %s, %s, true)
12source/class/discuz/discuz_database.php136db_driver_mysql->query(%s, %s, true)
13source/class/db/db_driver_mysql.php151db_driver_mysql->halt(%s, %d, %s)
14source/class/db/db_driver_mysql.php218break()


1.网站搬家的原因，可能是用户更换了其他主机了，网站搬到一个新的主机上，导致新空间的数据库和原来的不匹配，比如数据库默认的密码是：root/root, 但是如果你之前修改了这个密码，那就不得行了，一般解决方案是：


进入论坛网站的config目录下面，找到vim config_global.php这个文件，然后打开后，通过朝赵工具查找$_config = ‘password’; 找到这行代码，其中的password修改为以前的或者现在最新的数据库密码就可以了，入股不知道的话，可以咨询下你的数据库主机厂商。


2. 缓存的原因，试着使用Discuz网站修复工具试下看（去应用中心搜下就有），里面也有好多网站报错的解决方案，比如管理员密码重置，数据库恢复，清空缓存等，还是比较好用的


3.一般都是上面的两种情况，还有一种就是可能你的网站被黑了，导致你的数据库挂了，这种情况直接联系你的数据库厂商，直接重启数据库就可以了（网站安全还是挺重要的）


]]></description><link>https://blog.gaoredu.com/article/b24ee2b9-29c2-407d-b0b5-6717f83075dc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b24ee2b9-29c2-407d-b0b5-6717f83075dc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 Aug 2018 00:10:47 GMT</pubDate></item><item><title><![CDATA[【Navicat数据库】使用MySQL数据库的超好用的管理工具Navicat最新版]]></title><description><![CDATA[853


对于MySQL数据库来说，这款Navicat数据库管理工具应该说是一款非常好用的开源软件管理工具了，在这里推荐大家下载，已经包括了安装包和相应的破解工具！


该Windows软件的网盘下载链接：
https://pan.baidu.com/s/12tryJ-5u7XwmOa3ypbBihw 密码：hkg3
]]></description><link>https://blog.gaoredu.com/article/d21ce942-1820-44e0-99bd-4cee9f20324c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d21ce942-1820-44e0-99bd-4cee9f20324c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 23 Aug 2018 23:31:17 GMT</pubDate></item><item><title><![CDATA[【安卓底层】对安卓系统的底层源码及实现原理分析视频教程]]></title><description><![CDATA[852


主要从安卓底层的内部实现讲解了安卓操作系统的实现原理及其基本架构：


下载视频连接：链接: https://pan.baidu.com/s/1mcZEnqOjYtqe4HNlwjsydQ 密码: bmq9



]]></description><link>https://blog.gaoredu.com/article/c30bc13d-a178-4285-b554-40cc67f97bab</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c30bc13d-a178-4285-b554-40cc67f97bab</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 23 Aug 2018 21:04:24 GMT</pubDate></item><item><title><![CDATA[【我爱科技影院】灵魂摆渡·黄泉 (2018)在线免费观看]]></title><description><![CDATA[851

电影名称：灵魂摆渡·黄泉 (2018)
主演: 于毅 / 何花 / 王瑞昌 / 岳丽娜 / 倪虹洁 / 更多...
类型: 悬疑 / 惊悚 / 奇幻
片长: 111分钟
豆瓣评分：8.6分


【网友评价】
这次出的《灵魂摆渡·黄泉》也是一样，我觉得它是幼稚的，但是是浪漫的。它讲了一个在地府发生的爱情故事。主要的剧情是围绕着我们大家所熟知的「孟婆汤」的烹饪者——孟婆，展开的。

【本站VIP免费在线观影步骤】：
        我爱科技论坛提供最新最好看的电影资源在线观看频道，提供高质量的电影视频解析，支持多个通道的观看，让每一位游客可以不用VIP就可以观看到海量优质的电影/电视剧/美剧等VIP会员才能享有的观影权。
爱奇艺在线观看地址：http://www.iqiyi.com/v_19rrfkek9w.html


1.对于爱奇艺，优酷，腾讯等网站需要VIP会员的视频，直接复制视频播放链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1【爱奇艺免会员通道】
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员，无广告）

]]></description><link>https://blog.gaoredu.com/article/bae65b2c-ee03-45dd-abec-7db5a5e7f2ca</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bae65b2c-ee03-45dd-abec-7db5a5e7f2ca</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 23 Aug 2018 20:45:49 GMT</pubDate></item><item><title><![CDATA[[黑科技]在GIthub上面快速预览自己的Html网页效果（非源码）]]></title><description><![CDATA[1. 突然想到怎样在Github上面预览自己的开源项目，然后就在网上找了看下，目前测试这个黑科技主要有以下三种方法：


http://htmlpreview.github.io/ 就是这个网址了，进去之后会直接让你输入你的项目的HTML文件地址，输入之后就可以直接预览了！
848


比如你的项目主页的地址是：https://github.com/xiugangzhang/ ... b/master/index.html
我们直接复制到上面的输入框就行，然后就可以看到效果了：




849




2.第二种方法其实就是第一种方法的一种实际扩展，直接在htmlpreview.github.io/?文件地址这个连接上输入你的地址就行了，相比上一个更简单。
预览出来的效果和上面的一样。


3. 第三种，这种方式相对来说可以生成一个相对更为简单的URL地址， 更加方便记忆：

首先在你的github上选择一个项目，进入仓库的设置页面，选择点击“setting选项就可以开始设置了；
找到GitHub Pages版块，选择Source为“master branch”，然后保存（保存以后默认会去找index.html文件），如果要访问其他页面，就直接在链接后面加上项目仓库的HTML文件名就行，即可跳转到demo显示的页面。
850



比如我这个生成的就是：
Your site is ready to be published at https://xiugangzhang.github.io/SuperMarioGame/.
直接访问即可！
]]></description><link>https://blog.gaoredu.com/article/2c43f049-b2fd-47aa-806c-389693e33457</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2c43f049-b2fd-47aa-806c-389693e33457</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 21 Aug 2018 20:52:01 GMT</pubDate></item><item><title><![CDATA[【考研政治】2018文都暑期强化班考研视频资料]]></title><description><![CDATA[847


马原是往年的，但是马原的也是有参考价值的，大家可以看下任燕翔的考研政治：
暑期强化班：链接: https://pan.baidu.com/s/1Y0o-CWLdgziQSO6fAnsiWw 密码: tbxe

]]></description><link>https://blog.gaoredu.com/article/61298dc5-17b2-49bd-a062-2393e99ee2c1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/61298dc5-17b2-49bd-a062-2393e99ee2c1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 21 Aug 2018 02:11:53 GMT</pubDate></item><item><title><![CDATA[【考研资料】2019张宇高教网考研数学终极盲解班视频教程]]></title><description><![CDATA[846


第一讲链接: https://pan.baidu.com/s/1YSpRu1luJ6ynUQXCwAAnTg 密码: kzqf
第二讲链接: https://pan.baidu.com/s/1hlljcEmfbi8fCXYHTVKKow 密码: yv3r
第三讲链接: https://pan.baidu.com/s/1_HLhhhw6uU00_fnDHGVrkg 密码: wck3
第四讲链接: https://pan.baidu.com/s/1zU_un-hf-unQoEP-fcAlWw 密码: u32h
第五讲链接: https://pan.baidu.com/s/1rnQki9wxVFpaaCwWaW0zrw 密码: vbwm
第六讲链接: https://pan.baidu.com/s/1ZtWyFLPvivTh0aXfPHgBIg 密码: c8z7
]]></description><link>https://blog.gaoredu.com/article/870bec51-4428-475f-a9ff-ea8880d6b269</link><guid isPermaLink="true">https://blog.gaoredu.com/article/870bec51-4428-475f-a9ff-ea8880d6b269</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 20 Aug 2018 02:19:12 GMT</pubDate></item><item><title><![CDATA[程序员网页测试插件---POSTMan本地发送POST/Get请求方法测试]]></title><description><![CDATA[844


对于经常写服务器后台程序的朋友都知道，浏览器默认是可以发送POST和GET请求了，而GET请求通常是非常好模拟的，直接在地址栏输入URL地址即可，这就是GET请求；但是浏览器是不能直接进行POST请求的，一种方法是使用HTMl写一个FORM表单，Method写成POST，然后通过提交POST请求的方式来提交数据；还有一种是通过ajax技术发送POST请求，程序员可以通过原生的js或者JQuery来实现，但这两种对于程序调试还不是太方便，建议大家使用POSTMAN这款工具进行程序测试。


845




目前的主要功能有:
- 已发送请求的历史记录- 快速创建请求- 重播和组织- 快速切换上下文- 内置身份验证帮助程序- 使用脚本自定义- 强大的测试框架- 自动化集合

下载链接：https://pan.baidu.com/s/1miyYjig
]]></description><link>https://blog.gaoredu.com/article/f50250df-f022-41c3-8a5c-4b6b5f977411</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f50250df-f022-41c3-8a5c-4b6b5f977411</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 19 Aug 2018 20:45:52 GMT</pubDate></item><item><title><![CDATA[2019张宇考研数学全程精讲班视频班（讲义+视频+习题讲解+冲刺）]]></title><description><![CDATA[843


导学班：链接: https://pan.baidu.com/s/1kxg4djd9RjoOBOonuEtIxg 密码: fv5f
高等数学基础班：链接: https://pan.baidu.com/s/1qAPZ1joDQPD1niT62lw94A 密码: e719
线性代数基础班：链接: https://pan.baidu.com/s/1w9nCrqp42Lx9tgOZSB6s4g 密码: 818h
概率论与数理统计：链接: https://pan.baidu.com/s/1V2UDBRMTx-RbqKZ9etxYdw 密码: b6pi
]]></description><link>https://blog.gaoredu.com/article/d1c3e3b2-63af-45d6-a604-f2c0260317e2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d1c3e3b2-63af-45d6-a604-f2c0260317e2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Aug 2018 21:01:18 GMT</pubDate></item><item><title><![CDATA[【项目实战】基于C#的OA项目实战视频教程（9天项目完整版）]]></title><description><![CDATA[842

1-4天：链接: https://pan.baidu.com/s/19ouSvPkx47foMj57p9FgKg 密码: kx4g
链接: https://pan.baidu.com/s/1E5rsaQVl51Q2XXM8ZRlczQ 密码: twv5
链接: https://pan.baidu.com/s/13VEPePKSvH6rVw8KApc_2A 密码: dxec
链接: https://pan.baidu.com/s/1EWqvWP0TcEQggpD2f6oRKQ 密码: jhsv
]]></description><link>https://blog.gaoredu.com/article/bfd4efe4-1457-4a5a-ad76-f273391eea75</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bfd4efe4-1457-4a5a-ad76-f273391eea75</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Aug 2018 20:50:15 GMT</pubDate></item><item><title><![CDATA[【黑科技】两种方法卡死电脑的原理及源码分析]]></title><description><![CDATA[不知道有没有朋友想制作一个让电脑卡死的木马或者病毒，然后让系统宕机，其实这种的思想就是制作一个循环或者递归调用，不断向系统申请内存，占用系统资源，直至系统内存占满，资源耗尽了，这个时候电脑也就崩溃了或者蓝屏了，下面介绍几种这种木马的制作原理与使用方法：
1.方法一：只有三行代码的“木马”（无限制打开CMD窗口）
:start
start
goto start


原理分析：
start 会直接开启一个dos窗口， goto start 是程序控制语言中的逻辑控制语句了，就会直接跳转到:start的位置执行，执行完毕之后又会执行start，不断开启新的DOS窗口，最终宕机。
阻止方案：
启动之后如果想要关闭的话，直接把最下面（最原始）开启的那一个DOS窗口关闭即可组织程序的进一步执行。



2.方法二：只有一行代码的“木马”
%0|%0


原理分析：
%0在这里指的就是要执行的木马程序本身。“|”就是通过管道的方式吧命令传给自己，并且每次都会开启新的线程，最终宕机。

阻止方案：
通过Ctrl+SHIFT+ESC按键快速启动windows任务管理器，然后找到经常，杀掉进程即可，或者利用上面的方法也是可以的。


3.以上两种的使用方法很简单，直接在你的电脑新建一个txt记事本文件，复制上面的代码到txt文件后，保存文件，然后修改文件的后缀名字为.bat即可
如果不了解文件后缀的朋友或者无法显示文件后缀的话，请参考如下步骤：
3.1 进入我的电脑，找到文件夹选项


839
如果没有文件夹选项的话，先在组织里面开启即可：

840

3.2 然后再查看选项卡里面。把下面的这个前面的勾选中“去掉”选中就行，然后继续按照上面的步骤执行就行。
841
]]></description><link>https://blog.gaoredu.com/article/3af0d62f-a2a0-4762-8f44-45455c2ac663</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3af0d62f-a2a0-4762-8f44-45455c2ac663</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 16 Aug 2018 21:27:32 GMT</pubDate></item><item><title><![CDATA[【前端框架】2018最新极客+中文网Bootstrap前端框架系列视频教程]]></title><description><![CDATA[极客学院Bootstrap前端框架入门系列视频教程：

838


9.Bootstrap 警告框、进度条和列表组
8.Bootstrap 基本组件
7.Bootstrap 过渡效果、模态框和下拉菜单
6.Bootstrap媒体对象、面板和Well
5.Bootstrap 输入框组、导航和导航条
4.Bootstrap 组件之下拉菜单、按钮组、按钮式下拉菜单
3.Bootstrap CSS 表单、按钮和图片
2.Bootstrap CSS 栅格、代码和表格
10.Bootstrap 滚动监听、标签页和工具提示
1.Bootstrap简介





视频下载链接：
https://yun.baidu.com/s/1nuKh5yD
]]></description><link>https://blog.gaoredu.com/article/886288aa-5ed7-47c7-9759-1f7103939dec</link><guid isPermaLink="true">https://blog.gaoredu.com/article/886288aa-5ed7-47c7-9759-1f7103939dec</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 16 Aug 2018 20:53:05 GMT</pubDate></item><item><title><![CDATA[2019何凯文KK考研英语六步骤阅读真题精讲班视频]]></title><description><![CDATA[837


KK考研英语阅读六步骤解题思路目录：


006—K哥真题阅读驳论文章解题技巧.flv
008—K哥真题阅读推理题解题方法.flv
003—K哥真题阅读细节题解题方法概述.avi
002—K哥真题阅读例证题解题方法.mp4
001—K哥真题阅读考研英语阅读解题方法概述.mp4
009—K哥真题阅读例证题与细节题的区分.flv
005—K哥真题阅读细节题解题方法精讲.flv
004—K哥真题阅读态度题解题方法.avi
007—K哥真题阅读which题型、主题题和标题题解题方法.flv





链接: https://pan.baidu.com/s/1i_sPuovi3Zpycoc5GjYkqQ 密码: 9ej5
]]></description><link>https://blog.gaoredu.com/article/4f27d8c9-dca0-42e7-bbf5-7dd6a96896af</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4f27d8c9-dca0-42e7-bbf5-7dd6a96896af</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 16 Aug 2018 17:33:25 GMT</pubDate></item><item><title><![CDATA[通过FLASK构建自己的专属视频网站视频教程]]></title><description><![CDATA[这个视频教程是基于Python 的，可以构建一个自己的视频网站，同时包括网站的源码以及全套视频教程


836




视频教程链接：链接：https://pan.baidu.com/s/10_t05Mw_EzNekt3uKb5UGA 密码：xe8n
]]></description><link>https://blog.gaoredu.com/article/f2bd1448-6167-4aba-9bb7-07e53af53184</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f2bd1448-6167-4aba-9bb7-07e53af53184</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 15 Aug 2018 02:33:19 GMT</pubDate></item><item><title><![CDATA[【考研资料】张宇考研数学二历年真题详解视频]]></title><description><![CDATA[主要是最新的张宇、李永乐的线性代数、以及文都考研数学的视频资料：
834


数学二视频链接：https://pan.baidu.com/s/1QtHNqxoNVPSa08Id6tI5ZA
]]></description><link>https://blog.gaoredu.com/article/3419c937-57bb-4a9f-9895-86be69e94aa6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3419c937-57bb-4a9f-9895-86be69e94aa6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 14 Aug 2018 03:05:32 GMT</pubDate></item><item><title><![CDATA[【Nodiejs环境搭建】使用Linux虚拟主机搭建自己的Nodejs服务器（超详细版）]]></title><description><![CDATA[1.要使用虚拟主机的SSH服务，需要联系主机客服开通，开通之后就可以使用 SSH 登录自己的帐户了。我这里使用的工具是SecureCRT工具8.3版本破解版的，需要的朋友先去把这个工具安装上，详情可以参见文章：SecureCRT 8.3版本官网最新破解版软件（附注册机）http://www.52tech.tech/forum.php?mod=viewthread&tid=714&fromuid=1833
2.安装之前，先去确定一下你的Linux版本，uname -a执行‘uname -a’ 命令，如果是i686 或者i386的话说明你的服务器是32位的，如果显示的是 x86_64，就是64位的主机。3.登录 SSH 之后，进入到虚拟主机的根目录，需要执行以下命令：cd ~
wget https://nodejs.org/dist/v7.9.0/node-v7.9.0-linux-x64.tar.gz （这里我使用的是在线安装，需要其他版本的可以先修改这里，或者去官网下载下来直接上传到虚拟主机。）其他版本的下载地址：https://nodejs.org/dist/，这里我下载的是tar.gz 格式的压缩包。 
4.输入以下命令解压 Node.js 文件：tar xzf node-v7.9.0-linux-x64.tar.gz5.然后就可以执行下面的命令把压缩包删除了：rm node-v7.9.0-linux-x64.tar.gz -f6.修改解压的文件夹 名字为 nodejs，这里可以更具自己的需求自定义修改哈，只不过要和后面的操作对应起来就行：mv node-v7.9.0-linux-x64 nodejs7.复制Node执行文件到上面的bin目录：mkdir ~/bin
cp nodejs/bin/node ~/bin
cd ~/bin


8. 配置系统全局环境变量，目的是让你可以在后面系统的任意目录下面都可以执行Node命令ln -s ../nodejs/lib/node_modules/npm/bin/npm-cli.js npm
9. 安装NPM管理工具
cd ~
npm install -g npm
10.如果上面执行的每一步都没有出错的话，name此时你已经成功安装了Node和NPM，可以通过执行下面的命令再次确认一下：node --version
npm --version执行命令之后，默认会显示你的Node和NPM管理工具的版本号。
]]></description><link>https://blog.gaoredu.com/article/32baccec-8af8-42df-bcd9-e7acf608c2d0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/32baccec-8af8-42df-bcd9-e7acf608c2d0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 13 Aug 2018 21:22:56 GMT</pubDate></item><item><title><![CDATA[【源码】非常烂漫的程序员专属七夕情人节的专属表白程序源码]]></title><description><![CDATA[一年一度的气息情人节就快要到了，在这里我爱科技论坛的技术人员也为各位单身青年打造了一份程序员专属的情人节表白礼物，这个情人节，用它就够了！这个使用的技术主要有：HTML，CSS和JavaScript语言，此外还用到了HTML5语言的一些新特性，比如Canvas画布，其他的大家就根据源码或者自己的想象力自己改造吧！

832


index.HTML源码如下：
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
        <title>Our Love Story</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <style type="text/css">
                @font-face {
                        font-family: digit;
                        src: url('digital-7_mono.ttf') format("truetype");
                }
                

        </style>
        
        <link href="css/default.css" type="text/css" rel="stylesheet">
        <script type="text/javascript" src="js/jquery.js"></script>
        <script type="text/javascript" src="js/garden.js"></script>
    <script type="text/javascript" src="js/functions.js"></script>
</head>

<body>
        <div id="mainDiv">
                <div id="content" style="margin-top: 0px;">
                        <div id="code" style="margin-top: 0px;">
                                <span class="comments">/**</span><br />
                                <span class="space"/><span class="comments">* We are both friends now,</span><br />
                                <span class="spac2018/2/12 23:30:37e"/><span class="comments">* so I wish you a happy Valentine's day.</span><br />
                                <span class="space"/><span class="comments">*/</span><br />
                                Boy i = <span class="keyword">new</span> Boy(<span class="string">"Boy"</span>);<br />
                                Girl u = <span class="keyword">new</span> Girl(<span class="string">"Girl"</span>);<br />
                                i.meet(u);<br />
                                u.helped(i);<br />
                                <span class="comments">// Since then, we become friends.</span><br />
                                u.becomeFriendsWith(i);<br />
                                <span class="keyword">boolean</span> isSad = <span class="keyword">true</span>;<br />
                                <span class="keyword">while</span> (isSad) {<br />
                                <span class="placeholder"/>i.bless(u);<br />
                                <span class="placeholder"/><span class="comments">// I wish you a happy Valentine's day in advance.</span><br />
                                <span class="placeholder"/><span class="comments">// and happy every day in your life.</span><br />
                                <span class="placeholder"/>isSad = u.happyNow();<br />
                                }<br />
                                <span class="comments">// After all, I hope you are happy every day in the days to come.</span><br />
                                i.hope();<br />
                                i.liveHappilyWith(u);<br />
                        </div>
                        <div id="loveHeart">
                                <canvas id="garden"></canvas>
                                <div id="words">
                                        <div id="messages">
                                                Girl, I have been meeting you for 
                                                <div id="elapseClock"></div>
                                        </div>
                                        <div id="loveu">
                                                Happy Valentine's Day.<br/>
                                                <div class="signature">- Boy</div>
                                        </div>
                                </div>
                        </div>
                </div>
                
        </div>
        <script type="text/javascript">
                var offsetX = $("#loveHeart").width() / 2;
                var offsetY = $("#loveHeart").height() / 2 - 55;
                var together = new Date();
                together.setFullYear(2017, 10, 26);
                together.setHours(10);
                together.setMinutes(55);
                together.setSeconds(0);
                together.setMilliseconds(0);
                
                if (!document.createElement('canvas').getContext) {
                        var msg = document.createElement("div");
                        msg.id = "errorMsg";
                        msg.innerHTML = "Your browser doesn't support HTML5!<br/>Recommend use Chrome 14+/IE 9+/Firefox 7+/Safari 4+"; 
                        document.body.appendChild(msg);
                        $("#code").css("display", "none")
                        $("#copyright").css("position", "absolute");
                        $("#copyright").css("bottom", "10px");
                    document.execCommand("stop");
                } else {
                        setTimeout(function () {
                                startHeartAnimation();
                        }, 5000);

                        timeElapse(together);
                        setInterval(function () {
                                timeElapse(together);
                        }, 500);

                        adjustCodePosition();
                        $("#code").typewriter();
                        
                        //alert("ok");
                }
        </script>
        <script>  
var b = document.body;  
var c = document.getElementsByTagName('canvas');  
var a = c.getContext('2d');  
document.body.clientWidth;  
</script>  
<script>  
  
with(m=Math)C=cos,S=sin,P=pow,R=random;c.width=c.height=f=600;h=-250;function p(a,b,c){if(c>60)return;A=a*2-1;B=b*2-1;if(A*A+B*B<1){if(c>37){n=(j=c&1)?6:4;o=.5/(a+.01)+C(b*125)*3-a*300;w=b*h;return}if(c>32){c=c*1.16-.15;o=a*45-20;w=b*b*h;z=o*S(c)+w*C(c)+620;return}o=A*(2-b)*(80-c*2);w=99-C(A)*120-C(b)*(-h-c*4.9)+C(P(1-b,7))*50+c*2;z=o*S(c)+w*C(c)+700;return}}setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%46/.74)){z=s;x=~~(s*f/z-h);y=~~(s*f/z-h);if(!m|m>z)m=z,a.fillStyle="rgb("+~(s*h)+","+~(s*h)+","+~(s*s*-80)+")",a.fillRect(x,y,1,1)}',0)  
  
</script>  
        <embed src="./music/Somewhere.mp3" width="170" height="25" type="audio/mpeg" autostart="true" loop="infinite" hidden="true"></embed>
</body>
</html>



预览界面：点我进入

由于这个背景音乐比较大，我这边基本上也都上传到百度云盘了，有需要的可以去下载：
非常烂漫的程序员专属七夕情人节的专属表白程序源码下载链接: https://pan.baidu.com/s/1qwVUrOsYBsW6Ze6uHeYAyA 密码: dbwf


]]></description><link>https://blog.gaoredu.com/article/79acc4ad-8e2d-4665-b60b-f025fdc1f914</link><guid isPermaLink="true">https://blog.gaoredu.com/article/79acc4ad-8e2d-4665-b60b-f025fdc1f914</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 13 Aug 2018 02:33:52 GMT</pubDate></item><item><title><![CDATA[SecureCRT 8.3版本官网最新破解版软件（附注册机）]]></title><description><![CDATA[SecureCRT软件是一款可以登录Linux 系统的远程链接工具，如果各位有自己的Linux服务器或者是许主机，都是可以使用这个工具链接的，但是如果是要使用SSH链接的话前提是你的主机或者服务器默认开通了SSH服务，如果没开通就要找你的主机运营商申请开通，然后就可以进入后台开通即可，开通之后会得到两个钥匙，一个是公匙，一个是私匙，前者是放在你的远程主机，后者是下载下来放在你的客户端，后面使用的这个工具的时候会用到。


831


下载的链接在下面：
地址链接：https://pan.baidu.com/s/1UPLOtKCG7wnjDBL7Y4oWuA 密码：7qq3
]]></description><link>https://blog.gaoredu.com/article/b4a63276-a9e0-4c9e-a2d0-b17725572132</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b4a63276-a9e0-4c9e-a2d0-b17725572132</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 12 Aug 2018 02:17:28 GMT</pubDate></item><item><title><![CDATA[【黑科技】如何快速解决Webstorm在低配机下运行卡顿的问题]]></title><description><![CDATA[828

Webstorm应该可以说是当前Web开发的一款利器了，相比于Sublime，Vscode等编辑器，这款IDE有这更强大的功能，而且还支持断点调试功能，应该算是程序员节的一个福利了。但是有时候对一些低配机下面安装Webstorm的时候，使用的时候可能是机器跟不上吧，时而有卡顿的问题，今天就来带大家三招解决这个问题。

第一招：打开Webstorm的安装位置
829

第二招：打开上面红色框标注的文件，注意：这里要看你是使用的是哪个版本的，因为默认有一个是32，一个是64位的，但是两个并不是都可以使用，因此直接在上面试一下看那一个版本可以打开，因为我使用的是64位的，而且Webstorm64.exe这个文件可正常打开，因此我就使用记事本打开下面的这个文件；
830

第三招：记得修改这个文件 前两行就行了，第一个可以往大了调整一下就行，但是不能超过1024MB，否则会出现打不开的情况，那可就不好玩了。
最后修改完毕之后重启即可，飞一般的使用Webstorm了，下面附上我的调整参数信息。
-Xms526m
-Xmx1024m

这个黑科技的核心也就是上面的两行代码了，大家可以自行去测试一下。


]]></description><link>https://blog.gaoredu.com/article/12de9e78-6414-48e7-bf91-d7d568556836</link><guid isPermaLink="true">https://blog.gaoredu.com/article/12de9e78-6414-48e7-bf91-d7d568556836</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 11 Aug 2018 20:13:12 GMT</pubDate></item><item><title><![CDATA[【黑科技】快速批量提取B站所有视频链接并全部下载的方法]]></title><description><![CDATA[今天来介绍一下如何快速下载b站里面的视频，我们都知道，相爱奇艺优酷腾讯视频这些网站。视频的默认播放链接都是不公开的，要通过特殊手段进行视频真事链接的解析才可以。
1.需要的工具和环境
工具：唧唧B站视频下载工具（包括电脑在线版和离线的客户端）
环境：windows浏览器，B站视频网站
824

2.这个网站上面好多视频还是挺不错的，要是下载下来观看也是很不错的，下面直奔主题。直接来到唧唧官网http://www.jijidown.com/。
825


3.里面有一个输入框，直接输入B站里面的视频链接然后开始解析就可以找到视频的真实地址，然后直接下载到本地即可。还有一个就是离线工具了。
http://client.jijidown.com/在这个网站找到离线工具下载，其他操作同上。
826


离线版本的百度云下载链接：
链接：https://pan.baidu.com/s/1dUsBLW 密码：j4lq


4.不过上面的两种方法都不推荐哈，建议大家直接下载B站的视频客户端工具，里面就有视频的缓存工具，不知道大家发现了没有。
827


不过这种方式下载下来的视频格式是blv格式的，大家下载下来之后直接将文件后缀改为.mp4就行，也可以正常播放！
注意事项：
1.建议大家使用离线版本的下载工具，在线版本的经测试不太稳定
2.下载工具上面任意选择一个就行
]]></description><link>https://blog.gaoredu.com/article/0758c293-c609-4ab0-9d11-83777e9c6575</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0758c293-c609-4ab0-9d11-83777e9c6575</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Aug 2018 03:22:55 GMT</pubDate></item><item><title><![CDATA[【工具软件】实用的电脑收银付费系统破解免费版（无需激活）]]></title><description><![CDATA[目前该软件内部已经破解，有效期到2099年，基本上就是可以一直使用啦。
823


主要功能模块如下：
商品、会员、促销、用户的管理
统计查询
业绩分析
系统设置
增值服务
前台收银
总的来说基本的功能都有了，而且用户界面做的也是很友好的，同时也支持二维码收付款，其他的具体功能请自测！
开源软件下载链接: https://pan.baidu.com/s/1JZgCH7JErI1HTJkCeP7vvQ 密码: 9999
]]></description><link>https://blog.gaoredu.com/article/47a4bedc-6624-4161-b664-b6e878aaf25f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/47a4bedc-6624-4161-b664-b6e878aaf25f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Aug 2018 02:52:17 GMT</pubDate></item><item><title><![CDATA[【通知公告】关于我爱科技论坛新增我爱科技在线音乐播放器模块的通知]]></title><description><![CDATA[为进一步丰富论坛内现有的资源模块，论坛现开通了我爱科技论坛-在线音乐播放器，用户可以直接进入，体验海量的音乐资源，让你无需安装任何插件和音乐播放器直接可以在线播放，并且可以支持歌曲下载，用户网易云音乐ID号导入音乐列表的功能，所有音乐播放完全免费，快去体验吧！快速体验链接：http://www.52tech.tech/music/

音乐列表界面：
819



音乐搜索功能：
820


音乐免费下载功能：
821


网易云音乐ID导入（我的歌单同步功能）：
822




至于用户体验嘛，还在不断提升改善中，感兴趣的用户快去体验吧。
我爱科技论坛-在线音乐播放OnlineMusicPlayer：http://www.52tech.tech/music/

]]></description><link>https://blog.gaoredu.com/article/6c12e567-2c89-4486-80c7-4eb01f38ebb4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6c12e567-2c89-4486-80c7-4eb01f38ebb4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 09 Aug 2018 02:54:43 GMT</pubDate></item><item><title><![CDATA[【JavaScript爬虫】使用JavaScript+Nodejs抓取新浪博客内容的思路和源码分析]]></title><description><![CDATA[1.主要用的的环境和工具包
开发环境：Webstorm+win7+Node.js
需要用到的工具包：request和cheerio这两个工具包（使用npm install的方式安装即可）


2.主要源码如下：
"use strict";

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');

const url = 'http://blog.sina.com.cn/s/articlelist_1196037175_0_1.html';



// 获取模板字符串, 慧姐使用同步的方式读取数据
// 在外部拿到模板字符串，为了多次使用
const templateStr = fs.readFileSync(path.join(__dirname, 'template.html'));



/**
 * 用户获取文章的列表信息
 * @param url
 * @param callback
 */
function getArticleList(url, callback) {
    request(url, function (err, res, body) {
        if (err) {
            //throw new Error('error');
            return callback(err, null);
            //return;
        }
        // 开始解析body
        let $ = cheerio.load(body);
        // 定义一个数组，用于存储解析的结果信息
        let articleList = ;
        //console.log($.html());

        // 注意： 在使用箭头函数的时候， 函数内部的this并不是绑定的每一项
        $('.articleList .articleCell ').each(function () {
            // 拿到每一行的元素， 这里如果使用箭头函数的时候访问this的话，就会找不到了
            let $this = $(this);
            //console.log(this); error

            //console.log($this);
            // 得到文章标题链接
            let $title = $this.find('.atc_title a');
            // 得到时间（注意事项：一个class标签可能是会有多个class的属性）
            let $time = $this.find('.atc_tm');

            articleList.push({
                title: $title.text(),
                url: $title.attr('href'),
                time: $time.text()
            });
        });


        // 实现递归抓取文件的思路
        // 1. 递归条件： 是否有下一页
        // 当前页面内容抓取完毕之后，开始抓取下一页的内容
        let nextURL = $('.SG_pgnext a').attr('href');
        if (nextURL){
            // 如果有下一下的话，就进行递归抓取
            getArticleList(nextURL, function (err, list) {
                if (err){
                    return callback(err, null);
                }
                // 如果有下一次的话，就把本次的数据集合和上一次结果集合放在一起
                callback(null, articleList.concat(list));
            });
        } else{
            // 打印输出得到的文件列表
            //console.log(articleList);
            callback(null, articleList);
        }




    });
}


/**
 * 获取文章的细节信息
 * @param url
 * @param callback
 */
function getDetailByUrl(url, callback) {
    // 进入到文章的细节信息
    request(url, function (err, res, body) {
        if (err) {
            return callback(err, null);
        }

        // 把body转换为一个类似于JQuery的对象
        let $ = cheerio.load(body, {
            decodeEntities: false    // 把内容的编码设置一下
        });
        // 获取博客的内容信息
        let html = $('.articalContent').html();
        let content = (html === null ? html : html.toString().trim());
        callback(null, content);
    })
}


// 获取所有的文章列表信息
/**
 * 这是一个函数调用，用于获取文章列表之后所执行的一系列操作
 */
getArticleList(url, function (err, articleList) {
    if (err) {
        throw new Error('error');
    }
    //console.log(articleList);
    articleList.forEach(function (item, index) {
        let url = item.url;

        // 根据博客的URL信息偶去博客的内容信息
        // 获取信息这实际上是一个异步信息，会直接把这么多的信息加入到事件队列中区
        getDetailByUrl(url, function (err, detail) {
            if (err) {
                return console.log(err, url);
            }

            // 获取到数据之后保存信息到本地
            // 【注意事项： 在Nodejs中向一个文件中写入数据的时候必须保证这个文件夹路径存在，否则会报错！】
            let filePath = path.join(__dirname, 'data', item.title.toString().trim() + '.html');


            // 使用 replace的方式来设置模板中的内容信息
            detail = templateStr.toString().replace('<%content%>' , detail);

            fs.writeFile(filePath, detail, (err) => {
                if (err) {
                    return console.log(filePath + '文件保存失败！')
                }
                console.log(`文件: ${filePath} 保存成功！`);
            });
        })
    });
})




实现思路剖析：
1.可以通过新浪博客的内容看到这个上面抓取的网址，一页基本上有20篇文章左右，关键就用到了那个cheerio工具包，当然你也可以使用原生的JavaScript和正则表达式进行操作
2.实现原理：首先使用request获取请求的url，得到网址的源码，然后使用cheerio将源码解析成为一个JQuery对象，然后使用JQuery直接操作DOM元素解析文章内容
3.关键点：有于当前测试的是一页的博客抓取，对于多页的博客，使用递归的方式进行抓取，主要是通过判断当前博客是不是有下一页的链接，有的话就进行递归，没有的话就停止（递归条件）
4.其他：其他涉及到的就是一些node.js文件的基本读写操作，熟悉的朋友应该都看的懂



]]></description><link>https://blog.gaoredu.com/article/9063c695-344c-4130-b9be-485267a75a77</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9063c695-344c-4130-b9be-485267a75a77</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 08 Aug 2018 22:44:10 GMT</pubDate></item><item><title><![CDATA[使用Xamapp快速搭建一个自己的PHP开发运行环境]]></title><description><![CDATA[最近经常涉及到PHP的一些操作，经常是是代码先在本地调试，然后上传到服务器，今天就来简单说下快速搭建一个PHP运行环境。
1.需要的工具和软件
Xamapp软件：https://www.apachefriends.org/zh_cn/download.html
Windows7专业版/旗舰版操作系统
815


这个软件大家直接到官网上面去下载就行，这里我选择的是最新版本的环境，因为没有64位的，所以这里我们直接选择一个32位的软件安装即可。


2.安装过程也是比较简单的，只要大家选择好了安装路径之后，建议别选择C盘。然后一直下一步安装即可。下面的这个是安装好的效果。红框里面基本上是我们需要用到的两个必备运行环境；
816


3.因为我们迫切需要的是如何运行别人已经写好的PHP网站源码，至于配置的细节这里就不多讲，直奔主题。
我们来到我们选择的这个软件的安装路径，我这里选择的是D盘，然后选择htdocs这个目录进去即可。
D:\xampp\htdocs
把我们的网站源码解压到这个目录下面，建议新建一个文件夹，然后解压到这个文件夹里面。下面的这个是我的目录组织方式。
817


4. 然后我们赋值进去之后，爱是启动启动前面提到的两个服务。
818


5.正常启动之后，就可以通过：localhost/video(文件夹名字)这样的方式访问到了，前提是这个文件夹里面必须要有index.php文件。


注意事项：
1.文件夹里面有index.php文件
2.文件夹目录是这个：htdocs目录


记住上面两个要点，一般是不会有其他问题的，快去试试看吧！
]]></description><link>https://blog.gaoredu.com/article/df1cd5e5-dea1-4d86-9236-8c6315e3f6dc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/df1cd5e5-dea1-4d86-9236-8c6315e3f6dc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 08 Aug 2018 03:25:33 GMT</pubDate></item><item><title><![CDATA[【通知公告】关于我爱科技论坛VIP视频在线影院手机及/和电脑版更新的通知]]></title><description><![CDATA[为进一步方便广大用户的需要，我爱科技论坛对论坛部分模块进行了升级，此次主要是对于我爱科技论坛的在线VIP影院部分进行了升级，此次升级部分包括兼容了手机和电脑两个平台的访问，让以后在手机上访问的用户也可以观看海量优质的VIP视频，目前该模块处于测试阶段，用户在使用的过程中有任何问题可以随时在相应的评论区域进行评论。


电脑版：
811


电脑版观看方式和老版相同：
813


手机版：
812


手机版观看直接选择相应接口点击观看即可：
814




此外还支持留言功能，对于这个版本的VIP视频解析有什么问题的亲们，可以直接在下方留言即可。


老版观看地址:http://www.52tech.tech/portal.php?mod=topic&topicid=1
新版观看地址：http://vip.52tech.tech/

]]></description><link>https://blog.gaoredu.com/article/c083a328-5b6a-4d0f-bce0-245796dd1732</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c083a328-5b6a-4d0f-bce0-245796dd1732</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 08 Aug 2018 02:42:33 GMT</pubDate></item><item><title><![CDATA[【通知公告】关于我爱科技论坛手机版改版后的通知]]></title><description><![CDATA[自从我爱科技论坛开通以来，论坛一直致力于分享考研资料、编程学习、黑科技/科学上网、开源软件等资源，在这一路中，也得到了许多网友的支持，论坛的服务和资源也不断地在完善中，先后开通了VIP视频专区、科学上网专区、我爱科技书库等多个专区，期间也得到了不少网友的反馈建议，手机访问用户支持量也得到了进一步提升，为进一步提升手机端用户的访问体验，现开通手机版触屏版和手机精简版两种访问方式，用户可以自由选择。


1.用户访问首页
807


2.菜单选择
808


3.模块浏览
809


4.用户资料查看
810


其他发帖模块和帖子查看和电脑版访问的基本操作类似，具体的其他功能各位论坛友友们快去尝尝鲜吧！


]]></description><link>https://blog.gaoredu.com/article/d8b5b3dc-9c5e-419d-8f0a-644bac00ed62</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d8b5b3dc-9c5e-419d-8f0a-644bac00ed62</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 07 Aug 2018 02:24:47 GMT</pubDate></item><item><title><![CDATA[win7旗舰版摄像头管理工具，解决电脑重装系统后找不到摄像头的问题]]></title><description><![CDATA[1.经常换系统的朋友不知道有没有注意到，在每次换系统之后，一系列的资料软件恢复实在特折腾了，有时候也会发现找不到电脑摄像头的快捷方式是吧，今天小编就带你一起解决这个问题。首先来看下我解决之后的效果，在本地多了一个视频设备的图标，双击后就可以直接打开摄像头了。
804


2.解决方法也是比较简单，就是使用我下面提供的的这个windows工具软件就行了，基本上不需要你懂太多的东西就可以实现。
这个软件的名字叫做：Win7摄像头软件ECap 8.0.exe软件，如果是第一次打开的话，就会出现安装win7摄像头软件，因为我之前已经安装过了这个软件，所以下面已经显示了卸载这个软件了，然后点击这个按钮之后，就会发现我上面的那个图标了。
805




3.我们双击安装后的视频设备这个图标来看下，有文件、设备、选项、捕捉和帮助五个选项，基本上可以拍照摄像，具体的其他功能大家就亲自去试试看吧。
806


win7摄像头工具软件下载链接：

刮开涂层可见密码：http://pan.baidu.com/s/1qWLq46g密码：vit4



]]></description><link>https://blog.gaoredu.com/article/1fd38ef2-75cd-410b-bd92-e4991d663600</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1fd38ef2-75cd-410b-bd92-e4991d663600</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 06 Aug 2018 01:49:30 GMT</pubDate></item><item><title><![CDATA[[黑科技]如何给Webstorm手动配置自己喜欢的代码注释样式]]></title><description><![CDATA[1.打开Webstorm之后，选择File--》settings，进入设置的选项，然后在Editor下面找到Language defaults选项，就可以开始配置了
800


2.然后我们选择自己想要的颜色，选择即可

801



3.如果我们是要针对某个编程语言进行配置的话，就在下面找到相应的语言，进行配置即可，这里我们选择JavaScript，这里也就是这个黑科技的核心了，你需要修改什么语言在这里选择就可以了，其他比如Pycharm,Idea这些也是一样的哈。
802


4.配置方法和上面是完全一样的，下面是配置好了以后JavaScript注释代码的颜色803



]]></description><link>https://blog.gaoredu.com/article/19c4720d-6e57-4e50-a08f-ce31da8d09c2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/19c4720d-6e57-4e50-a08f-ce31da8d09c2</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 05 Aug 2018 23:04:11 GMT</pubDate></item><item><title><![CDATA[机器学习+深度学习+神经网络+TensorFlow项目实战视频教程]]></title><description><![CDATA[799








深度学习，神经网络Tensorflow链接：https://pan.baidu.com/s/12QlFvd-2ZDPAV5qyQws7BQ 密码：BI34







]]></description><link>https://blog.gaoredu.com/article/6c4fe274-d445-4264-bf2a-179cb6abe426</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6c4fe274-d445-4264-bf2a-179cb6abe426</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 04 Aug 2018 02:29:34 GMT</pubDate></item><item><title><![CDATA[一套价值8800元的excel视频教程c分享]]></title><description><![CDATA[798

一套价值8800元的excel教程教程分享

EXCEL视频一
链接：https://pan.baidu.com/s/1qbgOiSigrMRkKv6R5H0Trg 密码：oqch




EXCEL视频二
链接：https://pan.baidu.com/s/1ibbqyseMLENNpPyyJpJF8Q 密码：h03t


]]></description><link>https://blog.gaoredu.com/article/281e064f-eb96-4770-91ac-c3677879703a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/281e064f-eb96-4770-91ac-c3677879703a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 03 Aug 2018 02:56:44 GMT</pubDate></item><item><title><![CDATA[玩转Python，学完这套视频你就是领域专家了（104天全）]]></title><description><![CDATA[797


day95 多线程，异步
day94 微信收发消息
day93 登录微信
day88 堡垒机批量命令
day87 堡垒机前端
day86 用户交互 parmaiko
day85 堡垒机需求
day84 权限管理



Python文件夹，开发环境配置，语言基础，零基础入门
补：
Python全栈VIP
链接：https://pan.baidu.com/s/1yIPOowICtgtxGVM_mXEigQ 密码：yqxn

]]></description><link>https://blog.gaoredu.com/article/edf50856-4071-49ca-8d2c-63b0d7b1ab49</link><guid isPermaLink="true">https://blog.gaoredu.com/article/edf50856-4071-49ca-8d2c-63b0d7b1ab49</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 02 Aug 2018 02:52:21 GMT</pubDate></item><item><title><![CDATA[2020最新唐宇迪机器学习&amp;深度学习全套视频教程]]></title><description><![CDATA[796

01人工智能入门指南（有基础的同学请略过！）
02Python科学计算库-Numpy
03python数据分析处理库-Pandas
04Python数据可视化库-Matplotlib
05Python可视化库Seaborn
06线性回归算法原理推导
07梯度下降策略
08逻辑回归算法
09案例实战：Python实现逻辑回归与梯度下降策略
10项目实战-交易数据异常检测
11决策树算法
12案例实战：使用sklearn构造决策树模型
13集成算法与随机森林
14案例实战：泰坦尼克获救预测
15贝叶斯算法
16Python文本数据分析：新闻分类任务
17支持向量机
18案例：SVM调参实例
19聚类算法-Kmeans
20聚类算法-DBSCAN


下载链接：https://pan.baidu.com/s/1MdT9ryycnaA2RpluSN2gwA




]]></description><link>https://blog.gaoredu.com/article/66ca19ea-81ef-4101-90d2-f4657826d620</link><guid isPermaLink="true">https://blog.gaoredu.com/article/66ca19ea-81ef-4101-90d2-f4657826d620</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 02 Aug 2018 02:37:25 GMT</pubDate></item><item><title><![CDATA[Oracle+MySQL+MongoDB数据库入门到精通系列教程【包含数据库调优知识】]]></title><description><![CDATA[主要包是关于目前市场上常用的数据库系列教程，包含了主流数据库的基础知识到精通的系列教程，此外还有韩顺平老师的MySQL数据库调优的知识。
高性能可扩展mysql
Mysql视频教程
mongodb视频教程
oracle视频教程


795


关于MySQL的知识如下：

小辉老师主讲MySQL入门到全面精通视频教程 全40讲
尚学堂MYSQL简明教程
刘道成MySql系列教程
猎豹网校 MySQL 数据库等多个文件


老男孩Mysql DBA高级运维系列课程(16部)价值1600


后盾网MYSQL数据库视频教程


第二版Mysql优化-韩老师


MYSQL基础


MySQL_Front_Setup.1765185107.exe


mysql-installer-community-5.6.24.0.msi








下载链接：https://pan.baidu.com/s/1Ymg0GomI7jvZpPUQ6HgShQ 密码：f01h




]]></description><link>https://blog.gaoredu.com/article/93904ab1-11bf-46d7-b0e8-ecb5d87fba1b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/93904ab1-11bf-46d7-b0e8-ecb5d87fba1b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 01 Aug 2018 02:38:25 GMT</pubDate></item><item><title><![CDATA[2019最新韩顺平老师全力打造的尚硅谷_Linux视频教程教程]]></title><description><![CDATA[主要是Linux的视频教程，内含代码、笔记、文档、视频资料。
794




远程访问工具.zip

vm12.zip

ubuntu下载地址.txt

ubuntu-优麒麟.zip

ubuntu-16.04.zip

mysql-5.6.14.tar.gz

jdk-7u79-linux-x64.gz

eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz

CentOS-6.8-x86_64-bin-DVD1.iso

apache-tomcat-7.0.70.tar.gz





下载地址：https://pan.baidu.com/s/1AmDqMODihyifgW9gevrSwA  
密码: kxpp
]]></description><link>https://blog.gaoredu.com/article/326d60ab-dfd7-41d8-89a7-37a03edd7f38</link><guid isPermaLink="true">https://blog.gaoredu.com/article/326d60ab-dfd7-41d8-89a7-37a03edd7f38</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 31 Jul 2018 21:15:05 GMT</pubDate></item><item><title><![CDATA[【java设计模式】北风网《设计模式系列课程》32讲视频教程下载]]></title><description><![CDATA[793
792


设计模式PPT.rar
32第三十二讲：UML类图(下).zip
31第三十一讲：UML类图（上）.zip
30第三十讲：基础五迪米特法则.zip
29第二十九讲：基础四依赖倒转原则.zip
28第二十八讲：基础三里氏代换原则.zip
27第二十七讲：基础二单一职责原则.zip
26第二十六讲：基础一开放封闭原则.zip
25第二十五讲：访问者模式.zip
24第二十四讲：命令模式.zip
23第二十三讲：状态模式.zip
22第二十二讲：备忘录模式.zip
21第二十一讲：模板方法模式.zip
20第二十讲：迭代模式.zip
19第十九讲：职责链模式.zip
18第十八讲：中介者模式.zip
17第十七讲：解释器模式.zip
16第十六讲：适配器模式.zip
15第十五讲：桥接模式.zip
14第十四讲：组合模式.zip
13第十三讲：外观模式.zip
12第十二讲：代理模式.zip
11第十一讲：享元模式.zip
10第十讲观察者模式.zip
09第九讲策略模式.zip
08第八讲装饰模式.zip
07第七讲建造者模式.zip
06第六讲原型模式.zip
05第五讲单例模式.zip
04第四讲工厂模式在开发中的运用.zip
03抽象工厂模式.zip
02工厂方法模式.rar
01简单工厂模式.rar




下载链接：链接: http://pan.baidu.com/s/1i4ISsLZ 密码: f2qc


]]></description><link>https://blog.gaoredu.com/article/28744ca3-abd3-4dd1-9b60-7963b9e9e2e3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/28744ca3-abd3-4dd1-9b60-7963b9e9e2e3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 31 Jul 2018 02:45:15 GMT</pubDate></item><item><title><![CDATA[【PHP开发】韩顺平PHP从入门到精通项目驱动式开发全套视频教程]]></title><description><![CDATA[791

韩顺平PHP视频资料打包下载链接：https://pan.baidu.com/s/15rk5yuTTvqhppy5zz5D21w
密码：eozo
]]></description><link>https://blog.gaoredu.com/article/e9f7c8bd-74c3-465d-8f13-b6c622496f18</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e9f7c8bd-74c3-465d-8f13-b6c622496f18</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 30 Jul 2018 20:49:16 GMT</pubDate></item><item><title><![CDATA[【OpenCV】2018最新计算机视觉神经网络算法视频教程]]></title><description><![CDATA[视频总共有8集，每节课基本上有两个左右的的学时，每节课的时长在1个多小时，建议大家分阶段观看。790





OpenCV视频全集下载链接：
https://pan.baidu.com/s/1RJwaiSs4XECDJ3rBMQ93mg 密码：4427


]]></description><link>https://blog.gaoredu.com/article/2e0f0b73-6c03-45b5-ba38-69f0170eb6f6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2e0f0b73-6c03-45b5-ba38-69f0170eb6f6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 30 Jul 2018 03:07:19 GMT</pubDate></item><item><title><![CDATA[【windows激活】黑科技之快速解决windows7旗舰版提示windows副本不是正版的问题]]></title><description><![CDATA[1.本来Win7旗舰版系统都安装了很久了，之前使用小马激活工具激活了，但是今天突然提示如下信息：Windows7 内部版本7600 次windows副本不是正版，当时觉得没啥，可能是之前的激活过期了，准备再次使用小马激活工具激活一次，没想到试了好几遍都不行，win7桌面还是一团黑屏。
787


2.经过了一番折腾，最终找到以下有效解决方法：
使用Win+R, 输入命令：Services.msc
788


3.打开服务管理中心，把下面的两个服务重新启动以下即可（黑科技重点）。
Software Protection：启用 Windows 和 Windows 应用程序的数字许可证的下载、安装和实施。如果禁用该服务，操作系统和许可的应用程序可能以通知模式运行。强烈建议您不要禁用软件保护服务。
SPP Notification Service：提供软件授权激活和通知


789


4.然后重启电脑，这个问题就可以解决了。

]]></description><link>https://blog.gaoredu.com/article/b527bdcb-c433-42d5-bf34-892614303f72</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b527bdcb-c433-42d5-bf34-892614303f72</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 29 Jul 2018 21:08:54 GMT</pubDate></item><item><title><![CDATA[【Github刷赞】如何快速增加自己Githu网站上面自己开源项目的人气（点赞量）]]></title><description><![CDATA[1.这个主要是指自己近期发现的一个比较好用的Github互赞社区，基本上是可以互相点赞的，而不是刷赞，应该还是比较安全可靠的。首先我们来到这个网站：http://gitstar.top:88/

最新刷赞地址链接补发更新：http://47.95.194.180/
784


2.这个是我目前的登录界面，进去之后第一次需要注册哈，按照要求进行注册即可。登录之后下面的这一块就是我已经点赞的项目（灰色的），如果不是灰色的话，就是我们还没有点赞的项目，直接进去点赞即可。
785


3.当我们进去点赞之后，我们会发现，自己的Github项目竟然也多了一个赞，是不是很神奇哈，一天基本上可以刷个四五十个赞吧，快去试试看吧。
786
注意事项：
a：别人给你点赞之后也要尽快回赞哈，毕竟要讲究诚信嘛
b：给别人点赞之后有时候可能网络原因需要等一会哈

]]></description><link>https://blog.gaoredu.com/article/a0dd95e0-4bc4-4066-bd71-62c48f1b7c14</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a0dd95e0-4bc4-4066-bd71-62c48f1b7c14</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 28 Jul 2018 03:11:47 GMT</pubDate></item><item><title><![CDATA[【JavaScript闭包】对JavaScript中闭包的深入理解]]></title><description><![CDATA[<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // <!--// 块级作用域： -->
    // 限制变量或者函数的作用域


    // 【闭包】：在函数内定义的变量，外界无法访问！！！

    // 如何访问？？？
    (function () {
        // 立即函数+闭包【沙盒模式+沙箱模式】
    })();



    // 这个函数是专门用来获取a的数值的（唯一性）,  这个函数实际上返回的是一个函数
    function f() {
        var a = Math.random();
        // 通过返回一个函数的方式返回一个a
        return function () {
            return a;
        };
    }

    // 只要调用了一次f（）函数，内存里面就只有一个a变量
    var foo = f();


    // 每次执行foo这个函数就可以得到我想要的变量
    var  n = foo();
    console.log(n);
    console.log(foo());
    n = foo();
    console.log(n);
    console.log(f());


    // 对闭包的理解加强
    function getA() {
        var a = Math.random();
        return a;
    }
    // 要想得到a这个变量，我只能每次与调用一下getA()函数，但是每次拿到的结果竟然不同？？？
    var a = getA();
    console.log(a);
    a = getA();
    console.log(a);
    // 解决方案：直接返回一个函数即可
    function getANew() {
        var a = Math.random();
        return function () {
            return a;
        }
    }
    // 1.先把获取到的函数存起来
    var func = getANew();
    var b = func();
    console.log(b);
    b = func();
    console.log(b);
</script>
</body>
</html>
]]></description><link>https://blog.gaoredu.com/article/588187db-0850-478c-89d9-fe2e92510ebc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/588187db-0850-478c-89d9-fe2e92510ebc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 27 Jul 2018 23:24:41 GMT</pubDate></item><item><title><![CDATA[【Windows纯净版】微软所有Windows纯净版操作系统历史版本下载（win98-win10)]]></title><description><![CDATA[由于网上多数网站提供的操作系统多为Gohst版本，而Windows镜像多为植入了相应的病毒或者其他的插件，很难找到相应操作系统的原版系统，因此本站小编在这里收集到了历史版本的WIndows操作系统纯净版，供大家下载下载。
暂时是每一个操作系统对应一个版本，基本上多为64位版本的，如果需要其他版本的原版纯净版Windows操作系统，请在下方直接留言回复即可。


783



 Windows98操作系统纯净版： ed2k://|file|SC_WIN98SE.exe|278540368|939909E688963174901F822123E55F7E|/
 Windows2000操作系统纯净版 ed2k://|file|ZRMPSEL_CN.iso|402690048|00D1BDA0F057EDB8DA0B29CF5E188788|/
 WInDowsXP纯净系统下载 ed2k://|file|zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso|630237184|EC51916C9D9B8B931195EE0D6EE9B40E|/
 Windows vista企业版纯净操作系统下载 ed2k://|file|zh-hans_windows_vista_enterprise_with_service_pack_1_x64_dvd_x14-55848.iso|2969976832|B4F450ED55F14D48EBA1A76129903A9A|/
 Windows Server纯净版下载 ed2k://|file|cn_windows_server_2016_essentials_x64_dvd_9327779.iso|4902592512|4693ECE5FEEDE3FE349FC9E7AB467CE4|/
 Windows7企业纯净版下载 ed2k://|file|cn_windows_7_enterprise_x64_dvd_x15-70741.iso|3203516416|876DCF115C2EE28D74B178BE1A84AB3B|/
 Windows8 企业版下载 ed2k://|file|cn_windows_8_enterprise_x64_dvd_917570.iso|3560837120|8CAE8064C4B8F9CD84941B4FF4A34722|/
 Windows10企业版下载 ed2k://|file|cn_windows_10_enterprise_2016_ltsb_x64_dvd_9060409.iso|3821895680|FF17FF2D5919E3A560151BBC11C399D1|/

使用方法：本站提供的Windows原本纯净操作系统镜像为电驴下载链接，用户可以直接使用迅雷或者百度云盘进行下载安装即可，推荐使用百度云，直接新建一个任务链接，复制此链接即可实现高速下载。


]]></description><link>https://blog.gaoredu.com/article/5e3ee0e1-f8ae-4648-bdd0-028deb24b90b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5e3ee0e1-f8ae-4648-bdd0-028deb24b90b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 25 Jul 2018 20:41:31 GMT</pubDate></item><item><title><![CDATA[小小黑科技轻松解决Win7系统打开任意软件都会弹出打开警告的对话框]]></title><description><![CDATA[1.问题描述：当我们装完Win7系统之后，有时候会遇到安装一些软件之后打开始终会弹出对话框的提示信息：你想允许来自位置发布者的以下程序对此计算机进行更改吗？下面经过以下的3个步骤就可以轻松解决这个问题。来看看这个黑科技吧。


779



2.直接打开控制面板，找到用户账户选项，进去后点击更改用户账户设置。
780
3.直接把这个上下可以滑动的滚动条下滑到最下面即可解决。


781


现在可能会提示让你重启系统之类的提示，按照提示重启即可，后面使用的过程中就不会再有这个提示了。
不过建议大家如果不是特别有必要的话还是不要取消哈，比较如果电脑上如果有一些病毒软件如果是自启动的话，关了这个提示之后就会很危险的，电脑的安全性也可能会受到一定的影响。
]]></description><link>https://blog.gaoredu.com/article/dfcb9687-0486-4f4f-8dcd-17a6c0a88a5b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dfcb9687-0486-4f4f-8dcd-17a6c0a88a5b</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 24 Jul 2018 21:07:12 GMT</pubDate></item><item><title><![CDATA[[黑科技]快速解决VS2017中无法引用文件&lt;windows.h&gt;文件的问题]]></title><description><![CDATA[1.主要问题，在VS2017中新建了win32控制台应用程序之后，添加window.h头文件，显示无法找到这个文件
#include <windows.h>
#include<stdio.h>
775


2.如何解决：直接打开Visual studio Installer这个安装文件（最新版的就直接去微软官网下载吧，下载链接：https://visualstudio.microsoft.com/zh-hans/downloads/）
776
3.选择修复之后，然后依次选择下面几个C++的相关组件，安装即可
777
778
也就是下面几个:
1.“用于桌面 C++ 的 Windows 10 SDK (10.0.16299.0)”模块，
2.“用于 UWP (C++)的 Windows 10SDK (10.0.16299.0)”
3.“用于 UWP(C#、VB、JS)的 Windows 10 SDK (10.0.16299.0)

然后直接安装即可修复以上问题了。
]]></description><link>https://blog.gaoredu.com/article/0ffec71a-7e10-43e3-a296-bf7e9851256e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0ffec71a-7e10-43e3-a296-bf7e9851256e</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 24 Jul 2018 02:59:11 GMT</pubDate></item><item><title><![CDATA[【C++就业班】传智高级C++第五期就业班全套视频教程免费分享]]></title><description><![CDATA[这是传智第五期的C++第五期的就业班视频教程，建议大家按照基础班到就业班的顺序进行学习，循序渐进学习C++，关键在于学号C语言，基本上基础打好了以后，后面学起来就轻松多了，后面的课程可以有选择的进行学习，包括使用Linux环境下的高级编程，数据库编程（主要是Oracle+C++实现嵌入式SQL开发），Concos2d主要是基于桌面端的游戏开发，QT也是目前用的比较多的一个桌面开发程序了，和微软的C#差不多，最后祝大家学习愉快。


774


视频目录，由高到低排列：
06_QT
05_Cocos2d-x
04_数据库+shell
03_Linux
02_C++就业
01_C就业
00_基础班


下载链接：
链接：https://pan.baidu.com/s/1VOMPHxuzA63RC0HdqTEUgQ 密码：h79j






]]></description><link>https://blog.gaoredu.com/article/23f56e6b-2989-494b-a9df-8cf703bfb7d1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/23f56e6b-2989-494b-a9df-8cf703bfb7d1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 23 Jul 2018 21:10:20 GMT</pubDate></item><item><title><![CDATA[【JavaScript框架封装】对前期js框架封装学习中的知识要点总结]]></title><description><![CDATA[对于js框架封装的学习暂时就先告一段落了，这段学习期间主要是对JQuery框架的涉及道德知识点进行了分析和学习，并最终基本上封装了一个比较完整的js框架，我这里取名为xframe.js,目前已经开原到GitHub上，其余的具体文章可以参见相应的csdn和博客园文章的知识学习。最近关于这一块的知识学习基本上都分享到这几个网站了，有需要的朋友可以相互交流学习。
下面的这个是单文件版本：
772


下面的这个是多文件版本：
773


CSDN博客链接：https://blog.csdn.net/column/details/24877.html【玩转前端JavaScript专栏】
博客园链接：https://i.cnblogs.com/posts?categoryid=1256196
GitHub链接：https://github.com/xiugangzhang/JavaScript-Xframe/

]]></description><link>https://blog.gaoredu.com/article/2129b40f-16c0-49a2-b31d-61f38e4126a3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2129b40f-16c0-49a2-b31d-61f38e4126a3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 22 Jul 2018 03:36:26 GMT</pubDate></item><item><title><![CDATA[分享一款非常好用的数据图表制作软件Edraw Max v9.2工具，制作和美化PPT很有用]]></title><description><![CDATA[770


上面的就是这款软件的用户界面，乍一看是不是和Word特别像呢，基本上就是这个工具的改版呀，使用方法也很简单。可以以用来制作我们日常需要的信息图，思维导图，流程图，组织结构图，建筑图等，基本上是应有应有，快去试试看吧。
771
下载链接1：http://www.edrawsoft.cn/2download/edrawmax-cn-9.2.exe
下载链接2（主要是破解补丁哈）：https://www.lanzous.com/i1fjsyh 密码:52pj
]]></description><link>https://blog.gaoredu.com/article/d26f394d-41e6-4797-8d27-2ba1a8dfc573</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d26f394d-41e6-4797-8d27-2ba1a8dfc573</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 21 Jul 2018 21:08:11 GMT</pubDate></item><item><title><![CDATA[制作自己的专属个性化印章，用这款软件就足够了]]></title><description><![CDATA[这款工具主要功能是可以根据自己的需求来制作自己想要的个性化需求印章，包括艺术章和公章等其他类型的，基本上可以满足各位小白的所有需求，我们直接来看下制作后的效果吧。
769

印章工具下载链接：https://pan.baidu.com/s/1iVuhddktcuarZz4u3kCXnA 密码：7i0x

开源软件链接更新：链接: https://pan.baidu.com/s/10tXyS62twmF8nZPiPmY1Gw 提取码: en84
]]></description><link>https://blog.gaoredu.com/article/fc42bbcc-499f-4264-addf-2b07a9a67aa7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fc42bbcc-499f-4264-addf-2b07a9a67aa7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 21 Jul 2018 20:57:09 GMT</pubDate></item><item><title><![CDATA[OFFice2019 专业版安装包，快来体验最新版超炫酷的功能]]></title><description><![CDATA[766

767


768


主要特点：
Office 2019新功能包括：
01：Outlook支持联系人卡片等；
02：Excel 2019支持Power BI，PowerPivot和PowerQuery等；
03：PowerPoint支持管理图标和3D图片；
04：Word 2019学习工具等功能。

专业版：https://pan.baidu.com/s/1_doYcj2RQbSomcu5uaqZaA

]]></description><link>https://blog.gaoredu.com/article/f51848d6-ff9b-466a-9739-eec5f487a36d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f51848d6-ff9b-466a-9739-eec5f487a36d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Jul 2018 23:20:07 GMT</pubDate></item><item><title><![CDATA[玩转JavaScript常见的7种设计模式视频教程精讲班]]></title><description><![CDATA[765


1.JavaScript设计模式简介：链接: https://pan.baidu.com/s/1ECOy4Zg64nRBbSNrR-3fLQ 密码: 9q33
2.JavaScript设计模式之单例模式：链接: https://pan.baidu.com/s/1h385RvRKFxlkG0_bZr098A 密码: x7m2
3.JavaScript设计模式之构造函数模式：链接: https://pan.baidu.com/s/1gdY7Mn0yW0QXUBD-9Qx0kQ 密码: xdqv
4.JavaScript设计模式之建造者模式：链接: https://pan.baidu.com/s/1S-6bOFX83sPZBYcLTv9ojQ 密码: 2dsf
5.JavaScript设计模式之工厂设计模式：链接: https://pan.baidu.com/s/1oeJKguUDmwW0Jy0YnjhFvQ 密码: w68p
6.JavaScript设计模式之代理设计模式：链接: https://pan.baidu.com/s/1zFzBGvahYXf4pvi-NWollg 密码: n6n3
7.JavaScript设计模式之命令设计模式：链接: https://pan.baidu.com/s/1wsycYneq_UZpvAAtYPv8Lg 密码: 7kqq
]]></description><link>https://blog.gaoredu.com/article/75dbe464-96e2-44d1-a073-62c7500a1d1c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/75dbe464-96e2-44d1-a073-62c7500a1d1c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Jul 2018 22:53:43 GMT</pubDate></item><item><title><![CDATA[【黑客工具】Windows渗透各类密码字典生成器工具]]></title><description><![CDATA[764


弱口令字典：精简版弱口令字典txt:链接：https://share.weiyun.com/5JWTJEE 密码：xkzu1z
弱口令字典：链接：https://share.weiyun.com/5WJaQ1F 密码：aymrvo

网站字典：
ASP.txt：链接：https://share.weiyun.com/5Xn8XN2 密码：whsj12
ASPX.txt:链接：https://share.weiyun.com/5xdcwM5 密码：zeymji
DIR.txt:链接：https://share.weiyun.com/5WMAkt7 密码：3bcyt8
JSP.txt:链接：https://share.weiyun.com/53E5dGW 密码：z4afbi
MDB.txt:链接：https://share.weiyun.com/5Nwk8WD 密码：im61rc
PHP.txt:链接：https://share.weiyun.com/5x5KhGx 密码：c230qt
q综合目录：链接：https://share.weiyun.com/5mO78QJ 密码：s1pfvl
日志宝（漏洞目录）：链接：https://share.weiyun.com/5mlvL1p 密码：lgvw32
综合：链接：https://share.weiyun.com/58vCl9k 密码：fvs73i
字典生成器：链接：https://share.weiyun.com/5YDIzY5 密码：s085o8

]]></description><link>https://blog.gaoredu.com/article/554196f0-3333-4ec7-a23d-123bb399c6c2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/554196f0-3333-4ec7-a23d-123bb399c6c2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Jul 2018 20:44:22 GMT</pubDate></item><item><title><![CDATA[谷歌浏览器去广告插件Adblock Plus chrome插件下载安装]]></title><description><![CDATA[763


这款插件应该是谷歌浏览器最好用的去广告插件了，目前本去广告的插件的下载量基本上在谷歌商店排行第一，应该算是一款最好用的广告终结者插件之一了吧，目前支持过滤广告、可接广告、禁止跟踪、禁止域名等功能。



插件下载链接：【点我下载】


]]></description><link>https://blog.gaoredu.com/article/c8ca8229-133f-4a4b-b4e6-05c28e8e14c0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c8ca8229-133f-4a4b-b4e6-05c28e8e14c0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Jul 2018 02:53:03 GMT</pubDate></item><item><title><![CDATA[【黑客工具】Windows进程查看工具（可查看结束任意进程）]]></title><description><![CDATA[762
可以实现运行。查看，关机等功能，同时可以设置进程的优先级别，窗口的重启等操作。


使用帮助文档：链接：https://share.weiyun.com/5TCfsWS 密码：qs91jq
主程序文件：链接：https://share.weiyun.com/5P3Zuow 密码：qpktby
评估版本信息说明：链接：https://share.weiyun.com/5yXXhTn 密码：457qyn
]]></description><link>https://blog.gaoredu.com/article/f6a3e247-bdaa-4910-8581-927a40c03c56</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f6a3e247-bdaa-4910-8581-927a40c03c56</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 19 Jul 2018 22:45:12 GMT</pubDate></item><item><title><![CDATA[使用WEB网页版远程实时监控软件实现黑客攻击思路及源码分享（3389端口攻击）]]></title><description><![CDATA[1.界面是很简单的，如下：
757


 2.远程桌面 Web 连接使用说明
   
用户只要键入要使用的远程计算机的名称，然后选择连接的屏幕大小，最后单击连接按钮，就可以登录上去了。
对于下面的用户名和域信息，可以选择不填写，下面是我输入远程桌面端的IP地址后的效果界面：
758


3.对于弹出上面的窗口我们直接点击连接即可，然后我们会发现一件很神奇的事情，这个登录成功的界面竟然在这个浏览器网站界面显示出来了。

759

4.由于目标计算机有两个可以登录用户，当然我们是必须要知道远程计算机的密码才可以登录的，我们选择一个用户，输入密码登录进去看下：
760


5.登录成功的界面
761


6.具体的源码分享如下,可以直接下载哈：<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<title>远程桌面 Web 连接</title>
<style type="text/css" media="screen">
p { color:"#000000"; font-family: "宋体, Verdana, Arial, Helvetica"; font-size:"115%"}
h1 { font-size: 110%; font-family: 宋体, verdana, arial, helvetica; font-weight: bold;
                margin-top: 0em;}
p.indent { margin-left: 3em; margin-top: .5em; line-height: 1.25em; margin-bottom: .2em; margin-right: 1em;}
.button {
        FONT-FAMILY: 宋体, Verdana, Helvetica, Arial, San-Serif;
        font-weight:normal;
        font-size:105%;
        color:#000000;
        background-color:#ffffff;
        border-color:#6699ff;
        margin-top:6pt;
        margin-left: .5em;

}
.topspace {margin-top: .08em; }

</style>
</head>

<body bgcolor="#ffffff">
<script language="vbscript">
<!--
const L_FullScreenWarn1_Text = "当前的安全设置不允许自动切换到全屏模式。"
const L_FullScreenWarn2_Text = "您可以用 Ctrl-Alt-Pause 将远程桌面会话切换到全屏模式"
const L_FullScreenTitle_Text = "远程桌面 Web 连接"
const L_ErrMsg_Text         = "连接到远程计算机时的错误: "
const L_PlatformCheck_ErrorMessage = "远程桌面 Web 连接 ActiveX 控件只能在 32 位版本的 Internet Explorer 中运行。"

' error messages
const L_RemoteDesktopCaption_ErrorMessage =  "远程桌面连接"
const L_DisconnectedCaption_ErrorMessage =  "远程桌面连接已被中断"
const L_ErrConnectCallFailed_ErrorMessage =  "客户端连接到远程计算机时出现错误。请检查系统内存，然后重新连接。"
const L_DisconnectRemoteByServer_ErrorMessage = "远程计算机已结束连接。"
const L_LowMemory_ErrorMessage = "本地计算机内存不足。请关闭一些程序，然后再连接到远程计算机。"
const L_SecurityErr_ErrorMessage = "由于安全错误，客户端无法连接到远程计算机。请确认您已登录到网络，然后重新连接。"
const L_BadServerName_ErrorMessage = "找不到指定的远程计算机。请确认您键入的计算机名和 IP 地址是否正确，然后重新连接。"
const L_ConnectFailedProtocol_ErrorMessage = "由于一个协议错误，客户端无法连接到远程计算机。请重新廉洁到远程计算机。如果客户端依旧无法连接，请跟网络管理员联系。"
const L_CannotLoopBackConnect_ErrorMessage = "客户端无法连接，您无法从同一台计算机的控制台会话连接到控制台。"
const L_NetworkErr_ErrorMessage = "由于网络错误，连接被结束。请重新连接到远程计算机。"
const L_InternalErr_ErrorMessage = "出现了一个内部错误。"
const L_NotResponding_ErrorMessage = "客户端无法连接到远程计算机。远程连接没有启用，或者计算机太忙，无法接受新连接。也有可能网络问题阻碍了连接。请重新连接。如果问题继续出现，请跟系统管理员联系。"
const L_VersionMismatch_ErrorMessage = "客户端和服务器版本不相符。请升级客户端软件，然后重新连接。"
const L_EncryptionError_ErrorMessage = "由于数据加密的错误，这个会话将结束。请重新连接到远程计算机。"
const L_ProtocolErr_ErrorMessage = "由于协议错误，这个会话将被中断。请重新连接到远程计算机。"
const L_IllegalServerName_ErrorMessage = "指定的计算机名含有无效字符。请确认计算机名，重试一次。"
const L_ConnectionTimeout_ErrorMessage = "远程连接已超时。请重新连接到远程计算机。"
const L_DisconnectIdleTimeout_ErrorMessage = "由于达到了空闲超时限度，远程会话被结束。这个限度是服务器管理员或网络策略设置的。"
const L_DisconnectLogonTimeout_ErrorMessage ="由于达到了总登录时间限度，远程会话被结束。这个限度是服务器管理员或网络策略设置的。"
const L_ProtocolErrWITHCODE_ErrorMessage  = "由于内部协议错误，客户端已中断连接: "
const L_LicensingTimeout_ErrorMessage = "客户端试图连接时，出现了一个授权错误(授权超时)。请重新跟远程计算机连接。"
const L_LicensingNegotFailed_ErrorMessage = "由于授权协议中的一个错误，远程计算机中断了会话。请重新跟远程计算机连接；或者跟服务器管理员联系。"
const L_DisconnectRemoteByServerTool_ErrorMessage = "跟远程计算机的远程会话被一个管理工具结束。可能是您的管理员中断了您的连接。"
const L_LogoffRemoteByServer_ErrorMessage = "由于会话在远程计算机上被注销，远程会话被中断。您的系统管理员或另一个用户结束了您的连接。"
const L_DisconnectByOtherConnection_ErrorMessage = "由于另一个用户连接到了会话，远程会话被中断。"
const L_ConnectionBroken_ErrorMessage  = "跟远程计算机的连接被打断。请重新连接到远程计算机。"
const L_ServerOutOfMemory_ErrorMessage = "由于远程计算机内存不足，连接被中断。"
const L_LicenseInternal_ErrorMessage = "由于远程计算机的授权协议中有一个内部错误，远程会话被中断。"
const L_NoLicenseServer_ErrorMessage = "由于没有终端服务器许可证服务器可以提供许可证，远程会话被中断。请跟服务器管理员联系。"
const L_NoLicense_ErrorMessage = "由于这台计算机没有终端服务器客户端访问许可证，远程会话被中断。请跟服务器管理员联系。"
const L_LicenseBadClientMsg_ErrorMessage = "由于远程计算机从这台计算机收到一个无效的授权消息，远程会话被中断。"
const L_LicenseHwidDoesntMatch_ErrorMessage = "由于这台计算机上储存的终端服务器客户端访问许可证已被修改，远程会话被中断。"
const L_BadClientLicense_ErrorMessage = "由于这台计算机上储存的终端服务器客户端访问许可证的格式无效，远程会话被中断。"
const L_LicenseCantFinishProtocol_ErrorMessage = "由于授权协议中有网络问题，远程会话被中断。请重新跟远程计算机连接。"
const L_LicenseClientEndedProtocol_ErrorMessage = "由于客户端过早地结束了授权协议，远程会话被中断。"
const L_LicenseBadClientEncryption_ErrorMessage = "由于授权消息的加密不正确，远程会话被中断。"
const L_CantUpgradeLicense_ErrorMessage = "由于无法升级或重续本地计算机的客户端访问许可证，远程会话被中断。请跟服务器管理员联系。"
const L_LicenseNoRemoteConnections_ErrorMessage = "由于远程计算机没有授权接受远程连接，远程会话被中断。请跟服务器管理员联系。"
const L_DecompressionFailed_ErrorMessage = "由于客户端的解压缩操作失败，远程会话被中断。请重新连接到远程计算机。"
const L_ServerDeniedConnection_ErrorMessage ="客户端无法建立跟远程计算机的连接。导致这个错误的可能的原因是: 1) 远程计算机上的远程连接可能没有启用。2) 已超出远程计算机上的连接最大数。3) 建立连接时出现了一个网络错误。"
const L_ControlLoadFailed_ErrorMessage= "远程桌面 Web 连接 ActiveX 控制无法安装。在没有一个安装后运行正常的控制版本的情况下，无法进行连接。请与服务器的管理员联系。"
const L_InvalidServerName_ErrorMessage = "指定了一个无效服务器。"

sub window_onload()
   if not LCase(Navigator.CpuClass) = "x86" then
      msgbox L_PlatformCheck_ErrorMessage
   end if
   if not autoConnect() then
       Document.all.editServer.Focus
   end if
end sub

function autoConnect()
        Dim sServer
        Dim iFS, iAutoConnect


        sServer = getQS ("Server")
        iAutoConnect = getQS ("AutoConnect")
        iFS = getQS ("FS")

        if NOT IsNumeric ( iFS ) then
                iFS = 0
        else
                iFS = CInt ( iFS )
        end if

        if iAutoConnect <> 1 then
                autoConnect = false
                exit function
        else
                if iFS < 0 or iFS >= Document.all.comboResolution.options.length then
                        iFS = 0
                end if

                if IsNull ( sServer ) or sServer = "" then
                        sServer = window.location.hostname
                end if

                Document.all.comboResolution.selectedIndex        = iFS
                Document.all.Server.value = sServer

                btnConnect ()

                autoConnect = true
        end if

end function

function getQS ( sKey )
        Dim iKeyPos, iDelimPos, iEndPos
        Dim sURL, sRetVal
        iKeyPos = iDelimPos = iEndPos = 0
        sURL = window.location.href

        if sKey = "" Or Len(sKey) < 1 then
                getQS = ""
                exit function
        end if

        iKeyPos = InStr ( 1, sURL, sKey )

        if iKeyPos = 0 then
                sRetVal = ""
                exit function
        end if

        iDelimPos = InStr ( iKeyPos, sURL, "=" )
        iEndPos = InStr ( iDelimPos, sURL, "&" )

        if iEndPos = 0 then
                sRetVal = Mid ( sURL, iDelimPos + 1 )
        else
                sRetVal = Mid ( sURL, iDelimPos + 1, iEndPos - iDelimPos - 1 )
        end if

        getQS = sRetVal
end function

sub checkClick
      if Document.all.Check1.Checked then
         Document.all.tableLogonInfo.style.display = ""
         Document.all.editUserName.Disabled = false
         Document.all.editDomain.Disabled = false
      else
         Document.all.tableLogonInfo.style.display = "none"
         Document.all.editUserName.Disabled = true
         Document.all.editDomain.Disabled = true
      end if
end sub

sub OnControlLoadError
    msgbox L_ControlLoadFailed_ErrorMessage,0,L_RemoteDesktopCaption_ErrorMessage
end sub

sub OnControlLoad
   set Control = Document.getElementById("MsRdpClient")
   if Not Control is Nothing then
      if Control.readyState = 4 then
         Document.all.connectButton.disabled = FALSE
      end if
   end if
end sub


sub BtnConnect
   Dim serverName
   'server
   if not Document.all.Server.value = "" then
      serverName = Document.all.Server.value
   else
      serverName = Document.location.hostname
   end if
   
   serverName = trim(serverName)
   
   On Error Resume Next
   MsRdpClient.server = serverName
   If Err then 
      msgbox L_InvalidServerName_ErrorMessage,0,L_RemoteDesktopCaption_ErrorMessage
      Err.Clear
      exit sub
   end if
   On Error Goto 0
   
   'serverName name text
   Document.all.srvNameField.innerHtml = serverName
   
   'Username/Domain
   if Document.all.CheckBoxAutoLogon.checked then
      MsRdpClient.UserName = Document.all.UserName.Value
      MsRdpClient.Domain = Document.all.Domain.Value
   end if
   
   'Resolution
   MsRdpClient.FullScreen = FALSE
   select case document.all.comboResolution.value
   case "1"
      MsRdpClient.FullScreen = TRUE
      resWidth  = screen.width
      resHeight = screen.height
   case "2"
      resWidth  = "640"
      resHeight = "480"
   case "3"
      resWidth  = "800"
      resHeight = "600"
   case "4"
      resWidth  = "1024"
      resHeight = "768"
   case "5"
      resWidth  = "1280"
      resHeight = "1024"
   case "6"
      resWidth  = "1600"
      resHeight = "1200"
   end select
   MsRdpClient.DesktopWidth = resWidth
   MsRdpClient.DesktopHeight = resHeight
   
   
   MsRdpClient.Width = resWidth
   MsRdpClient.Height = resHeight
   
   'Device redirection options
   MsRdpClient.AdvancedSettings2.RedirectDrives     = FALSE
   MsRdpClient.AdvancedSettings2.RedirectPrinters   = TRUE
   MsRdpClient.AdvancedSettings2.RedirectPorts      = FALSE
   MsRdpClient.AdvancedSettings2.RedirectSmartCards = FALSE
   
   'FullScreen title
   MsRdpClient.FullScreenTitle = L_FullScreenTitle_Text & "(" & serverName & ")"
   
   'Display connect region
   Document.all.loginArea.style.display = "none"
   Document.all.connectArea.style.display = "block"
   
   'Connect
   MsRdpClient.Connect
end sub

-->

</script>

<!--   
-->

<!-- =========================LOGIN AREA   ==========================
-->
<div id=loginArea>
<font size="4">





<a href="http://www.52tech.tech" target="_blank"><img src="http://www.52tech.tech/template/dean_report_151222/deancss/mylogo.png" alt="www.52tech.tech" border="0"></a>
</font><font size="6" id=Tahoma2 face="Tahoma">
</font><b>
<font id=Tahoma4 face="Tahoma" size="4"><ID id=bigtitle>远程桌面 Web 连接</ID></font></b><p> </p>

<table border="0" width="640" cellspacing="0" cellpadding=0 style="margin-top: -1em;">
<!-- Graphic bar row  -->
<tr>
<td width="50%"></td>
<td colspan=3 align="left" valign="middle">
</tr> 
<!-- Row 1 -->
    <tr>
<!-- Column 1 spans 4 rows -->
    <td valign="top" width="50% "rowspan=4 id="helpText">
          <p class=indent><ID id=remotecomputername>键入要使用的远程计算机的名称，选择连接的屏幕大小，然后单击<b>连接</b>。</ID></p>
          <p class=indent><ID id=helpfultip1>连接页打开时，您可以将其添加到收藏夹，简化跟同一台计算机的连接。<br>
    </td>
<!-- Column 2 spans 4 rows-->
        <td rowspan=4 valign="top" align="left">
    <img src="bluebarv.gif" alt="blue bar graphic" border=0 width="8" height="330">
        </td>
        
<!-- Column 3 -->                
    <td id="ServerNameKeyWidth" style="width:45%;" valign="middle">     
         <label id=ServerNameKey accessKey="S" for="editServer">
         <br><p align="right"> <ID id=ServerName>服务器(<u>S</u>):</ID></label></p>
         </td>
                  
<!-- Column 4 -->                  
        <td id="ServerKeyWidth" width="40%" valign="bottom">
        <br>  <input type="text" name="Server" size="41" id="editServer">
        
        </td>
        </tr>
<!-- Row 2 -->
<tr>
<!-- Column 3 -->
<td valign="middle">
<p align="right"><label id=sizeKey accessKey="Z" for="comboRes" class="sizespace"><ID id=size>大小(<u>Z</u>):</ID></p></td>
<!-- Column 4 -->
<td valign="bottom">  <select size="1" name="comboResolution" id=comboRes class="topspace">
              <option selected value="1"><ID id=option1>全屏显示</ID></option>
              <option value="2"><ID id=option2>640 x 480</ID></option>
              <option value="3"><ID id=option3>800 x 600</ID></option>
              <option value="4"><ID id=option4>1024 x 768</ID></option>
              <option value="5"><ID id=option5>1280 x 1024</ID></option>
              <option value="6"><ID id=option6>1600 x 1200</ID></option>
            </select> </label>
</td>
</tr>
<!-- Row 3 -->
<tr>
<!-- Column 3 -->
<td></td>
<!-- Column 4 -->
<td align="bottom">                        
         <p class=topspace> <input type="checkbox" name="CheckBoxAutoLogon" ID=Check1 value="OFF"><label for="Check1" ID=SendLogonKey accesskey="l"><ID id=logoninfo>发送这个连接的登录信息(<u>L</u>) </ID></label><br>
          
<span ID="tableLogonInfo" style="display: none">

            <p align="right" class=topspace>
                        <br> 
                        <ID id=usernamelabel>用户名(<u>U</u>) :</ID>
                <label id=UserNameKey accessKey="U" for="editUserName"><input type="text" name="UserName" id=editUserName size="25"></label><br>
                        <ID id=domainlabel>域(<u>D</u>):</ID>
          <label id=editDomainKey accessKey="D" for="editDomain">
          <input type="text" name="Domain" id=editDomain size="25"></label></p></span>        
          <input type="submit" id=connectbutton value="连接" disabled="TRUE" name="ButtonLogin" OnClick=BtnConnect class="button">
</td>
</tr>
<!-- Row 4 -->
<tr>
<!-- Column 3 -->
<td  height="215"> </td>
<!-- Column 4 -->
<td> </td>
</tr>

 
     
</table>
</div>
<!-- ================================= LOGIN FORM =================
-->

<!-- ================================= CONNECT ====================
-->
<div id=connectArea style="display: none">
<center>
        <table>
        <tr>
        <OBJECT language="vbscript" ID="MsRdpClient"
       
       
        CLASSID="CLSID:7584c670-2274-4efb-b00b-d6aaba6d3850"
        CODEBASE="msrdp.cab#version=5,2,3790,0"
        WIDTH=<% resWidth = Request.QueryString("rW")
            if  resWidth < 200 or resWidth > 1600 then
               resWidth = 800
            end if
            Response.Write resWidth %>
        HEIGHT=<% resHeight = Request.QueryString("rH")
            if  resHeight < 200 or resHeight > 1200 then
               resHeight = 600
            end if
            Response.Write resHeight %>>
        </OBJECT>
        </tr>
        <tr>
        <br>
        <font size="1" color="#000000" id="srvfontname" face="宋体, Verdana, Arial, Helvetica">
        <div id=connectDisplay style="display:none">
        <ID id=loggedinsrv>已连接 </ID><i><span id="srvNameField"></span></i></font><br></div>
        </tr>
        
<script language="VBScript">
<!--
sub ReturnToConnectPage()
   Window.Navigate("Default.htm")
end sub

sub MsRdpClient_OnConnected()
   Document.All.connectDisplay.style.display = "block"
end sub

sub MsRdpClient_OnDisconnected(disconnectCode)
   extendedDiscReason = MsRdpClient.ExtendedDisconnectReason
   majorDiscReason = disconnectCode And &hFF

   if (disconnectCode = &hB08 or majorDiscReason = 2 or majorDiscReason = 1) and not (extendedDiscReason = 5) then
      'Switch back to login area
      ReturnToConnectPage
      exit sub
   end if
   
   errMsgText = L_DisconnectRemoteByServer_ErrorMessage
   if not extendedDiscReason = 0 then
      'Use the extended disconnect code
      select case extendedDiscReason
      case 0   errMsgText  = ""
      case 1   errMsgText  = L_DisconnectRemoteByServerTool_ErrorMessage
      case 2   errMsgText  = L_LogoffRemoteByServer_ErrorMessage
      case 3   errMsgText  = L_DisconnectIdleTimeout_ErrorMessage
      case 4   errMsgText  = L_DisconnectLogonTimeout_ErrorMessage
      case 5   errMsgText  = L_DisconnectByOtherConnection_ErrorMessage
      case 6   errMsgText  = L_ServerOutOfMemory_ErrorMessage
      case 7   errMsgText  = L_ServerDeniedConnection_ErrorMessage
      case 256 errMsgText  = L_LicenseInternal_ErrorMessage
      case 257 errMsgText  = L_NoLicenseServer_ErrorMessage
      case 258 errMsgText  = L_NoLicense_ErrorMessage
      case 259 errMsgText  = L_LicenseBadClientMsg_ErrorMessage
      case 260 errMsgText  = L_LicenseHwidDoesntMatch_ErrorMessage
      case 261 errMsgText  = L_BadClientLicense_ErrorMessage
      case 262 errMsgText  = L_LicenseCantFinishProtocol_ErrorMessage
      case 263 errMsgText  = L_LicenseClientEndedProtocol_ErrorMessage
      case 264 errMsgText  = L_LicenseBadClientEncryption_ErrorMessage
      case 265 errMsgText  = L_CantUpgradeLicense_ErrorMessage
      case 266 errMsgText  = L_LicenseNoRemoteConnections_ErrorMessage
      case else errMsgText = L_ErrMsg_Text
      end select
      if extendedDiscReason > 4096 then
         errMsgText = L_ProtocolErrWITHCODE_ErrorMessage  & errMsgText
      end if
   else
      ' no extended error information, use the disconnect code
      select case disconnectCode
      case 0   errMsgText  = L_ErrMsg_Text
      case 1   errMsgText  = L_ErrMsg_Text
      case 2   errMsgText  = L_ErrMsg_Text
      case 260 errMsgText  = L_BadServerName_ErrorMessage
      case 262 errMsgText  = L_LowMemory_ErrorMessage
      case 264 errMsgText  = L_ConnectionTimeout_ErrorMessage
      case 516 errMsgText  = L_NotResponding_ErrorMessage
      case 518 errMsgText  = L_LowMemory_ErrorMessage
      case 520 errMsgText  = L_BadServerName_ErrorMessage
      case 772 errMsgText  = L_NetworkErr_ErrorMessage
      case 774 errMsgText  = L_LowMemory_ErrorMessage
      case 776 errMsgText  = L_BadServerName_ErrorMessage
      case 1028 errMsgText = L_NetworkErr_ErrorMessage
      case 1030 errMsgText = L_SecurityErr_ErrorMessage
      case 1032 errMsgText = L_IllegalServerName_ErrorMessage
      case 1286 errMsgText = L_EncryptionError_ErrorMessage
      case 1288 errMsgText = L_BadServerName_ErrorMessage
      case 1540 errMsgText = L_BadServerName_ErrorMessage
      case 1542 errMsgText = L_SecurityErr_ErrorMessage
      case 1544 errMsgText = L_LowMemory_ErrorMessage
      case 1796 errMsgText = L_NotResponding_ErrorMessage
      case 1798 errMsgText = L_SecurityErr_ErrorMessage
      case 1800 errMsgText = L_CannotLoopBackConnect_ErrorMessage
      case 2052 errMsgText = L_BadServerName_ErrorMessage
      case 2056 errMsgText = L_LicensingNegotFailed_ErrorMessage
      case 2310 errMsgText = L_SecurityErr_ErrorMessage
      case 2566 errMsgText = L_SecurityErr_ErrorMessage
      case 2822 errMsgText = L_EncryptionError_ErrorMessage
      case 3078 errMsgText = L_EncryptionError_ErrorMessage
      case 3080 errMsgText = L_DecompressionFailed_ErrorMessage
      case 3334 errMsgText = L_ProtocolErr_ErrorMessage
      case 10500 errMsgText = L_ProtocolErr_ErrorMessage
      case else errMsgText = L_InternalErr_ErrorMessage
      end select
   end if
   
   msgbox errMsgText,0,L_DisconnectedCaption_ErrorMessage
   ReturnToConnectPage
   
end sub
-->
        </script>
</table>
</center>
</div>


</body>
</html>



注意事项：1.目前在IE6浏览器测试通过，其他浏览器请自行测试
2.打开之后请选择最上方的位置请选中信任Active的相关控件，否则无法正常运行

注意：本站所有教程和资料仅供学习交流使用，请勿用作非法用途！

]]></description><link>https://blog.gaoredu.com/article/0673156b-695b-451a-90a5-0fee0ea25555</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0673156b-695b-451a-90a5-0fee0ea25555</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 19 Jul 2018 21:19:33 GMT</pubDate></item><item><title><![CDATA[2018最新世界500强权威企业招聘面试真题纸质版（可打印）]]></title><description><![CDATA[754
755
756


面试笔试环节真题下载链接：链接: https://pan.baidu.com/s/1eOjrdt-hgszb4xMMR-Xp0Q 密码: u68c
]]></description><link>https://blog.gaoredu.com/article/3b2cce48-e8d6-4dac-b6b1-e5e38b427e8b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3b2cce48-e8d6-4dac-b6b1-e5e38b427e8b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 19 Jul 2018 02:43:11 GMT</pubDate></item><item><title><![CDATA[考研英语基础课程先修课---新概念英语视频教程（上中下）]]></title><description><![CDATA[753


新概念英语第一册：链接: https://pan.baidu.com/s/1eOjrdt-hgszb4xMMR-Xp0Q 密码: u68c
新概念英语第二册：链接: https://pan.baidu.com/s/1eOjrdt-hgszb4xMMR-Xp0Q 密码: u68c
新概念英语第三册：链接: https://pan.baidu.com/s/1eOjrdt-hgszb4xMMR-Xp0Q 密码: u68c


课本PDF教材（上）：链接: https://pan.baidu.com/s/1Xhgh76vRutd3YGWsorlrGA 密码: tg6j
课本PDF教材（下）：链接: https://pan.baidu.com/s/1eOjrdt-hgszb4xMMR-Xp0Q 密码: u68c
]]></description><link>https://blog.gaoredu.com/article/b6f6fa04-72cf-41fa-beb2-7939d80fb6da</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b6f6fa04-72cf-41fa-beb2-7939d80fb6da</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 19 Jul 2018 02:30:25 GMT</pubDate></item><item><title><![CDATA[2018最新RAR文件加密文件暴力破解工具]]></title><description><![CDATA[752

1.本工具目前支持暴力破解，掩码破解，和字典猜解三种方式


2.同时可以选择大小写字母区分等限制条件，从而加快破解速度，根据密码的复杂程度破解时间也有所不同。

下载链接：链接：https://share.weiyun.com/5elWUTZ 密码：qlq7or

]]></description><link>https://blog.gaoredu.com/article/3ad8c78b-e92e-4658-98d3-ad94ec923277</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3ad8c78b-e92e-4658-98d3-ad94ec923277</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 18 Jul 2018 21:36:22 GMT</pubDate></item><item><title><![CDATA[[黑科技]Unicode网页和ScriptEncode网页在线加解密源码和实现原理分析]]></title><description><![CDATA[751

这个黑科技大家用好了可以完全在自己的站点上面做个这个功能哈，类似于在线解密加密这种，废话不多说，直接上代码。
Unicode网页源代码加密工具源码：
<HTML><HEAD><TITLE>在线文本加密与解</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=网页在线加密解密,网页加密解密,unescape加密解密,网页源代码加密,网页代码加密,网页在线加密,网页制作加密 name=keywords>
<META content=网页在线加密解密,网页加密解密,unescape加密解密,网页源代码加密,网页代码加密,网页在线加密,网页制作加密 name=description>
<SCRIPT language=JavaScript>
<!--
var Words;

function SetWords(word)
{
Words = word.value;
}

function SetNewWords(form)
{
var NewWords;
NewWords = unescape(Words);
form.NewWords.value = NewWords;
}

function SetNewWords1(form)
{
var NewWords;
NewWords = escape(Words);
form.NewWords.value = NewWords;
}


// -->
</SCRIPT>

<SCRIPT language=JavaScript>
<!--
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a.indexOf("#")!=0){ d.MM_p=new Image; d.MM_p.src=a;}}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a)&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames.document; n=n.substring(0,p);}
if(!(x=d)&&d.all) x=d.all; for (i=0;!x&&i<d.forms.length;i++) x=d.forms;
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a))!=null){document.MM_sr=x; if(!x.oSrc) x.oSrc=x.src; x.src=a;}
}
//-->
</SCRIPT>

<SCRIPT language=JavaScript>
<!--

function MM_timelinePlay(tmLnName, myID) { //v1.2
//Copyright 1997 Macromedia, Inc. All rights reserved.
var i,j,tmLn,props,keyFrm,sprite,numKeyFr,firstKeyFr,propNum,theObj,firstTime=false;
if (document.MM_Time == null) MM_initTimelines(); //if *very* 1st time
tmLn = document.MM_Time;
if (myID == null) { myID = ++tmLn.ID; firstTime=true;}//if new call, incr ID
if (myID == tmLn.ID) { //if Im newest
setTimeout('MM_timelinePlay("'+tmLnName+'",'+myID+')',tmLn.delay);
fNew = ++tmLn.curFrame;
for (i=0; i<tmLn.length; i++) {
sprite = tmLn;
if (sprite.charAt(0) == 's') {
if (sprite.obj) {
numKeyFr = sprite.keyFrames.length; firstKeyFr = sprite.keyFrames;
if (fNew >= firstKeyFr && fNew <= sprite.keyFrames) {//in range
keyFrm=1;
for (j=0; j<sprite.values.length; j++) {
props = sprite.values;
if (numKeyFr != props.length) {
if (props.prop2 == null) sprite.obj = props;
else sprite.obj = props;
} else {
while (keyFrm<numKeyFr && fNew>=sprite.keyFrames) keyFrm++;
if (firstTime || fNew==sprite.keyFrames) {
if (props.prop2 == null) sprite.obj = props;
else sprite.obj = props;
} } } } }
} else if (sprite.charAt(0)=='b' && fNew == sprite.frame) eval(sprite.value);
if (fNew > tmLn.lastFrame) tmLn.ID = 0;
} }
}
//-->
</SCRIPT>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<H2 align=center><b><font size="5">文本Unicode码加密与解密<br>
<br>
</font><font size="2"><a href="ScriptEncode网页加解密.htm">JScript.Encode脚本加密与解密</a></font></b></H2>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE align=center>
<TBODY>
<TR>
<FORM method=post>
<TD align=middle>
<DIV align=center> 
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px" 
align=left><font size="2">用途:1.加密中文信函；2.秘密信息；3.BBS等上面发布加密留言；4.网页加密。</font></P>
<p 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px" 
align=left><font size="2">此类加密解密是通过Unescape脚本的转换实现的，中文文字太多会导致将页面代码膨胀。<br>
<br>
使用方法：<br>
        <FONT 
color=#ff0000>加密</FONT>：源代码粘贴在下面的框内，如果你对Java教熟，也可只对部分内容加<BR>
密，在对应输出部分使用outword()即可。注意：<FONT 
color=#ff0000>请在加密前先备份您的网页</FONT><BR>
    <FONT 
color=#ff0000>解密方法</FONT>：将引号内的乱码贴入按解密即可<BR>
如果你的问题是JScript.Encode脚本加密与解密，请使用</font><b><font size="2"><a href="ScriptEncode网页加解密.htm">JScript.Encode脚本加密与解密</a>。</font></b></p>
</DIV>
<DIV align=center>
<CENTER>
<P><TEXTAREA style="BORDER-RIGHT: #ffffff 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #cccccc; BORDER-LEFT: #ffffff 2px solid; WIDTH: 590px; BORDER-BOTTOM: #ffffff 2px solid; HEIGHT: 120px" name=Word rows=10 cols=65 onchange=SetWords(this)></TEXTAREA> 
</P></CENTER></DIV>
<DIV align=center>
<CENTER>
<P><INPUT style="BORDER-RIGHT: #ff6600 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #ffcc00; BORDER-LEFT: #ffffff 2px solid; WIDTH: 80px; BORDER-BOTTOM: #ff6600 2px solid; HEIGHT: 22px" onclick=SetNewWords(this.form) type=button value=解密 name=uncode> 
<INPUT style="BORDER-RIGHT: #ff6600 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #ffcc00; BORDER-LEFT: #ffffff 2px solid; WIDTH: 80px; BORDER-BOTTOM: #ff6600 2px solid; HEIGHT: 22px" onclick=SetNewWords1(this.form) type=button value=加密 name=encode> 
</P></CENTER></DIV>
<DIV align=center>
<CENTER>
<P>
<TEXTAREA style="BORDER-RIGHT: #ffffff 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #cccccc; BORDER-LEFT: #ffffff 2px solid; WIDTH: 590px; BORDER-BOTTOM: #ffffff 2px solid; HEIGHT: 120px" name=NewWords rows=10 cols=65></TEXTAREA>
</P>
<P>  </P>
<P align="left"><font size="2">以上是转换好的代码,将他们加入如下脚本的引号“”区内，就是加密后的HTML了！以下代码不可直接拷入FrontPage可先贴在记事本中，再copy一次再贴就没问题了。 
<br>
<HTML><br>
<HEAD><br>
<SCRIPT LANGUAGE="Javascript"><br>
<!--<br>
//此网页已加密，欲解密请到www.china-holiday.com</font></P>
<p align="left"><font size="2">var Words ="把加密生成后的代码复制到此处就OK了" //put 
your cripto code there<br>
function OutWord()<br>
{<br>
var NewWords;<br>
NewWords = unescape(Words);<br>
document.write(NewWords);<br>
} <br>
OutWord();<br>
// --><br>
</SCRIPT><br>
</HEAD><br>
<BODY><br>
</BODY><br>
</HTML> </font> </p>
</CENTER></DIV></FORM>
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px" 
align=left>   
以上是转换好的代码,将他们加入如下脚本的引号“”区内，就是加密后的HTML了！以下代码不可直接拷<BR>入FrontPage可先贴在记事本中，再copy一次再贴就没问题了。 
</P>
<DIV align=center>
<CENTER>
<TABLE width="65%" align=center border=0>
<TBODY>
<TR>
<TD height=314><FONT 
face="Arial, Helvetica, sans-serif"><B><HTML><BR><HEAD><BR><SCRIPT 
LANGUAGE="Javascript"><BR><!--<BR></B></FONT><FONT 
size=2><B>//此网页已加密<BR></B></FONT><B><FONT 
face="Arial, Helvetica, sans-serif"><BR>var Words 
="</FONT>把加密生成后的代码复到此处就<FONT 
face="Arial, Helvetica, sans-serif">OK</FONT>了<FONT 
face="Arial, Helvetica, sans-serif">" //put your cripto code 
there<BR>function OutWord()<BR>{<BR>var NewWords;<BR>NewWords 
= unescape(Words);<BR>document.write(NewWords);<BR>} 
<BR>OutWord();<BR>// 
--><BR></SCRIPT><BR></HEAD><BR><BODY><BR></BODY><BR></HTML></FONT></B></TD></TR></TBODY></TABLE></CENTER></DIV>
<TR>
<TD align=middle height="2"></TD>
</TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
</BODY></HTML>


ScriptEncode源码在线加解密源码如下：
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>JScript.Encode加密解密.Encode在线加密解密</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<link href="../css.css" rel="stylesheet" type="text/css">
<META 
content=Encode加密解密,encode在线加密解密,jscript.encode解密,jscript.encode加密,网页加密解密,脚本加密与解密 
name=keywords>
<META content="MSHTML 6.00.2800.1226" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=0>

<SCRIPT language=javascript>
<!--
function screncode(s,l)
{enc=new ActiveXObject("Scripting.Encoder");
return enc.EncodeScriptFile("."+l,s,0,l+"cript");
}


var STATE_COPY_INPUT = 100
var STATE_READLEN = 101
var STATE_DECODE = 102
var STATE_UNESCAPE = 103

var pick_encoding = new Array(
1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0,
1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2,
1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2,
1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2
)

var rawData = new Array(
0x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72,
0x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C,
0x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43,
0x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63,
0x7A,0x26,0x4A, 0x21,0x54,0x5A, 0x46,0x71,0x38, 0x20,0x2B,0x79,
0x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B,
0x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D,
0x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F,
0x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E,
0x5A,0x2F,0x3B, 0x66,0x39,0x47, 0x32,0x33,0x41, 0x73,0x6F,0x77,
0x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78,
0x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67,
0x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22,
0x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A,
0x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C,
0x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25,
0x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28,
0x6D,0x5E,0x31, 0x4E,0x5B,0x39, 0x2B,0x6E,0x7F, 0x30,0x57,0x36,
0x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E,
0x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09,
0x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D,
0x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37,
0x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E,
0x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F
)

var transformed = new Array()
for (var i=0; i<3; i++) transformed = new Array()
for (var i=31; i<=126; i++) for (var j=0; j<3; j++) transformed] = (i==31) ? 9 : i

var digits = new Array()
for (var i=0; i<26; i++)
{
digits = i
digits = i+26
}
for (var i=0; i<10; i++) digits = i+52
digits = 62
digits = 63

function unescape(char)
{
var escapes = "#&!*$"
var escaped = "\r\n<>@"

if (char.charCodeAt(0) > 126) return char
if (escapes.indexOf(char) != -1) return escaped.substr(escapes.indexOf(char), 1)
return "?"
}

function decodeBase64(string)
{
var val = 0
val += (digits << 2)
val += (digits >> 4)
val += (digits & 0xf) << 12
val += ((digits >> 2) << 8)
val += ((digits & 0x3) << 22)
val += (digits << 16)
return val
}

function strdec(encodingString)
{

var marker = "#@~^"
var stringIndex = 0
var scriptIndex = -1
var unEncodingIndex = 0
var char = null
var encodingLength = unEncodinglength = 0
var state = STATE_COPY_INPUT
var unEncodingString = ""
var re, arr

while(state)
{
switch (state)
{
case (STATE_COPY_INPUT) :
scriptIndex = encodingString.indexOf(marker, stringIndex)
if (scriptIndex != -1)
{
unEncodingString += encodingString.substring(stringIndex, scriptIndex)
scriptIndex += marker.length
state = STATE_READLEN
}
else
{
stringIndex = stringIndex==0 ? 0 : stringIndex
unEncodingString += encodingString.substr(stringIndex, encodingString.length)
state = 0
}
break

case (STATE_READLEN) :
encodingLength = encodingString.substr(scriptIndex, 6)
unEncodinglength = decodeBase64(encodingLength)
scriptIndex += (6 + "==".length)
state = STATE_DECODE
break

case (STATE_DECODE) :
if (!unEncodinglength)
{
stringIndex = scriptIndex + "DQgAAA==^#~@".length
unEncodingIndex = 0
state = STATE_COPY_INPUT
break
}
char = encodingString.substr(scriptIndex, 1)
if (char == "@") state = STATE_UNESCAPE
else
{
if (char.charCodeAt(0) < 0xFF)
{
unEncodingString += String.fromCharCode(transformed])
unEncodingIndex++
}
else
{
unEncodingString += char
} 
scriptIndex++
unEncodinglength--
break
}

case STATE_UNESCAPE:
unEncodingString += unescape(encodingString.substr(++scriptIndex, 1))
scriptIndex++; unEncodinglength -=2
unEncodingIndex++
state = STATE_DECODE
break
}
}

re = new RegExp("(JScript|VBscript).encode", "gmi")
while(arr = re.exec(unEncodingString)) unEncodingString = RegExp.leftContext + RegExp.$1 + RegExp.rightContext
return unEncodingString
}

//-->
</SCRIPT>
<div align="center"> 
<H2><B>JScript.Encode脚本加密与解密<br>
<br>
</B><font size="2">如果是Unicode文本加解密，请使用<a href="Unicode网页加解密.htm">Unicode加解密</a></font></H2>
</div>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR> 
<TD><DIV class=div> 
<DIV align=center> 
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px" 
align=left><font size="2"> 所谓加密解密是通过JScript.Encode脚本的转换实现的，但经过实验中文文字太多会导致将你的页面代码膨胀。英文反会有压缩效果。</font></P>
</DIV>
<DIV align=center> 
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px" 
align=left><font size="2">用途:<br>
1.加密英文信函（如果您想加密解密中文信函等等，请访问Unicode码加密解密）；<br>
2.秘密数字信息；3.BBS等上面发布英文、数字留言；4.网页加密。<br>
此类JScript.Encode码加密，只加密英文、符号，对中文文字不加密。<br>
<br>
使用方法：<BR>
    <FONT color=#ff0000>加密</FONT>：源代码粘贴在下面的框内,注意：<FONT 
color=#ff0000>请在加密前先备份您的网页</FONT><BR>
    <FONT 
color=#ff0000>解密方法</FONT>：将引号内的乱码贴入按解密即可</font></P>
</DIV>
<FORM method=post>
<P align=center>
<TEXTAREA style="BORDER-RIGHT: #ffffff 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #cccccc; BORDER-LEFT: #ffffff 2px solid; WIDTH: 590px; BORDER-BOTTOM: #ffffff 2px solid; HEIGHT: 320px" name=codeinput rows=10 cols=55></TEXTAREA>
<BR>
<BR>
<INPUT name="button" type=button style="BORDER-RIGHT: #ff6600 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #ffcc00; BORDER-LEFT: #ffffff 2px solid; WIDTH: 80px; BORDER-BOTTOM: #ff6600 2px solid; HEIGHT: 22px" value=Encode加密>
<INPUT name="button" type=button style="BORDER-RIGHT: #339999 2px solid; BORDER-TOP: #ffffff 2px solid; FONT-SIZE: 14px; BACKGROUND: #66b800; BORDER-LEFT: #ffffff 2px solid; WIDTH: 80px; BORDER-BOTTOM: #339999 2px solid; HEIGHT: 22px" onclick=this.form.codeinput.value=strdec(this.form.codeinput.value) value=Encode解密>
<BR>
</P>
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px; TEXT-ALIGN: left">
<font size="2">说明：加密时应只加密脚本部分，不加密脚本标记<script 
language="javascript">，并且加密后脚本标记应改为：<BR>
<script language="JScript.Encode"><br>
多次加密，那么您就多按几次解密直到可以阅读为止,Unicode解密也有这种情况。</font></P>
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px; TEXT-ALIGN: left">
<font size="2">注意：此页为jscript.encode解密以及jscript.encode加密或者称之为encode加密解密、encode在线加密解密
。<br>
      如果是Unicode文本加解密，请使用<a href="Unicode网页加解密.htm">Unicode加解密</a>。</font></P>
<P 
style="PADDING-RIGHT: 40px; PADDING-LEFT: 40px; PADDING-BOTTOM: 0px; WIDTH: 100%; COLOR: #666666; PADDING-TOP: 0px; TEXT-ALIGN: left">
<font size="2"> </font></P>
</FORM>
</DIV></TD>
</TR>
</TBODY>
</TABLE> 
</BODY></HTML>



]]></description><link>https://blog.gaoredu.com/article/07d434cf-192e-4813-9bc6-dc4940d2b70f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/07d434cf-192e-4813-9bc6-dc4940d2b70f</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 18 Jul 2018 20:55:39 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---计算机图形学 PDF电子版下载]]></title><description><![CDATA[750

书籍目录：
第1章　引言
第2章　数学知识
第3章　光栅算法
第4章　信号处理
第5章　线性代数
第6章　矩阵变换
第7章　观察
第8章　隐藏面消除
第9章　表面明暗处理
第10章　光线跟踪
第11章　纹理映射
第12章　完整的图形流水线
第13章图形学的数据结构
第14章采样
第15章　曲线
第16章　计算机动画
第17章　使用图形硬件
第18章构建交互式图形应用程序
第19章　光照
第20章　颜色
第21章　视觉感知
第22章　色调再现
第23章　全局照明
第24章　反射模型
第25章　基于图像的绘制
参考文献
索引


全书下载链接：链接: https://pan.baidu.com/s/1xKhTfWqYWboTuXO3STpzfg 密码: 97p7

]]></description><link>https://blog.gaoredu.com/article/6e59b5e4-8d3c-4b6b-8b2a-a99b1635dd37</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6e59b5e4-8d3c-4b6b-8b2a-a99b1635dd37</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 18 Jul 2018 02:31:02 GMT</pubDate></item><item><title><![CDATA[【黑客工具】一款简单的身份证号码查询工具（可查看任意用户信息）]]></title><description><![CDATA[1.软件是单文件版本的，直接打开就可以了：


748


2.点击分析之后的查询效果如下：
可以准确查询身份证号码所属的省市区出生年月日，还可以。。
分析
复制
保存
地图
帮助。
关闭
查询
身份证号码N]: 513221194910015126
省直辖市：
四川省
市县：
阿坝藏族羌族自治州
地区：
汶川县
出生年月日：
1949年10月1日
性别：
女
出生序号：
512，当年该地区第256个出生的女性
转换：
513221491001512
说明：
今年70岁，在人间度过了25127天，



749


基本上可以识别你输入的身份证号码是否正确，其次也可以查看输入的身份证对应的详细信息。


下载链接：链接：https://share.weiyun.com/51FmHCn 密码：7z42cu]]></description><link>https://blog.gaoredu.com/article/9deb1261-17c3-43a9-aa1d-6cfc3d2f0358</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9deb1261-17c3-43a9-aa1d-6cfc3d2f0358</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Jul 2018 22:38:49 GMT</pubDate></item><item><title><![CDATA[带你5天揭秘JavaScript技术内幕视频教程]]></title><description><![CDATA[747


第一天链接: https://pan.baidu.com/s/1sPI45CpsHVqCs_S-9rqM7A 密码: wr5k
第5讲_script词法分析.wmv
第4讲_函数（2）.wmv
第3讲_函数（1）.wmv
第2讲_js基础（2）.wmv
第1讲_js基础（1）.wmv
~$sson03.doc
Lesson01.doc
JS正则表达式.ppt
JS面向对象.ppt
JavaScript.ppt
第五天链接: https://pan.baidu.com/s/1KfQgkUrjckJTDRSy7ZIqyw 密码: n4gd
复习.wmv
第6讲_正则案例.wmv
第5讲_正向预查_正则学习工具.wmv
第4讲_匹配符_定位符.wmv
第3讲_子表达式_限定符.wmv
第2讲_使用正则对象.wmv
第1讲_创建正则对象.wmv
第四天链接: https://pan.baidu.com/s/16FxkOIchS14aX07Kgd8hrw 密码: vaz4


复习.wmv
第7讲_调试_作业.wmv
第6讲_贪食蛇(3).wmv
第5讲_贪食蛇(2).wmv
第4讲_贪食蛇(1).wmv
第3讲_实现继承.wmv
第2讲_私有属性_call和apply.wmv
第1讲_Object类_静态属性_函数闭包.wmv




第三天链接: https://pan.baidu.com/s/1-KmeIHEhhSOZzkgxM9C1aA 密码: xmyw




第6讲_prototype原型.wmv
第5讲_json详解.wmv
第4讲_对象赋值_for..in语句_成员方法.wmv
第3讲_this详解.wmv
第2讲_类和对象_内存表现形式.wmv
第1讲_系统常用类.wmv


第二天链接: https://pan.baidu.com/s/1Tg6_ksZ_28uEdW9MBo0tgg 密码: k7nv
复习1.wmv
第7讲_定时器.wmv
第6讲_BOM模型.wmv
第5讲_默认行为_事件对象.wmv
第4讲_事件监听_事件模型.wmv
第3讲_事件_动态绑定.wmv
第2讲_城市切换案例.wmv
第1讲_数组定义及详解.wmv




]]></description><link>https://blog.gaoredu.com/article/bac379f0-022d-4222-bd95-c7c2ceb9b765</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bac379f0-022d-4222-bd95-c7c2ceb9b765</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Jul 2018 21:03:59 GMT</pubDate></item><item><title><![CDATA[于慧考研英语真题100篇句法研读50讲视频教程]]></title><description><![CDATA[746


第13课.课件13 句法讲话第30—第32讲.flv
第3课.课件3 句法讲话第2讲.flv
第16课.课件16 句法讲话第43—47讲.flv
第9课.课件9 句法讲话第16—第20讲.flv
第17课.课件17 句法讲话第48—50讲.flv
第6课.课件6 句法讲话第二章（第5—第10讲）.flv
第10课.课件10 句法讲话第21—第24讲.flv
第18课.课件18 句法讲话阴影部分.flv
第15课.课件15 句法讲话第36—42讲.flv
第2课.课件2 句法讲话第1讲.flv
第8课.课件8 句法讲话第15讲.flv
第7课.课件7 句法讲话第三章（第11—第14讲）.flv
第4课.课件4 句法讲话第3讲.flv
第11课.课件11 句法讲话第25—第27讲.flv
第12课.课件12 句法讲话第28、29讲.flv
第14课.课件14 句法讲话第33—35讲.flv
第5课.课件5 句法讲话第4讲.flv
第1课.课件1 目录(必须听).flv


视频下载链接: https://pan.baidu.com/s/15xvw2_E-2Yc403LRYtYSow 密码: kiih


]]></description><link>https://blog.gaoredu.com/article/42fb142f-5d71-495d-bb9d-c8ce02320c54</link><guid isPermaLink="true">https://blog.gaoredu.com/article/42fb142f-5d71-495d-bb9d-c8ce02320c54</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Jul 2018 20:55:53 GMT</pubDate></item><item><title><![CDATA[新东方2019考研基础班之计算机基础课程数据结构与算法精讲班视频教程]]></title><description><![CDATA[绪论：链接: https://pan.baidu.com/s/1-QeQy_Jm2FjAvIeHbaBsRg 密码: b2ms
线性表：链接: https://pan.baidu.com/s/1aqOSJxiM0baw2CSZoLCDaQ 密码: n3ep
栈、队列、数组：链接: https://pan.baidu.com/s/1T0Y70DR6r9iXSTMySKD93g 密码: f7c8
树和二叉树：链接: https://pan.baidu.com/s/1oNoA-CeClX-ufMWdFDpqrA 密码: vw8x
图链接: https://pan.baidu.com/s/1Rv7F86FtKw-Q8tejmC0ayQ 密码: ffw5
查找链接: https://pan.baidu.com/s/1pureCh9u562nPSDVDDt6uA 密码: e7qx
排序：链接: https://pan.baidu.com/s/1buJdwAkgiS2ZvMEatisBlw 密码: 4hx7



再分享几个算法的视频教程吧：
传智播客数据结构和算法精讲班
https://www.52tech.tech/forum.php?mod=viewthread&tid=393&fromuid=1

【算法面试】2020最新玩转算法面试 C++版本 互联网公司真题【完整版】
https://www.52tech.tech/forum.php?mod=viewthread&tid=953&fromuid=1



【WEB前端】玩转前端javascript数据结构和算法2019全网首发最新版
https://www.52tech.tech/forum.php?mod=viewthread&tid=951&fromuid=1

算法导论(原书第3版)中文完整版高清扫描版
https://www.52tech.tech/forum.ph ... d=451&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/2c360994-8492-4886-9bdb-4fd8f0179ef3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2c360994-8492-4886-9bdb-4fd8f0179ef3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Jul 2018 03:03:59 GMT</pubDate></item><item><title><![CDATA[40款手机APP软件带你畅游免费在线VIP视频的世界（优酷爱奇艺免费看）的黑科技软件]]></title><description><![CDATA[745


种子搜索.apk链接: https://pan.baidu.com/s/1WeZWY37ndUU_TY8PvByAWg 密码: gky8
宅鱼.apk链接: https://pan.baidu.com/s/1Lj9hgs3liIWqJ2CT4Rrz0A 密码: ds6y
云视影盒.apk链接: https://pan.baidu.com/s/1ki0wcunWR3pw4iT5ibWFSg 密码: 7qs1
影音先锋.apk链接: https://pan.baidu.com/s/1T-cXfNT_XKZ0RlKkHZ691g 密码: s83d
壹视助手.apk链接: https://pan.baidu.com/s/1xv0kEFhMQR65R3EbFGJqIg 密码: vvgs
夜猫影视.apk链接: https://pan.baidu.com/s/17mGYwLjClakTO4LF7z0dpg 密码: ebux
新电影天堂.apk链接: https://pan.baidu.com/s/101DSieHcCF5bE7DLK6BLOw 密码: 6jtt
乌龙云观.apk链接: https://pan.baidu.com/s/11vrz6v8q_WyYoMY1_VXQiQ 密码: gddb
衛星電視.apk链接: https://pan.baidu.com/s/1SosDP1dpeKIIVEtitshmWg 密码: rkza
万影VIP.apk链接: https://pan.baidu.com/s/1FjEHPME2qCW3RTOosJHHBQ 密码: bjws
万能看.apk链接: https://pan.baidu.com/s/1Wolu6WYQ0TDrHUOv1Vldyg 密码: hrqc
天空影视-看VIP电影.apk链接: https://pan.baidu.com/s/1jXeO_i5mFU2xgBnFSbljdQ 密码: b5av
随便播.apk链接: https://pan.baidu.com/s/1wNcJ-YcNrHz04VmOZahADA 密码: ubtt
鲨鱼影视.apk链接: https://pan.baidu.com/s/1kAvIJoRhsbxxykr0waf84w 密码: v3b2
人人视频.apk链接: https://pan.baidu.com/s/1h0q_kdUtO3fuk2X-oY_z7Q 密码: ymn2
全聚影视.apk链接: https://pan.baidu.com/s/1WkHEGN44AjOP2LpazlU-Rg 密码: 4uzy
全V影城.apk链接: https://pan.baidu.com/s/1n3g5FiGS7lpSgW_JXR7Crg 密码: 2g2y
牛牛看电视.apk链接: https://pan.baidu.com/s/1OEJIbbjbTXVs24k99vEMaA 密码: 6kfq
妮哩.apk链接: https://pan.baidu.com/s/1NBk6c-82TmbQ8PMy0GApZQ 密码: 2n8n
南瓜电影.apk链接: https://pan.baidu.com/s/1xO4ASrS9ix04LlttMWSybA 密码: 46kn
龙猫云观.apk链接: https://pan.baidu.com/s/1qBg3vmFzTD5-swTZSyoi-g 密码: sv8z
乐看影视.apk链接: https://pan.baidu.com/s/19jiBmVQX4eVpXxgBWqxKnA 密码: xhju
看么影院.apk链接: https://pan.baidu.com/s/1KRQhuQjhktpBnb5H9pu6ZA 密码: ypyu
聚看影视.apk链接: https://pan.baidu.com/s/13LDzmQhhBBL5KWY6fq2mxQ 密码: r4zu
鲸影视.apk链接: https://pan.baidu.com/s/152Tqo9h44qkxhM6v7-N-1w 密码: c8me
简单看.apk链接: https://pan.baidu.com/s/12kiQCr5oKova3s17XsCIGA 密码: 5pg5
极趣淘影视.apk链接: https://pan.baidu.com/s/1StSO9HNluzVYam_bymvXgw 密码: gqtr
官官影视4.5.apk链接: https://pan.baidu.com/s/18tIO8VgY5PUDNeUgdSH8Mw 密码: w35r
锋彩直播.apk链接: https://pan.baidu.com/s/1WRXNV5DEdKUrkUQ0mfVsSw 密码: q41z
疯狂影视.apk链接: https://pan.baidu.com/s/1GyU-Xn-bp7AAIZylH4RPxA 密码: 43ew
电影天堂.apk链接: https://pan.baidu.com/s/193m_6mDp__gk9eJckzae4A 密码: hrb7
电影雷达.apk链接: https://pan.baidu.com/s/1AiTZYFfE7D8w4Zi2WfjVEw 密码: ayja
电视直播.apk链接: https://pan.baidu.com/s/1Hr-iH_EVzBTp-L7JmNWqAQ 密码: zvdg
村庄影视.apk链接: https://pan.baidu.com/s/1UqT3WjNYEx9bpnpurMSJCw 密码: m7zi
超级视频.apk链接: https://pan.baidu.com/s/19PpXiOs2OzXY-R_-SbzAzQ 密码: vvfp
爱窝免费电视.apk链接: https://pan.baidu.com/s/1G4MFGQqAqII4J57aiJzUAw 密码: 4bqt
XM追啦.apk链接: https://pan.baidu.com/s/1IjTxTg1v42VCbn6Vsdnykw 密码: xgpi
Silence影视.apk链接: https://pan.baidu.com/s/1ZSzrA07AsQNFYbItDc1gpA 密码: hpd7
LTV.apk链接: https://pan.baidu.com/s/1-uWL_BKsyLQbpC6g9Ta0ig 密码: 657y
18点影视.apk链接: https://pan.baidu.com/s/1SZO7eDY_qBPonQhQBv0_5Q 密码: igw2


]]></description><link>https://blog.gaoredu.com/article/e57581f7-6cb8-4d8e-934e-0064a75ffe8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e57581f7-6cb8-4d8e-934e-0064a75ffe8d</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Jul 2018 20:53:08 GMT</pubDate></item><item><title><![CDATA[价值万元的易语言辅助、模块开发、管理系统开发及工具开发全套超详细视频教程]]></title><description><![CDATA[031-050易游戏辅助开发系列链接: https://pan.baidu.com/s/1nmSa0qSLcpEBS6nhHlVY8A 密码: k39f
030制作CF辅助软件系列教程链接: https://pan.baidu.com/s/10zyyVAQD-sPCkOqi-XovXg 密码: mkyt
029易语言“成吉思汗2”辅助教程链接: https://pan.baidu.com/s/1C8OHssOZ4DAxBvj_gj956Q 密码: bky5
028墨鱼科技易语言游戏辅助编程VIP培训教程链接: https://pan.baidu.com/s/16WEvyO1QkY9TiGkkS7Qk5g 密码: c2nj
027索马里易语言辅助开发链接: https://pan.baidu.com/s/1ScPFV6P9hf0jtRhhLH0FXw 密码: 2nfd
026魔鬼作坊易语言辅助VIP培训教程链接: https://pan.baidu.com/s/1RQWrSHxXmH-uRjRiMyFexw 密码: 7k7f
025挂茶馆易语言辅助开发链接: https://pan.baidu.com/s/1n8vszzb2yiy1na6wDnypjQ 密码: zktx
024易语言天龙3辅助VIP教程链接: https://pan.baidu.com/s/1yextKW_lkBbSUBQgr9FLkw 密码: njuf
023易语言DNF游戏辅助教程链接: https://pan.baidu.com/s/1AT8MLkidGQ1Qy-5p_tADkw 密码: kyxx
022易语言魔鬼作坊1-106课视频教程链接: https://pan.baidu.com/s/1O6S4MhWb6RV62UXNRPVPAQ 密码: yi3y
021内存辅助教程 网游封包教程链接: https://pan.baidu.com/s/1n0_ITQWHtiVTtqXq_r79vA 密码: ctv6
020独立团第一部VIP视频教程链接: https://pan.baidu.com/s/1sJnijyOtuwgL-yjp44Vp5g 密码: hq4j
019世恒百集易语言视频教程(1-100集)链接: https://pan.baidu.com/s/1RMrO6p6ChMqWELEiK8J_Ig 密码: 4w3j
018世宝易语言详细教程链接: https://pan.baidu.com/s/1pfnVFiHZM16osdKySTaQTQ 密码: byqu
017黑鹰易语言全套视频教程1-35课链接: https://pan.baidu.com/s/1WNsydd6esKZiM6yAEh6B2w 密码: cmws
016易语言远控开发链接: https://pan.baidu.com/s/1Rfx_1gAtg6PDPNoOCnzuMg 密码: kwbf
015网页采集教程链接: https://pan.baidu.com/s/1e0Eer9PTbSIM_pLIovpUyw 密码: jfcu
014觅风易语言入门培训基础视频教程【1-43课】链接: https://pan.baidu.com/s/1qmECAOT7hsGGNAV4f_C9VA 密码: shv5
013之乎者也易语言Post教程链接: https://pan.baidu.com/s/1JHtZFNd7m7SaMGWVLnpqAw 密码: nbsn
012黑色风帆VB视频编程特训班教程【1-27课】链接: https://pan.baidu.com/s/1wuui-DD-RxjnASndQ_Ixag 密码: dn6s
011基础学易语言教程链接: https://pan.baidu.com/s/1uGNdyAScRQ0njLRryQszdA 密码: xt64
010仓库管理系统制作系列教程无密码【1-11课】链接: https://pan.baidu.com/s/1hfo9qGOqp2HaJbce_F8O4g 密码: g86d
009柔情似月易语言培训系列视频教程【1-18课】链接: https://pan.baidu.com/s/11jXXOhZi547vQVe-3ZkZJg 密码: wj85
008天都吧易语言入门到精通全套课程1-50课链接: https://pan.baidu.com/s/1qkfcrXjfQohbN-cltMcyMw 密码: fi6k
007易语言正则表达式视频教程共1-12课时链接: https://pan.baidu.com/s/1uDyZ6o3W7y616ZG12eE4uA 密码: 6k5y
006易语言速成班第一期、第二期共计23课链接: https://pan.baidu.com/s/1HyazqyZGw34-duylrNRHoA 密码: rkkk
005江中游易语言入门视频教程链接: https://pan.baidu.com/s/1SSPWdz6RF6Wwx_gUiQl_wg 密码: djyf
004中华隐士易语言全套高清视频教程1-20讲链接: https://pan.baidu.com/s/1cBFu_mV8ZJ-JkLVJKV1kEw 密码: 5tsa
003【易能者】易语言模块编写系列视频教程链接: https://pan.baidu.com/s/1mPpV5xDMuIKhCphqbSuuiw 密码: q9i8
002易语言入门到精通1-100集百集视频教程链接: https://pan.baidu.com/s/1iHsbzvcYJy2ZCwSDGEKckQ 密码: 5mfd
001易语言从入门到精通80集链接: https://pan.baidu.com/s/1XhmEVDGpdyBkIy_RCwKQiw 密码: gcwu
000易语言工具链接: https://pan.baidu.com/s/15s0Zwc5xBfLoD5yuivmQqw 密码: 5tz5




]]></description><link>https://blog.gaoredu.com/article/7bc67389-7de8-4c98-b165-048b692003f8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7bc67389-7de8-4c98-b165-048b692003f8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Jul 2018 20:38:35 GMT</pubDate></item><item><title><![CDATA[墨鱼科技易语言游戏辅助编程VIP培训视频教程免费下载]]></title><description><![CDATA[

744
易语言游戏辅助编程第一部分：链接: https://pan.baidu.com/s/1H07WgIHPE-gAw2MvdsiYSg 密码: ssmm
易语言游戏辅助编程第二部分：链接: https://pan.baidu.com/s/1SyL14Yc-cKHsiHptt3KyWg 密码: 34gk








再分享几个相关的易语言视频教程吧：
【视频教程】2020最新10天从0入门入门易语言系列中文视频教程（无加密）
https://www.52tech.tech/forum.ph ... d=968&fromuid=1
价值万元的易语言辅助、模块开发、管理系统开发及工具开发全套超详细视频教程
https://www.52tech.tech/forum.ph ... d=667&fromuid=1
易语言POST系列教程合集（基础篇+中级篇+高级篇）全套教程拿下你就是大神了

https://www.52tech.tech/forum.ph ... d=153&fromuid=1
全网最全的一套易语言学习教程，想让编程变得简单，就来学易语言！

https://www.52tech.tech/forum.ph ... id=58&fromuid=1
(出处: 我爱科技论坛)
]]></description><link>https://blog.gaoredu.com/article/6a1c837c-394a-4ac7-9f8a-29c1fc1096af</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6a1c837c-394a-4ac7-9f8a-29c1fc1096af</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Jul 2018 02:53:45 GMT</pubDate></item><item><title><![CDATA[基于OpenLayers实战地理信息系统（离线地图项目实战）实战教程]]></title><description><![CDATA[第9讲-项目快速实战（七）.rar
第8讲-项目快速实战（六）.rar
第7讲-项目快速实战（五）.rar
第6讲-项目快速实战（四）.rar
第5讲-项目快速实战（三）.rar
第4讲-项目快速实战（二） 01.rar
第3讲-项目快速实战（一）.rar
第33讲-高级-OpenLayers源代码分析（九）.rar
第32讲-高级-OpenLayers源代码分析（八）.rar
第31讲-高级-OpenLayers源代码分析（七）.rar
第30讲-高级-OpenLayers源代码分析（六）.rar
第2讲-庞杂的GIS体系概览 01.rar
第29讲-高级-OpenLayers源代码分析（五）.rar
第28讲-高级-OpenLayers源代码分析（四）.rar
第27讲-高级-OpenLayers源代码分析（三）.rar
第26讲-高级-OpenLayers源代码分析（二）.rar
第25讲-高级-OpenLayers源代码分析（一）.rar
第24讲-OpenLayers离线地图快速实战（五）.rar
第23讲-OpenLayers离线地图快速实战（四）.rar
第22讲-OpenLayers离线地图快速实战（三）.rar
第21讲-OpenLayers离线地图快速实战（二）.rar
第20讲-OpenLayers离线地图快速实战（一）.avi.rar
第1讲-概述.rar
第19讲-定时将基站cellid转经纬度.rar
第18讲-定时器Quartz进阶（四）.rar
第17讲-定时器Quartz进阶（三）.rar
第16讲-定时器Quartz进阶（二）.rar
第15讲-定时器Quartz进阶（一）.rar
第14讲-高级-通过基站cellid转经纬度（三）.rar
第13讲-高级-通过基站cellid转经纬度（二）.rar
第12讲-高级-通过基站cellid转经纬度（一）.rar
第11讲-项目快速实战（九）.rar
第10讲-项目快速实战（八）.rar
代码及PPT.rar


下载链接：链接: https://pan.baidu.com/s/1otCbCmMtKGUUq78CUdcTyQ 密码: ukcn

]]></description><link>https://blog.gaoredu.com/article/f219a616-cefa-47d6-a5ec-1b0b42db7621</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f219a616-cefa-47d6-a5ec-1b0b42db7621</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Jul 2018 02:41:13 GMT</pubDate></item><item><title><![CDATA[JavaScript基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架的搭建]]></title><description><![CDATA[JavaScript框架封装雏形：实现了基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架的搭建

/*
* @Author: 我爱科技论坛
* @Time: 20180705
* @Desc: 实现一个类似于JQuery功能的框架
* V 1.0: 实现了基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架的搭建
* */



// 框架
(function (w) {
    var xframe = {
        /**
         * 实现对象的可扩充性
         * @param target
         * @param source
         * @returns {*}
         */
        extend : function (target, source) {
            for (var i in source){
                target = source;
            }
            return target;
        },
    }

    // 暴露我的立即函数中的局部变量(给window这个对象添加两个属性变量： xframe, $$)
    w.xframe = w.$$  = xframe;
})(window);



// 基础框架: 基本上都是不需要参与链式访问的
// 实现功能: 如果是一个参数的话，就直接给类添加方法
// 如果是多个参数的话，就表示给指定的对象添加方法
xframe.extend(xframe, {
    ltrim : function () {

    },
    rtrim : function () {

    },
    trim : function () {

    },
    ajax : function () {

    },
    formateString : function () {

    },
    random : function () {

    },
    isNumber : function () {

    },
    isBoolean : function () {

    },
    isString : function () {

    },
    isUndefined : function () {

    },
    isObject : function () {

    },
    isNull : function () {

    },
    isArray : function () {

    },

})


// 选择框架
/***
 * 如果下面的框架需要用到上面的框架，就直接可以把上面的去全局变量/对象暴露出去，这里是使用了前面的xframe全局变量
  */
(function ($$) {
    $$.$all = function(){

    };
    $$.$id  = function (id) {

    };
    $$.$tag = function () {

    };
    $$.$class = function () {

    };
    $$.$group = function () {

    };
    $$.cengci = function () {

    };
    $$.$select = function () {

    }

})(xframe);


// 事件框架
(function ($$) {
    $$.on = function () {

    }
})(xframe);


// CSS框架
(function ($$) {
    $$.css = function () {

    };

    // 元素的显示与隐藏
    $$.show = function () {

    };
    $$.hide = function () {

    };

    // 元素的宽度和高度
    $$.width = function () {

    };
    $$.height = function () {

    };


    // 元素的滚动宽度和高度
    $$.scrollWidth = function ()
    {

    };
    $$.scrollHeight = function () {

    };

    // 滚动条相对于上面和左边的距离
    $$.scrollTop = function () {

    };
    $$.scrollLeft = function () {

    };


    // 屏幕的宽度和高度
    $$.screenWidth = function () {

    };
    $$.screenHeight = function () {

    };


    // 文档区域的宽度和高度
    $$.wWidth = function () {

    };
    $$.wHeight = function () {

    };


    // 获取文档滚动窗口的相关属性参数信息
    $$.wScrollHeight = function () {

    };
    $$.wScrollWidth = function () {

    };

    // 获取文档滚动窗口距离上面和左边的距离和宽度
    $$.wScrollTop = function () {

    };
    $$.wScrollLeft = function () {

    };
})(xframe);


// 属性框架
(function ($$) {
    // 私有方法
    function removeName() {

    };
    function addName() {

    }

    // 公有方法
    $$.attr  = function () {

    };
    $$.addClass = function () {

    };
    $$.removeClass = function () {

    }
})(xframe);



// 内容框架
(function () {
    $$.html = function () {

    };
    $$.text = function () {

    };
    $$.val = function () {

    }
})();


// 动画框架
(function () {
    function Animate() {

    }

    Animate.prototype = {

    }
})();



]]></description><link>https://blog.gaoredu.com/article/8a568413-db7a-47ab-b118-cc68dcc09f00</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8a568413-db7a-47ab-b118-cc68dcc09f00</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 15 Jul 2018 02:50:44 GMT</pubDate></item><item><title><![CDATA[18肖秀荣考研政治真题全套PDF电子版资料]]></title><description><![CDATA[肖秀荣1000题上：链接: https://pan.baidu.com/s/12zqW6sxEO9MMPvKtr9lKKw 密码: 4fgw答案解析：链接: https://pan.baidu.com/s/1Mx-aPfTXRt0M6SN2_bKTdA 密码: 6pnj

肖秀荣1000题下：链接: https://pan.baidu.com/s/1KPII4gyoxzAiSB8BWd7DGg 密码: 8scq

答案解析：链接: https://pan.baidu.com/s/15gAXZvpSXA3-kThrBh_E5A 密码: aqj3
743


2018肖秀荣考研政治命题人知识点精讲精练(上）链接: https://pan.baidu.com/s/1EyfKaJUs3i0toTzZB4pbnQ 密码: igs2
2018肖秀荣考研政治命题人知识点精讲精练(下）链接: https://pan.baidu.com/s/1XEZqwv5OjVKwU6n16Qm-9g 密码: f457
命题人讲真题2018上（肖秀荣）：链接: https://pan.baidu.com/s/1IyRNWL7CWkfxfgioDuD40A 密码: ct6b
命题人讲真题2018下（肖秀荣）：链接: https://pan.baidu.com/s/1Ns0vjMKyi1pw6J9UBYFI-w 密码: dwac
]]></description><link>https://blog.gaoredu.com/article/30daf5c1-c38a-4b98-81e9-139b52a79629</link><guid isPermaLink="true">https://blog.gaoredu.com/article/30daf5c1-c38a-4b98-81e9-139b52a79629</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 14 Jul 2018 18:29:53 GMT</pubDate></item><item><title><![CDATA[黑马前端项目实战之电商项目全套视频教程]]></title><description><![CDATA[本套前端电商项目的教程的内容主要是5天的量吧，不过这个主要是偏重于移动前端的项目吧，最终的项目效果图如下：
742


第一天：链接: https://pan.baidu.com/s/1I3WLmKKspfaMdDHsa1bUaQ 密码: jggf
第二天：链接: https://pan.baidu.com/s/1Pg4Z7lnvIoKhEP7EAaFtAQ 密码: cdjw
第三天：链接: https://pan.baidu.com/s/13eJSoX-NQbWeRzrxYvaxnA 密码: bfim
第四天：链接: https://pan.baidu.com/s/1eKB6-6La8Pw9MlmFJJrs1Q 密码: wypd
第五天：链接: https://pan.baidu.com/s/1Y6_OTHWkl8jJLUEentBPfw 密码: 6jej

]]></description><link>https://blog.gaoredu.com/article/dafb1753-e028-46ad-af99-a09ed32702cd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dafb1753-e028-46ad-af99-a09ed32702cd</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 14 Jul 2018 18:22:07 GMT</pubDate></item><item><title><![CDATA[Window底层驱动开发视频教程]]></title><description><![CDATA[741


开发语言：C语言/C++
基础知识：操作系统，编译原理，汇编语言的相关基础知识


课程1视频连接：链接：https://pan.baidu.com/s/1Xnj_yiNopqNYBBGuvdawsw 密码：5sdg
课程2视频连接：链接：https://pan.baidu.com/s/1BqzrBnrhXNjZ-iU1PrralA 密码：x39c
]]></description><link>https://blog.gaoredu.com/article/f0e9047a-d577-48a6-8469-90474d5daa0f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f0e9047a-d577-48a6-8469-90474d5daa0f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Jul 2018 21:41:47 GMT</pubDate></item><item><title><![CDATA[【kaliLinux渗透实战】会话劫持-一键劫持登录别人的百度贴吧的实战教程]]></title><description><![CDATA[1.首先介绍下此次黑客渗透实战的主要Linux工具
Arpspoof：使用ARP欺骗的工具（使用）
Wireshark：进行流量抓包的工具（使用）
Ferret：重新生成抓包后的文件（暂时未用）
Hamster：用来重放流量的工具（暂时未用）
CookieCadger-1.08.jar：这是一个Java环境运行下的欺骗工具，只要是在Linux环境下可以正常使用（使用）


2.使用Arp欺骗开始进行欺骗：
这一块可以参见前面的文章
【KaliLinux渗透实战】使用ARPSpoof命令实现局域网断网攻击（注意在欺骗之前必须要开启IP转发，不明白的参见前面的文章）
http://www.52tech.tech/forum.php?mod=viewthread&tid=643&fromuid=1
730

由于之前已经使用过很多遍这个ARPSpoof工具了，这里只要在一个以前使用的命令前面加上一个'！'就行了，就可以直接执行之前Linux上执行过的完整命令！




3.使用命令wireshark启动抓包工具，直接命令行中输入这个命令即可（这个主要是用来抓包分析流量的，具体的使用会在后续的视频教程中放出来，如果没有学会的可以参见后期放送的视频教程）
731


3.选择要使用的网卡，这里我们使用的是etho网卡，然后点击开始按钮即可（Start）：
732


4.这个是启动之后的效果
733


5.我下面来到我们的正题，把CookieCadger-1.08.jar直接拖动到我们的虚拟机里面，然后打开即可：
java -jar CookieCadger-1.08.jar
这个工具打开之后的效果如下：
734


6.点击开始按钮，启动工具：
735


7.下面我们来登录百度贴吧：
736


3.运行中的状态如下，下面就相当于是我们拦截到的会话详细信息：
737


4.我们选择一个连接，点击按钮，Load Domain Cookies
738


5.此次会话已经成功被打开了，具体如下：
740


如果这个连接不行的话，可以多换几个连接试试看！


具体的黑科技渗透（黑客技术）视频教程可以参见文章：
WEB渗透实战教程【包括无线网/KaliLinux系列教程】
http://www.52tech.tech/forum.php?mod=viewthread&tid=41&fromuid=1
(出处: 我爱科技论坛)





]]></description><link>https://blog.gaoredu.com/article/45d7af62-1dba-489b-919d-c6f9a186fa5c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/45d7af62-1dba-489b-919d-c6f9a186fa5c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Jul 2018 21:26:27 GMT</pubDate></item><item><title><![CDATA[2018最新PHP开发基础全套视频教程百度云盘下载]]></title><description><![CDATA[作业-文章详情
注册用户写入数据库--视频
添加商品视频
thinkphp 5课堂视频
smarty视频
PHPstorm配置相关
mysql极速课程
mvc视频
MVC实践视频
JSON有声视频
GIT版本控制视频
composer视频
AJAX云笔记视频1
AJAX云笔记视频 5
AJAX云笔记视频 4
AJAX云笔记视频 3
AJAX云笔记视频 2


729


下载链接：链接：https://pan.baidu.com/s/15rk5yuTTvqhppy5zz5D21w 密码：eozo


]]></description><link>https://blog.gaoredu.com/article/06d60de0-d392-4752-835d-d9bf3ee26092</link><guid isPermaLink="true">https://blog.gaoredu.com/article/06d60de0-d392-4752-835d-d9bf3ee26092</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Jul 2018 02:57:01 GMT</pubDate></item><item><title><![CDATA[最简单最智能的文章采集器，网页万能文章采集器软件免费下载]]></title><description><![CDATA[728




万能文章采集器软件下载：
链接: https://pan.baidu.com/s/1efgP713x7cjyh58wheVz6A 密码: jue1
]]></description><link>https://blog.gaoredu.com/article/31dd3fbb-dc03-4de5-b9f4-8a5e873ebfcf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/31dd3fbb-dc03-4de5-b9f4-8a5e873ebfcf</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Jul 2018 21:15:26 GMT</pubDate></item><item><title><![CDATA[全网最全的价值千元的CAD学习资料大全共享]]></title><description><![CDATA[725
726




727


零基础教程
红苹果预算
CAD学习资料
CAD工具
Autodesk AutoCAD 2019 Lite
Autodesk AutoCAD 2018 Lite
autocad_2017_x86（x64）精简版_chs.7z
AutoCAD_2017_x64_精简版
AutoCAD_2017_Simplified_Chinese_Win_64bit.zip
AutoCAD 2017激活工具.zip
2017施工图绘图环境#一卜川绘图环境2.0插件.zip





下载链接:https://pan.baidu.com/s/1TNRjKgEePLkj4Ldz4mfGtQ 密码：2333
]]></description><link>https://blog.gaoredu.com/article/ed807060-2db5-4aa2-9a26-bb18a3c6fce8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ed807060-2db5-4aa2-9a26-bb18a3c6fce8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Jul 2018 02:37:29 GMT</pubDate></item><item><title><![CDATA[2020最新Python全套视频教程之机器学习+人工智能免费下载]]></title><description><![CDATA[723
724


Python全套视频教程之机器学习+人工智能：
下载链接：https://pan.baidu.com/s/1UztAl-_qciTQfZi8CIYNMw 密码：ttbe
备用链接：https://pan.baidu.com/s/1an6IiQo1M6oPGY0xhrKAiQ 密码：uqg4]]></description><link>https://blog.gaoredu.com/article/87583580-07c1-4ae2-ac0d-fbd1ed1d73ec</link><guid isPermaLink="true">https://blog.gaoredu.com/article/87583580-07c1-4ae2-ac0d-fbd1ed1d73ec</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 11 Jul 2018 21:02:58 GMT</pubDate></item><item><title><![CDATA[最新C++入门学习基础VIP视频教程]]></title><description><![CDATA[教程信息如图：
722


721




C++基础入门视频下载链接：https://pan.baidu.com/s/1hpXbayb1KYeK96qpPMSwPQ 密码: z8ns
]]></description><link>https://blog.gaoredu.com/article/8687a253-7a38-483d-aa6e-9fe0d6e1c9db</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8687a253-7a38-483d-aa6e-9fe0d6e1c9db</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 11 Jul 2018 20:57:40 GMT</pubDate></item><item><title><![CDATA[Win10政府企业版授权码大放送]]></title><description><![CDATA[720




WIN10专业版激活码：
W269N-WFGWX-YVC9B-4J6C9-T83GX
VK7JG-NPHTM-C97JM-9MPGT-3V66T


KNXB4-F82M9-TB3X9-P9PQ6-RRG6Y
2KY2V-44N9K-PGPH3-BGHX3-C36VD 


亲测可用版本的激活码：
YYVX9-NTFWV-6MDM3-9PT4T-4M68B




注意事项：：
1.使用版本为家庭版以上，包括：专业版，企业版等。
2.语言版本务必且必须更改为中文，否则后果不可设想。








]]></description><link>https://blog.gaoredu.com/article/efad865f-4933-430b-9629-444e8c18add2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/efad865f-4933-430b-9629-444e8c18add2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 11 Jul 2018 00:31:22 GMT</pubDate></item><item><title><![CDATA[一款基于PowerPoint的最好用的幻灯片插件工具iSlide插件]]></title><description><![CDATA[使用方法超级简单，三步完成PPT的制作：第一步：选择主题
第二步：应用色彩
第三步：插入图示

717



718


719


下载链接：
登录iSlide官网即可下载：www.islide.cc
]]></description><link>https://blog.gaoredu.com/article/8d9f4a90-a18d-4000-b4bf-c5046df03cd8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8d9f4a90-a18d-4000-b4bf-c5046df03cd8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 11 Jul 2018 00:20:14 GMT</pubDate></item><item><title><![CDATA[【KaliLinux渗透实战】黑客技术综合应用之HTTP账号密码获取]]></title><description><![CDATA[1.查看目标机器的IP地址以及网关信息：

709
IP地址：192.168.1.100
默认网关：192.168.1.1


2.查看本机Kali系统的IP地址：

710
IP地址：192.168.1.101


3.开启本地的IP地址转发功能，使得目标机器的流量信息经过本机


711


4.开始进行ARP欺骗，截获目标主机的网卡流量
712


5.开始查看本机的网络流量具体信息：
713


6.当目标机器输入用户名和密码之后，点击登录按钮后，直接开始登录:
714


7.我们来看一下本机的状态
715


8.已经成功截获到用户名和密码信息：
username=zhanhun&password
我们发现是以get方式的请求提交内容到服务器的，
用户名信息：zhanhun
密码信息：123456


如果出现截获内容乱码的情况，需要对其进行URL解码,可以找一个URL解码的网站对其进行解码即可：
716

具体的黑科技渗透（黑客技术）视频教程可以参见文章：
WEB渗透实战教程【包括无线网/KaliLinux系列教程】
http://www.52tech.tech/forum.php?mod=viewthread&tid=41&fromuid=1
(出处: 我爱科技论坛)




]]></description><link>https://blog.gaoredu.com/article/08a42a63-a244-42e1-98e8-a1035cefbb71</link><guid isPermaLink="true">https://blog.gaoredu.com/article/08a42a63-a244-42e1-98e8-a1035cefbb71</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 10 Jul 2018 21:28:35 GMT</pubDate></item><item><title><![CDATA[完美视频大全TV破解版版（机顶盒可用）]]></title><description><![CDATA[708




完美视频大全TV破解版，可支持支持各类资源在线播放、离线缓存，并且汇聚数十万部电影（高清，未删减版）、电视剧（包括英美剧，日韩剧）、综艺和动漫资源，是你看片的不二神器！
下载链接：
完美视频大全TV破解版下载：https://pan.baidu.com/s/17hY47nqTqB4TwwdqEl2dBw 密码: jmmg
]]></description><link>https://blog.gaoredu.com/article/a38fdc63-c212-46da-941f-02344b7e3cd0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a38fdc63-c212-46da-941f-02344b7e3cd0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 10 Jul 2018 02:43:58 GMT</pubDate></item><item><title><![CDATA[【我爱科技影院】《我不是药神》在线观看]]></title><description><![CDATA[706
电影名称：我不是药神
主演: 徐峥 / 王传君 / 周一围 / 谭卓 / 章宇 / 更多...
类型: 剧情 / 喜剧
豆瓣评分：9.0分



网友评价：
原本我有精彩的生活，有坚定的目标，有喜欢的事物，有长远的计划，可以穿漂亮的衣服，做公司最年轻的主管，爱法律像对亲密的情人，有倾慕的人，有思念的人，但这一切都毁了。甚至有男孩子对我搭讪却跑得很远，告诉我别想太多，“我怎么会喜欢病人呢/怎么会和病人在一起呢”。


 【本站VIP免费在线观影步骤】：
        我爱科技论坛提供最新最好看的电影资源在线观看频道，提供高质量的电影视频解析，支持多个通道的观看，让每一位游客可以不用VIP就可以观看到海量优质的电影/电视剧/美剧等VIP会员才能享有的观影权。
我不是药神爱奇艺在线观看地址：http://www.iqiyi.com/v_19rr1axr08.html1.对于爱奇艺，优酷，腾讯等网站需要VIP会员的视频，直接复制视频播放链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1【爱奇艺免会员通道】
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员，无广告）
]]></description><link>https://blog.gaoredu.com/article/96e00f73-7c44-4447-8664-fb0eb01c86ef</link><guid isPermaLink="true">https://blog.gaoredu.com/article/96e00f73-7c44-4447-8664-fb0eb01c86ef</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 09 Jul 2018 21:06:44 GMT</pubDate></item><item><title><![CDATA[我爱科技书库--《深入理解计算机系统》]]></title><description><![CDATA[705

书籍目录：
出版者的话
中文版序一
中文版序二
译者序
前言
关于作者
第1章　计算机系统漫游1
1.1　信息就是位+上下文1
1.2　程序被其他程序翻译成不同的格式3
1.3　了解编译系统如何工作是大有益处的4
1.4　处理器读并解释储存在内存中的指令5
1.4.1　系统的硬件组成5
1.4.2　运行hello程序7
1.5　高速缓存至关重要9
1.6　存储设备形成层次结构9
1.7　操作系统管理硬件10
1.7.1　进程11
1.7.2　线程12
1.7.3　虚拟内存12
1.7.4　文件14
1.8　系统之间利用网络通信14
1.9　重要主题16
1.9.1　Amdahl定律16
1.9.2　并发和并行17
1.9.3　计算机系统中抽象的重要性19
1.10　小结20
参考文献说明20
练习题答案20
第一部分
程序结构和执行
第2章　信息的表示和处理22
2.1　信息存储24
2.1.1　十六进制表示法25
2.1.2　字数据大小27
2.1.3　寻址和字节顺序29
2.1.4　表示字符串34
2.1.5　表示代码34
2.1.6　布尔代数简介35
2.1.7　C语言中的位级运算37
2.1.8　C语言中的逻辑运算39
2.1.9　C语言中的移位运算40
2.2　整数表示41
2.2.1　整型数据类型42
2.2.2　无符号数的编码43
2.2.3　补码编码44
2.2.4　有符号数和无符号数之间的转换49
2.2.5　C语言中的有符号数与无符号数52
2.2.6　扩展一个数字的位表示54
2.2.7　截断数字56
2.2.8　关于有符号数与无符号数的建议58
2.3　整数运算60
2.3.1　无符号加法60
2.3.2　补码加法62
2.3.3　补码的非66
2.3.4　无符号乘法67
2.3.5　补码乘法67
2.3.6　乘以常数70
2.3.7　除以2的幂71
2.3.8　关于整数运算的最后思考74
2.4　浮点数75
2.4.1　二进制小数76
2.4.2　IEEE浮点表示78
2.4.3　数字示例79
2.4.4　舍入83
2.4.5　浮点运算85
2.4.6　C语言中的浮点数86
2.5　小结87
参考文献说明88
家庭作业88
练习题答案97
第3章　程序的机器级表示109
3.1　历史观点110
3.2　程序编码113
3.2.1　机器级代码113
3.2.2　代码示例114
3.2.3　关于格式的注解117
3.3　数据格式119
3.4　访问信息119
3.4.1　操作数指示符121
3.4.2　数据传送指令122
3.4.3　数据传送示例125
3.4.4　压入和弹出栈数据127
3.5　算术和逻辑操作128
3.5.1　加载有效地址129
3.5.2　一元和二元操作130
3.5.3　移位操作131
3.5.4　讨论131
3.5.5　特殊的算术操作133
3.6　控制135
3.6.1　条件码135
3.6.2　访问条件码136
3.6.3　跳转指令138
3.6.4　跳转指令的编码139
3.6.5　用条件控制来实现条件分支…141
3.6.6　用条件传送来实现条件分支…145
3.6.7　循环149
3.6.8　switch语句159
3.7　过程164
3.7.1　运行时栈164
3.7.2　转移控制165
3.7.3　数据传送168
3.7.4　栈上的局部存储170
3.7.5　寄存器中的局部存储空间172
3.7.6　递归过程174
3.8　数组分配和访问176
3.8.1　基本原则176
3.8.2　指针运算177
3.8.3　嵌套的数组178
3.8.4　定长数组179
3.8.5　变长数组181
3.9　异质的数据结构183
3.9.1　结构183
3.9.2　联合186
3.9.3　数据对齐189
3.10　在机器级程序中将控制与数据结合起来192
3.10.1　理解指针192
3.10.2　应用：使用GDB调试器193
3.10.3　内存越界引用和缓冲区溢出194
3.10.4　对抗缓冲区溢出攻击198
3.10.5　支持变长栈帧201
3.11　浮点代码204
3.11.1　浮点传送和转换操作205
3.11.2　过程中的浮点代码209
3.11.3　浮点运算操作210
3.11.4　定义和使用浮点常数212
3.11.5　在浮点代码中使用位级操作212
3.11.6　浮点比较操作213
3.11.7　对浮点代码的观察结论215
3.12　小结216
参考文献说明216
家庭作业216
练习题答案226
第4章　处理器体系结构243
4.1　Y86-64指令集体系结构245
4.1.1　程序员可见的状态245
4.1.2　Y86-64指令245
4.1.3　指令编码246
4.1.4　Y86-64异常250
4.1.5　Y86-64程序251
4.1.6　一些Y86-64指令的详情255
4.2　逻辑设计和硬件控制语言HCL256
4.2.1　逻辑门257
4.2.2　组合电路和HCL布尔表达式257
4.2.3　字级的组合电路和HCL整数表达式258
4.2.4　集合关系261
4.2.5　存储器和时钟262
4.3　Y86-64的顺序实现264
4.3.1　将处理组织成阶段264
4.3.2　SEQ硬件结构272
4.3.3　SEQ的时序274
4.3.4　SEQ阶段的实现277
4.4　流水线的通用原理282
4.4.1　计算流水线282
4.4.2　流水线操作的详细说明284
4.4.3　流水线的局限性284
4.4.4　带反馈的流水线系统287
4.5　Y86-64的流水线实现288
4.5.1　SEQ+：重新安排计算阶段288
4.5.2　插入流水线寄存器289
4.5.3　对信号进行重新排列和标号292
4.5.4　预测下一个PC293
4.5.5　流水线冒险295
4.5.6　异常处理306
4.5.7　PIPE各阶段的实现308
4.5.8　流水线控制逻辑314
4.5.9　性能分析322
4.5.10　未完成的工作323
4.6　小结325
参考文献说明326
家庭作业327
练习题答案331
第5章　优化程序性能341
5.1　优化编译器的能力和局限性342
5.2　表示程序性能345
5.3　程序示例347
5.4　消除循环的低效率350
5.5　减少过程调用353
5.6　消除不必要的内存引用354
5.7　理解现代处理器357
5.7.1　整体操作357
5.7.2　功能单元的性能361
5.7.3　处理器操作的抽象模型362
5.8　循环展开366
5.9　提高并行性369
5.9.1　多个累积变量370
5.9.2　重新结合变换373
5.10　优化合并代码的结果小结377
5.11　一些限制因素378
5.11.1　寄存器溢出378
5.11.2　分支预测和预测错误处罚379
5.12　理解内存性能382
5.12.1　加载的性能382
5.12.2　存储的性能383
5.13　应用：性能提高技术387
5.14　确认和消除性能瓶颈388
5.14.1　程序剖析388
5.14.2　使用剖析程序来指导优化390
5.15　小结392
参考文献说明393
家庭作业393
练习题答案395
第6章　存储器层次结构399
6.1　存储技术399
6.1.1　随机访问存储器400
6.1.2　磁盘存储406
6.1.3　固态硬盘414
6.1.4　存储技术趋势415
6.2　局部性418
6.2.1　对程序数据引用的局部性418
6.2.2　取指令的局部性419
6.2.3　局部性小结420
6.3　存储器层次结构421
6.3.1　存储器层次结构中的缓存422
6.3.2　存储器层次结构概念小结424
6.4　高速缓存存储器425
6.4.1　通用的高速缓存存储器组织结构425
6.4.2　直接映射高速缓存427
6.4.3　组相联高速缓存433
6.4.4　全相联高速缓存434
6.4.5　有关写的问题437
6.4.6　一个真实的高速缓存层次结构的解剖438
6.4.7　高速缓存参数的性能影响439
6.5　编写高速缓存友好的代码440
6.6　综合：高速缓存对程序性能的影响444
6.6.1　存储器山444
6.6.2　重新排列循环以提高空间局部性447
6.6.3　在程序中利用局部性450
6.7　小结450
参考文献说明451
家庭作业451
练习题答案459
第二部分
在系统上运行程序
第7章　链接464
7.1　编译器驱动程序465
7.2　静态链接466
7.3　目标文件466
7.4　可重定位目标文件467
7.5　符号和符号表468
7.6　符号解析470
7.6.1　链接器如何解析多重定义的全局符号471
7.6.2　与静态库链接475
7.6.3　链接器如何使用静态库来解析引用477
7.7　重定位478
7.7.1　重定位条目479
7.7.2　重定位符号引用479
7.8　可执行目标文件483
7.9　加载可执行目标文件484
7.10　动态链接共享库485
7.11　从应用程序中加载和链接共享库487
7.12　位置无关代码489
7.13　库打桩机制492
7.13.1　编译时打桩492
7.13.2　链接时打桩492
7.13.3　运行时打桩494
7.14　处理目标文件的工具496
7.15　小结496
参考文献说明497
家庭作业497
练习题答案499
第8章　异常控制流501
8.1　异常502
8.1.1　异常处理503
8.1.2　异常的类别504
8.1.3　Linux/x86-64系统中的异常505
8.2　进程508
8.2.1　逻辑控制流508
8.2.2　并发流509
8.2.3　私有地址空间509
8.2.4　用户模式和内核模式510
8.2.5　上下文切换511
8.3　系统调用错误处理512
8.4　进程控制513
8.4.1　获取进程ID513
8.4.2　创建和终止进程513
8.4.3　回收子进程516
8.4.4　让进程休眠521
8.4.5　加载并运行程序521
8.4.6　利用fork和execve运行程序524
8.5　信号526
8.5.1　信号术语527
8.5.2　发送信号528
8.5.3　接收信号531
8.5.4　阻塞和解除阻塞信号532
8.5.5　编写信号处理程序533
8.5.6　同步流以避免讨厌的并发错误540
8.5.7　显式地等待信号543
8.6　非本地跳转546
8.7　操作进程的工具550
8.8　小结550
参考文献说明550
家庭作业550
练习题答案556
第9章　虚拟内存559
9.1　物理和虚拟寻址560
9.2　地址空间560
9.3　虚拟内存作为缓存的工具561
9.3.1　DRAM缓存的组织结构562
9.3.2　页表562
9.3.3　页命中563
9.3.4　缺页564
9.3.5　分配页面565
9.3.6　又是局部性救了我们565
9.4　虚拟内存作为内存管理的工具565
9.5　虚拟内存作为内存保护的工具567
9.6　地址翻译567
9.6.1　结合高速缓存和虚拟内存570
9.6.2　利用TLB加速地址翻译570
9.6.3　多级页表571
9.6.4　综合：端到端的地址翻译573
9.7　案例研究：Intel Core i7/Linux内存系统576
9.7.1　Core i7地址翻译576
9.7.2　Linux虚拟内存系统580
9.8　内存映射582
9.8.1　再看共享对象583
9.8.2　再看fork函数584
9.8.3　再看execve函数584
9.8.4　使用mmap函数的用户级内存映射585
9.9　动态内存分配587
9.9.1　malloc和free函数587
9.9.2　为什么要使用动态内存分配589
9.9.3　分配器的要求和目标590
9.9.4　碎片591
9.9.5　实现问题592
9.9.6　隐式空闲链表592
9.9.7　放置已分配的块593
9.9.8　分割空闲块594
9.9.9　获取额外的堆内存594
9.9.10　合并空闲块594
9.9.11　带边界标记的合并595
9.9.12　综合：实现一个简单的分配器597
9.9.13　显式空闲链表603
9.9.14　分离的空闲链表604
9.10　垃圾收集605
9.10.1　垃圾收集器的基本知识606
9.10.2　Mark&Sweep垃圾收集器607
9.10.3　C程序的保守Mark&Sweep608
9.11　C程序中常见的与内存有关的错误609
9.11.1　间接引用坏指针609
9.11.2　读未初始化的内存609
9.11.3　允许栈缓冲区溢出610
9.11.4　假设指针和它们指向的对象是相同大小的610
9.11.5　造成错位错误611
9.11.6　引用指针，而不是它所指向的对象611
9.11.7　误解指针运算611
9.11.8　引用不存在的变量612
9.11.9　引用空闲堆块中的数据612
9.11.10　引起内存泄漏613
9.12　小结613
参考文献说明613
家庭作业614
练习题答案617
第三部分
程序间的交互和通信
第10章　系统级I/O622　10.1　Unix I/O622
10.2　文件623
10.3　打开和关闭文件624
10.4　读和写文件625
10.5　用RIO包健壮地读写626
10.5.1　RIO的无缓冲的输入输出函数627
10.5.2　RIO的带缓冲的输入函数627
10.6　读取文件元数据632
10.7　读取目录内容633
10.8　共享文件634
10.9　I/O重定向637
10.10　标准I/O638
10.11　综合：我该使用哪些I/O函数？638
10.12　小结640
参考文献说明640
家庭作业640
练习题答案641
第11章　网络编程642
11.1　客户端服务器编程模型642
11.2　网络643
11.3　全球IP因特网646
11.3.1　IP地址647
11.3.2　因特网域名649
11.3.3　因特网连接651
11.4　套接字接口652
11.4.1　套接字地址结构653
11.4.2　socket函数654
11.4.3　connect函数654
11.4.4　bind函数654
11.4.5　listen函数655
11.4.6　accept函数655
11.4.7　主机和服务的转换656
11.4.8　套接字接口的辅助函数660
11.4.9　echo客户端和服务器的示例662
11.5　Web服务器665
11.5.1　Web基础665
11.5.2　Web内容666
11.5.3　HTTP事务667
11.5.4　服务动态内容669
11.6　综合：TINY Web服务器671
11.7　小结678
参考文献说明678
家庭作业678
练习题答案679
第12章　并发编程681
12.1　基于进程的并发编程682
12.2　基于I/O多路复用的并发编程684
12.3　基于线程的并发编程691
12.4　多线程程序中的共享变量696
12.5　用信号量同步线程698
12.6　使用线程提高并行性710
12.7　其他并发问题716
12.8　小结722
参考文献说明723
家庭作业723
练习题答案726
附录A　错误处理729
参考文献733



下载链接：https://pan.baidu.com/s/1dDzhJ13

]]></description><link>https://blog.gaoredu.com/article/41fb31c2-c038-40a0-9784-595cfc478504</link><guid isPermaLink="true">https://blog.gaoredu.com/article/41fb31c2-c038-40a0-9784-595cfc478504</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 09 Jul 2018 03:30:55 GMT</pubDate></item><item><title><![CDATA[Windows7 GPT分区激活工具（一键激活GPT分区系统）]]></title><description><![CDATA[对于一般的系统使用小马激活工具就可以一键激活，但是对于GPT分区的，就不起作用了，得换这个工具：
703


使用方法：
直接点击“APPLY”按纽，然后重启电脑即可完成激活。


下载链接：https://pan.baidu.com/s/1hqJuBgo




如果还是不行的话，再换换小马激活工具试下：
704


链接: https://pan.baidu.com/s/1OXE1jMTeVZeE7nhedbWLLA 密码: 8k18
]]></description><link>https://blog.gaoredu.com/article/f8adac8c-0338-474e-9eff-108f72108c89</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f8adac8c-0338-474e-9eff-108f72108c89</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 08 Jul 2018 22:50:13 GMT</pubDate></item><item><title><![CDATA[【KaliLinux渗透实战】使用黑客技术获取内网妹子的QQ相册照片]]></title><description><![CDATA[首先这一集的黑客渗透(简称黑科技)实战教程，是基于上一节课的内容，如果还没有学习前面的课程的话，可以先自行学习一下这篇文章：
【KaliLinux渗透实战】使用ARPSpoof命令实现局域网断网攻击
http://www.52tech.tech/forum.php?mod=viewthread&tid=643&fromuid=1
702



1.好了本节课的教程现在开始，同样是使用arp欺骗的方式获取内网的QQ相册的妹子照片，原理上是只要你的妹子上网浏览过的所有照片，我们都可以获得：
前提条件：在ARP欺骗成功的前提下，我们就可以获得妹子的照片了！
由于ARP欺骗是使得目标计算机的浏览经过我的网卡：目标计算机--》我的网卡--》网关的顺序，因此只要获取了我的本机的网卡流量，也就相当于是获取到了目标计算机的网卡，也就是相当于是间接地获取到了目标计算机的网卡流量。




2.开始实战:
首先还是先进行ARP欺骗实现：arpspoof -i etho -t 192.168.1.100 192.168.1.1

696
此时对方的网卡流量是已经经过我的网卡了，如果测试失败请参见前面的文章：


2.开始查看经过本机网卡的所有图片信息
实现：drift-i etho


697


3.执行上面的命令之后会弹出下面的窗口，此时只要我浏览网页，所有的图片信息我都可以看到（网速足够快才可以显示全，否则显示不完整）
698


4.然后也可以看见保存到本地的文件路径：
699


5.执行下面的命令我们也可以看到图片的列表信息：
ls


700


6.我们再进入到这个文件夹里面确认一下，发现所有的图片已经拦截成功，获取妹子的空间图片也就获取成功了！Color
701


好了，本期的黑科技渗透实战技术教程到此也就结束了，感兴趣的朋友也可以参见前期的教程：
【KaliLinux渗透实战】使用ARPSpoof命令实现局域网断网攻击
http://www.52tech.tech/forum.php?mod=viewthread&tid=643&fromuid=1



具体的黑科技渗透（黑客技术）视频教程可以参见文章：
WEB渗透实战教程【包括无线网/KaliLinux系列教程】
http://www.52tech.tech/forum.php?mod=viewthread&tid=41&fromuid=1
(出处: 我爱科技论坛)






]]></description><link>https://blog.gaoredu.com/article/cf41eb8e-3856-424d-b013-2b768f164802</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cf41eb8e-3856-424d-b013-2b768f164802</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 08 Jul 2018 03:33:16 GMT</pubDate></item><item><title><![CDATA[【JavaScript框架封装】正则表达式知识在框架中的应用]]></title><description><![CDATA[1.正则表达式常用知识复习：
 -----------------------------------------------------------------------------------------
            ^, $: 匹配字符串开始，结束的位置      eg:
            g, i：匹配所有，不区分大小写的字符串； eg: /a/g, /a/i
            *， +， ？: 匹配任意次数, 匹配前面的字符一次或者多次， 0次或者1次


             : 匹配一个字符集合； eg: 所有小写字母的集合， 所有数字的集合
                                  eg: 所有大小写字母的集合
            脱字符^: 匹配任何不在该集合中的字符，与上面的用法正好相反
            {}: 指定重复前面的一个字符多少遍  eg:{N} 重复n遍
                                            eg:{n, m}重复n-m遍
                                            eg: {n, }至少重复n遍
                                            eg：{,m}至多重复m遍






            // 【熟记：同类记忆法】
            \s: 表示空格：包括空格、换行、回车、tab，等价于
            \S: 匹配非空格字符，等价于
            \d: 表示十进制数字，等价于
            \D: 匹配一个非数字字符， 等价于
            \w(小写): 表示字母或者数字，等价于
            \W: 非字母且非数字，与\w相反，等价于：*


            * */



2.在框架中的应用
       camelCase : function(str){
            return str.replace(/\-(\w)/g, function(all, letter){
                return letter.toUpperCase();
            });
        },
        trim : function(str){
            return str.replace(/^\s+|\s+$/g, '')
        },
        //去除左边空格
        ltrim:function(str){
            return str.replace(/(^\s*)/g,'');
        },
        //去除右边空格
        rtrim:function(str){
            return str.replace(/(\s*$)/g,'');
        },

]]></description><link>https://blog.gaoredu.com/article/71298a4c-d0e1-4c9c-97b2-4385b8b00356</link><guid isPermaLink="true">https://blog.gaoredu.com/article/71298a4c-d0e1-4c9c-97b2-4385b8b00356</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 08 Jul 2018 00:52:49 GMT</pubDate></item><item><title><![CDATA[WEB前端HTML5游戏开发全套视频教程（Typescript开发）]]></title><description><![CDATA[695


10、Egret实战开发小游戏：测专注力链接: https://pan.baidu.com/s/1v-bsYAnOIC2WZDf9a9u87w 密码: jz2v
11、Egret 显示容器链接: https://pan.baidu.com/s/1xA96jPuBItRvO_71JM5UAg 密码: vdij
12、Egret事件机制链接: https://pan.baidu.com/s/1PjrJUKiidCD2k1qJFCgEtw 密码: dqxm
13、Egret 绘图、文本、动画和计时器链接: https://pan.baidu.com/s/13wweuKPdp5Y5VT6NWUdvuA 密码: h6zh
14、Egret 位图纹理链接: https://pan.baidu.com/s/1fOolAnCi0ory5TURfXPo0A 密码: pja4
15、Egret 声音和网络链接: https://pan.baidu.com/s/17KHXRyTsQpvLpyrfEokPNQ 密码: fyxt
16、Egret 实例及屏幕适配链接: https://pan.baidu.com/s/1B_WTHg_vOPDxcAODZ-PSwQ 密码: 6ahc
17、Egret GUI 库链接: https://pan.baidu.com/s/1Bg8FqECS-XDSXAkn9jCqpA 密码: rk6k
1、TypeScript环境搭建链接: https://pan.baidu.com/s/1xJo0parUFMAXuXT9GG3HmA 密码: vhr3
2、TypeScript基本数据类型链接: https://pan.baidu.com/s/1mpzucUtyhiitKfUI3g7cHA 密码: pniy
3、TypeScript类(Classes)链接: https://pan.baidu.com/s/11W-1BTdfbwnbZGmKMLEIFA 密码: v5yb
4、TypeScript函数链接: https://pan.baidu.com/s/1ZHbXmnN_q8a9tDhsfSK4ng 密码: y65x
5、TypeScript接口(Interfaces)链接: https://pan.baidu.com/s/16ahCE7RvCxyxkj7DmjjoCQ 密码: 857z
6、TypeScript泛型链接: https://pan.baidu.com/s/19oHEqTesPcIuoDUGXM7AEw 密码: vdm5
7、TypeScript 模块链接: https://pan.baidu.com/s/1Ht_8mwzx_I_lFOeEybPfOw 密码: xg2p
8、Egret 环境搭建链接: https://pan.baidu.com/s/1umiWSUvBJOAXDWzWzmr7WQ 密码: f8v8
9、Egret 显示对象链接: https://pan.baidu.com/s/1b8qxBbHtv8D_hlMQHex-uQ 密码: myuj



]]></description><link>https://blog.gaoredu.com/article/747e4d7c-c121-411c-ad33-f16bc390be82</link><guid isPermaLink="true">https://blog.gaoredu.com/article/747e4d7c-c121-411c-ad33-f16bc390be82</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Jul 2018 21:39:18 GMT</pubDate></item><item><title><![CDATA[Windows精简版虚拟机vmx文件免安装直接打开（WIN7,8,10,XP,2003）]]></title><description><![CDATA[694


Win7镜像文件：链接: https://pan.baidu.com/s/1FlJNndZncSNi_955d_yVPg 密码: vi1t

Win10镜像文件：链接: https://pan.baidu.com/s/1VPwF9xZaYeAnjY2zS0fp_g 密码: acti
Win2003镜像文件：链接: https://pan.baidu.com/s/1yNUcdxyAtXvtx9IRNNyB-g 密码: hz1f
Windows XP镜像文件：链接: https://pan.baidu.com/s/1oc3GhnqXhZoRLd1but9mJQ 密码: hju3
Windows 8镜像文件：链接: https://pan.baidu.com/s/1J2zp0HR67E2WbVe63lusNQ 密码: 61gh


]]></description><link>https://blog.gaoredu.com/article/9250a0e3-df45-4a51-bb17-4d0bb80bb754</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9250a0e3-df45-4a51-bb17-4d0bb80bb754</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Jul 2018 21:19:28 GMT</pubDate></item><item><title><![CDATA[【KaliLinux渗透实战】使用ARPSpoof命令实现局域网断网攻击]]></title><description><![CDATA[arp命令的使用：Arpspoof断网: -i 网卡 -t 目标ip 网关  
1.使用ifconfig命令查看kal系统的IP地址情况
686




2.使用IPconfig命令查看Windows操作系统的网卡情况，这个也就是本次需要进行局域网断网攻击的IP地址
687
IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
子网掩码  . . . . . . . . . . . . : 255.255.255.240


688


默认网关. . . . . . . . . . . . . : 192.168.1.1
 
3.如果不知道对方IP的话怎么办？可以使用如下命令进行扫描IP：
Fping -asg 192.168.1.1/24



注意第三位的值是和你所在网络环境下的IP相应值是一样的哈！


689
我们扫描到以下几个IP地址：


192.168.1.1
192.168.1.100  （目标计算机）
1992.168.1.101

4.我们先来测试一下当前目标计算机能不能上网
690
打开百度首页正常，也可以进行正常搜索，一切网络环境正常。


5.开始实现断网攻击，输入目标命令，具体如下，
691
实现：arpspoof -i etho -t 192.168.1.100 192.168.1.1


6.我们再来看下目标计算机能不能正常上网，目标计算机已经不能正常上网了，断网攻击成功！
692
693


【Arp欺骗和断网的内部黑科技原理】：
原理：目标的IP会经过我的网卡， 然后从网卡出去



【ARP欺骗成功要点】
先看下这个设置对不对，如果输入这个命令之后不是1的话那就不会成功的！
root@kali:~# cat  /proc/sys/net/ipv4/ip_forward

1

1.需要先设置一下KaliLinux的内置参数（关键点）
让目标机器的流量从我的我网关出去：
echo 1 >/proc/sys/net/ipv4/ip_forward【此处不会有回显】

此时:Arp成功欺骗，不会出现断网现象！

2.  场景回顾：
arpspoof -i eth0 -t 192.168.1.100  192.168.1.1


3.这种黑科技（黑客攻击）攻击方式只适用于局域网，可以自己搭建一个虚拟机环境进行测试，公网IP是不可以的哈！
同一个网段是指地址的网络段相同的地址
如：同个网段的话它的IP就是192.168.0.1到192.168.0.255之间.
前提是同一网段的地址子网掩码一定相同.
如：相同掩码255.255.255.0
具体的黑科技渗透（黑客技术）视频教程可以参见文章：
WEB渗透实战教程【包括无线网/KaliLinux系列教程】
http://www.52tech.tech/forum.php?mod=viewthread&tid=41&fromuid=1
(出处: 我爱科技论坛)





]]></description><link>https://blog.gaoredu.com/article/4a6febe8-be5e-43fc-ad75-52aba7dc8b8c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4a6febe8-be5e-43fc-ad75-52aba7dc8b8c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 06 Jul 2018 23:52:27 GMT</pubDate></item><item><title><![CDATA[WEBGL开发视频+文档资料PDF（WEBGL，Three.js，JavaScript中英文学习资料）]]></title><description><![CDATA[Three.js想学习资料全网首发（视频+文档）
1.官方的学习文档资料：https://threejs.org/docs/#api/animation/KeyframeTrack
这个资料是Three官方的API文档资料，应该是最全面的吧，只要大家有一点英文的功底，读懂这些文档资料应该不会太难。
707

2.书籍资料推荐：
第一本：An optimal solution for implementing，这本书的封面和目录如下：
下载链接：链接：https://share.weiyun.com/51YvOf3 密码：39rgu2
679
684




第二本：ASmarterWaytoLearnJavaScript
680
下载链接：链接：https://share.weiyun.com/5i3rOib 密码：9i2idx


第三本：Learning Three.js- The JavaScript 3D Library for WebGL
681


下载链接：链接：https://share.weiyun.com/5FeJNzR 密码：kbmpa2




第四本：ThreeJS.Essentials.PACKT
683
下载链接：链接：https://share.weiyun.com/53XO90b 密码：fcwc8x


第五本：Three学习指导
682
下载链接：链接：https://share.weiyun.com/5rxPkpu 密码：7cvynq

对于Three.js学习的视频资料，可以参见前期发布的WEBGl视频资料,参见2,3,7,8期的视频资料：

2018WEBGL最新视频教程第二季 WEBGL点 向量 基础网格知识：http://www.52tech.tech/forum.php ... 336&highlight=webgl2018WEBGL最新视频教程第三季 WEBGL 颜色和材质：http://www.52tech.tech/forum.php ... 341&highlight=webgl
WEBGL中英文学习资料和视频教程：http://www.52tech.tech/forum.php ... =39&highlight=webgl



想在本站找到更多WEBGL/OPNGL或其他学习资料，可以直接在搜索框输入关键词即可：
685

]]></description><link>https://blog.gaoredu.com/article/dd1fc4ee-464c-465b-96e2-85fa7608e658</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dd1fc4ee-464c-465b-96e2-85fa7608e658</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 06 Jul 2018 21:03:29 GMT</pubDate></item><item><title><![CDATA[【JavaScript高级进阶】实现事件框架的封装及其源代码分享]]></title><description><![CDATA[/**
 * Created by xiuxiu on 2018/6/16
 */

// 框架的本质

/**
 * 函数：工具
 * 对象：工具包
 * 框架：多个工具包
 */


/*

* V1.0：使用原型的方式实现一个框架
*       实现了对象获取，字符串操作，数据类型的检测等功能【extend, queryString, query是核心功能】
*       on函数的封装（事件监听，考虑浏览器的兼容性）
* V2.0：使用对象的字面量方式来封装一个框架(JSON格式来封装一个框架)
* V3.0：使用Extend方式来封装一个框架
* V4.0: 事件框架的封装
*       事件流机制Dom2.0
*       on,un,getEvent, getTarget,delegate等方法
* */





// 框架基础代码
var xframe = function () {
}
/**
 * 使用原型方式封装框架
 * @type {{$id: xframe.$id, $tag: xframe.$tag, ltrim: xframe.ltrim, rtrim: xframe.rtrim, trim: xframe.trim, formateString: xframe.formateString, isNumber: xframe.isNumber, isBoolean: xframe.isBoolean, isString: xframe.isString, isUndefined: xframe.isUndefined, isObject: xframe.isObject, isNull: xframe.isNull, isArray: xframe.isArray, extend: xframe.extend, queryString: xframe.queryString, query: xframe.query, on: xframe.on}}
 */
xframe.prototype = {
    // 先写出接口，不用事先事先这个方法
    /**
     * 给一个对象扩充功能：将一个对象的所有属属性拷贝到另外一个对象上去(如果没有的话，就直接把属性添加进去)
     * // 将一个对象的方法，拷贝给另外一个对象
     * @param target
     * @param source
     * @returns {*}
     */
    extend: function (target, source) {
        // 把source对象的所有属性拷贝到target中去
        for (var i in source) {
            target = source;
        }
        return target;
    },

}
// 创建一个我的框架对象实例
var $ = new xframe();




//Extend的好处：可以把框架的功能进行模块化， 实现功能的分类管理
/**
 * 字符串的操作
 */
$.extend($, {
    // 常用的字符串的操作-----------------------------------------------------------------------
    /**
     * 去除字符串左边的空格
     * @param str
     */
    ltrim: function (str) {
        return str.replace(/(^\s*)/g, "");
    },
    /**
     * 去除字符串右边的空格
     * @param str
     */
    rtrim: function (str) {
        return str.replace(/(\s*$)/g, "");
    },
    /**
     * 去除字符串中的空格
     * @param str
     */
    trim: function (str) {
        return str.replace(/(^\s*)|(\s*$)/g, "");
    },
    /**
     * 实现一个简单的数据绑定
     * @param str
     * @param data
     */
    formateString: function (str, data) {
        return str.replace(/@\((\w+)\)/g, function (match, key) {
            return typeof data === 'undefined' ? '' : data
        })
    },

})


/**
 * 查询功能的模块化
 */
$.extend($, {
    /**
     * 查询地址栏的字符串，用于页面间的传参（通过location.search可以获取查询字符串）
     * @returns {{}}
     */
    queryString: function () {
        var str = window.location.search.substring(1);      // 获取查询字符串，即"id=1&name=location"的部分
        var arr = str.split('&');                           // 用&分割数组
        var json = {};                                      // 定义一个临时对象

        // 遍历数组
        for (var i = 0; i < arr.length; i++) {
            var c = arr.indexOf("=");                    // 获取每个参数中的等号=小标的位置
            if (c == -1)
                continue                                    // 如果没有发现等号=的位置，则忽略


            var d = arr.substring(0, c);                 // 截取等号前的参数名称
            var e = arr.substring(c + 1);                  // 截取等号后面的位置

            json = e;                                     // 用名称 ： 值 的格式存储在json对象中
        }

        return json;                                        // 返回json对象【json中存储数据的时候，key必须是唯一的，否则后面的会覆盖掉前面的内容哈】
    },
    /**
     *  页面参数的查询（普通查询）
     * @returns {string}
     */
    query: function () {
        var params = window.location.search;                // 获取 arams : ? id , date……
        var arr = params.substring(1).split(',');
        return arr;
    },
})


/**
 * 常用数据类型的检测
 */
$.extend($, {
    // 常用数据类型检测-----------------------------------------------------------------------------
    /**
     * 用于检测一个值是不是数字
     * 要点：1.js中的==和!= 比较， 若两者类型不同，会先转换类型，再做值比较，最后返回值比较结果（不严格）
     *      2.===和!=== 只有在相同类型的情况下，才会比较二者的值，否则直接返回false (比较更严格)
     * @param val
     * @returns {boolean}
     */
    isNumber: function (val) {
        // isFinite()函数是js自带函数，会过滤掉NaN和Infinity类型
        return typeof val === 'number' && isFinite(val)
    },
    /**
     * 是不是布尔类型
     * @param val
     * @returns {boolean}
     */
    isBoolean: function (val) {
        return typeof val === 'boolean';
    },
    /**
     * 是不是字符串类型
     * @param val
     * @returns {boolean}
     */
    isString: function (val) {
        return typeof val === 'string';
    },
    /**
     * 是不是未定义类型
     * @param val
     * @returns {boolean}
     */
    isUndefined: function (val) {
        return typeof  val === 'undefined';
    },
    /**
     * 是不是Object类型
     * @param str
     * @returns {boolean}
     */
    isObject: function (str) {
        if (str == null || typeof str === 'undefined') {
            return false;
        }
        return typeof  str === 'object';
    },
    /**
     * 是否为null
     * @param val
     * @returns {boolean}
     */
    isNull: function (val) {
        return val === null;
    },
    /**
     * 是否为数组类型
     * @param arr
     * @returns {boolean}
     */
    isArray: function (arr) {
        if (arr === null || typeof arr === 'undefined') {
            return false;
        }
        // 这里可以通过两种方式来判断
        return arr.constructor === Array || arr.prototype.toString.call(arr) === '';
    },
})


/**
 * 事件监听的核心代码
 */
$.extend($, {
    /**
     * 实现一个兼容各大浏览器的事件监听方法
     * @param id 对象的ID
     * @param type 事件类型：click, mouseover, mouseout……
     * @param fn 事件处理的回调函数
     */
    on: function (id, type, fn) {
        //var dom = this.$id(id);             // 获取这个dom对象
        // 这种写法的好处：(三目运算符的使用，增强框架的健壮性)
        // 1. 可以直接解析DOM节点
        // 2. 可以直接把传过来的ID号码转换为DOM节点
        var dom = !$.isString(id) ? id : document.getElementById(id);
        // 如果浏览器支持addEventlistener方法
        if (dom.addEventListener) {
            // W3C
            dom.addEventListener(type, fn, false);
        } else {
            // 微软公司提供的时间监听方法(不支持事件冒泡的方法)
            if (dom.attachEvent) {
                // btn.attachEvent('onclick', fn)
                dom.attachEvent('on' + type, fn);
            }
        }
    },
    /**
     * 用于解除事件的绑定（兼容浏览器）【使用较少】
     * @param id
     * @param type
     * @param fn
     */
    un : function (id, type, fn) {
        // 这里先换一种方式来判断
        var dom = !$.isString(id) ? id : document.getElementById(id);
        // 判断浏览器是否兼容某种特效
        if (dom.removeEventListener){
            // 标准的W3c方式
            dom.removeEventListener(type, fn);
        } else if (dom.attachEvent){
            // 微软的解除方式
            dom.detachEvent(type, fn);
        }
    },
    /**
     * 鼠标点击事件
     * @param id
     * @param fn
     */
    click : function (id, fn) {
        this.on(id, 'click', fn);
    },
    /**
     * 鼠标进入事件
     * @param id
     * @param fn
     */
    mouseover : function (id, fn) {
        this.on(id, 'mouseover', fn);
    },
    /**
     * 鼠标移出事件
     * @param id
     * @param fn
     */
    mouseout : function (id, fn) {
        this.on(id, 'mouseout', fn);
    },
    /**
     * 鼠标移入移出【鼠标悬浮事件】
     * @param id
     * @param fnOver
     * @param fnOut
     */
    hover : function (id, fnOver, fnOut) {
        if (fnOver){
            this.on(id, 'mouseover', fnOver);
        }
        if (fnOut){
            this.on(id, 'mouseout', fnOut);
        }
    },

    /**
     * 用于获取Event对象（解决了浏览器的兼容性问题）
     * @param e
     * @returns {Event}
     */
    getEvent : function (e) {
        return e ? e : window.event;
    },
    /**
     * 使用短路表达式来进行代码优化（尽量少用if语句）
     * @param e
     * @returns {*|Event | undefined}
     */
    getEvent : function (e) {
        return e || window.event;
    },
    /**
     * 获取事件目标对象（兼容性）
     * @param e
     * @returns {Element | any}
     */
    getTarget : function (e) {
        // 获取事件目标
        var e = this.getEvent(e);
        // 使用短路表达式去获取目标
        return e.target || e.srcElement;
    },
    /**
     * 阻止默认事件的行为（兼容性）
     * @param e
     */
    preventDefault : function (e) {
        var ev = this.getEvent(e)
        // 三木表达式阻止默认事件
        ev.preventDefault ? ev.preventDefault() : (ev.returnValue = false);
    },
    /**
     * 阻止事件冒泡（兼容性）
     * 防止事件向外传播
     * @param e
     */
    stopPropagation : function (e) {
        // 获取事件Event对象，解除事件冒泡
        this.getEvent(e).stopPropagation || (this.getEvent(e).cancelBubble = true);
    },
    /**
     * 使用委托的方式实现事件
     * @param pid
     * @param eventType
     * @param selector
     * @param fn
     */
    delegate: function(pid, eventType, selector, fn) {
        var parent = $.$id(pid);
        function handle(e) {
            var target = $.getTarget(e);
            // 这里会打印输出nodeName
            console.log(target.nodeName);       // tr
            // select 这里传过来的是一个选择器， selector == 'tr'
            if (target.nodeName.toLowerCase() === selector || target.id === selector || target.className.indexOf(selector) != -1){
                // 使用call修改了this的指向, 去调用fn传过来的函数， 把当前的这个target对象传过去
                fn.call(target);
            }
        }
        parent = handle;
    }
})



/**
 * 选择器的操作
 */
$.extend($, {
// 根据ID，Tag获取对象-------------------------------------------------------------------------
    /**
     * 根据ID获取对象
     * @param id
     * @returns {HTMLElement | null}
     */
    $id: function (id) {
        return document.getElementById(id)
    },
    /**
     * 根据tagName获取对象
     * @param tag
     * @returns {any}
     */
    $tag: function (tag) {
        return document.getElementsByTagName(tag)
    },
    $class : function () {
        
    }
})







]]></description><link>https://blog.gaoredu.com/article/bf1fe1d5-b316-49f0-b803-95996e893bef</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bf1fe1d5-b316-49f0-b803-95996e893bef</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Jul 2018 21:10:15 GMT</pubDate></item><item><title><![CDATA[修复Vmvare安装完成后启动虚拟机错误：二进制转换与此平台长模式不兼容……]]></title><description><![CDATA[错误提示如下：二进制转换与此平台上的长模式不兼容。此虚拟环境中的长模式将被禁用。因此需要使用长模式的应用程序将无法正常运行。请参见http://vmware.com/nfo？id=1527解更多详细信息。

675


接下来有弹出下面这个提示错误：
VMware Workstation不可恢复错误： (vcpu-0)vcpu-0:VERIFYvmcore/vmm/main/physMem_monitor.c:1123日志文件位于"E:1010\vmware.log"中。您可以请求支持。要收集数据提交给VMware技术支持，请选择"帮助"菜单中的"收集支持数据".也可以直接在Workstation文件夹中运行"vm-support."即本。我们将根据您的技术支持权利做出回应。

676




具体的解决方案如下：
在启动电脑的时候，按下F2，进入系统的BIOS高级设置，选择Configuration选项，选择Intel Virtual Technology并回车确定，保存设置后重新启动即可解决这个错误！
677


678







]]></description><link>https://blog.gaoredu.com/article/461c44d8-50c8-45c3-97e6-402398bbcfa9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/461c44d8-50c8-45c3-97e6-402398bbcfa9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Jul 2018 21:05:29 GMT</pubDate></item><item><title><![CDATA[传智C++培训第四期（4月13到10月21结课）基础+就业班全套视频教程]]></title><description><![CDATA[23-Android 驱动开发-刑文鹏
-2017-08-07 16:54
22-xs库-薛国良
-2017-08-07 16:54
21-猥琐技术讲解-伊成
-2017-08-07 16:54
20-面试综合项目-童泽宇
-2017-08-07 16:54
19-Android-NDK-童泽宇
-2017-08-07 16:54
18-Linux综合项目-王宁
-2017-08-07 16:54
17-MySQL-王保明
-2017-08-07 16:54
16-Oracle-王保明
-2017-08-07 16:54
15-kail基础和metasploit入侵-童泽宇
-2017-08-07 16:54
14-QT-薛国良
-2017-08-07 16:54
13-cocos2dx游戏面试-石岩松
-2017-08-07 16:54
12-cocos2dx-项目综合-触控科技程老师
-2017-08-07 16:54
11-cocos2dx基础-薛国良
-2017-08-07 16:54
10-cocos2dx框架-王保明
-2017-08-07 16:54
09-休息答疑笔记-王宁
-2017-08-07 16:54
08-linux&shell经典复习-王保明
-2017-08-07 16:54
07-linux服务器编程&Shell编程-王保明
-2017-08-07 16:54
06-linux基础&QT&SHELL&数据库-朱璟瑶
-2017-08-07 16:54
05-数据结构与算法-王保明
-2017-08-07 16:54
04-C++语言-王保明
-2017-08-07 16:54
03-C语言提高-王保明
-2017-08-07 16:54
02-植物大战僵尸PC端外挂-童泽宇
-2017-08-07 16:54
01-C基础课-伊成-
-2017-08-07 16:54
解压密码.txt
27B2017-08-07 16:54
26-游戏实训-大斌.rar
1.98G2017-08-07 16:54
25-笔记&课程表&考试试题.rar
63M2017-08-07 16:54
24-就业指导-王浩.rar
187.7M2017-08-07 16:54




下载链接：https://pan.baidu.com/s/1kUTakkv


]]></description><link>https://blog.gaoredu.com/article/a4cc12da-629c-4557-b16e-3867925f4626</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a4cc12da-629c-4557-b16e-3867925f4626</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Jul 2018 01:23:16 GMT</pubDate></item><item><title><![CDATA[价值1000多元的私人健身教练视频教程]]></title><description><![CDATA[674

98_lunge_twist(下半身，中级)静.mp4
8.6M2018-06-26 22:59
341_mod_jumping_jacks(有氧运动，初级).mp4
5.3M2018-06-26 22:59
300_star_toe_touch(柔韧性，初级)静.mp4
8.7M2018-06-26 22:59
296_quadruped_knee_to_elbow(全身，中级)静.mp4
11.4M2018-06-26 22:59
293_wall_lateral_pull_downs(上半身，初级)静.mp4
11M2018-06-26 22:59
253_sl_reach_foot(腹肌和核心肌群，高难度)静.mp4
12.3M2018-06-26 22:59
251_sl_reach_shin(腹肌和核心肌群，中级)静.mp4
12M2018-06-26 22:59
249_sl_front_to_back_hop(腹肌和核心肌群，中级).mp4
8.8M2018-06-26 22:59
247_sl_balance(腹肌和核心肌群，初级)静.mp4
7.4M2018-06-26 22:59
243_dynamic_calf_stretch(柔韧性，初级)静.mp4
5.3M2018-06-26 22:59
242_cat_cow(柔韧性，初级)静.mp4
7.9M2018-06-26 22:59
241_180_jumps(有氧运动，中级).mp4
5.9M2018-06-26 22:59
240_wide_climber_twists(腹肌和核心肌群，高难度)静.mp4
8.1M2018-06-26 22:59
239_side_lunge_touchdown(下半身，中级)静.mp4
8.1M2018-06-26 22:59
237_sl_jump_squats(下半身，高难度).mp4
7.9M2018-06-26 22:59
235_sl_squats(下半身，中级)静.mp4
9M2018-06-26 22:59
233_mod_low_side_plank_lifts(腹肌和核心肌群，初级)静.mp4
8.8M2018-06-26 22:59
231_low_side_plank_leg_lifts(腹肌和核心肌群，高难度)静.mp4
8.1M2018-06-26 22:59
230_knee_plyo_push_ups(上半身，中级).mp4
5.8M2018-06-26 22:59
229_plank_to_down_dog(腹肌和核心肌群，中级)静.mp4
7.5M2018-06-26 22:59
228_high_plank_knee_drops(腹肌和核心肌群，中级)静.mp4
8M2018-06-26 22:59
227_low_plank_knee_drops(腹肌和核心肌群，中级)静.mp4
6.7M2018-06-26 22:59
226_low_plank_crunches(腹肌和核心肌群，高难度)静.mp4
8.4M2018-06-26 22:59
225_beetle(腹肌和核心肌群，中级)静.mp4
6.1M2018-06-26 22:59
224_table_top_crunches(腹肌和核心肌群，初级)静.mp4
6.8M2018-06-26 22:59
223_prone_x(腹肌和核心肌群，中级)静.mp4
9.2M2018-06-26 22:59
221_bent_leg_cross_overs(下半身，初级)静.mp4
8.5M2018-06-26 22:59
219_fire_hydrant(下半身，初级)静.mp4
8.1M2018-06-26 22:59
217_donkey_kicks(下半身，初级)静.mp4
7.5M2018-06-26 22:59
216_frog_squats(下半身，中级).mp4
8.4M2018-06-26 22:59
214_squat_jacks(下半身，中级).mp4
7.8M2018-06-26 22:59
213_sl_crab_bridge(下半身，中级)静.mp4
8.2M2018-06-26 22:59
212_crab_bridge(下半身，初级)静.mp4
7M2018-06-26 22:59
211_knee_narrow_to_wide_push_ups(上半身，中级).mp4
6.7M2018-06-26 22:59
210_knee_up_down_push_ups(上半身，中级)静.mp4
9.2M2018-06-26 22:59
209_knee_side_to_side_push_ups(上半身，中级)静.mp4
7.4M2018-06-26 22:59
208_knee_push_up_shoulder_taps(上半身，中级)静.mp4
9.9M2018-06-26 22:59
207_knee_push_up_side_planks(上半身，中级)静.mp4
8.3M2018-06-26 22:59
206_knee_commander_push_ups(上半身，中级)静.mp4
7.6M2018-06-26 22:59
205_knee_stagger_push_ups(上半身，中级)静.mp4
8.3M2018-06-26 22:59
200_arm_circles_backward(上半身，初级)静.mp4
5.7M2018-06-26 22:59
199_arm_circles_forward(上半身，初级)静.mp4
5.7M2018-06-26 22:59
198_hip_openers(下半身，初级)静.mp4
7M2018-06-26 22:59
197_walking_high_knees(有氧运动，初级).mp4
6.6M2018-06-26 22:59
196_standing_quadriceps_stretch(柔韧性，初级)静.mp4
6.3M2018-06-26 22:59
195_overhead_triceps_stretch(柔韧性，初级)静.mp4
4.2M2018-06-26 22:59
194_shoulder_cross_stretch(柔韧性，初级)静.mp4
4.6M2018-06-26 22:59
193_lying_figure_4_stretch(柔韧性，初级)静.mp4
6.9M2018-06-26 22:59
192_wall_pectoral_stretch(柔韧性，初级).mp4
5.9M2018-06-26 22:59
191_kneeling_hip_flexor_stretch(柔韧性，初级)静.mp4
6.3M2018-06-26 22:59
190_childs_pose(柔韧性，初级)静.mp4
5.5M2018-06-26 22:59
189_cobblers_stretch(柔韧性，初级)静.mp4
6.7M2018-06-26 22:59
187_declined_wall_push_ups(上半身，高难度).mp4
4.9M2018-06-26 22:59
184_wall_handstand_kick_up(全身，中级).mp4
4.7M2018-06-26 22:59
181_wall_climbs(全身，高难度).mp4
7.4M2018-06-26 22:59
180_marching_wall_sit(下半身，中级)静.mp4
6.3M2018-06-26 22:59
178_hip_adduction(下半身，初级)静.mp4
4.9M2018-06-26 22:59
177_hip_abduction(下半身，初级)静.mp4
5M2018-06-26 22:59
175_wall_bridge(下半身，初级).mp4
6.1M2018-06-26 22:59
173_wall_sit(下半身，初级)静.mp4
3.6M2018-06-26 22:59
172_wall_push_offs(上半身，初级).mp4
5M2018-06-26 22:59
170_inclined_wall_push_ups(上半身，初级)静.mp4
4.4M2018-06-26 22:59
169_up_downs(上半身，高难度).mp4
6.8M2018-06-26 22:59
167_single_leg_pike_push_ups(上半身，高难度)静.mp4
5.8M2018-06-26 22:59
166_pike_push_ups(上半身，中级)静.mp4
6.8M2018-06-26 22:59
164_knee_up_downs(上半身，初级)静.mp4
7.6M2018-06-26 22:59
163_triceps_dip(上半身，初级).mp4
8.3M2018-06-26 22:59
160_kneel_stand(下半身，中级)静.mp4
4.8M2018-06-26 22:59
159_speed_skaters(有氧运动，中级).mp4
3.9M2018-06-26 22:59
158_skier_jumps(有氧运动，中级).mp4
6.9M2018-06-26 22:59
157_outward_calf_raises(下半身，初级)静.mp4
5M2018-06-26 22:59
156_inward_calf_raises(下半身，初级)静.mp4
4.9M2018-06-26 22:59
155_calf_raises(下半身，初级)静.mp4
4.7M2018-06-26 22:59
154_single_leg_bridge(下半身，初级)静.mp4
5.3M2018-06-26 22:59
153_bridge(腹肌和核心肌群，初级)静.mp4
4.1M2018-06-26 22:59
151_straight_leg_bicycle_crunches(腹肌和核心肌群，高难度)静.mp4
8.2M2018-06-26 22:59
150_inchworm_tuck_jumps(有氧运动，高难度).mp4
6.2M2018-06-26 22:59
149_skier_abs(腹肌和核心肌群，高难度).mp4
7.4M2018-06-26 22:59
148_windshield_wipers(腹肌和核心肌群，高难度)静.mp4
4.8M2018-06-26 22:59
147_wide_legged_v_ups(腹肌和核心肌群，高难度)静.mp4
7.3M2018-06-26 22:59
146_v_ups(腹肌和核心肌群，高难度).mp4
4.5M2018-06-26 22:59
145_wide_climber_jumps(腹肌和核心肌群，高难度).mp4
6.7M2018-06-26 22:59
144_russian_twist_hard(腹肌和核心肌群，高难度)静.mp4
7.8M2018-06-26 22:59
142_reverse_plank(腹肌和核心肌群，中级)静.mp4
4.2M2018-06-26 22:59
141_superman_pull(腹肌和核心肌群).mp4
6.6M2018-06-26 22:59
139_russian_twist_easy(腹肌和核心肌群，中级)静.mp4
5.3M2018-06-26 22:59
138_single_leg_v_up(腹肌和核心肌群，中级)静.mp4
5.7M2018-06-26 22:59
135_leg_raises(腹肌和核心肌群，中级)静.mp4
7.2M2018-06-26 22:59
134_reverse_crunches(腹肌和核心肌群，中级)静.mp4
4.7M2018-06-26 22:59
133_knee_tuck_crunches(腹肌和核心肌群，中级)静.mp4
7.2M2018-06-26 22:59
132_scissor_kicks(腹肌和核心肌群，中级)静.mp4
6.4M2018-06-26 22:59
131_quadruped_limb_raises(腹肌和核心肌群，初级)静.mp4
5.6M2018-06-26 22:59
130_bicycle_crunches(腹肌和核心肌群，中级)静.mp4
5.9M2018-06-26 22:59
129_inchworms(腹肌和核心肌群，初级)静.mp4
6.3M2018-06-26 22:59
128_superman(腹肌和核心肌群，初级)静.mp4
4.7M2018-06-26 22:59
127_crunches(腹肌和核心肌群，初级)静.mp4
10.4M2018-06-26 22:59
126_sit_ups(腹肌和核心肌群，初级)静.mp4
6.8M2018-06-26 22:59
124_mountain_climbers(有氧运动，初级)静.mp4
4.8M2018-06-26 22:59
122_tuck_jumps(有氧运动，高难度).mp4
4.8M2018-06-26 22:59
121_squat_stars(有氧运动，高难度).mp4
5.4M2018-06-26 22:59
120_lateral_jump_touchdown(有氧运动，高难度).mp4
6.3M2018-06-26 22:59
119_squatting_quick_feet(有氧运动，中级).mp4
5.8M2018-06-26 22:59
118_lateral_jumps(有氧运动，中级).mp4
3.5M2018-06-26 22:59
117_clap_jacks(有氧运动，初级).mp4
3.8M2018-06-26 22:59
116_star_jacks(有氧运动，中级).mp4
4.5M2018-06-26 22:59
115_quick_feet(有氧运动，初级).mp4
4.4M2018-06-26 22:59
113_crossing_punches(有氧运动，初级)静.mp4
3.4M2018-06-26 22:59
112_punches(有氧运动，初级)静.mp4
7M2018-06-26 22:59
111_jog_in_place(有氧运动，初级)静.mp4
3.9M2018-06-26 22:59
109_rockstars(有氧运动，初级).mp4
5.2M2018-06-26 22:59
108_wide_high_knees(有氧运动，初级).mp4
5.2M2018-06-26 22:59
106_high_knees(有氧运动，初级).mp4
5.9M2018-06-26 22:59
105_jumping_jacks(有氧运动，初级).mp4
5.2M2018-06-26 22:59
104_jump_lunges(下半身，高难度).mp4
5.3M2018-06-26 22:59
103_lunge_high_knee_jumps(下半身，高难度).mp4
5.9M2018-06-26 22:59
100_single_leg_deadlift(下半身，中级)静.mp4
5M2018-06-26 22:59
099_touchdown_lunges(下半身，中级)静.mp4
7.9M2018-06-26 22:59
097_pivot_lunges(下半身，中级)静.mp4
4.7M2018-06-26 22:59
096_side_lunges(下半身，中级)静.mp4
8.2M2018-06-26 22:59
095_curtsy_lunges(下半身，中级)静.mp4
4.6M2018-06-26 22:59
094_pendulum_lunges(下半身，中级)静.mp4
9.1M2018-06-26 22:59
093_lunge_to_front_kick(下半身，中级)静.mp4
9M2018-06-26 22:59
092_lunge_to_high_knee(下半身，中级)静.mp4
4.5M2018-06-26 22:59
091_backward_lunges(下半身，初级)静.mp4
8M2018-06-26 22:59
090_walking_lunges(下半身，初级).mp4
5.8M2018-06-26 22:59
089_forward_lunges(下半身，初级)静.mp4
8.5M2018-06-26 22:59
088_flat_out_burpee_tuck_jumps(全身，高难度).mp4
7.6M2018-06-26 22:59
087_narrow_6_count_burpees(全身，高难度).mp4
4.4M2018-06-26 22:59
086_6_count_burpees(全身，高难度).mp4
6.6M2018-06-26 22:59
085_ultimate_burpees(全身，高难度)静.mp4
8.3M2018-06-26 22:59
084_one_legged_6_count_burpees(全身，高难度)静.mp4
7M2018-06-26 22:59
082_one_legged_4_count_burpees(全身，中级).mp4
5.3M2018-06-26 22:59
081_flat_out_burpees(全身，中级).mp4
6.8M2018-06-26 22:59
079_4_count_burpees(全身，初级).mp4
6.9M2018-06-26 22:59
075_low_plank_double_knee(腹肌和核心肌群，高难度)静.mp4
5.3M2018-06-26 22:59
074_low_side_plank_twists(腹肌和核心肌群，高难度)静.mp4
7.4M2018-06-26 22:59
072_side_star_plank(腹肌和核心肌群，中级)静.mp4
6.1M2018-06-26 22:59
071_side_plank_oblique_crunch(腹肌和核心肌群，中级)静.mp4
6.6M2018-06-26 22:59
069_low_plank_twists(腹肌和核心肌群，中级)静.mp4
7.2M2018-06-26 22:59
068_low_plank_knee_crosses(腹肌和核心肌群，中级)静.mp4
4.6M2018-06-26 22:59
067_low_plank_knee_to_elbow(腹肌和核心肌群，中级)静.mp4
6.6M2018-06-26 22:59
066_low_plank_arm_reaches(腹肌和核心肌群，中级)静.mp4
5.9M2018-06-26 22:59
064_mod_low_side_plank(腹肌和核心肌群，初级)静.mp4
7.4M2018-06-26 22:59
063_low_side_plank(腹肌和核心肌群，初级)静.mp4
6.7M2018-06-26 22:59
061_low_plank(腹肌和核心肌群，初级)静.mp4
6.4M2018-06-26 22:59
060_high_plank_limb_raises(腹肌和核心肌群，高难度)静.mp4
7.8M2018-06-26 22:59
059_high_plank_jumping_jacks(腹肌和核心肌群，高难度).mp4
8.9M2018-06-26 22:59
058_high_plank_double_knee(腹肌和核心肌群，高难度)静.mp4
4.7M2018-06-26 22:59
055_high_plank_jumps(腹肌和核心肌群，中级).mp4
4.6M2018-06-26 22:59
054_high_plank_jacks(腹肌和核心肌群，中级).mp4
7.2M2018-06-26 22:59
052_high_plank_knee_crosses(腹肌和核心肌群，中级)静.mp4
7.9M2018-06-26 22:59
051_high_plank_knee_to_elbow(腹肌和核心肌群，中级)静.mp4
6.3M2018-06-26 22:59
049_high_side_plank(腹肌和核心肌群，中级)静.mp4
6.5M2018-06-26 22:59
048_mod_high_side_plank(腹肌和核心肌群，初级)静.mp4
6.5M2018-06-26 22:59
047_high_plank_leg_lifts(腹肌和核心肌群，初级)静.mp4
6.1M2018-06-26 22:59
046_high_plank(腹肌和核心肌群，初级)静.mp4
6.3M2018-06-26 22:59
045_pistol_squats(下半身，高难度)静.mp4
3.6M2018-06-26 22:59
044_180_jump_squats(下半身，高难度).mp4
7.5M2018-06-26 22:59
042_butt_kicker_jump_squats(下半身，高难度).mp4
7.2M2018-06-26 22:59
040_forward_jump_squats(下半身，中级).mp4
5.4M2018-06-26 22:59
039_squat_to_high_knee_jumps(下半身，中级).mp4
8M2018-06-26 22:59
038_squat_side_kick(下半身，中级)静.mp4
4.7M2018-06-26 22:59
036_prisoner_squats(下半身，中级)静.mp4
5M2018-06-26 22:59
035_overhead_squats(下半身，中级)静.mp4
5.5M2018-06-26 22:59
034_plie_jump_squats(下半身，中级).mp4
5.2M2018-06-26 22:59
032_jump_squats(下半身，中级).mp4
6.6M2018-06-26 22:59
031_squat_to_high_knee(下半身，初级)静.mp4
8.9M2018-06-26 22:59
030_pulsing_squats(下半身，初级)静.mp4
5.2M2018-06-26 22:59
029_plie_squats(下半身，初级)静.mp4
7.5M2018-06-26 22:59
028_narrow_squats(下半身，初级)静.mp4
6M2018-06-26 22:59
027_squats(下半身，初级)静.mp4
7.4M2018-06-26 22:59
024_typewriter_push_ups(上半身，高难度)静.mp4
5.6M2018-06-26 22:59
023_limb_raise_push_ups(上半身，高难度)静.mp4
5M2018-06-26 22:59
022_push_up_jacks(上半身，高难度).mp4
7.9M2018-06-26 22:59
021_single_leg_push_ups(上半身，高难度)静.mp4
5.1M2018-06-26 22:59
020_plyo_push_ups(上半身，高难度).mp4
4.8M2018-06-26 22:59
019_narrow_to_wide_push_ups(上半身，高难度).mp4
4.6M2018-06-26 22:59
018_alligator_push_ups(上半身，高难度)静.mp4
8.6M2018-06-26 22:59
014_up_down_push_ups(上半身，中级).mp4
10.4M2018-06-26 22:59
012_side_to_side_push_ups(上半身，中级)静.mp4
8.2M2018-06-26 22:59
011_push_up_shoulder_taps(上半身，中级)静.mp4
9.7M2018-06-26 22:59
010_push_up_side_planks(上半身，中级)静.mp4
9.4M2018-06-26 22:59
009_commander_push_ups(上半身，中级)静.mp4
7.6M2018-06-26 22:59
007_stagger_push_ups(上半身，中级)静.mp4
6.2M2018-06-26 22:59
006_wide_push_ups(上半身，初级)静.mp4
8.8M2018-06-26 22:59
005_narrow_push_ups(上半身，初级)静.mp4
9.3M2018-06-26 22:59
004_push_ups(上半身，初级)静.mp4
7M2018-06-26 22:59
003_wide_knee_push_ups(上半身，初级)静.mp4
5M2018-06-26 22:59
002_narrow_knee_push_ups(上半身，初级)静.mp4
5.5M2018-06-26 22:59
001_knee_push_ups(上半身，初级)静.mp4
5.4M2018-06-26 22:59

下载链接：链接: https://pan.baidu.com/s/157SJerGyhFSO7MmkrO49nw 密码: x622
]]></description><link>https://blog.gaoredu.com/article/4a9d534c-7cb3-48c2-814a-0beafff1501d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4a9d534c-7cb3-48c2-814a-0beafff1501d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Jul 2018 01:14:28 GMT</pubDate></item><item><title><![CDATA[10天带你Hode住安卓《智慧北京》项目项目实战视频教程]]></title><description><![CDATA[项目的界面展示如下：

673


左边的界面分为：新闻、专题、组图、互动四个模块
671


下面分为首页、新闻中心、智慧服务、教务、设置四个功能模块
672




视频下载链接地址：链接: https://pan.baidu.com/s/1F5fXZDW_1JfX-uvqqDM6lQ 密码: ukvv



再分享几个站内安卓开发的视频教程：
价值千元的最新版老罗安卓开发从零到精通实战视频教程（共两季）
https://www.52tech.tech/forum.ph ... id=21&fromuid=1
(出处: 我爱科技论坛)

【安卓基础】基于Androidstudio的安卓从入门到精通全套视频教程
https://www.52tech.tech/forum.ph ... d=767&fromuid=1
(出处: 我爱科技论坛)


传智播客76期安卓视频教程分享
https://www.52tech.tech/forum.ph ... d=526&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/a1373aac-1608-405b-ad31-68939e000510</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a1373aac-1608-405b-ad31-68939e000510</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 03 Jul 2018 21:24:08 GMT</pubDate></item><item><title><![CDATA[如何在手机上安装一个Linux 渗透测试的操作系统？]]></title><description><![CDATA[KaliLinux是一个基于Debian的发行的一款关注于高级渗透测试和安全审计的Linux系统，这个系统应该算是目前黑客/白帽最常用的安全渗透测试工具了，不会用的可以去百度下，这个系统 的主要功能如图所示：


670




官方系统镜像下载链接：
http://www.kali.org/downloads/


首先大家来看一下安装成功后的效果哈：
667


668


669


是不是很炫酷啊，快按照本区的方法进行下载安装吧：


安装成功的前提条件：


1.性能较好的安卓手机，而且请保证手机已经root，获得了超级权限，而且手机的存储空间剩余5G或以上的空间（一个KaliLinux系统可就两三个G呢）


2.
busybox pro http://www.cr173.com/soft/39179.html
终端模拟器 http://as.baidu.com/a/item?docid=5952767&f=web_alad_7
（选）androidvnc http://m.yesky.com/android/99/33033599.shtml


3.linux arm镜像和启动脚本下载地址
启动脚本
http://sourceforge.net/projects/linuxonandroid/files/bootscript.sh/download 
%20Linux/kalilinux.BASIC.ext2.20131012.zip/download
arm镜像下载地址
http://sourceforge.net/projects/linuxonandroid/files/Kali%20Linux/kalilinux.BASIC.ext2.20131012.zip/download


系统安装步骤：
1.手机安装busybox套件
2.修改arm启动脚本
3.放到同意目录并放到手机存储器 文件名不能含有中文哈，必须纯英文
4.打开终端模拟器， 开始进行测试，然后启用arm启动脚本


如果大家看了上面的步骤还不会的话，可以下面的这个黑科技的安装视频教程，已分享到百度云盘：
链接: https://pan.baidu.com/s/127xsjkC1bsAjJQnUyN_O7A 密码: qx17


]]></description><link>https://blog.gaoredu.com/article/10d57aef-15fe-4089-833a-4f00be12281d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/10d57aef-15fe-4089-833a-4f00be12281d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 03 Jul 2018 21:10:35 GMT</pubDate></item><item><title><![CDATA[最新 Java并发编程原理与实战视频教程百度云下载]]></title><description><![CDATA[666

0.试看（2节）.rar
930.4M2018-02-08 18:23
000.PPT和代码.rar
2.3M2018-02-08 18:23
01你真的了解并发吗？.rar
561.5M2018-02-08 18:23
02理解多线程与并发的之间的联系与区别.rar
234.7M2018-02-08 18:23
03解析多线程与多进程的联系以及上下文切换所导致资源浪费问题.rar
294.5M2018-02-08 18:23
04学习并发的四个阶段并推荐学习并发的资料.rar
239.2M2018-02-08 18:23
05线程的状态以及各状态之间的转换详解.rar
154.7M2018-02-08 18:23
06线程的初始化，中断以及其源码讲解.rar
165.5M2018-02-08 18:23
07多种创建线程的方式案例演示（一）带返回值的方式.rar
141.1M2018-02-08 18:23
08多种创建线程的方式案例演示（二）使用线程池.rar
127.1M2018-02-08 18:23
09Spring对并发的支持：Spring的异步任务.rar
109.9M2018-02-08 18:23
10使用jdk8提供的lambda进行并行计算.rar
101.8M2018-02-08 18:23
11了解多线程所带来的安全风险.rar
89.3M2018-02-08 18:23
12从线程的优先级看饥饿问题.rar
143M2018-02-08 18:23
13从Java字节码的角度看线程安全性问题.rar
180.3M2018-02-08 18:23
14synchronized保证线程安全的原理（理论层面）.rar
100.7M2018-02-08 18:23
15synchronized保证线程安全的原理（jvm层面）.rar
145.6M2018-02-08 18:23
16单例问题与线程安全性深入解析.rar
182.5M2018-02-08 18:23
17理解自旋锁，死锁与重入锁.rar
159.7M2018-02-08 18:23
18深入理解volatile原理与使用.rar
169.7M2018-02-08 18:23
19JDK5提供的原子类的操作以及实现原理.rar
204.9M2018-02-08 18:23
20Lock接口认识与使用.rar
151.8M2018-02-08 18:23
21手动实现一个可重入锁.rar
175.3M2018-02-08 18:23
22AbstractQueuedSynchronizer(AQS)详解.rar
721.5M2018-02-08 18:23
23使用AQS重写自己的锁.rar
252.2M2018-02-08 18:23
24重入锁原理与演示.rar
105.6M2018-02-08 18:23
25读写锁认识与原理.rar
119.6M2018-02-08 18:23
26细读ReentrantReadWriteLock源码.rar
241M2018-02-08 18:23
27ReentrantReadWriteLock锁降级详解.rar
221.8M2018-02-08 18:23
28线程安全性问题简单总结.rar
168.2M2018-02-08 18:23
29线程之间的通信之wait notify.rar
220.1M2018-02-08 18:23
30通过生产者消费者模型理解等待唤醒机制.rar
146.2M2018-02-08 18:23
31Condition的使用及原理解析.rar
140.4M2018-02-08 18:23
32使用Condition重写waitnotify案例并实现一个有界队列.rar
158.2M2018-02-08 18:23
33深入解析Condition源码.rar
192.4M2018-02-08 18:23
34实战：简易数据连接池.rar
156.9M2018-02-08 18:23
35线程之间通信之join应用与实现原理剖析.rar
94.8M2018-02-08 18:23
36ThreadLocal 使用及实现原理.rar
111M2018-02-08 18:23
37并发工具类CountDownLatch详解.rar
177.6M2018-02-08 18:23
38并发工具类CyclicBarrier 详解.rar
88.6M2018-02-08 18:23
39并发工具类Semaphore详解.rar
104.2M2018-02-08 18:23
40并发工具类Exchanger详解.rar
88.9M2018-02-08 18:23
41CountDownLatch,CyclicBarrier,Semaphore源码解析.rar
205.4M2018-02-08 18:23
42提前完成任务之FutureTask使用.rar
78.3M2018-02-08 18:23
43Future设计模式实现（实现类似于JDK提供的Future）.rar
112.7M2018-02-08 18:23
44Future源码解读.rar
166.5M2018-02-08 18:23
45ForkJoin框架详解.rar
140.8M2018-02-08 18:23
46同步容器与并发容器.rar
122.2M2018-02-08 18:23
47并发容器CopyOnWriteArrayList原理与使用.rar
100.9M2018-02-08 18:23
48并发容器ConcurrentLinkedQueue原理与使用.rar
158.7M2018-02-08 18:23
49Java中的阻塞队列原理与使用.rar
154.1M2018-02-08 18:23
50实战：简单实现消息队列.rar
84.8M2018-02-08 18:23
51并发容器ConcurrentHashMap原理与使用.rar
154M2018-02-08 18:23
52线程池的原理与使用.rar
274.5M2018-02-08 18:23
53Executor框架详解.rar
221.4M2018-02-08 18:23
54实战：简易web服务器（一）.rar
317M2018-02-08 18:23
55实战：简易web服务器（二）.rar
153M2018-02-08 18:23
56JDK8的新增原子操作类LongAddr原理与使用.rar
118.9M2018-02-08 18:23
57JDK8新增锁StampedLock详解.rar
155M2018-02-08 18:23
58重排序问题.rar
112.9M2018-02-08 18:23
59happens-before简单概述.rar
89.9M2018-02-08 18:23
60锁的内存语义.rar
81.4M2018-02-08 18:23
61volatile内存语义.rar
77.4M2018-02-08 18:23
62final域的内存语义.rar
155.1M2018-02-08 18:23
63实战：问题定位.rar
51.2M2018-02-08 18:23




下载链接：
https://pan.baidu.com/s/1eTon0e2 密码: sqb5



再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1



【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1


]]></description><link>https://blog.gaoredu.com/article/feb3dfdc-945d-466d-8060-7e3b749a2ec1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/feb3dfdc-945d-466d-8060-7e3b749a2ec1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 03 Jul 2018 02:50:25 GMT</pubDate></item><item><title><![CDATA[剪贴板文本转换工具 PureText v6.2 Hanzify（可自动排版任意复制字体格式错误）]]></title><description><![CDATA[软件功能：
用户首先复制或剪切任意内容到剪贴板，再点击一下 PureText 的任务栏图标，即可将转换任意格式的文本哈。

免费与纯净、占用极小；
支持点击托盘图标、鼠标右键选项命令 “转换为文本” 操作；
支持快捷键一键转换和粘贴文本等功能；



665


下载链接：https://pan.baidu.com/s/1UMs8vKTOmeE-MeHeEnxGYw；
]]></description><link>https://blog.gaoredu.com/article/bae27203-558f-4417-8139-e40ff86942ed</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bae27203-558f-4417-8139-e40ff86942ed</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 02 Jul 2018 21:32:10 GMT</pubDate></item><item><title><![CDATA[目前全网收集最全的超多电脑上超好看的中英文字体免费下载]]></title><description><![CDATA[主要字体包括：
T汉仪细中因案
T汉仪细中因简
T汉仪小隶书繁
T汉仪小隶书简
T汉仪醒示体繁
T汉仪醒示体简
T汉仪秀芙体繁
T汉仪秀芙体简
T汉仪雪峰体繁
T汉仪雪峰体简
T汉仪雪君体繁
T汉仪雪君体简
T汉仪Y Y体简
T汉仪颜楷簇
T汉仪雁翎体简
T汉仪因委体篆
T汉仪因叠体简
T汉仪长美黑篆
T汉仪长美黑简
T汉仪长宋紫
T汉仪长宋简
T汉仪长艺体繁
T汉仪长艺体简
T汉仪智草繁
T汉仪中等线繁
T汉仪中等线简
T汉仪中黑繁
T汉仪中黑简
T汉仪中楷简
T汉仪中隶书繁



字体效果如下：
664
663
662


字体下载链接：https://pan.baidu.com/s/1Z-seEbtg5b3vNjjDsBZy3Q 密码：2e05

]]></description><link>https://blog.gaoredu.com/article/34c6dbf6-38f9-4ee9-9bca-b5e667732fd2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/34c6dbf6-38f9-4ee9-9bca-b5e667732fd2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 02 Jul 2018 21:25:17 GMT</pubDate></item><item><title><![CDATA[AIDA64 v5.70 绿色特别版/单文件下载地址(检测系统硬件详细信息)]]></title><description><![CDATA[661


AIDA64_Extreme_v5.97_已授权至尊版绿色版.7z
AIDA64_Extreme_v5.97_已授权至尊版单文件.exe
AIDA64_Extreme_v5.95_已授权绿色版.7z
AIDA64_Extreme_v5.95_已授权单文件.exe
AIDA64_Business_v5.97_已授权商业版绿色版.7z
AIDA64_Business_v5.97_已授权商业版单文件.exe
AIDA64_Business_v5.95_已授权绿色版.7z
36.8M2017-11-28 14:35
AIDA64_Business_v5.95_已授权单文件.exe
12.5M2017-11-28 14:35
AIDA64 Extreme v5.80.7z
40.9M2016-10-31 14:52
AIDA64 Extreme v5.80 Lite.exe
16.2M2016-10-31 14:52
AIDA64 Extreme v5.75 绿色特别版本.7z
10.9M2016-06-29 15:02
AIDA64 Extreme v5.75 单文件特别版.exe
12M2016-06-29 15:02
AIDA64 Extreme v5.75 单文件特别版.exe
5.6M2016-06-29 15:02
AIDA64 Extreme v5.70.3800.exe
12M2016-03-22 16:41
AIDA64 Extreme v5.70.3800.7z
10.9M2016-03-22 16:41
AIDA64 Extreme v5.70.3800 Lite.exe
5.6M2016-03-22 16:41
AIDA64 Business v5.80.7z
35.3M2016-10-31 14:52
AIDA64 Business v5.80 Lite.exe
10M2016-10-31 14:52
AIDA64 Business v5.75 绿色特别版本.7z
11.6M2016-06-29 15:02
AIDA64 Business v5.75 单文件特别版.exe
12.8M2016-06-29 15:02
AIDA64 Business v5.75 单文件特别版.exe
5.9M2016-06-29 15:02
AIDA64 Business v5.70.3800.exe
12.8M2016-03-22 16:41
AIDA64 Business v5.70.3800.7z
11.6M2016-03-22 16:41
AIDA64 Business v5.70.3800 Lite.exe
5.9M2016-03-22 16:41




软件下载链接：http://pan.baidu.com/s/1bnxWdf5


]]></description><link>https://blog.gaoredu.com/article/a0cf7a07-c235-4fab-9f20-df1ed89a0b96</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a0cf7a07-c235-4fab-9f20-df1ed89a0b96</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 02 Jul 2018 03:36:01 GMT</pubDate></item><item><title><![CDATA[最新传智Hadoop大数据分析与挖掘视频教程百度云盘下载]]></title><description><![CDATA[1.视频教程目录如下：
http://www.52tech.tech/forum.php?mod=image&aid=659&size=300x300&key=96f5f873a1ef8f7b&nocache=yes&type=fixnone660

传智播客hadoop教程10-去除hadoop的启动过程中警告信息.avi
传智播客hadoop教程09-使用eclipse查看hadoop源码.avi
传智播客hadoop教程08-介绍hadoop的伪分布安装过程.avi
传智播客hadoop教程07-介绍如何使用SSH进行免密码登陆以及如何安装JDK.avi
传智播客hadoop教程06-配置Linux的环境，为搭建hadoop做准备.avi
传智播客hadoop教程05-hadoop的特点和集群特点.avi
传智播客hadoop教程04-HDFS和MapReduce的体系结构.avi
传智播客hadoop教程03-hadoop的概念及其发展历程.avi
传智播客hadoop教程02-hadoop生态圈介绍，介绍hadoop周边的很多框架.avi
传智播客hadoop教程01-课程介绍以及hadoop的国内外发展状况.avi
传智播客hadoop教程18-NameNode的RPC通信过程.avi
传智播客hadoop教程17-Hadoop的RPC通信原理.avi
传智播客hadoop教程16-使用java操作HDFS.avi
传智播客hadoop教程15-使用浏览器查看HDFS目录结构.avi
传智播客hadoop教程14-DataNode体系结构.avi
传智播客hadoop教程13-NameNode体系结构.avi
传智播客hadoop教程12-HDFS的shell操作.avi
传智播客hadoop教程11-分布式文件系统简介.avi
FileSystem与NameNode通信.png




2.此外还包括Hadoop课程中用到的测试数据，文档和笔记，全部软件等资源
http://www.52tech.tech/forum.php?mod=image&aid=658&size=300x300&key=3b857bc442b9e0ee&nocache=yes&type=fixnone




下载链接：http://pan.baidu.com/s/1i3wwRuH


密码：h6ae


]]></description><link>https://blog.gaoredu.com/article/5bc299a4-aa8b-48f9-9885-171807c4dbda</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5bc299a4-aa8b-48f9-9885-171807c4dbda</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 30 Jun 2018 23:12:10 GMT</pubDate></item><item><title><![CDATA[使用前端黑科技技术搭建一个酷炫的百度搜索首页面，看看有多像？]]></title><description><![CDATA[1.首先我们还是先来看一下这个黑科技实现的类似于百度搜索的页面的最终效果：

http://www.52tech.tech/forum.php?mod=image&aid=656&size=300x300&key=6abe3f5f77f6bcfd&nocache=yes&type=fixnone
657


2.这个风格相信大家都不陌生吧，基本上布局什么的和百度的完全类似。具体的实现代码如下,当然大家也可以把代码改成自己想要的样子，具体的操作大家自己尝试：

index.html
这个页面应该是实现过程中最麻烦的一个吧，用到了JQuery的几个库文件，大家直接引入即可：
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>搜索-我爱科技论坛-52.technology</title>
<link rel="stylesheet" href="css/common.css"/>



<style>#wimoban_p, #wimoban_p a {
color: #fff;
font-family: "微软雅黑";
}

#wimoban_p {
text-align: center;
font-size: 14px;
clear: both;
}
</style>
</head>
<body oncontextmenu='return false' ondragstart='return false'>
<div id="wrapper">
<div class="skinBg" style="background-image: url('images/65.jpg');"></div>
<header id="header">
<nav class="headNavs fr tr">
<a href="http://www.52tech.tech/home.php?mod=space&do=notice"><span class="s-icon s-icon-treasure"></span><span>提醒</span></a>
<a href="http://www.52tech.tech/home.php?mod=space&do=pm"><span class="s-icon s-icon-msg"></span><span>消息</span></a>
<a><span class="s-icon s-icon-line"></span></a>
<a href="http://www.52tech.tech/portal.php"><span>门户网站</span></a>
<a href="javascript:;" class="uname"><span>我自己</span><span class="user-arrow"></span></a>
<div class="topMenus dn">
<span class="arrowTop"></span>
<a href="http://www.52tech.tech/member.php?mod=logging&action=login">用户登录</a>
<a href="http://www.52tech.tech/member.php?mod=logging&action=login">用户注册</a>
</div>
</nav>
</header>
<div class="content tc">
<p class="logo"><img width="270" height="129" src="images/mylogo.png" alt="logo"/></p>
<nav class="mainNavs">
<a href="http://www.52tech.tech/portal.php?mod=topic&topicid=1">VIP视频</a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE">考研资料</a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=40&extra=">科学上网</a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=39&highlight=webgl">WEBGL</a>
<a href="http://www.52tech.tech/forum-41-1.html">编程专区</a>
<a href="http://www.52tech.tech/forum-40-1.html">书籍资料</a>
<a href="http://www.52tech.tech/forum-53-1.html">黑科技</a>
<a href="http://www.52tech.tech/thread-66-1-1.html">更多>></a>
</nav>
<div class="searchBox">
<form action="http://www.52tech.tech/search.php">
<!--http://www.52tech.tech/search.ph ... =yes&kw=webgl-->
<input type="text" class="searchIpt f14" name="mod=forum&searchid=2&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw" maxlength="100" autocomplete="off"/>
<input type="submit" class="btn cp" value="快搜一下"/>
</form>
</div>
<div class="mainContents oh">
<div class="menusWrapper fl">
<a class="active" href="javascript:;">导航</a>
<a href="javascript:;">分享专区</a>
<a href="http://www.52tech.tech/forum-41-1.html">编程学习</a>
<a href="http://www.52tech.tech/forum-51-1.html">开源软件</a>
<a href="http://www.52tech.tech/forum-54-1.html">站点帮助</a>
</div>
<div class="ctnerWrapper">
<div class="ctnerBox">
<div id="cbox-1" class="cbox tl dn">
<div class="ctnerTab pr tc">
<a href="#" class="on">推荐导航</a>
</div>
<div class="myNavs rtNavs dn pt15">
</div>
<div class="hotNavs rtNavs dn oh pt15">
<div class="navTitle fl">热门话题</div>
<div class="navArea oh">
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=510&highlight=%B9%C8%B8%E8%E4%AF%C0%C0%C6%F7" target="_blank" title="谷歌所有历史版本浏览器下载"><img width="115" height="70"
src="images/101.png" alt="谷歌所有历史版本浏览器下载"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=458&highlight=%BF%C6%D1%A7%C9%CF%CD%F8" target="_blank" title="科学上网直达谷歌"><img width="115" height="70"
src="images/102.png" alt="科学上网直达谷歌"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=39&highlight=webgl" target="_blank" title="精品WEBGL视频教程"><img width="115" height="70"
src="images/103.png" alt="精品WEBGL视频教程"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=460&highlight=webgl" target="_blank" title="OPENGL从入门到精通视频教程"><img width="115" height="70"
src="images/104.png" alt="OPENGL从入门到精通视频教程"/></a>
<a href="http://www.52tech.tech/portal.php?mod=topic&topicid=1" target="_blank" title="VIP视频免费看策略"><img width="115" height="70" src="images/105.png"
alt="VIP视频免费看策略"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=629&highlight=java" target="_blank" title="JavaWeb全套视频教程"><img width="115" height="70"
src="images/106.png" alt="JavaWeb全套视频教程"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=586&highlight=WEB%C7%B0%B6%CB" target="_blank" title="Web前端视频教程"><img width="115" height="70"
src="images/107.png" alt="Web前端视频教程"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE" target="_blank" title="2018/2019全套考研视频教程"><img width="115" height="70"
src="images/108.png" alt="2019全套考研视频教程"/></a>
<a href="http://www.52tech.tech/forum-53-1.html" target="_blank" title="黑科技软件经验分享"><img width="115" height="70"
src="images/109.png" alt="黑科技软件经验分享"/></a>
<a href="http://www.52tech.tech/forum-41-1.html" target="_blank" title="我爱学习编程专区"><img width="115" height="70"
src="images/110.png" alt="我爱学习编程专区"/></a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=458&highlight=%BF%C6%D1%A7%C9%CF%CD%F8" target="_blank" title="时空隧道带你一起科学上网/VPN"><img width="115" height="70"
src="images/111.png" alt="时空隧道带你一起科学上网"/></a>
<a href="http://www.52tech.tech/thread-66-1-1.html" target="_blank" title="论坛常见问题解答"><img width="115" height="70"
src="images/112.png" alt="论坛常见问题解答"/></a>
</div>
</div>
</div>
<div id="cbox-2" class="cbox tl dn">
<div class="newsBox oh">
<div class="sliderBox fl">
<div class="slider">
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=39&highlight=webgl" target="_blank" class="picLink active">
<img width="425" height="260" src="images/news1.jpg" alt="WEBGL视频教程" title="目前全网最全面的WEBGL视频教程免费分享"/>
<span href="http://www.52tech.tech/forum.php?mod=viewthread&tid=39&highlight=webgl" target="_blank" class="picTitle">目前全网最全面的WEBGL视频教程免费分享！</span>
</a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=458&highlight=%BF%C6%D1%A7%C9%CF%CD%F8" target="_blank" class="picLink">
<img width="425" height="260" src="images/news2.jpg" alt="目前最新最好用的科学上网新突破方法" title="目前最新最好用的科学上网新突破方法"/>
<span href="http://www.52tech.tech/forum.php?mod=viewthread&tid=458&highlight=%BF%C6%D1%A7%C9%CF%CD%F8" target="_blank" class="picTitle">目前最新最好用的科学上网新突破方法【VPN持续更新】</span>
</a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE" target="_blank" class="picLink">
<img width="425" height="260" src="images/news3.jpg" alt="全国各高校的历年专业课考研真题复习资料大放送" title="全国各高校的历年专业课考研真题复习资料大放送"/>
<span href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE" target="_blank" class="picTitle">全国各高校的历年专业课考研真题复习资料大放送</span>
</a>
<a href="http://www.52tech.tech/forum.php?mod=viewthread&tid=460&highlight=webgl" target="_blank" class="picLink">
<img width="425" height="260" src="images/news4.jpg" alt="OPENGL和WEBGL开发原生三维游戏引擎资料推荐" title="OPENGL和WEBGL开发原生三维游戏引擎资料推荐"/>
<span href="http://www.52tech.tech/forum.php?mod=viewthread&tid=460&highlight=webgl" target="_blank" class="picTitle">OPENGL和WEBGL开发原生三维游戏引擎资料推荐 </span>
</a>
<a href="http://www.52tech.tech/portal.php?mod=topic&topicid=1" target="_blank" class="picLink">
<img width="425" height="260" src="images/news5.jpg" alt="以后再也不用会员就可以看VIP会员视频了" title="以后再也不用会员就可以免费看VIP会员视频了"/>
<span href="http://www.52tech.tech/portal.php?mod=topic&topicid=1" target="_blank" class="picTitle">所有人的福利--以后再也不用会员就可以免费看VIP会员视频了</span>
</a>
</div>
<div class="smallPics">
<a class="active"><img width="68" height="40" src="images/news1.jpg" alt=""/></a>
<a><img width="68" height="40" src="images/news2.jpg" alt=""/></a>
<a><img width="68" height="40" src="images/news3.jpg" alt=""/></a>
<a><img width="68" height="40" src="images/news4.jpg" alt=""/></a>
<a><img width="68" height="40" src="images/news5.jpg" alt=""/></a>
</div>
</div>
<div class="topic">
<div class="topicTop">
<span class="titleWords titleT on"><a href="javascript:;">搜索风云榜</a></span>
<span class="titleTopic titleT"><a href="javascript:;">热门话题</a></span>
<a class="changeWords" href="http://www.52tech.tech/thread-66-1-1.html">查看更多</a>
</div>
<div class="topicList">
<div class="wBox topicB dn">
<ul>
<li><a target="_blank" href="#">Discuz网站SEO优化</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=458&highlight=%BF%C6%D1%A7%C9%CF%CD%F8">科学上网工具...</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=39&highlight=webgl">WEBGL视频教程</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=460&highlight=webgl">OPENGL三维引擎</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE">高校专业课资料...</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=564&highlight=mysql">MySQL数据库+Oracle</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=563&highlight=html">HTML5最新基础到精通</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=21&highlight=%B0%B2%D7%BF">传智播客76期安卓视频</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=424&highlight=2048">《2048游戏》开发实例</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=6&highlight=xml">韩顺平XML教程</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=590&highlight=JoinMap">JoinMap4.0破解版软件</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=59&highlight=origin">origin8.0破解版软件</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=629&highlight=java">传智黑马训练营JAVA</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=625&highlight=%D1%EE%C7%BF">杨强主讲Linux环境高级...</a></li>
<li><a target="_blank" href="http://www.52tech.tech/portal.php?mod=topic&topicid=1">VIP视频免费看</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE">考研大礼包资料</a></li>
</ul>
</div>
<div class="tBox topicB dn">
<ul>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=39&highlight=webgl">二十七个WEBGL动态</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=405&highlight=%CD%F8%D2%D7">破解版网易云音乐</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=82&highlight=%BF%E1%B9%B7">酷狗音乐安卓版豪华VIP</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=56&highlight=vs">VS2017旗舰离线下载百度</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=198&highlight=vmva">Vmvare12最新版及系列</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=563&highlight=html5">一周HOLD住HTML5+CSS</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=31&highlight=ssm">动力节点王勇SSM教程</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=629&highlight=java">JAVAEE49期培训视频教程</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=607&highlight=thinking">ThinkinginC++PDF</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=623&highlight=%B0%D9%B6%C8%D4%C6">百度云加速文件清理</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=616&highlight=%CD%F2%C4%DC%C3%DC%C2%EB">万能密码查看器看密码</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=570&highlight=%B7%C7%B5%E7%C4%D4">非电脑人士管理电脑神器</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=2&highlight=%D7%A8%D2%B5%BF%CE">最新考研数学全网资料</a></li>
<li><a target="_blank" href="http://www.52tech.tech/portal.php?mod=topic&topicid=1">优酷/爱奇艺/腾讯VIP视频</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=23&highlight=qt">基于QT的开发实战</a></li>
<li><a target="_blank" href="http://www.52tech.tech/forum.php?mod=viewthread&tid=571&highlight=%B4%C5%C5%CC%BF%D5%BC%E4%D0%E1%CC%BD">SpaceSniffer磁盘空间嗅探</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer id="footer" class="tc">&#169;科技论坛 站内搜索 使用前必读</footer>
</div>
<script src="http://www.52tech.tech/template/dean_report_151222/deancss/js/jquery-1.8.3.min.js"></script>
<script src="http://www.52tech.tech/source/plugin/hl467_bdshare/js/jquery-1.11.1.min.js"></script>
<script src="js/jquery.autocomplete.min.js"></script>
<script>
$('.uname,.topMenus').hover(function () {
$('.topMenus').stop(true, true).fadeIn(200);
}, function () {
$('.topMenus').stop(true, true).delay(500).fadeOut(200);
});

//搜索框自动补全;
$('.searchIpt').AutoComplete({
'data': ,
'itemHeight': 24,
'width': 529
}).AutoComplete('show');

$('.ctnerTab a').click(function () {
if (!$(this).hasClass('on')) {
$('.ctnerTab a').removeClass('on').eq($(this).index()).addClass('on');
$('.rtNavs').stop(true, true).hide(200).eq($(this).index()).show(300);
}
});

$('.menusWrapper a').click(function () {
if (!$(this).hasClass('active')) {
$('.menusWrapper a').removeClass('active').eq($(this).index()).addClass('active');
$('.cbox').stop(true, true).animate({top: 318}, 100).hide().eq($(this).index()).animate({top: 0}, 400).show();
}
});

$('.smallPics a').click(function () {
if (!$(this).hasClass('active')) {
$('.smallPics a').removeClass('active').eq($(this).index()).addClass('active');
$('.picLink').stop(true, true).removeClass('active').eq($(this).index()).addClass('active');
}
});

$('.titleT').hover(function () {
if (!$(this).hasClass('on')) {
$('.titleT').removeClass('on').eq($(this).index()).addClass('on');
$('.topicB').stop(true, true).hide().eq($(this).index()).show();
}
});
</script>

<!-- 代码结束 -->
<div id="wimoban_p">
<p>我爱科技论坛：<a href="http://www.52tech.tech/portal.php" title="我爱科技论坛" alt="我爱科技论坛">（www.52tech.tech）</a></p>
<p>目前论坛包括考研资料、编程学习、黑科技/科学上网、开源软件等资源模块，竭力服务于正在学习道路上的每一个人。</p>
<p> 我爱科技论坛，爱科技，更爱分享。致力于营造一个资源丰富、内容完善的大型网络学习交流资源共享平台！</p>
<p></p>
</div>
</body>
</html>



common.css
这个样式也是极其重要的，页面做的好不好看，全靠这个样式表了：
@CHARSET "UTF-8";
/*
* @Description: common css
* @author:
* @Update: 2018-07-01
*/
body {
font: 12px/140% "Microsoft Yahei", "微软雅黑", 'Arial', 'san-serif';
background-color: #666666;
color: #666;
margin: 0;
padding: 0;
}

img {
max-width: 100%;
height: auto;
width: auto;
-ms-interpolation-mode: bicubic;
vertical-align: middle;
-moz-animation: fadein 350ms ease-out;
-webkit-animation: fadein 350ms ease-out;
-o-animation: fadein 350ms ease-out;
animation: fadein 350ms ease-out;
}

a, span, footer {
color: #fff;
}

p {
margin: 0;
}

ul {
margin: 0;
padding: 0;
}

li {
list-style: none;
}

a:focus {
outline: none;
}

/* animation */
@-webkit-keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

@-moz-keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

@-o-keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

@keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

/* ----------------------------------------------- */

/* 自定义样式 */
.fl {
float: left;
}

.fr {
float: right;
}

.oh {
overflow: hidden;
}

.tc {
text-align: center;
}

.tr {
text-align: right;
}

.tl {
text-align: left;
}

.dn {
display: none;
}

.db {
display: block;
}

.dib {
display: inline-block;
}

.cp {
cursor: pointer;
}

.f14 {
font-size: 14px;
}

.pt15 {
padding-top: 15px;
}

/* ----------------------------------------------- */

.skinBg {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: -10;
background-position: center 0;
background-size: cover;
background-attachment: fixed;
background-repeat: no-repeat;
}

#header {
padding: 14px 14px 0;
overflow: hidden;
}

#header span {
color: #fff;
text-shadow: 0 0 3px #333;
float: left;
line-height: 20px;
}

.weatherIcon {
width: 18px;
height: 18px;
display: inline-block;
vertical-align: middle;
margin-right: 5px;
}

.wI1 {
background: url('../images/a1.png');
}

#header span.polutionLevel {
color: #4CC74C;
font-weight: 700;
margin-left: 2px;
}

.sp {
padding: 0 5px;
}

.headNavs {
width: 800px;
}

.headNavs a {
padding-right: 5px;
text-decoration: none;
display: inline-block;
}

.headNavs a:hover span {
text-decoration: underline;
}

.topMenus {
padding-top: 6px;
position: absolute;
right: 20px;
top: 33px;
width: 90px;
z-index: 999;
}

.topMenus a {
background-color: #FFFFFF;
color: #0079F5;
display: block;
height: 25px;
line-height: 25px;
padding-left: 6px;
text-align: center;
text-decoration: none;
}

.topMenus a:hover {
background-color: #f1f8ff;
}

.arrowTop {
position: absolute;
top: -5px;
right: 20px;
width: 0;
height: 0;
border-width: 6px;
border-style: dashed dashed solid dashed;
border-color: transparent transparent #ffffff transparent;
}

.s-icon {
background: url('../images/spis4.png') no-repeat;
cursor: pointer;
width: 20px;
height: 20px;
display: inline-block;
margin-right: 3px;
}

.s-icon-treasure {
background-position: -12px -577px;
}

.s-icon-skin {
background-position: -42px -577px;
}

.s-icon-msg {
background-position: -228px -574px;
}

.s-icon-line {
background-position: -104px -577px;
width: 4px;
}

.user-arrow {
background: url('../images/spis4.png') no-repeat -707px -588px;
width: 10px;
height: 10px;
margin: 7px 0 0 4px;
display: inline-block;
}

.content {
padding: 0 0 30px;
width: 910px;
margin: -10px auto auto;
}

.mainNavs {
margin: 30px auto;
width: 620px;
text-align: left;
}

.mainNavs a {
font-size: 14px;
margin-left: 12px;
}

.logo img {
margin: 0 0 -15px;
}

.searchIpt {
width: 515px;
font-family: "微软雅黑";
border: 0 none;
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25);
-webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25);
height: 20px;
line-height: 20px;
padding: 10px 9px 10px 7px;
margin-right: 3px;
}

.btn {
background: #DDDDDD;
background: -moz-linear-gradient(top, #ffffff, #dddddd);
background: -webkit-linear-gradient(top, #ffffff, #dddddd);
background: linear-gradient(top, #ffffff, #dddddd);
border: 0 none;
font-size: 16px;
font-family: "微软雅黑";
height: 40px;
line-height: 40px;
padding: 0;
width: 105px;
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.35);
-webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.35);
}

.mainContents {
width: 910px;
margin: 80px auto auto;
}

.menusWrapper {
width: 80px;
height: 318px;
position: relative;
background-color: rgba(0, 0, 0, 0.2);
}

.menusWrapper a {
width: 80px;
height: 35px;
line-height: 35px;
display: block;
text-shadow: 0 0 5px #000000;
text-decoration: none;
font-size: 14px;
}

.menusWrapper a.active {
background: url(../images/menuBg.png) no-repeat;
}

.menusWrapper a:hover {
background-color: #000000;
opacity: 0.8;
filter: alpha(opacity=80);
}

.ctnerWrapper {
margin-left: 100px;
min-height: 318px;
height: auto !important;
height: 318px;
background: linear-gradient(rgba(255, 255, 255, 0.7) 0px, rgba(255, 255, 255, 0.7) 100%) repeat;
background: -moz-linear-gradient(rgba(255, 255, 255, 0.7) 0px, rgba(255, 255, 255, 0.7) 100%) repeat;
background: -webkit-linear-gradient(rgba(255, 255, 255, 0.7) 0px, rgba(255, 255, 255, 0.7) 100%) repeat;
background: -o-linear-gradient(rgba(255, 255, 255, 0.7) 0px, rgba(255, 255, 255, 0.7) 100%) repeat;
}

.ctnerTab {
border-bottom: 1px solid #E8E8E8;
height: 44px;
line-height: 44px;
}

.ctnerTab a {
text-decoration: none;
font-size: 14px;
color: #222;
width: 86px;
height: 44px;
line-height: 44px;
display: inline-block;
}

.ctnerTab a.on {
border-bottom: 2px solid #42A0FE;
font-weight: 700;
}

.ctnerBox {
height: 258px;
}

.cbox {
position: relative;
top: 0;
width: 811px;
}

#cbox-1 {
display: block;
}

.hotNavs {
width: 100%;
display: block;
}

.navTitle {
color: #999999;
height: 81px;
line-height: 16px;
padding: 4px 7px 0 20px;
text-align: left;
width: 20px;
}

.navArea {
margin-left: 50px;
}

.navArea a {
width: 150px;
height: 70px;
float: left;
display: inline-block;
border: 2px solid rgba(248, 248, 248, 0.7);
margin: 0 8px 12px 0;
background: #f8f8f8;
background: linear-gradient(rgba(248, 248, 248, 0.7) 0px, rgba(248, 248, 248, 0.7) 100%) repeat;
background: -moz-linear-gradient(rgba(248, 248, 248, 0.7) 0px, rgba(248, 248, 248, 0.7) 100%) repeat;
background: -webkit-linear-gradient(rgba(248, 248, 248, 0.7) 0px, rgba(248, 248, 248, 0.7) 100%) repeat;
background: -o-linear-gradient(rgba(248, 248, 248, 0.7) 0px, rgba(248, 248, 248, 0.7) 100%) repeat;
}

.navArea a:hover {
border: 2px solid #42A0FE;
}

.sliderBox {
width: 425px;
}

.picLink {
display: none;
width: 425px;
height: 260px;
position: relative;
}

.picLink.active {
display: block;
}

.picTitle {
width: 100%;
padding: 4px 0;
height: 18px;
line-height: 18px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
font-size: 14px;
text-indent: 14px;
position: absolute;
bottom: 0;
left: 0;
background-color: #000000;
opacity: 0.4;
filter: alpha(opacity=40);
}

.smallPics {
background-color: #191919;
padding: 8px 0 0 15px;
height: 50px;
overflow: hidden;
position: relative;
white-space: nowrap;
}

.smallPics a {
width: 78px;
cursor: pointer;
transition: opacity 500ms ease 0s;
-webkit-transition: opacity 500ms ease 0s;
-moz-transition: opacity 500ms ease 0s;
opacity: 0.5;
filter: alpha(opacity=50);
text-align: left;
position: relative;
display: inline-block;
}

.smallPics a:hover, .smallPics a.active {
opacity: 1;
filter: alpha(opacity=100);
}

.smallPics a.active img {
border: 1px solid #389CFF;
}

.topic {
margin-left: 445px;
padding-top: 20px;
}

.topicTop {
border-bottom: 1px solid #389CFF;
height: 28px;
line-height: 28px;
position: relative;
}

.titleT {
background-color: rgba(0, 0, 0, 0);
color: #222;
width: 100px;
text-align: center;
height: 28px;
cursor: pointer;
font-size: 14px;
display: inline-block;
}

.titleT a {
color: #222;
}

.titleT.on {
background-color: #389CFF;
}

.titleT.on a {
color: #fff;
}

.titleWords a, .titleTopic a {
text-decoration: none;
}

.changeWords {
color: #222;
position: absolute;
right: 22px;
text-decoration: none;
}

.topicList {
height: 240px;
padding-top: 10px;
width: 349px;
}

.topicList li {
list-style: square inside;
font-size: 6px;
float: left;
height: 30px;
line-height: 30px;
margin-right: 4px;
text-overflow: ellipsis;
white-space: nowrap;
width: 170px;
}

.topicList li a {
font-size: 14px;
color: #222;
text-decoration: none;
}

.topicList li a:hover {
color: #389CFF;
text-decoration: underline;
}

.wBox {
display: block;
}

/* autocomplete */
div.ac {
border: 1px solid #ccc;
position: absolute;
display: none;
overflow: auto;
background-color: #ffffff;
}

div.ac > ul > li {
word-break: break-all;
}

div.ac > ul > li > div {
display: table-row;
width: 100%;
}

div.ac > ul > li > div em {
color: #333;
font-style: normal;
}

div.ac > ul > li.normal {
padding: 2px 0px 2px 5px;
}

div.ac > ul > li.normal > div > span, div.ac > ul > li.iconList > div > span {
display: table-cell;
vertical-align: middle;
color: #333;
}

div.ac > ul > li.iconList {
padding: 0px 0px 0px 2px;
}

div.ac > ul > li.iconList > div > div {
display: table-cell;
vertical-align: middle;
padding-right: 5px;
}

div.ac > ul > li.iconList > div > div > img {
display: table;
display: table-cell \9;
}

div.ac > ul > li.selected {
background-color: #eeeeee;
}



这个项目的测试已经在本站开放了，大家可以去测试查看，
测试地址：http://www.52tech.tech/res/52search/

]]></description><link>https://blog.gaoredu.com/article/4c718ffd-b793-4f9e-801d-4a110fa730e1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4c718ffd-b793-4f9e-801d-4a110fa730e1</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 30 Jun 2018 22:53:04 GMT</pubDate></item><item><title><![CDATA[2018年传智播客黑马训练营JAVAEE49期培训视频教程百度云盘分享下载]]></title><description><![CDATA[JAVAEE49期培训视频教程目录如下：


654



04-JavaWeb知识(学习12天)
day01_XML&tomcat
day02_HTTP&Servlet
day03_HTTPServletReauest和HTTPServletResponse
day04Cookie&Session
day05-JSP&EL&JSTL
day06-事务&数据库连接池&DBUtiles
day07-MVC设计模式
day08-Ajax&Jquery
day09-Listener&Filter
day10-基础加强
day11-Linux
day12-软件安装&redis入门


05-JavaWeb企业实战项目(学习6天)
day06__6天项目后天模块二
day05__6天项目后台模块一
day04__6天项目订单模块
day03__6天项目商品模块
day02__6天项目用户登录-首页分类
day01__6天项目环境搭建-用户注册-邮件发送



06-Hibernate框架(学习4天)
07-Struts框架(学习4天)
08-Spring框架(学习4天)
1网站前台分析
2广告类型与广告管理
3网站首页-广告展示
4SpringDataRedis简介
5网站首页-缓存广告数据


09-SSH企业案例_CRM-客户管理系统(6天)
10-Oracle数据库(学习4天)
11-Maven(学习2天)
12-SSH企业案例2_ERP_项目整合(学习15天)
13-Mybatis(学习2天)
14-SpringMVC(学习2天)
15-SSM企业案例-客户管理系统(学习1天)
16-SSM分布式案例-互联网商城(学习14天)
17品优购电商系统开发




下载链接：链接：https://pan.baidu.com/s/18ZnKK5lHry_tQBZJf96vEg 密码：r0n8

]]></description><link>https://blog.gaoredu.com/article/55a81661-9670-4974-88e9-9fd45808dc8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/55a81661-9670-4974-88e9-9fd45808dc8d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 30 Jun 2018 01:37:55 GMT</pubDate></item><item><title><![CDATA[使用移动安全自动渗透测试框架Mobile Security Framework检测APK漏洞]]></title><description><![CDATA[Mobile Security Framework是一款可以用来对Android、iOS和Windows端移动应用，进行快速高效的安全分析的工具，同时也是一款移动APP安全渗透测试工具，并可以用来探测移动APP的安全漏洞。
650

这款框架的核心功能如下：
静态分析（接近静态扫描，上传安装文件自行扫描）
动态分析
WEB API 模糊测试（Fuzzer）

652
由于这款程序是基于Python的，因此我们需要先来配置环境，首先确保你的电脑已经安装了Python2.7的环境，然后就可以使用Pip命令来安装依赖包：


使用pip命令安装MobSF的Python环境Windows安装命令如下：C:\Python27\python.exe -m pip install -rrequirements.txt
Mac系统的安装命令如下：pip install -r requirements.txt --user
Linux系统的安装命令如下：sudo apt install build-essential libssl-devlibffi-dev python-devpip install -r requirements.txt --user然后就可以运行MobSF了，也是直接通过Python环境运行即可：python manage.py runserver

651

这个工具软件运行后的界面如下：
653




下载地址
最新版MobSF（GitHub）地址：https://github.com/MobSF/Mobile-Security-Framework-MobSF/releasesMobSF Android x86 4.4.2 VM(v0.3) ova文件（Google Drive）文件地址：https://goo.gl/QxgHZa百度云盘下载地址：链接：https://pan.baidu.com/s/1SD8xzVJCubtwsaq3k0D7jA 密码：7a61
]]></description><link>https://blog.gaoredu.com/article/b7fb9cce-afc9-4517-8a33-26a58f37480f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b7fb9cce-afc9-4517-8a33-26a58f37480f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 30 Jun 2018 01:23:35 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Thinking in C++中文PDF 电子版下载]]></title><description><![CDATA[581


书籍目录：
hapter 1: 关于对象（Introduction to Objects）。
Chapter 2: 构造和使用对象（Making and Using Objects）。
Chapter 3: C++中的C（The C in C++）。
Chapter 4: 数据抽象（Data Abstraction）。
Chapter 5: 实现隐藏（Hiding the Implementation）。
Chapter 6: 初始化和清除（Initialization and Cleanup）。
Chapter 7: 函数重载和缺省参数（Function Overloading and Default Arguments）。
Chapter 8: 常量（Constants）。
Chapter 9: 内联函数（Inline Functions）。
Chapter 10: 名字控制（Name Control）。
Chapter 11: 引用和复制构造函数（References and the Copy-Constructor）。
Chapter 12: 运算符重载（Operator Overloading）。
Chapter 13: 动态对象创建（Dynamic Object Creation）。
Chapter 14: 继承和组合（Inheritance and Composition）。
Chapter 15: 多态性和虚函数（Polymorphism and virtual Functions）。
Chapter 16: 模板的介绍（Introduction to Templates）。


下载链接：链接: https://pan.baidu.com/s/197SbhWwy6bPy9MxvjifZOQ 密码: figb

]]></description><link>https://blog.gaoredu.com/article/5dd30b8d-e3d0-49bd-92e1-03ec247acbae</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5dd30b8d-e3d0-49bd-92e1-03ec247acbae</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 29 Jun 2018 18:02:36 GMT</pubDate></item><item><title><![CDATA[【JavaScript框架封装】深入理解原型链中的prototype、__proto__和constructor的关系]]></title><description><![CDATA[JavaScript中的原型链也算是JavaScript中的一个高级话题，一直以来对这块的知识理解地不是特别深刻，现再记录一下这块的学习笔记：
1.从最简单的代码开始：三行代码引出js中的高级话题
<font size="4">function Foo(){};
var foo = new Foo();

</font>2.我们首先看一下这两行代码在JavaScript中的关系：
641


3.深入剖析：
这两行代码实际上包含了以下三个过程：
3.1：当我们创建一个自定义的函数Foo，该函数就会自动创建一个prototype属性，这个属性指向函数的原型对象；
3.2：原型对象会默认去取得constructor属性，指向构造函数。


第一行代码实际上发生了以上两个过程，我的理解如下：
父类（原型对象）的constructor属性指向子类对象（函数），子类的prototye属性指向了父类（原型对象），这里的原型对象可以表示为Foo.prototype。


3.3：当调用构造函数创建一个新实例foo后，该实例的内部将包含一个指针__proto__，指向构造函数的原型对象。

第二行代码执行后，实际上发生了第三个过程，我的理解如下：
每一个实例对象都有一个__proto__属性（指针），这个属性指向了父类（原型对象），而父类（原型对象）的constructor属性指向了子类（函数），而子类（函数）的prototye属性指向了父类对象。


4.现在来梳理任意一个实例，函数与Object这个对象的关系：
我的理解如下：
只要创建了一个Object,这个就会默认有一个protype属性，这个属性指向了Object的原型对象，而Object的原型对象默认会有一个constructor属性，这个属性指向了Object，但是Object的原型对象已经是原型链的最根部了，所以它没有__proto__属性。因此Object的原型对象的__proto__指针指向为null.

函数看做是一个对象以后，其构造函数就是Function()，原型对象就是Function的原型对象，Object函数看作实例对象的话，其构造函数就是Function()，原型对象是Function的原型对象
也就是函数的原型对象是：Function.prototype, Object的原型对象是：Object.protype


其他核心测试代码如下：<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    /*如何识别一个对象是什么类型的呢？*/


    // 每一个原型都有自己的prototype都有自己的constructor和toString()方法
    console.log(Object.prototype.toString.call("jerry"));//
    console.log(Object.prototype.toString.call(12));//
    console.log(Object.prototype.toString.call(true));//
    console.log(Object.prototype.toString.call(undefined));//
    console.log(Object.prototype.toString.call(null));//
    console.log(Object.prototype.toString.call({name: "jerry"}));//
    console.log(Object.prototype.toString.call(function () {
    }));//
    console.log(Object.prototype.toString.call());//
    console.log(Object.prototype.toString.call(new Date));//
    console.log(Object.prototype.toString.call(/\d/));//
    /**
     * 构造函数
     * @constructor
     */
    function Person() {
    };
    console.log(Object.prototype.toString.call(new Person));//


    console.log("jerry".toString());//jerry
    console.log((1).toString());//1
    console.log(.toString());//1,2
    console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
    console.log(function () {
    }.toString());//function (){}
    //console.log(null.toString());//error
    //console.log(undefined.toString());//error


    /*
    *  这是因为toString为Object的原型方法，
    *  而Array ，function等类型作为Object的实例，都重写了toString方法。
    *  不同的对象类型调用toString方法时，
    *  根据原型链的知识，调用的是对应的重写之后的toString方法（function类型返回内容为函数体的字符串，Array类型返回元素组成的字符串.....），
    *  而不会去调用Object上原型toString方法（返回对象的具体类型），
    *  所以采用obj.toString()不能得到其对象类型，只能将obj转换为字符串类型；因此，在想要得到对象的具体类型时，应该调用Object上原型toString方法。
    *
    * */

    obj = new Array();
    // 所有的对象实际上是没有自己的toString()方法的，但是由于js中的原型链，导致了每一个对象都有自己的toString()方法，如果直接调用obj.toString()方法
    // 会直接把数组里面的所有元素打印出来，如果要检测一个对象是不是数组类型， 需要使用Object的toString()犯法来检测
    console.log(Object.prototype.toString.call(obj)) === '';



    var arr = ;
    console.log(Array.prototype.hasOwnProperty("toString"));//true
    console.log(arr.toString());//1,2,3
    delete Array.prototype.toString;//delete操作符可以删除实例属性
    console.log(Array.prototype.hasOwnProperty("toString"));//false
    console.log(arr.toString());//""


    // 通过原型链判断是不是数组类型【原理？】
    function Foo() {

    }

    console.log(Foo.prototype.constructor); // prototype指向了他的原型对象，这个原型对象有一个constructor属性，这个属性指向了他的构造函数

    console.log(Foo.prototype);     // 每一个Foo都有一个prototype属性，这个属性指向了Foo的原型对象


    var foo = new Foo();
    console.log(foo.constructor == Foo);        // true: foo.constructor指向了他的构造函数（其实就是Foo这个函数）
    console.log(foo.hasOwnProperty('constructor'));  // false: foo本身是没有constructor这个属性的，这个属性实际上是继承于父类的
    console.log(foo.__proto__);             // 每一个foo的实例都有一个__proto__属性，这个属性指向了他的原型对象（Object）


    /*function Object() {

    }
    obj = new Object();
    console.log(obj.__proto__);*/             // 指向了他的原型对象

    console.log(Object.prototype.constructor);
    console.log(Object.prototype.__proto__);   // null, 由于Object是js内置的根部， __proto__指向了他的原型对象，他的原型对象实际上为null
    console.log(Object.prototype);    // 这是Object的原型对象，但是这个原型对象里面已经没有__proto__属性了


    // Valueof() 和 toString()的使用详解-------------------------------------------------
    // valueOf()方法会将对象转换为基本类型，如果无法转换为基本类型，则返回原对象
    var obj = new Boolean(true);
    console.log(obj.valueOf());//true
    console.log(typeof obj.valueOf());//boolean
    //如果是包装类型的基本类型，则返回原基本类型值
    var a = true;
    console.log(a.valueOf());//true
    console.log(typeof a.valueOf());//boolean

    /*
    * valueOf()用法小结：
        1）undefined和null没有此方法（基本类型肯定没有方法，String、Number和Boolean是因为有对应的基本包装类型，才可以调用方法）；
        2）基本包装类型和对应的基本类型，调用valueOf()返回对应的基本类型值；
        3）对象类型（除Date类型）返回原对象；
        4）Date类型返回表示日期的毫秒数
    * */


    // oSting()方法返回返回对象的字符串表现-----------------------------------------
    /*
    * 如果是基本包装类型对应的基本类型，会返回原值。但这并不代表基本类型拥有toString()方法（基本类型不是对象，不拥有任何方法），而是在读取一个基本类型值时，后台会创建一个对应的基本包装类型的对象，从而调用一些方法。所以，基本类型“调用”toString()方法时，实际上是先创建了一个对应的基本包装类型，由此基本包装类型调用toString()最后返回了其对应的字符串，看起来就好像是基本类型调用了toString()方法而得到了对应的字符串。
    *
    *
    *
    *
    * 【小结】：

        1）undefined和null没有此方法（基本类型肯定没有方法，String、Number和Boolean是因为有对应的基本包装类型，才可以调用方法）；
        2）Date类型返回表示时间的字符串；
        3）Object类型返回字符串“”。



        【与valueOf()对比】
        1）toString()和valueOf()的主要不同点在于，toString()返回的是字符串，而valueOf()返回的是原对象
        2）由于undefined和null不是对象，所以它们toString()和valueOf()两个方法都没有
        3）数值Number类型的toString()方法可以接收转换基数，返回不同进制的字符串形式的数值；而valueOf()方法无法接受转换基数
        4）时间Date类型的toString()方法返回的表示时间的字符串表示；而valueOf()方法返回的是现在到1970年1月1日00:00:00的数值类型的毫秒数
        5）包装对象的valueOf()方法返回该包装对象对应的原始值



        【与转型函数String()函数的对比】
        toString()和String()都是将数据转换为对应的字符串，有如下区别：
        1）String()可以将任何类型的值转换为字符串，包括undefined和null；
        console.log(String(null));//"null"
        console.log(String(undefined));//"undefined"
        2）String()不能接受数值基数作为参数
    *
    * */




    // call和apply的使用方法总结-----------------------------------------------------------------
    window.color = 'red';
    document.color = 'yellow';

    var s1 = {color: 'blue' };
    function changeColor(){
        console.log(this.color);
    }


    // 注意call()里面传递的参数，就会把这个参数传给调用的函数，此时调用函数的内部里面的this实际上指向了传递过来的这个参数对象
    changeColor.call();         //red (默认传递参数)
    changeColor.call(window);   //red
    changeColor.call(document); //yellow
    changeColor.call(this);     //red
    changeColor.call(s1);       //blue



    window.firstName = "Cynthia";
    window.lastName = "_xie";

    var myObject = {firstName:'my', lastName:'Object'};

    function getName(){
        // 这个函数内部的this默认指向的是window,通过call和apply可以间接修改这个this的指向
        console.log(this.firstName + this.lastName);
    }

    function getMessage(sex,age){
        console.log(this.firstName + this.lastName + " 性别: " + sex + " age: " + age );
    }

    getName.call(window); // Cynthia_xie
    getName.call(myObject); // myObject

    getName.apply(window); // Cynthia_xie
    getName.apply(myObject);// myObject

    getMessage.call(window,"女",21); //Cynthia_xie 性别: 女 age: 21
    getMessage.apply(window,); // Cynthia_xie 性别: 女 age: 21

    getMessage.call(myObject,"未知",22); //myObject 性别: 未知 age: 22
    getMessage.apply(myObject,); // myObject 性别: 未知 age: 22


    /*apply()方法 接收两个参数，一个是函数运行的作用域（this），另一个是参数数组。
        语法：apply( ]);，调用一个对象的一个方法，2另一个对象替换当前对象。

        说明：如果argArray不是一个有效数组或不是arguments对象，那么将导致一个
        TypeError，如果没有提供argArray和thisObj任何一个参数，那么Global对象将用作thisObj。

        call()方法 第一个参数和apply()方法的一样，但是传递给函数的参数必须列举出来。
        语法：call(]]]);，应用某一对象的一个方法，用另一个对象替换当前对象。

        说明： call方法可以用来代替另一个对象调用一个方法，call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象，如果没有提供thisObj参数，那么Global对象被用于thisObj。
    *
    *
    * */


    function isArray(obj) {
        // 注意这里的object是小写的哈，否则是检测不出来的哈
        return Object.prototype.toString.call(obj) === ''
    }

    obj2 = new Array();

    console.log(isArray(obj2));         // false
    console.log(Object.prototype.toString.apply(obj2));         // 使用apply方法同样是可以检测的哈




    //数据类型的检测测试--------------------------------------------------------------
    /**
     * 数据类型检测工具包
     * @constructor
     */
    MyTools = function () {

    }

    MyTools.prototype = {
        isStringByApply : function (obj) {
            return Object.prototype.toString.apply(obj) === ''
        },
        isArrayByCall : function (obj) {
            return Object.prototype.toString.call(obj) === ''
        },
        isStringByConstructor : function (obj) {
            return obj.constructor === String
        },
        isBooleanByTypeOf : function (obj) {
            return typeof obj === 'boolean'
        }

    }


    // 对json格式的深入理解
    // 测试结果：json中存储数据的时候，key必须是唯一的，否则后面的会覆盖掉前面的内容哈
    var jsonObject = {
        name : 'xiuxiu',
        age : 15,
        name : 'xiugang'
    }
    console.log(jsonObject);
</script>
</body>
</html>



]]></description><link>https://blog.gaoredu.com/article/42b58d95-68d9-48fa-bcd4-cc1cb574db75</link><guid isPermaLink="true">https://blog.gaoredu.com/article/42b58d95-68d9-48fa-bcd4-cc1cb574db75</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 29 Jun 2018 02:59:43 GMT</pubDate></item><item><title><![CDATA[杨强主讲Linux环境高级编程视频教程资料分享]]></title><description><![CDATA[本视频教程的视频目录如下， 视频总集数是20集，涉及到了Linux的基础到进阶部分的教程，适合想深入进阶Linux环境下的大佬学习：

640


01_linux高级编程_杨强_day08AM_共享内存_消息队列_socket


02_linux高级编程_杨强_day08PM_Socket编程模型


03_linux高级编程_杨强_day09AM_信号量同步_socket网络编程基础


04_linux高级编程_杨强_day09PM_TCP_UDP


05_linux高级编程_杨强_day10AM_TCP编程模型_TCP通信特点


06_linux高级编程_杨强_day10PM_TCP编程模型_TCP多进程服务器


07_linux高级编程_杨强_day11AM_select_TCP编程模型


08_linux高级编程_杨强_day11PM_Socket选项_OOB_HTTP协议


09_linux高级编程_杨强_day12AM_多线程概念_互斥锁


10_linux高级编程_杨强_day12PM_多线程同步_信号_条件量_信号量


11_linux高级编程_杨强_day13AM_线程信号量_读写锁_QT入门


12_linux高级编程_杨强_day13PM_QT基本编程步骤_UI设计


13_linux高级编程_杨强_day14AM_QT信号槽


14_linux高级编程_杨强_day14PM_QT信号槽_类继承结构_窗体类结构


15_linux高级编程_杨强_day15AM_QT可视化组件_QPaint


16_linux高级编程_杨强_day15PM_QT可视化组件_应用


17_linux高级编程_杨强_day16AM_应用_聊天程序


18_linux高级编程_杨强_day16PM_应用_聊天程序


19_linux高级编程_杨强_day17PM_补课_pcap_数据采集项目启动


20_linux高级编程_杨强_day07PM_IPC_管道_匿名管道






此外，还包括Linux环境Shell编程的教程,基本上是比较完整的一套了，就分享给大家哈：
639




视频教程下载链接：https://pan.baidu.com/s/1jGY5kN0#list/path=%2F
密码：ndnf
]]></description><link>https://blog.gaoredu.com/article/5dc6b240-381c-4897-b3e2-094198c18261</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5dc6b240-381c-4897-b3e2-094198c18261</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 28 Jun 2018 03:02:49 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---C++STL源码剖析（侯捷版本）PDF 电子版下载]]></title><description><![CDATA[583


书籍目录：
疱丁解牛（侯捷自序）
目录
前言
第1章 STL概论与版本简介
第2章 空间配置器（allocator）
第3章 迭代器（iterators）概念与traits编程技法
第4章 序列式容器（sequence containers）
第5章 关联式容器（associattive containers）
第6章 算法（algorithms）
第7章 仿函数（functors，另名 函数对象function objects）
第8章 配接器（adapters）
附录A 参考书籍与推荐读物
附录B 候捷网站（本书支持站点简介）
附录C STLPort 的移植经验（by孟岩）
索引


下载链接：链接: https://pan.baidu.com/s/1sHkQvwHU9f8Xnh8uV3cJ1g 密码: nwz7

]]></description><link>https://blog.gaoredu.com/article/7b1a7e78-4f93-4b7d-82fb-e4e58be5d69e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7b1a7e78-4f93-4b7d-82fb-e4e58be5d69e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 28 Jun 2018 03:00:16 GMT</pubDate></item><item><title><![CDATA[大名鼎鼎的多线程下载工具aria2源码分享]]></title><description><![CDATA[1.aria2是一款轻量级的多协议和多源，跨平台下载工具，在命令行中运行。它支持HTTP / HTTPS，FTP，SFTP，BitTorrent和Metalink， 是一个超快速的下载工具。

638


目前支持的功能有：

命令行界面
通过HTTP（S）/ FTP / SFTP / BitTorrent下载文件
分段下载
Metalink / HTTP（RFC 6249）支持
HTTP / 1.1实现
HTTP代理支持
HTTP BASIC认证支持
HTTP代理身份验证支持
使用HTTPS中的给定可信CA证书验证对等体
HTTPS中的客户端证书身份验证
通过HTTP代理的FTP / SFTP
下载/上传速度限制
JSON-RPC（通过HTTP和WebSocket）/ XML-RPC接口
作为守护进程运行
在多文件洪流/ Metalink中进行选择性下载
Metalink中的块校验和验证
下载在文本文件或标准输入中找到的URI，并且可以选择指定目标目录和输出文件名
参数化的URI支持
IPv6支持与Happy Eyeballs
磁盘缓存以减少磁盘活动
目前可以编译生成Windows的版本，以及Android下面运行 的版本环境。



2.Android NDK Clang的编译配置如下：
<font size="4">if ; then
    echo 'No $ANDROID_HOME specified.'
    exit 1
fi
PREFIX=$ANDROID_HOME/usr/local
TOOLCHAIN=$ANDROID_HOME/toolchain
PATH=$TOOLCHAIN/bin:$PATH

./configure \
    --host=arm-linux-androideabi \
    --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
    --disable-nls \
    --without-gnutls \
    --with-openssl \
    --without-sqlite3 \
    --without-libxml2 \
    --with-libexpat \
    --with-libcares \
    --with-libz \
    --with-libssh2 \
    CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
    CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
    CXXFLAGS="-Os -g" \
    CFLAGS="-Os -g" \
    CPPFLAGS="-fPIE" \
    LDFLAGS="-fPIE -pie -L$PREFIX/lib" \
    PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig"</font>

3.源代码的获取方式：
在电脑端安装Git工具后，运行命令：
 git clone https://github.com/aria2/aria2.git
即可把源代码下载到本地！，源码目前已经开源到GitHub上面！
具体的代码构建方式及详细的使用说明也可以参见源码的作者：https://github.com/aria2/aria2

]]></description><link>https://blog.gaoredu.com/article/0fbbe839-3b19-461c-8f61-b95497de9596</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0fbbe839-3b19-461c-8f61-b95497de9596</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 27 Jun 2018 21:03:35 GMT</pubDate></item><item><title><![CDATA[使用一款黑科技软件YunDownload破解百度云下载加速文件清理重复文件删除等功能]]></title><description><![CDATA[1.软件名称：YunDownload破解版软件
2.软件的特色功能：
主要有扫描重复文件、和谐文件、空文件夹等软件功能，当前软件已经更新了很多次了，也都是基于好几个GitHub上面的开源项目开发的
636


3.不管你是不是会员，都可以完美支持下面的功能，快去试下这个黑科技软件的新功能！


637


4.开发环境：
https://github.com/GangZhuo/BaiduPCS_NET (BaiduPCS 项目的 .net 4.0 封装)
https://github.com/GangZhuo/BaiduPCS (百度网盘命令行工具)
https://github.com/aria2/aria2 (大名鼎鼎的多线程下载工具)
https://github.com/isRight/Aria2-CSharp （C#封装的Ari2c接口）
https://github.com/mayswind/AriaNg （Ari2c的webui）
https://github.com/weolar/miniblink49 （一个小巧、轻量的浏览器内核）

这个软件主要是基于以上6个GitHub上面的开源项目进行开发的，主要开发语言是C#，感兴趣的朋友可以下载以上几个开源项目进行二次开发，不断优化这个项目！

YunDownload，非VIP可以享受到的百度云盘VIP权限功能！
下载链接：https://www.lanzous.com/i1a9dzi

]]></description><link>https://blog.gaoredu.com/article/679d743d-ecdc-4468-b614-b91d6693385a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/679d743d-ecdc-4468-b614-b91d6693385a</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 27 Jun 2018 01:33:27 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Effective STL中文 PDF电子版下载]]></title><description><![CDATA[584


书籍目录：
第1章 容器 
第2章 vector和string 
第3章 关联容器 
第4章 迭代器 
第5章 算法 
第6章 函数子、函数子类、函数及其他 
第7章 在程序中使用STL


下载链接：链接: https://pan.baidu.com/s/1WSfRFPKj_nNu9GI0Oekppw 密码: zhbr
]]></description><link>https://blog.gaoredu.com/article/a3af3734-35bf-4d21-9514-be66f68370fc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a3af3734-35bf-4d21-9514-be66f68370fc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Jun 2018 18:01:09 GMT</pubDate></item><item><title><![CDATA[GIF动画制作软件 V4.23汉化绿色版软件免费下载]]></title><description><![CDATA[GIF动画制作软件可以处理背景透明化而且做法容易，也可以把做好的图片存成GIF的动画图外，还可支援PSD，JPEG，AVI，BMP，GIF，与AVI格式输出。


576



GIF动画制作软件 V4.23汉化绿色版http://pan.baidu.com/s/1BXVRYdg71

]]></description><link>https://blog.gaoredu.com/article/1cf3ff6e-4144-4e1b-ab55-fe60a422d531</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1cf3ff6e-4144-4e1b-ab55-fe60a422d531</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Jun 2018 01:02:53 GMT</pubDate></item><item><title><![CDATA[教你使用黑科技来开发一个类似于QQ空间的QQ账号密码盗号项目]]></title><description><![CDATA[1.以前一直在看网上好多人在使用QQ钓鱼网站，一直不知道内部的实现原理是怎样的，带着好奇心于是使用一些黑科技技术去开发了一个QQ空间盗号项目，才对这个盗号的内部原理有了更深的理解，现把这个项目的实现步骤公布如下，废话不多说，先来看一下实现后的最终效果哈。

这个是最终的效果图：
629






2. 我们来测试一下看，能不能使用这个高仿版本的QQ空间登录页截获到用户的QQ用户名和密码？？？
我们首先按照我么一般登录QQ空间或者QQ邮箱的方式哈，直接输入用户名QQ账号，和密码，然后点击登录按钮。

631


3.点击登录后的效果如下，我们看到弹出来一个对话框，而里面已经把我们的QQ账号和密码已经成功拦截了，而且最重要的是截获到的是明文密码，当然这个只是实现了拦截密码的基本操作，至于后期的把截获到的密码发送到咱么自己的服务器也有很多方式，这里也仅仅是测试一下效果哈。

632



4.然后我们看下还有什么提示，我们发现竟然上面提示的是你输入的用户名或密码错误，请重新输入。其实这里的处理基本上是不管用户输入的全部正确或者全部错误，基本上都会有这个提示，就当用户还在绞尽脑汁的想自己的密码的时候，殊不知密码和账号已经被拦截到了。下面我们来看下代码：
首先我这里使用了两个文件，一个是Login.html， 一个是qq.html。

633



5.qq.html文件就是QQ空间的整个页面，但是这里使用的是把login.html分开出来了，因为这样也更方便地便于我们开发，然后在qq.html文件使用<iframe>标签的方式把login.html文件嵌入到这个主界面里面，具体的代码位置如下：

634

6.至于login.html其实就是对输入用户名和密码的那一块进行了处理，核心代码在后面也会一并放出去，欢迎大家下载，这一块的Html代码如下：


635

<font size="5"><font size="4"><body data-feedly-mini="yes">
<div class="login_form">
    <div id="top">
        <div class="title">账号密码登录</div>
        <div class="info">推荐使用<a href="#">快速安全登录</a>，防止盗号。</div>
        <div class="error">
            <span id="errorSpan">你输入的账号或密码不正确，请重新输入。</span>
        </div>
    </div>
    <div id="middle">
        <form id="loginform" autocomplete="off" name="loginform" action="" method="post" target="0" style="margin:0px;">
            <div class="uinArea" id="uinArea">
                <input type="text" id="username" value="支持QQ号/邮箱/手机号登录">

            </div>

            <div class="pwdArea" id="pwdArea">
                <input type="text" value="密码" id="pwd">
            </div>

            <div class="submit">
                <a class="login_button" href="javascript:void(0);" hidefocus="true">
                    <input type="button" tabindex="6" value="登 录" class="btn" id="login_button">
                </a>
            </div>
        </form>
    </div>


    <div id="bottom" style="display: block;">
        <a href="https://ssl.ptlogin2.qq.com/ptui_forgetpwd" class="link" id="forgetpwd" target="_blank">忘了密码？</a>
        <span class="dotted">|</span>
        <a href="https://qzs.qq.com/qzone/v6/reg/index.html" class="link" target="_blank">注册新帐号</a>
        <span class="dotted">|</span>
        <a class="link" id="feedback_web" href="https://support.qq.com/products/14800"
           target="_blank">意见反馈</a>
    </div>

</div>
</body></font></font>7.其他的部分就是利用JavaScript语言对用户的输出进行处理了，最后获取QQ用户名密码到自己的的服务器的思路有以下几种，供大家借鉴哈：
7.1 使用ajax请求方式向自己的服务器发送请求，然后在请求参数中把QQ账号和密码传过去就行了，这里可以使用POST或者GET方式进行传参
7.2 如果自己的是PHP服务器，可以使用一个Form表单进行传参，传参后把截获到的QQ账号和密码存储在服务器即可
7.3 同时也可以使用一些服务器发送邮件的方式，直接发送到有效信息到咱们的指定邮箱即可


最后我们再来看下一下腾讯官方的QQ空间登录界面，看你能找到咱们使用的这个黑科技和它有什么不同吗？？？

630


本站以及开通了本地测试，查看地址：http://www.52tech.tech/res/52qq/qq.html
QQ盗号项目下载链接：链接：https://share.weiyun.com/5ecofYP 密码：ypp6as
]]></description><link>https://blog.gaoredu.com/article/1588a157-95be-432a-89b5-d6e4c0628b27</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1588a157-95be-432a-89b5-d6e4c0628b27</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Jun 2018 21:27:14 GMT</pubDate></item><item><title><![CDATA[Office 2013版本windows软件离线下载安装版]]></title><description><![CDATA[575


软件主要功能


　　1、触控、笔控，支持滑动文件、两指缩放等大家习以为常的触控操作，也支持手写自动转换文字。


　　2、新的Win8 App， 内含OneNote和Lync两个专为Win8设计的App。


　　3、Windows RT 版，Word、Excel、PowerPoint、OneNote 四个软件都有 RT版。


　　4、Skype，内置Skype的功能，方便合作。


　　5、编辑PDF文件，在Word2013中，用户可以直接打开和编辑PDF文件，无需将其转换为另一种格式。


　　6、演说者画面（PowerPoint），PowerPoint中的新任务窗格在屏幕上显示格式化功能，用户可以轻松对其进行访问。


　　7、Office2013拥有简洁Metro UI界面，减少了功能区的Ribbon，为编辑内容区提供的更大的空间，以助于用户更加专注于内容，让工作变得更加高效。




软件下载链接:

office 2013软件http://pan.baidu.com/s/11i81U8hj4


]]></description><link>https://blog.gaoredu.com/article/0219b820-19f6-4783-97ed-675f7a561c6d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0219b820-19f6-4783-97ed-675f7a561c6d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Jun 2018 18:04:24 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---深度探索C++对象模型 PDF电子版下载]]></title><description><![CDATA[585


书籍目录：
第0章 导读（译者的话）
第1章 关于对象
第2章 构造函数语意学
第3章 Data语意学
第4章 Function语意学
第5章 构造、解构、拷贝语意学
第6章 执行期语意学
第7章 站在对象模型的尖端




下载链接：
链接: https://pan.baidu.com/s/1QRfOTlQ0agNx2mGvrbJf8Q 密码: scy1
]]></description><link>https://blog.gaoredu.com/article/b150a24f-cdb2-46ee-8779-3f9a9196c963</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b150a24f-cdb2-46ee-8779-3f9a9196c963</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Jun 2018 18:04:24 GMT</pubDate></item><item><title><![CDATA[VIP视频抢先看---《环太平洋：雷霆再起 Pacific Rim: Uprising》 在线观看]]></title><description><![CDATA[612

电影名称：环太平洋：雷霆再起 Pacific Rim: Uprising
主演: 翰·博耶加 / 斯科特·伊斯特伍德 / 卡莉·史派妮 / 景甜 / 查理·戴 / 更多...
片长:  111分钟
豆瓣评分：5.6分




网友评价：
《环太平洋：雷霆再起》作为三月份的镇档片，也是男性观众的心头爱。甭管那些演员的英文名字有多么饶舌和难记，甭管它嫁接了多少个流行文化脉络，这部影片迎合了宅男“怪兽打斗”的最尖端想象—机甲和虫兽的巨力一战，绝对能唤醒熟悉记忆。笔者有幸受邀看了…






【本站VIP免费在线观影步骤】：
        我爱科技论坛提供最新最好看的电影资源在线观看频道，提供高质量的电影视频解析，支持多个通道的观看，让每一位游客可以不用VIP就可以观看到海量优质的电影/电视剧/美剧等VIP会员才能享有的观影权。
环太平洋：雷霆再起 Pacific Rim: Uprising爱奇艺在线观看地址：http://www.iqiyi.com/v_19rr7qhfyg.html
1.对于爱奇艺，优酷，腾讯等网站需要VIP会员的视频，直接复制视频播放链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1【爱奇艺免会员通道】
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员，无广告）

]]></description><link>https://blog.gaoredu.com/article/736d0be3-5cce-493e-b559-eff698be69e5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/736d0be3-5cce-493e-b559-eff698be69e5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Jun 2018 04:32:41 GMT</pubDate></item><item><title><![CDATA[【Discuz网站SEO优化】给网站所有的图片添加一个alt+title属性]]></title><description><![CDATA[1.为了提高网站的SEO优化，有时候可以给网站的图片都添加一个alt+title属性，这样一方面提高了用户体验，一方面也可以增加网站内容的收录，具体的操作方法如下：
首先使用FTP工具进入你的网站主机空间，template/default/forum/这个路径下面，找到discuzcode.htm文件，使用记事本或者EditPlus工具打开这个文件哈，


2.使用查找功能查找到这个关键字：　alt="$attach" title="$attach"　，然后改成了　alt="$_G- $_G " title="$_G- $_G "


就行了，别急哈，还有一个地方


609


3.继续使用查找工具找到，<!--{if $_G && $attach}-->，搜索后定位到第二个哈，因为这个文件里面总共有两个这个关键字哈，别搞错了，然后添加一个代码lt="$_G- $_G " title="$_G- $_G "


609


4.修改完毕后，进入网站后台，选择工具，更新网站或者模板缓存即可在前台看到效果哈


611


]]></description><link>https://blog.gaoredu.com/article/b1e6d999-4847-4362-a685-02080f38eb7c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b1e6d999-4847-4362-a685-02080f38eb7c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Jun 2018 03:30:03 GMT</pubDate></item><item><title><![CDATA[PDF添加页码工具软件破解便携版]]></title><description><![CDATA[软件主要功能介绍：
　　可以设置开始添加页码的页面的范围，设置开始和结束的页面。
　　可以设置页码位置，字体大小、字体颜色。
　　可以设置页码的格式。




 573




软件下载链接：

PDF添加页码工具http://pan.baidu.com/s/1GHCXIo5cq


]]></description><link>https://blog.gaoredu.com/article/4a2b3f1d-db4b-4c86-831b-8db254e07e9b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4a2b3f1d-db4b-4c86-831b-8db254e07e9b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Jun 2018 18:01:26 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---More Exceptional C++中文版 PDF电子版下载]]></title><description><![CDATA[586


书籍目录：
1.泛型程序设计与C++标准库
2.优化与性能
3.异常安全议题及技术
4.继承与多态
5.内存及资源管理
6.自由函数与宏
7.杂项议题




下载链接：链接: https://pan.baidu.com/s/1AnALNXWYOvlypFWjX1ToyQ 密码: cd7b
]]></description><link>https://blog.gaoredu.com/article/ac55a5c6-46da-4ebe-afcb-b569b165c775</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ac55a5c6-46da-4ebe-afcb-b569b165c775</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Jun 2018 18:01:26 GMT</pubDate></item><item><title><![CDATA[传智播客移动WEB项目实战教程之京东商城首页]]></title><description><![CDATA[传智播客的移动WEB开发项目实例教程，主要是一个机遇京东商城的混合APP开发项目，开发语言为JavaScript，HTML，CSS等，此外也用到了一些Bootstrap的一些框架知识，欢迎大家下载。

1.商城的首页效果预览：



605


2.购物车的商品展示
607


3.商品的删除取消展示


608





下载链接：https://pan.baidu.com/s/1bp33jiB#v4r7
密码：v4r7
源码+笔记（很重要）：链接: https://pan.baidu.com/s/1eScieps 密码: 3vyr
]]></description><link>https://blog.gaoredu.com/article/0c8a8ae7-7b46-4d14-84bb-b25a80c19c62</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0c8a8ae7-7b46-4d14-84bb-b25a80c19c62</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Jun 2018 03:27:30 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---C++标准程序库 自修教程与参考手册 PDF电子版下载]]></title><description><![CDATA[587


书籍目录：
前言（preface） xvii
致谢（acknowledgments） xix
1 关于本书1
1.1 缘起1
1.2 阅读前的必要基础2
1.3 本书风格与结构2
1.4 如何阅读本书4
1.5 目前发展形式5
1.6 范例程序代码及额外信息5
1.7 回应5
2 c++ 及其标准程序库简介7
2.1 沿革7
2.2 新的语言特性9
2.2.1 templates（模板） 9
2.2.2 基本型别的显式初始化（explicit initialization） 14
2.2.3 异常处理（exception handling） 15
.2.2.4 命名空间（namespaces） 16
2.2.5 bool型别18
2.2.6 关键词explicit 18
2.2.7 新的型别转换操作符（type conversion operators） 19
2.2.8 常数静态成员（constant static members）的初始化20
2.2.9 main() 的定义21
2.3 复杂度和big-o 表示法21
3 一般概念（general concepts） 23
3.1 命名空间（namespace）std 23
3.2 头文件（header files） 24
3.3 错误（error）处理和异常（exception）处理25
3.3.1 标准异常类别（standard exception classes） 25
3.3.2 异常类别（exception classes）的成员28
3.3.3 抛出标准异常29
3.3.4 从标准异常类别（exception classes）中派生新的类别30
3.4 配置器（allocators） 31
4 通用工具（utilities） 33
4.1 pairs（对组） 33
4.1.1 便捷函数make_pair() 36
4.1.2 pair运用实例37
4.2 class auto_ptr 38
4.2.1 auto_ptr的发展动机38
4.2.2 auto_ptr拥有权（ownership）的转移40
4.2.3 auto_ptrs 做为成员之一44
4.2.4 auto_ptrs 的错误运用46
4.2.5 auto_ptr运用实例47
4.2.6 auto_ptr实作细目51
4.3 数值极限（numeric limits） 59
4.4 辅助函数66
4.4.1 挑选较小值和较大值66
4.4.2 两值互换67
4.5 辅助性的“比较操作符”（comparison operators） 69
4.6 头文件 和 71
4.6.1  内的各种定义71
4.6.2  内的各种定义71
5 standard template library（标准模板库） 73
5.1 stl 组件（stl components） 73
5.2 容器（containers） 75
5.2.1 序列式容器（sequence containers） 76
5.2.2 关联式容器（associative containers） 81
5.2.3 容器配接器（container adapters） 82
5.3 迭代器（iterators） 83
5.3.1 关联式容器的运用实例86
5.3.2 迭代器类型（iterator categories） 93
5.4 算法（algorithms） 94
5.4.1 区间（ranges） 97
5.4.2 处理多个区间101
5.5 迭代器之配接器（iterator adapters） 104
5.5.1 insert iterators（安插型迭代器） 104
5.5.2 stream iterators（串流迭代器） 107
5.5.3 reverse iterators（逆向迭代器） 109
5.6 更易型算法（manipulating algorithms） 111
5.6.1 移除（removing）元素111
5.6.2 更易型算法和关联式容器115
5.6.3 算法v.s. 成员函数116
5.7 使用者自定之泛型函数（user-defined generic functions） 117
5.8 以函数做为算法的参数119
5.8.1“以函数做为算法的参数”实例示范119
5.8.2 判断式（predicates） 121
5.9 仿函数（functors or function objects） 124
5.9.1 什么是仿函数124
5.9.2 预先定义的仿函数131
5.10 容器内的元素（container elements） 134
5.10.1 容器元素的条件134
5.10.2 value 语意vs. reference 语意135
5.11 stl内部的错误处理和异常处理136
5.11.1 错误处理（error handling） 137
5.11.2 异常处理（exception handling） 139
5.12 扩展stl 141
6 stl 容器（containers） 143
6.1 容器的共通能力和共通操作144
6.1.1 容器的共通能力144
6.1.2 容器的共通操作144
6.2 vectors 148
6.2.1 vectors 的能力148
6.2.2 vector 的操作函数150
6.2.3 将vectors 当做一般arrays 使用155
6.2.4 异常处理155
6.2.5 vectors 运用实例156
6.2.6 class vector 158
6.3 deques 160
6.3.1 deques 的能力161
6.3.2 deque 的操作函数162
6.3.3 异常处理（exception handling） 164
6.3.4 deques 运用实例164
6.4 lists 166
6.4.1 lists 的能力166
6.4.2 list 的操作函数167
6.4.3 异常处理（exception handling） 172
6.4.4 lists 运用实例172
6.5 sets和multisets
175
6.5.1 sets 和multisets 的能力176
6.5.2 set 和multiset 的操作177
6.5.3 异常处理（exception handling） 185
6.5.4 sets 和multisets 运用实例186
6.5.5 执行期指定排序准则（sorting criterion） 191
6.6 maps 和multimaps 194
6.6.1 maps 和multimaps 的能力195
6.6.2 map 和multimap 的操作函数196
6.6.3 将maps 视为关联式数组（associated arrays） 205
6.6.4 异常处理（exception handling） 207
6.6.5 maps 和multimaps 运用实例207
6.6.6 综合实例：运用maps, strings 并于执行期指定排序准则213
6.7 其它的stl容器217
6.7.1 strings 可被视为一种stl容器217
6.7.2 arrays 可被视为一种stl容器218
6.7.3 hash tables 221
6.8 动手实现reference 语意222
6.9 各种容器的运用时机226
6.10 细说容器内的型别和成员230
6.10.1 容器内的型别230
6.10.2 生成（create）、复制（copy）、销毁（destroy） 231
6.10.3“非变动性操作（nonmodifying operations） 233
6.10.4 赋值（指派, assignments） 236
6.10.5 直接元素存取237
6.10.6 “会产出迭代器”的各项操作239
6.10.7 元素的安插（inserting）和移除（removing） 240
6.10.8 lists 的特殊成员函数244
6.10.9 对配置器（allocator）的支持246
6.10.10 综观stl容器的异常处理248
7 stl 迭代器（iterators） 251
7.1 迭代器头文件251
7.2 迭代器类型（iterator categories） 251
7.2.1 input（输入）迭代器252
7.2.2 output（输出）迭代器253
7.2.3 forward（前向）迭代器254
7.2.4 bidirectional（双向）迭代器255
7.2.5 random access（随机存取）迭代器255
7.2.6 vector 迭代器的递增（increment）和递减（decrement） 258
7.3 迭代器相关辅助函数259
7.3.1 advance() 可令迭代器前进259
7.3.2 distance() 可处理迭代器之间的距离261
7.3.3 iter_swap() 可交换两个迭代器所指内容263
7.4 迭代器配接器（iterator adapters） 264
7.4.1 reverse（逆向）迭代器264
7.4.2 insert（安插型）迭代器271
7.4.3 stream（串流）迭代器277
7.5 迭代器特性（iterator traits） 283
7.5.1 为迭代器编写泛型函数（generic functions） 285
7.5.2 使用者自定（user-defined）的迭代器288
8 stl 仿函数（functors or function objects） 293
8.1 仿函数的概念293
8.1.1 仿函数可当做排序准则（sort criteria） 294
8.1.2 仿函数可拥有自己的内部状态（internal state） 296
8.1.3 for_each() 的回返值300
8.1.4 判断式（predicates）和仿函数（functors） 302
8.2 预定义的仿函数305
8.2.1 函数配接器（function adapters） 306
8.2.2 针对成员函数而设计的函数配接器307
8.2.3 针对一般函数（非成员函数）而设计的函数配接器309
8.2.4 让自定仿函数也可以使用函数配接器310
8.3 辅助用（组合型）仿函数313
8.3.1 一元组合函数配接器（unary compose function object adapters） 314
8.3.2 二元组合函数配接器（binary compose function object adapters） 318
9 stl 算法（algorithms） 321
9.1 算法头文件（header files） 321
9.2 算法概观322
9.2.1 简介322
9.2.2 算法分门别类323
9.3 辅助函数332
9.4 for_each() 算法334
9.5 非变动性算法（nonmodifying algorithms） 338
9.5.1 计算元素个数338
9.5.2 求最大值和最小值339
9.5.3 搜寻元素341
9.5.4 区间的比较356
9.6 变动性算法（modifying algorithms） 363
9.6.1 复制（copying）元素363
9.6.2 转换（transforming）和结合（combining）元素366
9.6.3 互换（swapping）元素内容370
9.6.4 赋予（assigning）新值372
9.6.5 替换（replacing）元素375
9.7 移除性算法（removing algorithms） 378
9.7.1 移除某些特定元素378
9.7.2 移除重复元素381
9.8 变序性算法（mutating algorithms） 386
9.8.1 逆转（reversing）元素次序386
9.8.2 旋转（rotating）元素次序388
9.8.3 排列（permuting）元素391
9.8.4 重排元素（shuffling, 搅乱次序） 393
9.8.5 将元素向前搬移395
9.9 排序算法（sorting algorithms） 397
9.9.1 对所有元素排序397
9.9.2 局部排序（partial sorting） 400
9.9.3 根据第n 个元素排序404
9.9.4 heap 算法406
9.10 已序区间算法（sorted range algorithms） 409
9.10.1 搜寻元素（searching） 410
9.10.2 合并元素（merging） 416
9.11 数值算法（numeric algorithms） 425
9.11.1 加工运算后产生结果425
9.11.2 相对值和绝对值之间的转换429
10 特殊容器（special containers） 435
10.1 stacks（堆栈） 435
10.1.1 核心界面436
10.1.2 stacks 运用实例437
10.1.3 class stack 细部讨论438
10.1.4 一个使用者自定的stack class 441
10.2 queues（队列） 444
10.2.1 核心界面445
10.2.2 queues 运用实例446
10.2.3 class queue 细部讨论447
10.2.4 一个使用者自定的queue class 450
10.3 priority queues（优先队列） 453
10.3.1 核心界面455
10.3.2 priority queues 运用实例455
10.3.3 class priority_queue 细部讨论456
10.4 bitsets 460
10.4.1 bitsets 运用实例460
10.4.2 class bitset 细部讨论463
11 strings（字符串） 471
11.1 动机471
11.1.1 例一：引出一个临时文件名
472
11.1.2 例二：引出一段文字并逆向打印476
11.2 string classes 细部描述479
11.2.1 string 的各种相关型别479
11.2.2 操作函数（operations）综览481
11.2.3 建构式和解构式（constructors and destructors） 483
11.2.4 strings 和c-strings 484
11.2.5 大小（size）和容量（capacity） 485
11.2.6 元素存取（element access） 487
11.2.7 比较（comparisons） 488
11.2.8 更改内容（modifiers） 489
11.2.9 子字符串及字符串接合492
11.2.10 i/o 操作符492
11.2.11 搜寻和查找（searching and finding） 493
11.2.12 数值npos 的意义495
11.2.13 strings 对迭代器的支援497
11.2.14 国际化（internationalization） 503
11.2.15 效率（performance） 506
11.2.16 strings 和vectors 506
11.3 细说string class 507
11.3.1 内部的型别定义和静态值507
11.3.2 生成（create）、拷贝（copy）、销毁（destroy） 508
11.3.3 大小（size）和容量（capacity） 510
11.3.4 比较（comparisons） 511
11.3.5 字符存取（character access） 512
11.3.6 产生c-strings 和字符数组（character arrays） 513
11.3.7 更改内容514
11.3.8 搜寻（searching and finding） 520
11.3.9 子字符串及字符串接合524
11.3.10 i/o 函数524
11.3.11 产生迭代器525
11.3.12 对配置器（allocator）的支持526
12 数值（numerics） 529
12.1 复数（complex numbers） 529
12.1.1 class complex运用实例530
12.1.2 复数的各种操作533
12.1.3 class complex 细部讨论541
12.2 valarrays 547
12.2.1 认识valarrays 547
12.2.2 valarray 的子集（subsets） 553
12.2.3 class valarray 细部讨论569
12.2.4 valarray子集类别（subset classes）细部讨论575
12.3 全域性的数值函数581
13 以stream classes完成输入和输出583
13.1 i/o streams 基本概念584
13.1.1 stream物件584
13.1.2 stream类别584
13.1.3 全域性的stream物件585
13.1.4 stream操作符586
13.1.5 操控器（manipulators） 586
13.1.6 一个简单的例子587
13.2 基本的stream类别和stream对象588
13.2.1 相关类别及其阶层体系588
13.2.2 全域性的stream物件591
13.2.3 头文件（headers） 592
13.3 标准的stream操作符] 593
13.3.1 output操作符
13.3.2 input操作符]] 594
13.3.3 特殊型别的i/o 595
13.4 streams 的状态（state） 597
13.4.1 用来表示streams 状态的一些常数597
13.4.2 用来处理streams 状态的一些成员函数598
13.4.3 stream状态与布尔条件测试600
13.4.4 stream的状态和异常602
13.5 标准i/o 函数607
13.5.1 输入用的成员函数607
13.5.2 输出用的成员函数610
13.5.3 运用实例611
13.6 操控器（manipulators） 612
13.6.1 操控器如何运作612
13.6.2 使用者自定操控器614
13.7 格式化（formatting） 615
13.7.1 格式标志（format flags） 615
13.7.2 布尔值（boolean values）的i/o 格式617
13.7.3 字段宽度、填充字符、位置调整618
13.7.4 正记号与大写字620
13.7.5 数值进制（numeric base） 621
13.7.6 浮点数（floating-point）表示法623
13.7.7 一般性的格式定义625
13.8 国际化（internationalization） 625
13.9 文件存取（file access） 627
13.9.1 文件标志（file flags） 631
13.9.2 随机存取634
13.9.3 使用文件描述器（file descriptors） 637
13.10 连接input streams 和output streams 637
13.10.1 以tie()完成“松耦合”（loose coupling） 637
13.10.2 以stream缓冲区完成“紧耦合”（tight coupling） 638
13.10.3 将标准streams 重新导向（redirecting） 641
13.10.4 用于读写的streams 643
13.11 string stream classes 645
13.11.1 string stream classes 645
13.11.2 char* stream classes 649
13.12 “使用者自定型别”之i/o操作符652
13.12.1 实作一个output 操作符652
13.12.2 实作一个input 操作符654
13.12.3 以辅助函数完成i/o 656
13.12.4 以非格式化函数完成使用者自定的操作符658
13.12.5 使用者自定的格式标志（format flags） 659
13.12.6 使用者自定之i/o 操作符的数个依循惯例662
13.13 stream buffer classes 663
13.13.1 从使用者的角度看stream缓冲区663
13.13.2 stream缓冲区迭代器（buffer iterators） 665
13.13.3 使用者自定的stream 缓冲区668
13.14 关于效能（performance） 681
13.14.1 与c 标准输入输出流（standard streams）同步682
13.14.2 stream缓冲区内的缓冲机制682
13.14.3 直接使用stream缓冲区683
14 国际化（internationalization, i18n） 685
14.1 不同的字符编码（character encoding） 686
14.1.1 宽字符（wide-character）和多字节文本（multibyte text） 686
14.1.2 字符特性（character traits） 687
14.1.3 特殊字符国际化691
14.2 locales 的概念692
14.2.1 运用locales 693
14.2.2 locale facets 698
14.3 locales 细部讨论700
14.4 facets 细部讨论704
14.4.1 数值格式化705
14.4.2 时间和日期格式化708
14.4.3 货币符号格式化711
14.4.4 字符的分类和转换715
14.4.5 字符串校勘（string collation） 724
14.4.6 信息国际化725
15 空间配置器（allocators） 727
15.1 应用程序开发者如何使用配置器727
15.2 程序库开发者如何使用配置器728
15.3 c++ 标准程序库的预设配置器732
15.4 使用者自行定义的配置器735
15.5 配置器细部讨论737
15.5.1 内部定义的型别737
15.5.2 各项操作739
15.6“未初始化内存”之处理工具细部讨论740
网络上的资源（internet resources） 743
参考书目（bibliography） 745
索引（index） 747


下载链接：
链接: https://pan.baidu.com/s/1Em-ggfrRrhH4Bx7227eypA 密码: 4a5i
]]></description><link>https://blog.gaoredu.com/article/b7bab851-fe15-4eb5-86df-fb54a5b983e2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b7bab851-fe15-4eb5-86df-fb54a5b983e2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Jun 2018 18:03:23 GMT</pubDate></item><item><title><![CDATA[正交设计助手 V3.1 绿色版软件免费下载]]></title><description><![CDATA[正交设计助手II是一款针对正交实验设计及结果分析而制作的专业软件。正交设计方法是我们常用的实验设计方法，它让我们以较少的实验次数得到科学的实验结论。但是我们经常不得不重复一些机械的工作，比如填实验安排表，计算各个水平的均值等等。 

572






开源软件下载链接：

正交设计助手 V3.1 绿色版http://pan.baidu.com/s/1zMDWkgm8h





]]></description><link>https://blog.gaoredu.com/article/d2245d38-7588-45c7-84d0-68e88e0956fc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d2245d38-7588-45c7-84d0-68e88e0956fc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Jun 2018 18:03:23 GMT</pubDate></item><item><title><![CDATA[免费下载抖音上面的高清无水印视频的黑科技你知道吗？]]></title><description><![CDATA[最近抖音可是在大家的圈圈里火了好一阵子哈，但是大家有没有想过如何去下载抖音里面的视频呢，注意，而且是高清无水印的哈，这个黑科技的实现步骤如下：
1.打开抖音在线下载助手：https://tvlove.club/dy/index.php
601


我们在红色区域输入你想下载的或者想观看的视频连接，或者你喜欢的视频的个人主页都可以的。


2. 输入连接后，我们再来看下效果哈：
602


3.在地址输入框的下面出现了一个视频下载的按钮，我们直接点击这个链接就可以下载视频到本地了，或者扫描里面的二维码也是可以实现的哈。
603


4.我们是可以直接在线观看这个链接里面的视频哈，同时也注意哈，这个视频是高清无水印的，我们这时候，在这个视频上面鼠标右键就可以下载到本地了，选择一个路径就行了哈


604


不知道大家有没有学会这个小小的黑科技呢？快去动手实践一下哈！

]]></description><link>https://blog.gaoredu.com/article/279a705a-9a3e-47eb-ad61-881022483c06</link><guid isPermaLink="true">https://blog.gaoredu.com/article/279a705a-9a3e-47eb-ad61-881022483c06</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Jun 2018 03:37:43 GMT</pubDate></item><item><title><![CDATA[一款可以用来解析json数据的浏览器小插件工具JSONView]]></title><description><![CDATA[JSONView是一款支持JSON格式数据查看器jQuery插件,可以把json字符串从以往的一个字符串展开为一个对象的形式，同时支持json数据转码，缩进，格式化，直接显示出格式化后的数据，本站在这里提供了下载安装的方法：1.下载链接是在GitHub上面哈，同时也可以直接在谷歌商店上面安装哈（不会的话请学会科学上网）：下载地址：https://github.com/gildas-lormeau/JSONView-for-Chrome谷歌商店地址：https://chrome.google.com/websto ... poihckbnefhakgolnmc595
2.解压下载后的安装包，在谷歌浏览器输入地址：chrome://extensions/596597
3.然后在开发者模式下，加载已解压的程序，选择你刚才的解压目录，然后确定就OK了598
599
4.这就是安装好的样子，使用一下测试效果如下：600

]]></description><link>https://blog.gaoredu.com/article/b5d91133-2484-49c7-a05e-b649f9fccba8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b5d91133-2484-49c7-a05e-b649f9fccba8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Jun 2018 03:10:26 GMT</pubDate></item><item><title><![CDATA[STATA 12破解绿色版软件在线免费下载]]></title><description><![CDATA[ Stata 是一套提供其使用者数据分析、数据管理以及绘制专业图表的完整及整合性统计软件。它提供许许多多功能，包含线性混合模型、均衡重复反复及多项式普罗比模式。新版本的STATA采用最具亲和力的窗口接口，使用者自行建立程序时，软件能提供具有直接命令式的语法。Stata提供完整的使用手册，包含统计样本建立、解释、模型与语法、文献等超过一万余页的出版品。

571


软件下载链接：

STATA 12破解绿色版http://pan.baidu.com/s/1b0g3Lqmuj

]]></description><link>https://blog.gaoredu.com/article/96f7cb9d-5e7c-40d9-9941-424953ccc383</link><guid isPermaLink="true">https://blog.gaoredu.com/article/96f7cb9d-5e7c-40d9-9941-424953ccc383</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 21 Jun 2018 18:01:50 GMT</pubDate></item><item><title><![CDATA[sigmaplot12.0中文破解版在线免费下载]]></title><description><![CDATA[sigmaplot12.0中文版，sigmaplot是一款功能强大的可做数据分析的高质量曲线图绘图软件，主要是用于帮助用户进行数据的XY、XYZ图形的转换，一般这类型的软件主要是用于经常要发表科技型文章及论文的人群。同时也被广泛应用于在医学,生命科学,化学,工程学,环境科学和物理学等领域。


569




软件下载链接：

SigmaPlot 12.0破解版http://pan.baidu.com/s/15msVmp6ww

]]></description><link>https://blog.gaoredu.com/article/98b6431b-f22e-4c21-a528-e8a2a3a72dbd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/98b6431b-f22e-4c21-a528-e8a2a3a72dbd</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 21 Jun 2018 00:01:57 GMT</pubDate></item><item><title><![CDATA[PDF转Word极其方便的小工具软件免费下载]]></title><description><![CDATA[PDF转换WORD转换器是一款功能强大、界面简洁、操作简单的PDF转WORD软件，你只需把PDF文件拖拽到软件界面中，然后单击转换即可完成转换。具备批量PDF文件转换功能也是PDF转换器的一大特色功能之一。经过不断地优化与升级，目前PDF转换器已经成功地实现了基于超线程技术的PDF文件批量转换技术，多个PDF文件实现批量一键转换，轻松快捷。同时支持PDF转Word、PDF转图片等功能,欢迎在本站下载。


568




软件下载链接：



PDF转Wordhttp://pan.baidu.com/s/1f3SLlw242

]]></description><link>https://blog.gaoredu.com/article/d34b7c13-dc33-41f0-a486-3298e060f8d6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d34b7c13-dc33-41f0-a486-3298e060f8d6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Jun 2018 18:01:47 GMT</pubDate></item><item><title><![CDATA[万能密码查看器可查看网页密码输入框 直接将*转换为明文密码]]></title><description><![CDATA[今天的这个黑科技软件推荐一款密码查看器哈，这款黑科技工具目前支持下列功能：
1.星号密码查看：可以查看windows和浏览器你窗口中密码的实际内容
2.宽带密码查看：可直接查看宽带上网连接的密码内容，支持ADSL，LAN等方式
3.BIOS开机密码：会清除BIOS开机密码，各种万能密码以及BIOS放电等方法暴力清除密码
4.IE分级审查密码：自动清除设置的IE分级审查监督人密码
5.IE自动完成密码：查看IE浏览器自动完成的密码表单内容等


591


这款黑科技应该是灰常强大了吧，使用方法也很简单：
592


清除BIOS密码图示：


593


自动完成密码的使用也很简单：
594




下载链接：https://pan.baidu.com/s/1dDg0v09

]]></description><link>https://blog.gaoredu.com/article/bbbb8ebe-7488-4edd-9dc6-888baae68b27</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bbbb8ebe-7488-4edd-9dc6-888baae68b27</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Jun 2018 03:08:22 GMT</pubDate></item><item><title><![CDATA[超级节约浏览器内存的浏览器插件推荐Onetab小工具]]></title><description><![CDATA[谷歌浏览器应该算是用户使用中最大的一个群体了， 用户体验做的应该是相当好了，但是有时候我们会发现浏览器有时候也是听消耗内存的，有时候随着页面标签的增多，再看个视频什么的，就跑不动了，今天就来图件一款比较好用的浏览器插件哈One Tab,也算是一个黑科技软件吧，基本上可以节约高达95%的内存，同时也可以减轻Google Chrome浏览器标签页混乱现象。


590


使用方法如下，单击OneTab图标，即可将所有标签页转换成一个列表，然后当我们下次需要访问这些已经缓存的标签页时，就可以可以单独或全部恢复它们了，是不是很方便呢。




下载链接：建议直接Google Chrome商店下载，如果不会科学上网的话请参见其他模块的文章。
https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall


]]></description><link>https://blog.gaoredu.com/article/ba1a86e8-48c5-44d3-a86b-22a7b859154d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ba1a86e8-48c5-44d3-a86b-22a7b859154d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Jun 2018 02:44:55 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Linux程序设计最新第四版 PDF 电子版]]></title><description><![CDATA[558


书籍目录：
第1章 入门
1.1 LNIX、Linux和GNU简介
1.1.1 什么是IYNIX
1.1.2 什么是Linux
1.1.3 GNL，项目和自由软件基金会
1.1.4 Linux发行版
1.2 Linux程序设计.
1.2.1 Linux程序
1.2.2 文本编辑器
1.2.3 C语言编译器
1.2.4 开发系统导引
1.3 获得帮助
1.4 小结


第2章 shell程序设计
2.1 为什么使用shell编程
2.2 一点哲学
2.3 什么是shell
2.4 管道和重定向
2.4.1 重定向输出
2.4.2 重定向输入
2.4.3 管道
2.5 作为程序设计语言的shell
2.5.1 交互式程序
2.5.2 创建脚本
2.5.3 把脚本设置为可执行
2.6 shell的语法
2.6.1 变量
2.6.2 条件
2.6.3 控制结构
2.6.4 函数
2.6.5 命令
2.6.6 命令的执行
2.6.7 1aere文档
2.6.8 调试脚本程序
2.7 迈向图形化：dialog工具
2.8 综合应用
2.8.1 需求
2.8.2 设计
2.8.3 应用程序的说明
2.9 小结


第3章 文件操作.
3.1 Linux文件结构
3.1.1 目录
3.1.2 文件和设备
3.2 系统调用和设备驱动程序
3.3 库函数
3.4 底层文件访问
3.4.1 write系统调用
3.4.2 read系统调用
3.4.3 open系统调用
3.4.4 访问权限的初始值
3.4.5 其他与文件管理有关的系统调用
3.5 标准I／O库
3.5.1 fopen函数
3.5.2 fread函数
3.5.3 fwrite函数
3.5.4 fclose函数
3.5.5 f￡1ush函数
3.5.6 fseek函数
3.5.7 fgetc、getc和getchar函数
3.5.8 fputc、putc和putchar函数
3.5.9 fgets和gets函数
3.6 格式化输入和输出
3.6.1 printf、fprintf和sprin七函数
3.6.2 scanf、fscanf和sscanf函数
3.6.3 其他流函数
3.6.4 文件流错误
3.6.5 文件流和文件描述符
3.7 文件和目录的维护
3.7.1 chIrrod系统调用
3.7.2 chown系统调用
3.7.3 unlink、1ink和symlink系统调用
3.7.4 mkdJ.r和rmdir系统调用
3.7.5 chdir系统调用和getcwd函数
3.8 扫描目录
3.8.1 opendir函数
3.8.2 readdir函数
3.8.3 elldir函数
3.8.4 see]kdir函数
3.8.5 closedir函数
3.9 错误处理
3.9.1 strerror函数
3.9.2 perror函数
3.10 proc文件系统
3.11 高级主题：fcntl和mmap
3.11.1 fcntl系统调用
3.11.2 map函数
3.12 小结


第4章 Linux环境
4.1 程序参数
4.1.1 qetopt
4.1.2 getooptlong
4.2 环境变量
4.2.1 环境变量的用途
4.2.2 environ变量
4.3 时间和日期
4.4 临时文件
4.5 用户信息
4.6 主机信息
4.7 日志
4.8 资源和限制
4.9 小结


第5章 终端
5.1 对终端进行读写
5.2 与终端进行对话
5.3 终端驱动程序和通用终端接口
5.3.1 概述
5.3.2 硬件模型
5.4 temios结构
5.4.1 输入模式
5.4.2 输出模式
5.4.3 控制模式
5.4.4 本地模式
5.4.5 特殊控制字符
5.4.6 终端速度
5.4.7 其他函数
5.5 终端的输出
5.5.1 终端的类型
5.5.2 识别终端类型
5.5.3 使用teminfo功能标志
5.6 检测击键动作
5.7 虚拟控制台
5.8 伪终端
5.9 小结


第6章 使用curses函数库管理基于文本的屏幕
6.1 用curses函数库进行编译
6.2 curses术语和概念
6.3 屏幕
6.3.1 输出到屏幕
6.3.2 从屏幕读取
6.3.3 清除屏幕
6.3.4 移动光标
6.3.5 字符属性
6.4 键盘
6.4.1 键盘模式
6.4.2 键盘输入
6.5 窗口
6.5.1 wINDOW结构
6.5.2 通用函数
6.5.3 移动和更新窗口
6.5.4 优化屏幕刷新
6.6 子窗口
6.7 keypad模式
6.8 彩色显示
6.9 pad
6.10 CD唱片应用程序
6.10.1 新CD唱片应用程序的开始部分
6.10.2 main函数
6.10.3 建立菜单
6.10.4 操作数据库文件
6.10.5 查询CD数据库
6.11 小结


第7章 数据管理
7.1 内存管理
7.1.1 简单的内存分配
7.1.2 分配大量的内存
7.1.3 滥用内存
7.1.4 空指针
7.1.5 释放内存
7.1.6 其他内存分配函数
7.2 文件锁定
7.2.1 创建锁文件
7.2.2 区域锁定
7.2.3 锁定状态下的读写操作
7.2.4 文件锁的竞争
7.2.5 其他锁命令
7.2.6 死锁
7.3 数据库
7.3.1 dbm数据库
7.3.2 dbm例程
7.3.3 d.bm访问函数
7.3.4 其他dbm函数
7.4 CD唱片应用程序
7.4.1 更新设计
7.4.2 使用dbm数据库的CD唱片应用程序
7.5 小结


第8章 MySQL
8.1 安装
8.1.1 MySQL软件包
8.1.2 安装后的配置
8.1.3 安装后的故障修复
8.2 MySQL管理
8.2.1 命令
8.2.2 创建用户并赋予权限
8.2.3 密码
8.2.4 创建数据库
8.2.5 数据类型
8.2.6 创建表
8.2.7 图形化工具
8.3 使用C语言访问。MySQL数据
8.3.1 连接例程
8.3.2 错误处理
8.3.3 执行SQL语句
8.3.4 更多的函数
8.4 CD数据库应用程序
8.4.1 创建表
8.4.2 添加数据
8.4.3 使用C语言访问数据
8.5 小结


第9章 开发工具
9.1 多个源文件带来的问题
9.2 make命令和makefile文件
9.2.1 mekefile的语法
9.2.2 make命令的选项和参数
9.2.3 makefile文件中的注释
9.2.4 mekefile文件中的宏
9.2.5 多个目标
9.2.6 内置规则
9.2.7 后缀和模式规则
9.2.8 用make管理函数库
9.2.9 高级主题：makefile文件和子目录
9.2.1 0GNUmake和qcc
9.3 源代码控制
9.3.1 RCS
9.3.2 SCCS
9.3.3 RCS和SCCS的比较
9.3.4 CVS
9.3.5 CVS的前端程序
9.3.6 SubvcrsiOn
9.4 编写手册页
9.5 发行软件
9.5.1 pach程序
9.5.2 其他软件发行工具
9.6 RPM软件包
9.6.1 使用RPM软件包文件
9.6.2 安装RPM软件包
9.6.3 创建RPM软件包
9.7 其他软件包格式
9.8 开发环境
9.8.1 KDevelop
9.8.2 其他开发环境
9.9 小结


第10章 调试
10.1 错误类型
10.2 常用调试技巧
10.2.1 有漏洞的程序
10.2.2 代码检查
10.2.3 取样法
10.2.4 程序的受控执行
10.3 使用gdb进行调试
10.3.1 启动gdb
10.3.2 运行一个程序
10.3.3 栈跟踪
10.3.4 检查变量
10.3.5 列出程序源代码
10.3.6 设置断点
10.3.7 用调试器打补丁
10.3.8 深入学习gdb
10.4 其他调试工具
10.4.1 lint清理程序中的“垃圾”
10.4.2 函数调用工具
10.4.3 用prof／gprof产生执行存档
10.5 断言
10.6 内存调试
10.6.1 ElectnicFence函数库
10.6.2 valgrind
10.7 小结


第11章 进程和信号
11.1 什么是进程
11.2 进程的结构
11.2.1 进程表
11.2.2 查看进程
11.2.3 系统进程
11.2.4 进程调度
11.3 启动新进程
11.3.1 等待一个进程
11.3.2 僵尸进程
11.3.3 输入和输出重定向
11.3.4 线程
11.4 信号
11.4.1 发送信号
11.4.2 信号集
11.5 小结


第12章 POSlX线程
12.1 什么是线程
12.2 线程的优点和缺点
12.3 第一个线程程序
12.4 同时执行
12.5 同步
12.5.1 用信号量进行同步
12.5.2 用互斥量进行同步
……
第13章 进程音通信：管道
第14章 信号量、共享内存和消息队列
第15章 套接字
第16章 用GTK+进行+GNOME编程
第17章 用Qt进行KDE编程
第18章 Linux标准



下载链接：链接: https://pan.baidu.com/s/1TjZ0nijfymY2BDfPxRY4Fg 密码: 1b93
]]></description><link>https://blog.gaoredu.com/article/49c58884-4c28-4e36-a2c1-1396e4517404</link><guid isPermaLink="true">https://blog.gaoredu.com/article/49c58884-4c28-4e36-a2c1-1396e4517404</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 19 Jun 2018 23:00:52 GMT</pubDate></item><item><title><![CDATA[mindmanager9中文破解版在线免费下载]]></title><description><![CDATA[566


mindmanager中文破解版是一个可视化的工具，可以用在脑力风暴和计划当中。提供给商务人士一个更有效的、电子化的手段来进行捕捉、组织和联系信息和想法。作为便笺，挂图和白板的数字化替代品，mindmanager中文破解版提供更快的理解、更好的判断和减少会议时间来提高工作效率。




MindManager9中文版 含注册码http://pan.baidu.com/s/1vIRtilqqb



]]></description><link>https://blog.gaoredu.com/article/fe2ee18d-1733-43f3-9e9f-31b545e4f1ee</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fe2ee18d-1733-43f3-9e9f-31b545e4f1ee</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 19 Jun 2018 18:00:54 GMT</pubDate></item><item><title><![CDATA[快来get利用Adblock Plus插件看视频去广告的技能]]></title><description><![CDATA[不知道大家是否在爱奇艺，优酷这些网站上面经常看视频呢？但是看视频时前面的等待广告实在令人不爽，就今天就来教大家，快速使用本文中推荐的插件快速取出网站视频播放前的广告，同时可以拦截绝大多数的网站广告，从而提高自己在上网时候的用户体验哈！


1.首先到这个网站https://adblockplus.org/zh_CN去下载一下这个浏览器插件，或者直接去谷歌商店下载：https://chrome.google.com/websto ... trapp&utm_medium=et


如果不知道怎么科学上网的话，就参考网站中其他模块的网站科学上网一下，就可以下载到了。
588


2.直接点击安装到Chrome，这种方式很方便哈，基本上是不需要什么配置哈，或者将直接下载好的插件双击打开，就会自动提示安装哈。然后重启一下浏览器，后面就会在浏览器地址栏的右边显示拦截的广告数量。
589
]]></description><link>https://blog.gaoredu.com/article/edb4110a-f805-44b0-a76f-3537b4a376a8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/edb4110a-f805-44b0-a76f-3537b4a376a8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 19 Jun 2018 02:59:30 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Linux网络内核分析与开发 PDF电子版 下载]]></title><description><![CDATA[557


书籍目录;
第1章 Linux系统内核
1.1 Linux系统内核组成结构
1.1.1 内核组成结构
1.1.2 Linux内核源码浏览工具
1.2 Linux系统内核编译
1.2.1 Linux内核编译步骤
1.2.2 Linux内核编译选项
1.3 Linux系统内核调试工具
1.3.1 KGDB调试工具
1.3.2 UML调试工具
1.3.3 用虚拟机软件搭建内核调试平台
1.4 GDB使用
1.4.1 基本命令
1.4.2 断点
1.4.3 查看运行时数据
1.4.4 改变程序的执行
1.5 调试范例
1.5.1 调试示例程序
1.5.2 调试前的工作
1.5.3 调试运行


第2章 Linux网络内核
2.1 TCP／IP协议体系
2.1.1 TCP／IP协议体系架构
2.1.2 网络数据包的封装与解封
2.2 Linux网络内核组成
2.2.1 Linux网络内核的组成模块
2.2.2 内核中的数据包处理流程
2.3 网络内核的重要数据结构
2.3.1 套接字缓冲区
2.3.2 网络设备


第3章 套接字
3.1 套接字与套接字接口
3.1.1 套接字
3.1.2 套接字接口的使用
3.1.3 套接字编程实例
3.2 套接字内核实现
3.2.1 套接字创建流程
3.2.2 套接字数据结构
3.2.3 套接字功能实现
3.3 新协议族与套接字
3.3.1 数据定义
3.3.2 函数设计


第4章 传输层
4.1 UDP协议
4.1.1 UDP简介
4.1.2 UDP协议模块处理流程
4.1.3 UDP头部实现
4.1.4 UDP包的发送
4.1.5 UDP包的接收
4.1.6 UDP连接的建立
4.2 TCP协议
4.2.1 TCP协议简介
4.2.2 TCP协议模块处理流程
4.2.3 TCP头部实现
4.2.4 TCP连接建立
4.2.5 TCP包的发送
4.2.6 TCP包的接收
4.3 原始数据包处理模块
4.3.1 原始套接字简介
4.3.2 原始数据包处理流程
4.3.3 原始数据包的发送
4.3.4 原始数据包的接收
4.4 新传输层协议与套接字设计
4.4.1 数据结构
4.4.2 函数设计


第5章 网络层
5.1 IPv4介绍
5.2 IPv4协议实现
5.2.1 IP包头实现
5.2.2 IP层处理流程
5.2.3 IP包的本地发送
5.2.4 IP包的本地接收
5.2.5 IP包的转发
5.3 ICMP协议实现
5.3.1 ICMP简介
5.3.2 ICMP流程
5.4 IPv6协议实现
5.4.1 IPv6协议简介
5.4.2 给内核配置IPv6
5.4.3 IPv6协议模块处理流程
5.4.4 IPv6包的发送
5.4.5 IPv6包的接收
5.4.6 IPv6包的转发
5.4.7 相关协议实现


第6章 数据链路层
6.1 数据链路层协议
6.2 帧的发送和接收
6.2.1 设备初始化函数
6.2.2 帧的发送实现
6.2.3 帧的接收实现
6.2.4 驱动上层的数据包类型与递交方法
6.3 通用点对点(PPP)协议实现
6.3.1 点对点协议
6.3.2 PPP协议管理
6.3.3 发送帧
6.3.4 接收帧
6.4 异步PPP协议实现
6.4.1 PPP-async-init函数
6.4.2 PPP-async-send函数
6.4.3 PPP-asynctty-receive函数
6.5 以太网上的PPP协议实现
6.5.1 PPPoE协议规范
6.5.2 数据结构
6.5.3 PPPoE驱动程序


第7章 网络设备驱动程序
7.1 网络设备驱动程序
7.1.1 数据结构
7.1.2 网络设备的初始化
7.1.3 网络设备的打开和关闭
7.1.4 发送数据包
7.1.5 接收数据包
7.1.6 网络设备的统计信息
7.2 CS89X0网卡驱动程序设计
7.2.1 数据定义
7.2.2 I／O端口访问函数
7.2.3 CS89x0网卡的初始化
7.2.4 CS89x0网卡的打开和关闭
7.2.5 CS89x0网卡发送数据包
7.2.6 CS89x0网卡接收数据包


第8章 路由模块与邻居子系统
8.1 路由原理
8.2 路由表数据结构
8.2.1 路由表类型
8.2.2 路由表缓存类型
8.3 路由信息管理
8.3.1 路由规则管理
8.3.2 路由表管理
8.4 路由查询
8.4.1 发送时路由查询
8.4.2 接收时路由查询
8.5 邻居子系统
8.5.1 邻居子系统类型
8.5.2 邻居子系统处理模块


第9章 MPLS网络与协议实现
9.1 MPLS协议原理
9.1.1 原理介绍
9.1.2 Linux内核的MPLS配置
9.2 MPLS协议模块
9.2.1 流程
9.2.2 数据结构
9.2.3 初始化
9.2.4 MPLS标签转发表管理
9.2.5 MPLS层的数据发送
9.2.6 MPLS层的数据接收与转发
参考文献



下载链接：链接: https://pan.baidu.com/s/1U7AWj25jn2UkatJN8pG0PA 密码: xvrc
]]></description><link>https://blog.gaoredu.com/article/25bcedad-9184-4e2e-8bab-1e456a23e31f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/25bcedad-9184-4e2e-8bab-1e456a23e31f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Jun 2018 23:02:15 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---C+泛型编程与STL中文PDF电子版下载]]></title><description><![CDATA[582


书籍目录：
第一部分泛型编程简介
第1章参观STL
1.1一个简单的例子
1.2总结
第2章算法和范围
2.1线性搜索
2.2概念和建模
2.3迭代器
2.4细化
2.5总结
第3章关于迭代器的更多信息
3.1迭代器特征和相关类型
3.2定义新组件
3.3总结
第4章功能对象
4.1概括线性搜索
4.2功能对象概念
4.3功能对象适配器
4.4预定义的函数对象
4.5总结
第5章容器
5.1一个简单的容器
5.2容器概念
5.3可变大小的容器概念
5.4总结
第二部分参考手册：STL概念
第6章基本概念
6.1可分配
6.2默认可构造
6.3平等可比
6.4订购
第7章迭代器
7.1平凡的迭代器
7.2输入迭代器
7.3输出迭代器
7.4前向迭代器
7.5双向迭代器
7.6随机访问迭代器
第8章函数对象
8.1基本功能对象
8.2适应性功能对象
8.3谓词
8.4。专业概念
第9章容器
9.1一般容器概念
9.2序列
9.3联合容器
9.4分配器
第三部分参考手册：算法和类
第10章基本组件
10.1双
10.2迭代器基元
10.3分配器
10.4内存管理基元
10.5临时缓冲区
第十一章非突变算法
11.1线性搜索
11.2子序列匹配
11.3计数元素
11.4 for_each
11.5比较两个范围
11.6最小和最大
第12章基本的变异算法
12.1复制范围
12.2交换元素
12.3变换
12.4更换元素
12.5填充范围
12.6去除元素
12.7置换算法
12.8分区
12.9随机抽样和抽样
12.10广义数字算法
第13章排序和搜索
13.1排序范围
13.2分类范围的操作
13.3堆操作
第14章迭代器类
14.1插入迭代器
14.2流迭代器
14.3 reverse_iterator
14.4 raw_storage_iterator
第15章函数对象类
15.1函数对象的基类
15.2算术运算
15.3比较
15.4逻辑运算
15.5身份和预测
15.6专用功能对象
15.7成员函数适配器
15.8其他适配器
第16章容器类
16.1序列
16.2关联容器
16.3容器适配器
附录A可移植性和标准化
A. 1语言变更
A.2库变化
A.3命名和包装
参考书目
指数



下载链接：链接: https://pan.baidu.com/s/1x8WqSrgsqDidMaOvWB_x4g 密码: rnd5

]]></description><link>https://blog.gaoredu.com/article/d1a340c0-6c4d-4383-b73e-55957aa17574</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d1a340c0-6c4d-4383-b73e-55957aa17574</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Jun 2018 03:07:50 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Linux从入门到精通 PDF电子版下载]]></title><description><![CDATA[556


书籍目录：
上篇 Linux系统篇
第1章 Linux操作系统
1.1 Linux操作系统版本
1.1.1 内核版本
1.1.2 发行版本
1.2 Linux系统发展史和优势
1.2.1 Linux系统发展史
1.2.2 Linux系统优势
1.3 Red Hat Enterprise Linux系统
第2章 系统安装前期工作
2.1 虚拟机软件
2.2 创建虚拟机
2.2.1 安装前对磁盘清理
2.2.2 安装虚拟机软件
2.2.3 虚拟机创建和配置
第3章 系统安装与卸载
3.1 Linux系统安装
3.2 VMware Tools
3.2.1 VMware Tools概述
3.2.2 VMware Tools软件安装
3.3 系统重装和卸载
第4章 Linux图形世界
4.1 登录和退出Linux图形系统
4.2 更换系统语言
4.3 Linux图形系统概述
4.4 GNOME图形窗口
4.4.1 图形系统菜单栏
4.4.2 桌面背景和图标
4.4.3 图形系统终端窗口
第5章 Linux shell及命令
5.1 Linux shell概述
5.1.1 shell发展史及类别
5.1.2 shell的作用
5.2 Linux命令的应用
5.2.1 文件管理命令
5.2.2 磁盘管理命令
5.2.3 系统管理命令
5.2.4 压缩和解压缩命令
5.2.5 软件包管理命令
5.2.6 其他常用命令
第6章 用户信息和资源
6.1 Linux用户及管理
6.1.1 Linux用户分类
6.1.2 Linux用户创建和管理
6.2 用户资源管理
6.2.1 用户目录文件管理
6.2.2 用户文本文件管理
6.2.3 文件权限管理
6.3 用户间的通信
6.4 Linux用户组
6.4.1 用户组创建和删除
6.4.2 用户组成员管理
6.5 账号和密码安全
6.5.1 账号信息概述
6.5.2 账号信息安全管理
第7章 系统启动初始化
7.1 系统启动概述
7.2 系统启动过程
7.2.1 BIOS加电自检
7.2.2 引导加载程序启动
7.2.3 内核映像加载
7.2.4 init进程初始化
第8章 开机引导故障处理
8.1 GRUB
8.1.1 更改启动引导方式
8.1.2 单用户模式和紧急模式
8.1.3 启动引导配置文件
8.2 系统救援模式
第9章 Linux图形系统
9.1 Linux桌面系统
9.1.1 桌面系统概述
9.1.2 桌面系统历史
9.1.3 桌面系统环境
9.2 X Window桌面系统组件
9.2.1 X Window系统结构
9.2.2 X Window运行原理
9.2.3 X协议故障处理
第10章 系统磁盘维护
10.1 磁盘的分区
10.1.1 磁盘分区概述
10.1.2 磁盘分区信息
10.1.3 磁盘分区划分
10.1.4 删除磁盘分区
10.2 逻辑卷管理
10.2.1 逻辑卷概述
10.2.2 逻辑卷创建和管理
10.3 磁盘空间管理
10.3.1 磁盘分区扩容
10.3.2 扩展交换分区空间
第11章 Linux文件系统
11.1 文件系统概述
11.1.1 文件系统结构
11.1.2 文件系统组成
11.2 文件系统管理
11.2.1 文件系统信息
11.2.2 创建文件系统
11.2.3 文件系统挂载和卸载
11.2.4 删除文件系统
11.3 修复文件系统设备块
第12章 Linux系统安全
12.1 本地系统安全
12.1.1 账号和密码安全
12.1.2 文件权限安全
12.2 Linux日志系统
12.3 系统数据安全
12.3.1 数据备份前的准备
12.3.2 数据备份
12.3.3 数据恢复
12.4 系统网络安全
12.4.1 防火墙
12.4.2 其他设置
第13章 系统性能监控
13.1 Linux系统进程
13.1.1 系统进程信息
13.1.2 进程创建和终止
13.2 系统磁盘资源
13.2.1 磁盘性能监控
13.2.2 磁盘空间限制
13.3 系统内存和CPU
13.3.1 系统内存管理
13.3.2 系统CPU监控
第14章 Linux系统网络
14.1 系统网络概述
14.1.1 TCP/IP协议簇
14.1.2 网络配置文件
14.2 Linux系统IP地址
14.2.1 IP地址概述
14.2.2 配置IP地址
14.3 连接因特网
14.4 虚拟网络
14.4.1 搭建虚拟网络
14.4.2 虚拟网络应用
第15章 Linux Shell脚本编程
15.1 shell工作原理
15.2 shell符号和命令
15.2.1 命令的类型
15.2.2 通配符
15.3 shell脚本应用编程
15.3.1 shell脚本概述
15.3.2 shell脚本实例


下篇 Linux服务器篇
第16章 远程登录服务
16.1 Telnet配置应用
16.1.1 telnet-server组件
16.1.2 Telnet远程登录
16.1.3 Telnet配置管理
16.2 OpenSSH配置应用
16.2.1 OpenSSH服务器组件
16.2.2 OpenSSH远程登录
16.2.3 OpenSSH配置管理
16.3 远程桌面
16.3.1 VNC服务器组件
16.3.2 VNC远程登录
16.3.3 VNC配置管理
第17章 网络时间协议
17.1 NTP概述
17.1.1 NTP简介
17.1.2 NTP服务组件
17.2 时间同步配置应用
17.2.1 NTP的工作原理
17.2.2 NTP的服务进程
17.2.3 获取时间源和更改时间
17.3 NTP管理
17.3.1 NTP配置文件
17.3.2 更改系统时间源
第18章 FTP
18.1 FTP概述
18.1.1 FTP工作方式
18.1.2 FTP组件
18.2 FTP的应用
18.2.1 FTP服务进程
18.2.2 普通用户登录FTP服务
18.2.3 匿名用户登录FTP服务
18.2.4 通过浏览器登录FTP
18.2.5 Windows的DOS连接FTP
18.3 FTP配置管理
18.3.1 FTP配置文件
18.3.2 设置匿名用户权限
18.3.3 创建FTP虚拟用户
18.3.4 配置FTP虚拟用户
第19章 网络文件系统
19.1 网络文件系统概述
19.1.1 网络文件系统简介
19.1.2 网络文件系统服务组件
19.1.3 网络文件系统工作原理
19.2 网络文件系统应用
19.2.1 网络文件系统服务进程
19.2.2 监视NFS服务端口
19.2.3 配置NFS共享目录
19.2.4 NFS共享目录操作
19.3 管理网络文件系统服务
19.3.1 开机自动挂载共享文件
19.3.2 访问自动挂载的实现
第20章 Samba服务器
20.1 Samba服务器概述
20.1.1 Samba服务器简介
20.1.2 Samba服务组件
20.1.3 Samba工作方式
20.2 Samba服务器应用
20.2.1 Samba工作原理
20.2.2 Samba服务进程
20.2.3 Samba用户管理
20.2.4 设置共享目录
20.3 配置管理Samba服务器
20.3.1 Samba服务器的主配置文件
20.3.2 主配置文件的应用
20.3.3 samba-swat工具的使用方法
第21章 通用打印系统
21.1 打印机概述
21.1.1 打印机的类型
21.1.2 CUPS服务组件
21.2 通用打印系统服务应用
21.2.1 通用打印系统服务进程
21.2.2 安装打印机驱动程序
21.2.3 Windows下的打印机
21.3 配置通用打印系统
21.3.1 通用打印系统配置文件
21.3.2 打印机配置信息
21.3.3 通过浏览器添加打印机
21.3.4 Samba打印机配置
第22章 万维网服务器
22.1 万维网服务器概述
22.1.1 万维网简介
22.1.2 万维网工作原理
22.1.3 万维网服务器组件
22.1.4 万维网核心协议
22.2 万维网服务器应用
22.2.1 Apache组件概述
22.2.2 Apache服务进程
22.2.3 浏览器与服务器连接类型
22.2.4 Apache测试页面
22.2.5 Apache服务目录
22.3 万维网服务器配置管理
22.3.1 Apache配置文件
22.3.2 创建Apache用户
22.3.3 Apache虚拟主机
22.3.4 Apache日志文件
第23章 代理服务器
23.1 代理服务器概述
23.1.1 代理服务器简介
23.1.2 代理服务器组件
23.1.3 squid功能作用
23.1.4 代理服务器的应用
23.2 代理服务器配置
23.2.1 代理服务器工作原理
23.2.2 squid缓冲目录
23.2.3 squid服务进程
23.2.4 启用squid代理服务
23.2.5 设置错误提示页面语言
23.2.6 在Windows下使用代理
23.3 squid服务管理
23.3.1 控制列表选项
23.3.2 控制用户访问设置
23.3.3 用户认证设置
23.3.4 日志文件管理
23.3.5 日志分析软件
第24章 电子邮件服务器
24.1 电子邮件服务概述
24.1.1 电子邮件服务流程
24.1.2 邮件传递协议
24.1.3 Postfix服务器组件
24.2 电子邮件服务应用
24.2.1 Postfix服务进程
24.2.2 电子邮件客户端配置
24.3 电子邮件服务管理
24.3.1 电子邮件配置文件
24.3.2 电子邮件安全配置
24.3.3 安装反垃圾邮件软件
24.3.4 构筑Web界面客户端
第25章 Webmin管理工具
25.1 Webmin工具概述
25.1.1 Webmin工具简介
25.1.2 Webmin服务组件
25.1.3 Webmin服务进程
25.2 Webmin窗口界面
25.2.1 设置语言种类
25.2.2 功能模块说明
25.3 Webmin功能模块概述
25.3.1 Webmin功能模块
25.3.2 “服务器”功能模块
25.3.3 “网络”功能模块
25.3.4 “群集”功能模块
25.3.5 “其他”功能模块
第26章 轻量级目录访问协议
26.1 轻量级目录访问协议概述
26.1.1 轻量级目录访问协议的概念
26.1.2 LDAP结构原理
26.1.3 LDAP功能及特点概述
26.2 轻量级目录访问协议服务组件
26.2.1 LDAP产品概述
26.2.2 LDAP服务组件安装
26.2.3 LDAP模型类别
26.2.4 LDAP服务进程
26.3 轻量级目录访问配置管理
26.3.1 LDAP配置文件
26.3.2 目录数据库操作
26.3.3 用户认证配置
26.3.4 数据导出和数据库复制
第27章 MySQL数据库
27.1 数据库的定义
27.1.1 数据库软件简介
27.1.2 数据库的概念
27.1.3 常见的关系数据库
27.2 MySQL数据库
27.2.1 MySQL数据库概述
27.2.2 MySQL数据库组件
27.2.3 数据库语言
27.2.4 MySQL服务进程
27.3 MySQL数据库应用
27.3.1 数据库操作
27.3.2 数据库用户
27.3.3 数据库中的表
27.4 MySQL数据库管理
27.4.1 数据库配置文件
27.4.2 数据的导入和导出
第28章 域名系统服务器
28.1 域名系统服务安装
28.1.1 域名系统概述
28.1.2 域名系统的组成
28.1.3 域名解析的实现
28.1.4 域名系统服务组件
28.1.5 域名系统服务器类型
28.2 域名系统服务应用
28.2.1 域名空间结构
28.2.2 域名系统查询类型
28.2.3 域名系统服务进程
28.2.4 域名系统工作过程
28.3 域名系统配置管理
28.3.1 &#65533;&#65533;名系统配置文件
28.3.2 域名系统应用配置
28.3.3 域名系统服务器配置
28.3.4 域名系统客户端配置
第29章 网络地址转换
29.1 网络地址转换概述
29.1.1 网络地址转换简介
29.1.2 私有地址分类
29.1.3 NAT工作原理
29.1.4 NAT转换类型
29.1.5 NAT的优缺点
29.2 网络地址转换配置
29.2.1 网络地址转换服务组件
29.2.2 网络地址转换服务进程
29.2.3 网络地址转换应用配置
29.2.4 通过IPTABLES实现NAT服务
29.2.5 客户端配置
第30章 动态主机配置协议
30.1 动态主机配置协议服务简介
30.1.1 动态主机配置协议概述
30.1.2 IP地址分配方式
30.1.3 动态主机配置协议组件
30.2 动态主机配置协议配置管理
30.2.1 DHCP工作流程
30.2.2 DHCP配置文件
30.2.3 DHCP服务进程
30.2.4 DHCP服务配置实例
30.3 配置DHCP客户端
30.3.1 Linux下客户端配置
30.3.2 Windows下客户端配置


附录Ａ Linux编辑器
A.1 Linux编辑器类型
A.2 Emacs编辑器
A.2.1 控制台工作环境
A.2.2 图形工作环境
A.3 vi/vim编辑器
A.3.1 vi/vim编辑器
A.3.2 vim工作模式
A.3.3 常用的操作命令
A.3.4 vim编辑器应用操作


附录B 远程登录
B.1 远程登录前的准备
B.2 远程登录系统
B.2.1 PuTTY远程软件
B.2.2 Secure Shell Client远程软件
附录C RHEL5系统安装



下载链接：链接: https://pan.baidu.com/s/1kO6t9v7rhQQfwNY7W3nKgQ 密码: v4w7
]]></description><link>https://blog.gaoredu.com/article/45c4d286-1f60-4031-be08-fffa9874dd03</link><guid isPermaLink="true">https://blog.gaoredu.com/article/45c4d286-1f60-4031-be08-fffa9874dd03</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Jun 2018 03:03:40 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---C++代码大全2中文版[完整清晰版] ODF 电子版下载]]></title><description><![CDATA[580


书籍目录：
第 1 章 欢迎进入软件构建的世界　　3
第 2 章 用隐喻来更充分地理解软件开发　　9
第 3 章 三思而后行：前期准备　　23
第 4 章 关键的“构建”决策　　61
第 5 章 软件构建中的设计　　73
第 6 章 可以工作的类　　125
第 7 章 高质量的子程序　　161
第 8 章 防御式编程　　187
第 9 章 伪代码编程过程　　215
第 10 章 使用变量的一般事项　　237
第 11 章 变量名的力量　　259
第 12 章 基本数据类型　　291
第 13 章 不常见的数据类型　　319
第 14 章 组织直线型代码　　347
第 15 章 使用条件语句　　355
第 16 章 控制循环　　367
第 17 章 不常见的控制结构　　391
第 18 章 表驱动法　　411
第 19 章 一般控制问题　　431
第 20 章 软件质量概述　　463
第 21 章 协同构建　　479
第 22 章 开发者测试　　499
第 23 章 调试　　535
第 24 章 重构　　563
第 25 章 代码调整策略　　587
第 26 章 代码调整技术　　609
第 27 章 程序规模对构建的影响　　649
第 28 章 管理构建　　661
第 29 章 集成　　689
第 30 章 编程工具　　709
第 31 章 布局与风格　　729
第 32 章 自说明代码　　777
第 33 章 个人性格　　819
第 34 章 软件工艺的话题　　837
第 35 章 何处有更多信息　　855
参考文献 　　863
索引 883


下载链接：链接: https://pan.baidu.com/s/1xylMx2CxGrkpVGLeYjd_Gg 密码: mikw
]]></description><link>https://blog.gaoredu.com/article/7e057a85-373f-46fc-8ff5-0d1698a36775</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7e057a85-373f-46fc-8ff5-0d1698a36775</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Jun 2018 02:57:45 GMT</pubDate></item><item><title><![CDATA[LabVIEW 8.5 中文安装版软件免费下载]]></title><description><![CDATA[564




LabVIEW（Laboratory Virtual Instrument Engineering Workbench）是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序，而 LabVIEW 则采用数据流编程方式，程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器，是 LabVIEW 的程序模块。

下载链接：

LabVIEW 8.5 中文安装版软件http://pan.baidu.com/s/1y0IQ7uaef





]]></description><link>https://blog.gaoredu.com/article/bd72fcf8-3f69-41ee-b0b7-95abc1d6d25e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bd72fcf8-3f69-41ee-b0b7-95abc1d6d25e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Jun 2018 00:05:17 GMT</pubDate></item><item><title><![CDATA[如何修改WEBStorm IDE编辑器设置使鼠标+Ctrl按键可以放大缩小代码]]></title><description><![CDATA[不知道各位程序员有么有遇到类似的情况，有时候觉得Webstorm编辑器写代码久了后，偶尔觉得字体有点小，就去即时修改一下，然后你就在设置里面捣鼓了半天，修改后又发现要调大一点，又折腾了大半天，今天就推荐一下Ctrl+鼠标快速放大和缩小编辑器字体的实现方法。


578


步骤实际上很简单，就直接在File-Settings-General里面勾上面所示的选项，勾上就可以了，不知道这个黑科技你有没有学会呢，快去试试看！
]]></description><link>https://blog.gaoredu.com/article/47c3085f-a487-4e19-9dcf-595eb8bd841a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/47c3085f-a487-4e19-9dcf-595eb8bd841a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 17 Jun 2018 03:42:30 GMT</pubDate></item><item><title><![CDATA[遗传图谱工具软件-JoinMap4.0破解版软件在线免费下载]]></title><description><![CDATA[563


可以用于构建遗传图谱的软件主要有MapManger、CarthaGene、JoinMap、MSTmap、HighMap、MapDisto等等，其中JoinMap自1993年发表1.0版本以来，历经多次更新，直到目前最新的5.0版本，它无疑是一款流传广泛、认知度比较高的软件。




下载链接：



JoinMap4.0破解版http://pan.baidu.com/s/11i6Ne0pe4

]]></description><link>https://blog.gaoredu.com/article/160df7c1-7823-408d-8aa9-2faf2688cb6d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/160df7c1-7823-408d-8aa9-2faf2688cb6d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 17 Jun 2018 00:02:27 GMT</pubDate></item><item><title><![CDATA[Daemon Tools 4.45.4 精灵虚拟光驱软件下载]]></title><description><![CDATA[561


虚拟光驱Daemon Tools是一个非常棒的虚拟光驱软件，精灵虚拟光驱支持PS、加密光盘，其最大的好处是可以把从网上下载的镜像文件Mount成光盘直接使用，无需解开。精灵虚拟光驱的工作原理是先虚拟出一部或多部虚拟光驱后，将光盘上的应用软件，镜像存放在硬盘上，并生成一个镜像文件，然后就可以Windows95/98/NT中将此镜像文件放入虚拟光驱中来使用，所以当您日后要启动此应用程序时，不必将光盘放在光驱中，也就无需等待光驱的缓慢启动，只需要在插入图标上轻按一下，虚拟光盘立即装入虚拟光驱中运行，快速又方便。


下载链接：

http://pan.baidu.com/s/1CDPPIyrue

]]></description><link>https://blog.gaoredu.com/article/32d66097-e0e5-42d5-9a05-5ec0b9345b35</link><guid isPermaLink="true">https://blog.gaoredu.com/article/32d66097-e0e5-42d5-9a05-5ec0b9345b35</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 17 Jun 2018 00:02:27 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---嵌入式Linux应用开发完全手册 PDF电子版下载]]></title><description><![CDATA[555


书籍目录  · · · · · ·第1篇　嵌入式Linux开发环境构建篇
第1章　嵌入式Linux开发概述
第2章　嵌入式Linux开发环境构建
第3章　嵌入式编程基础知识
第4章　Windows、Linux环境下相关工具、命令的使用
第2篇　ARM9嵌入式系统基础实例篇
第5章　GPIO接口
第6章　存储器控制
第7章　内存管理单元MMU
第8章　NAND Flash控制器
第9章　中断体系结构
第10章　系统时钟和定时器
第11章　通用异步收发器UART
第12章　I*IC接口
第13章　LCD控制器
第14章　ADC和触摸屏接口
第3篇　嵌入式Linux系统移植篇
第15章　移植U-Boot
第16章　移植Linux内核
第17章　构建Linux根文件系统
第18章　Linux内核调试技术
第4篇　嵌入式Linux设备驱动开发篇
第19章　字符设备驱动程序
第20章　Linux异常处理体系结构
第21章　扩展串口驱动程序移植
第22章　网卡驱动程序移植
第23章　IDE接口和SD卡驱动程序移植
第24章　LCD和USB驱动程序移植
第5篇　嵌入式Linux系统应用开发篇
第25章　嵌入式GUI开发
第26章　基于X的GUI开发
第27章　Linux应用程序调试技术
参考文献



下载链接：链接: https://pan.baidu.com/s/1hFExhfwjA_AtccyzsvG3aQ 密码: ytqh
]]></description><link>https://blog.gaoredu.com/article/6782c0fb-66b5-4443-89a0-a1a2507a387e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6782c0fb-66b5-4443-89a0-a1a2507a387e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Jun 2018 23:07:41 GMT</pubDate></item><item><title><![CDATA[origin8.0破解版软件在线免费下载]]></title><description><![CDATA[567




origin是OriginLab公司出品的较流行的专业函数绘图软件。自1991年问世以来，由于其操作简便，功能开放，既可以满足一般用户的制图需要，也可以满足高级用户数据分析、函数拟合的需要，很快就成为国际流行的分析软件之一，是公认的快速、灵活、易学的工程制图软件。


下载链接：



origin8.0破解版http://pan.baidu.com/s/1cgepzvqdr

]]></description><link>https://blog.gaoredu.com/article/5f402566-dc2a-4ca8-a345-4e7bb56c0da4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5f402566-dc2a-4ca8-a345-4e7bb56c0da4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Jun 2018 00:51:18 GMT</pubDate></item><item><title><![CDATA[Design expert v7.1.6 评估版软件下载]]></title><description><![CDATA[562


Design Expert V7.6评估版本是一款强大而专业的响应面实验设计软件，在全球的同类软件里始终处于顶尖地位。该软件可通过两级因子筛选设计、一般因子研究、混合物设计技术以及分割图设计和分析等功能帮助使用者快速统计实验数据，大幅度缩短实验的数据搜集时间，同时能以在该软件版本中大大加强的图形视图、计算能力以及更多新增的设计功能来加快实验进度、提升实验效率，欢迎免费下载。


下载链接：

Design expert v7.1.6 评估版http://pan.baidu.com/s/1iRDkl8pyz

]]></description><link>https://blog.gaoredu.com/article/09807474-52eb-4909-8e6e-46d11bf91607</link><guid isPermaLink="true">https://blog.gaoredu.com/article/09807474-52eb-4909-8e6e-46d11bf91607</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Jun 2018 00:29:47 GMT</pubDate></item><item><title><![CDATA[BioEdit7.0.9.0 序列比对编辑器软件下载]]></title><description><![CDATA[560


bioedit 是一个功能齐全的免费分子生物学应用软件，可以完成核苷酸序列和蛋白质序列进行所有常规的分析操作，如：序列比对、序列检索、引物设计、系统发育分析等。与 dnaman 相比，其分析内容相对更丰富一些，而且提供了很多网络程序的分析界面和接口……


下载链接

http://pan.baidu.com/s/1BXUnpbaeh
]]></description><link>https://blog.gaoredu.com/article/44e40e08-ad9a-41a1-ad59-ba89da0a8bad</link><guid isPermaLink="true">https://blog.gaoredu.com/article/44e40e08-ad9a-41a1-ad59-ba89da0a8bad</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Jun 2018 00:21:11 GMT</pubDate></item><item><title><![CDATA[2020最新传智WEB前端第36期前端高级编程视频教程【无水印，不加密】]]></title><description><![CDATA[559


这是传智播客最新36期的WEB前端高级课程，主要视频目录如下：

【主要模块】：前端基本功，实战，js基础，CSS基础，网页特效制作
js进阶编程（Js框架封装，面向对象编程）
js高级编程（常用框架，Angular.js，Node.js的使用）

1.css-京东项目.rar
2.JS基础与特效.rar
3.jQuery.rar
4.H5与css3.rar
5.ajax.rar
6.移动web开发
7.canvas.rar
8.js面向对象.rar
9.js框架封装.rar
10.node.js.rar
11.流行框架.rar
12.移动app.rar
13.项目生命周期.rar
14.资料.rar

失效链接已更新，欢迎大家下载。更新于2020年2月！

下载链接：视频链接：点击打开链接   提取码：v4r7






 


]]></description><link>https://blog.gaoredu.com/article/b362106d-fa7c-409e-afb3-441b35a4c54e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b362106d-fa7c-409e-afb3-441b35a4c54e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 15 Jun 2018 23:48:01 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Linux命令详解词典 PDF电子高清版]]></title><description><![CDATA[554


Linux命令详解词典 目录
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
R
S
T
U
V
W
X
Y
Z



本书把全书分成了26卷，读者可以直接通过36个英文字母来快速定位到自己想要查询的Linux命令或相关的知识，大大节省了查找的时间。
下载链接：链接: https://pan.baidu.com/s/173BthmH-Zwlr6TnQbFRrFw 密码: urvv
]]></description><link>https://blog.gaoredu.com/article/62ba0ac4-804d-4572-88e3-8ba8807e832c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/62ba0ac4-804d-4572-88e3-8ba8807e832c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 15 Jun 2018 23:12:48 GMT</pubDate></item><item><title><![CDATA[2019最新考研政治及其他考研公共课大礼包+电子书合集大放送]]></title><description><![CDATA[电子书合集：https://pan.baidu.com/s/1dWvNdG


公共课大礼包：https://pan.baidu.com/s/1eTf0PW2


2019考研视频合集（科目分类）：https://pan.baidu.com/s/1mjmankW


2019考研视频合集（教师分类）：https://pan.baidu.com/s/1i7alsWl


2019年考研资料汇总	链接:https://pan.baidu.com/s/1dEVADe5 密码:u2nl


2019考研政治【文都+启航】	链接:https://pan.baidu.com/s/1mitIWZm	密码:5qwo


政治视频资料合集：https://pan.baidu.com/s/1htmOtb2


2019考研政治【万磊】	链接:https://pan.baidu.com/s/1qXCX1jI 密码:b3tf


2019年考研资料汇总	链接:https://pan.baidu.com/s/1dEVADe5 密码:u2nl

]]></description><link>https://blog.gaoredu.com/article/25ef1ec1-1263-4a2c-b172-d1e023f90e41</link><guid isPermaLink="true">https://blog.gaoredu.com/article/25ef1ec1-1263-4a2c-b172-d1e023f90e41</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Jun 2018 03:21:45 GMT</pubDate></item><item><title><![CDATA[2019最新考研数学全网资料最新更新一波，快来领取啦]]></title><description><![CDATA[553


2019考研数学【汤家凤】	链接:https://pan.baidu.com/s/1pL9RUif 密码:7l3k


院校专业选择：https://pan.baidu.com/s/1kXkqA3P


高昆仑数学：https://pan.baidu.com/s/1smjimj7


汤家凤数学：https://pan.baidu.com/s/1ggA6UsF


张宇数学：https://pan.baidu.com/s/1dGUTLUp


张伟数学：https://pan.baidu.com/s/1c3tIdkW


李永乐数学：https://pan.baidu.com/s/1c35nwnI


抢分张伟数学：https://pan.baidu.com/s/1dGZD3O1


张俊芳专项：https://pan.baidu.com/s/1brhjgp5


备考指导讲座：https://pan.baidu.com/s/1mjdSGQ0


屠皓民专项：https://pan.baidu.com/s/1pNaFcaJ


数学视频资料合集：https://pan.baidu.com/s/1ggcbbCv


2019考研数学【张伟】	链接:https://pan.baidu.com/s/1eRWo7XC 密码:8zhr


2019考研数学【张宇】	链接:https://pan.baidu.com/s/1hsmz3ms	密码:sz9k

]]></description><link>https://blog.gaoredu.com/article/b8f1216f-582f-4459-9b81-a66c1cbac592</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b8f1216f-582f-4459-9b81-a66c1cbac592</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Jun 2018 03:18:05 GMT</pubDate></item><item><title><![CDATA[2019考研英语最新英语视频资料更新]]></title><description><![CDATA[
下面放出一波最新的考研英语视频全程班资视频：
550

551


商志英语： https://pan.baidu.com/s/1gfS7Baj
2019考研英语【谭建波词汇精讲基础班】： https://pan.baidu.com/s/1mj2VkSw
2019考研英语【谭建波写作基础班】：https://pan.baidu.com/s/1htZ7xKK
2019考研英语【王泉语法基础班】：https://pan.baidu.com/s/1kXmYznL
2019考研英语...>网校课程>英语一>语法长难句： https://pan.baidu.com/s/1rar7WU4
2019考研英语【新东方】>长难句解析：https://pan.baidu.com/s/1kWYfv4j
2019考研英语【朱伟】>导学规划：https://pan.baidu.com/s/1o9udC6Y
启航英语：https://pan.baidu.com/s/1hukwHIO

]]></description><link>https://blog.gaoredu.com/article/2805a38c-c934-48ac-abec-7fd926bed4a8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2805a38c-c934-48ac-abec-7fd926bed4a8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Jun 2018 03:08:48 GMT</pubDate></item><item><title><![CDATA[我爱科技书库--JavaScriptDOM编程艺术第二版 PDF电子版下载]]></title><description><![CDATA[549

书单目录：第1章 JavaScript简史
　1.1 JavaScript的起源
　1.2 DOM
　1.3 浏览器战争
　　1.3.1 DHTML
　　1.3.2 浏览器之间的冲突
　1.4 制定标准
　　1.4.1 浏览器以外的考虑
　　1.4.2 浏览器战争的结局
　　1.4.3 崭新的起点
　1.5 小结
第2章 JavaScript语法
　2.1 准备工作
　2.2 语法
　　2.2.1 语句
　　2.2.2 注释
　　2.2.3 变量
　　2.2.4 数据类型
　　2.2.5 数组
　　2.2.6 对象
　2.3 操作
　2.4 条件语句
　　2.4.1 比较操作符
　　2.4.2 逻辑操作符
　2.5 循环语句
　　2.5.1 while循环
　　2.5.2 for循环
　2.6 函数
　2.7 对象
　　2.7.1 内建对象
　　2.7.2 宿主对象
　2.8 小结
第3章 DOM
　3.1 文档：DOM中的“D”
　3.2 对象：DOM中的“O”
　3.3 模型：DOM中的“M”
　3.4 节点
　　3.4.1 元素节点
　　3.4.2 文本节点
　　3.4.3 属性节点
　　3.4.4 CSS
　　3.4.5 获取元素
　　3.4.6 盘点知识点
　3.5 获取和设置属性
　　3.5.1 getAttribute
　　3.5.2 setAttribute
　3.6 小结
第4章 案例研究：JavaScript图片库
　4.1 标记
　4.2 JavaScript
　　4.2.1 非DOM解决方案
　　4.2.2 最终的函数代码清单
　4.3 应用这个JavaScript函数
　4.4 对这个函数进行扩展
　　4.4.1 childNodes属性
　　4.4.2 nodeType属性
　　4.4.3 在标记里增加一段描述
　　4.4.4 用JavaScript改变这段描述
　　4.4.5 nodeValue属性
　　4.4.6 firstChild和lastChild属性
　　4.4.7 利用nodeValue属性刷新这段描述
　4.5 小结
第5章 最佳实践
　5.1 过去的错误
　　5.1.1 不要怪罪JavaScript
　　5.1.2 Flash的遭遇
　　5.1.3 质疑一切
　5.2 平稳退化
　　5.2.1 “javascript:”伪协议
　　5.2.2 内嵌的事件处理函数
　　5.2.3 谁关心这个
　5.3 向CSS学习
　　5.3.1 结构与样式的分离
　　5.3.2 渐进增强
　　5.4 分离JavaScript
　5.5 向后兼容
　　5.5.1 对象检测
　　5.5.2 浏览器嗅探技术
　5.6 性能考虑
　　5.6.1 尽量少访问DOM和尽量减少标记
　　5.6.2 合并和放置脚本
　　5.6.3 压缩脚本
　5.7 小结
第6章 案例研究：图片库改进版
　6.1 快速回顾
　6.2 它支持平稳退化吗
　6.3 它的JavaScript与HTML标记是分离的吗
　　6.3.1 添加事件处理函数
　　6.3.2 共享onload事件
　6.4 不要做太多的假设
　6.5 优化
　6.6 键盘访问
　6.7 把JavaScript与CSS结合起来
　6.8 DOM Core和HTML-DOM
　6.9 小结
第7章 动态创建标记
　7.1 一些传统方法
　　7.1.1 document.write
　　7.1.2 innerHTML属性
　7.2 DOM方法
　　7.2.1 createElement方法
　　7.2.2 appendChild方法
　　7.2.3 createTextNode方法
　　7.2.4 一个更复杂的组合
　7.3 重回图片库
　　7.3.1 在已有元素前插入一个新元素
　　7.3.2 在现有方法后插入一个新元素
　　7.3.3 图片库二次改进版
　7.4 Ajax
　　7.4.1 XMLHttpRequest对象
　　7.4.2 渐进增强与Ajax
　　7.4.3 Hijax
　7.5 小结
第8章 充实文档的内容
　8.1 不应该做什么
　8.2 把“不可见”变成“可见”
　8.3 内容
　　8.3.1 选用HTML、XHTML还是HTML5
　　8.3.2 CSS
　　8.3.3 JavaScript
　8.4 显示“缩略语列表”
　　8.4.1 编写displayAbbreviations函数
　　8.4.2 创建标记
　　8.4.3 一个浏览器“地雷”
　8.5 显示“文献来源链接表”
　8.6 显示“快捷键清单”
　8.7 检索和添加信息
　8.8 小结
第9章 CSS-DOM
　9.1 三位一体的网页
　　9.1.1 结构层
　　9.1.2 表示层
　　9.1.3 行为层
　　9.1.4 分离
　9.2 style属性
　　9.2.1 获取样式
　　9.2.2 设置样式
　9.3 何时该用DOM脚本设置样式
　　9.3.1 根据元素在节点树里的位置来设置样式
　　9.3.2 根据某种条件反复设置某种样式
　　9.3.3 响应事件
　9.4 className属性
　9.5 小结
第10章 用JavaScript实现动画效果
　10.1 动画基础知识
　　10.1.1 位置
　　10.1.2 时间
　　10.1.3 时间递增量
　　10.1.4 抽象
　10.2 实用的动画
　　10.2.1 提出问题
　　10.2.2 解决问题
　　10.2.3 CSS
　　10.2.4 JavaScript
　　10.2.5 变量作用域问题
　　10.2.6 改进动画效果
　　10.2.7 添加安全检查
　　10.2.8 生成HTML标记
　10.3 小结
第11章 HTML5
　11.1 HTML5简介
　11.2 来自朋友的忠告
　11.3 几个示例
　　11.3.1 Canvas
　　11.3.2 音频和视频
　　11.3.3 表单
　11.4 HTML5还有其他特性吗
　11.5 小结
第12章 综合示例
　12.1 项目简介
　　12.1.1 原始资料
　　12.1.2 站点结构
　　12.1.3 页面结构
　12.2 设计
　12.3 CSS
　　12.3.1 颜色
　　12.3.2 布局
　　12.3.3 版式
　12.4 标记
　12.5 JavaScript
　　12.5.1 页面突出显示
　　12.5.2 JavaScript幻灯片
　　12.5.3 内部导航
　　12.5.4 JavaScript图片库
　　12.5.5 增强表格
　　12.5.6 增强表单
　　12.5.7 压缩代码
　12.6 小结
附录 JavaScript库




下载链接：https://page81.ctfile.com/fs/3990681-204065996

]]></description><link>https://blog.gaoredu.com/article/f27bb029-51ea-402f-a2c8-00f9dc920140</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f27bb029-51ea-402f-a2c8-00f9dc920140</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 12 Jun 2018 21:10:07 GMT</pubDate></item><item><title><![CDATA[VIP视频抢先看---《陈翔六点半之铁头无敌》在线观看]]></title><description><![CDATA[bg3.png548


电影名称：陈翔六点半之铁头无敌
主演: 应宝林 / 闰土 / 毛台 / 蘑菇头 / 吴妈 / 更多...
片长: 96分钟
又名: 铁头无敌
豆瓣评分：9.6分




网友评价：
电影我觉得欠缺的一点，就是引入了刘东这个角色，一个讲不清的角色。你说，最后无视这个角色，会显得电影没有人情味，但是重视了这个角色，却让那些所谓的“弱者”变得理所应当。当然，剧情总是那么多伏笔，最后的彩蛋，隐隐给我一种帮你是出于情义，你只需要感动的感觉。


【本站VIP免费在线观影步骤】：
        我爱科技论坛提供最新最好看的电影资源在线观看频道，提供高质量的电影视频解析，支持多个通道的观看，让每一位游客可以不用VIP就可以观看到海量优质的电影/电视剧/美剧等VIP会员才能享有的观影权。
陈翔六点半之铁头无敌爱奇艺在线观看地址：http://www.iqiyi.com/v_19rr0etuqc.html
1.对于爱奇艺，优酷，腾讯等网站需要VIP会员的视频，直接复制视频播放链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1【爱奇艺免会员通道】
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员，无广告）




]]></description><link>https://blog.gaoredu.com/article/5facf7a1-5a3b-4971-9462-ce02a19d7345</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5facf7a1-5a3b-4971-9462-ce02a19d7345</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 12 Jun 2018 20:46:24 GMT</pubDate></item><item><title><![CDATA[Windows系统系统自带优化定时清理小工具绿色版]]></title><description><![CDATA[主要功能：
# 基于官方专业版，集成注册密钥许可证，启动即为已注册专业版！
└—绿色便携，设置保存CCleaner.ini，需保存注册表删CCleaner.ini即可；
# 反汇编强制修改软件目录免uninst.exe文件可以正常使用专业版监控功能；
└—原版如果当前目录无该文件，监控功能就会无法使用，相关选项也是灰色；

它可以帮你清理电脑的杂物，它还可以帮你清理注册表，让你的电脑更加快速。
它还能保护你的电脑免受病毒干扰，让你的电脑更安全。
它还可以让你的开机更快速，关闭掉无关紧要的默认启动的软件。
它的专业版还有实时监控，定时清理，自动更新等功能。


546



黑科技软件下载链接 https://pan.baidu.com/s/1dEECJ2x  网盘密码：jzp1


]]></description><link>https://blog.gaoredu.com/article/5d6204e8-71bf-4329-8de7-40ed33b99ac5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5d6204e8-71bf-4329-8de7-40ed33b99ac5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 04 Jun 2018 21:05:07 GMT</pubDate></item><item><title><![CDATA[这个黑科技可以快速将你在电脑本地复制粘贴的效率提升10倍以上]]></title><description><![CDATA[系统自带的剪贴板只能储存单个内容，第二次“Ctrl”+“C”执行后第一次复制的内容就不见了，所以当我们需要多次复制粘贴时只好在源文件和论文之间重复切换。Ditto 是一个强大的剪切板增强工具，而且它还开源，免费。它可以把复制的所有内容保存起来，你还可以自定义设置保存的日期和条数。它更强大的是可以合并粘贴，还支持分组，置顶，搜索功能，还可以通过网络共享剪切板。目前官网提供了Download、Portable、Source三种不同的版本，建议选择“Portable ”版本。


545


使用方法：
Ditto可以接管系统的剪贴板，然后储存下你所有的复制内容，没有上限。所以当需要复制粘贴多项内容时，大可以连续“Ctrl”+“C”所有内容，然后在论文中按住“Ctrl”+“`”（win键盘数字1左边的按键）调出Ditto主界面：


544

黑科技软件下载链接：链接: https://pan.baidu.com/s/1kVQowBl 密码: w6nm







]]></description><link>https://blog.gaoredu.com/article/768e7008-0e21-4dda-9176-8248837cdca2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/768e7008-0e21-4dda-9176-8248837cdca2</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 04 Jun 2018 02:02:22 GMT</pubDate></item><item><title><![CDATA[把你电脑的文件浏览器打造成一款类似于Chrome浏览器的windows文件浏览器]]></title><description><![CDATA[Clover 是一个Windows 浏览器的一个货站，它可以让你像Chrome 浏览器那样浏览文件。
你可以使用Ctrl+T新开页面，Ctrl+W关闭页面，Ctrl+Tab切换页面，让你的工作效率大大地提升！


543


而且通过拖拽到书签栏轻松添加书签，再也不用每次都重新打开文件的位置了。


目前这个黑科技软件已经破解，已经 去除广告， 屏蔽联网广告， 删除自带广告标签，基本上页面更加简单易用了！
软件下载地址：链接：https://pan.baidu.com/s/1jKaNZFo 密码：hr0u

]]></description><link>https://blog.gaoredu.com/article/bc72cf1a-1537-4d86-bf90-b1bbcb3b605c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bc72cf1a-1537-4d86-bf90-b1bbcb3b605c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 03 Jun 2018 23:06:06 GMT</pubDate></item><item><title><![CDATA[windows磁盘分析利器---轻松清理你的C盘电脑空间]]></title><description><![CDATA[SpaceSniffer 是一个强大的Windows 磁盘分析工具。这个软件的主要特色是可以把电脑硬盘上面的每个文件或者文件夹的磁盘占用大小可视化一个个的方格，这样是不是就可以更直观的看到你电脑的每一个盘符的当前占用空间大小！
542
当我们的Windows系统 使用久了很多碎片文件，而你又不知道怎么清理。那这个软件就够了，也算是一个黑科技软件把，它会按照各个方格来排布文件，你还可以一键删除不用的大文件。你还可以删除pagefile.sys：系统的页面文件，即虚拟内存文件，可以将虚拟内存设置到其他盘来节省c盘空间。hiberfil.sys：系统休眠文件，在管理员权限的CMD下输入powercfg -h off可以将其关闭释放空间。


软件下载地址：链接: http://pan.baidu.com/s/1sjXB6HZ 密码: 1d4c

]]></description><link>https://blog.gaoredu.com/article/f5dd3151-9dd7-4286-a2d1-14a84908f306</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f5dd3151-9dd7-4286-a2d1-14a84908f306</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 03 Jun 2018 20:06:35 GMT</pubDate></item><item><title><![CDATA[非电脑专业人士管理电脑文件的神器-Total CommanderWindows 文件资源管理器]]></title><description><![CDATA[Total Commander 是一个非常强大的Windows 文件资源管理器。强大到无法用语言来形容。而且它有各种黑科技，对于老司机们可以随意捣鼓。它在一个窗口有两个并列的窗口，你可以执行任意的操作。它有很强大的搜索功能，你可以使用通配符来搜索。它还有快速预览缩略图，它还有批量重命名工具。


539


540


541
黑科技软件主要功能：
1.双文件窗口并排显示
2.支持多语言和 Unicode
3.增强搜索功能
4.比较文件（现在用编辑器）/同步文件夹
5.快速查看面板与位图显示
6.支持 ZIP、ARJ、LZH、RAR、UC2、TAR、GZ、CAB、ACE 等压缩处理 + 插件
7.内置FTP客户端，支持FXP（服务器到服务器）和 HTTP 代{过}{滤}理
8.并行端口链接，批量重命名工具
9.多标签界面，正则表达式，历史 + 收藏按钮
10.缩略图查看、自定义列、增强搜索
11.比较编辑器，光标列表，独立文件夹树，日志，增强覆盖对话框等


下载链接：链接：https://pan.baidu.com/s/12AbxBoRb_nYUehINmhvd5w 密码：ii4e  

]]></description><link>https://blog.gaoredu.com/article/bd169d54-e059-40cd-92c6-4a4aa6ff1436</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bd169d54-e059-40cd-92c6-4a4aa6ff1436</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 02 Jun 2018 20:26:24 GMT</pubDate></item><item><title><![CDATA[一款黑科技软件瞬间帮你自动整理和美化你的电脑桌面]]></title><description><![CDATA[这款软件可以实现把电脑乱的一团糟的桌面瞬间分类整理好，可以分类成文件夹，文件，应用程序等类型。
538

软件主要特色如下：
支持最新的高DPI显示器上使用 Fences；
创建阴影区域以组织桌面；
模糊化 Windows 10 桌面壁纸；
自动靠边吸附，让你的桌面更整洁；
双击桌面可以隐藏图标；
定义规则以整理桌面图标；
在多个 Fences 之间滑动；
从任何文件夹创建桌面门户；
从 Fences 中导航文件夹结构；
支持 Windows 10。
此外还可以自定义桌面的风格背景等功能，实现更为简单更为快捷整理，此乃电脑发烧用户的福利。


下载链接: https://pan.baidu.com/s/1ghbATgB 密码: 6azm


]]></description><link>https://blog.gaoredu.com/article/fcfad987-bcaf-4815-a74e-518a4bebe8d2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fcfad987-bcaf-4815-a74e-518a4bebe8d2</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 02 Jun 2018 20:02:31 GMT</pubDate></item><item><title><![CDATA[SpringBoot微服务架构应用 视频教程]]></title><description><![CDATA[537
01_springboot简介.avi
02_springBoot环境搭建.avi
03_springboot入门案例.avi
04_springboot整合Mybatis.avi
05_spirngBoot整合REDIS单机版.avi
06_springboot整合REDIS集群.avi
07_springboot的JD案例.avi




下载链接：https://pan.baidu.com/s/1s1CclBZu292D2Ra0bqBUcA 密码：2lsa

]]></description><link>https://blog.gaoredu.com/article/f89d2dbb-2bfe-4d32-8eae-4bd3b078000f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f89d2dbb-2bfe-4d32-8eae-4bd3b078000f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 02 Jun 2018 20:02:17 GMT</pubDate></item><item><title><![CDATA[六天带你玩转MYSQL数据库视频教程]]></title><description><![CDATA[535




01数据库课程介绍.wmv
02数据库(基础知识).wmv
03数据库(关系型数据库).wmv
04数据库(关系型数据库关键字说明).wmv
05数据库(SQL).wm
06数据库(mysql数据库).wmv
07数据库(mysql服务器数据对象).wmv
08SQL基本操作(新增数据库).wmv
09SQL基本操作(查看数据库).wmv
10SQL基本操作(更新数据库).wmv
11SQL基本操作(删除数据库).wmv
12SQL基本操作(新增数据表).wm
13SQL基本操作(查看数据表).wmv
14SQL基本操作(更新数据表).wmv
15SQL基本操作(删除数据表).wmv
16SQL基本操作(新增数据).wmv
17SQL基本操作(查看数据).wm
18SQL基本操作(更新数据).wmv
19SQL基本操作(删除数据).wmv
20中文数据问题.wmv
21校对集.wmv
22乱码问题.wmv



下载链接：https://pan.baidu.com/s/1Y5GQvtIKaYrv8ghyqWl3Jw 密码：s84e
]]></description><link>https://blog.gaoredu.com/article/1218e2ca-da4b-40f7-aa08-acfebe6c32af</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1218e2ca-da4b-40f7-aa08-acfebe6c32af</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Jun 2018 17:03:42 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---疯狂安卓讲义第二版 PDF电子版下载]]></title><description><![CDATA[532


目录  · · · · · ·
第1章 Android应用与开发环境	1
1.1 Android的发展和历史	2
1.1.1 Android的发展和简介	2
1.1.2 Android平台架构及特性	3
1.2 搭建Android开发环境	5
1.2.1 下载和安装Android SDK	5
1.2.2 安装运行、调试环境	7
1.2.3 安装Eclipse和ADT插件	10
1.3 Android常用开发工具的用法	13
1.3.1 在命令行创建、删除和浏览AVD	13
1.3.2 使用Android模拟器（Emulator）	14
1.3.3 使用DDMS进行调试	15
1.3.4 Android Debug Bridge（ADB）的用法	16
1.3.5 使用DX编译Android应用	18
1.3.6 使用Android Asset Packaging Tool（AAPT）打包资源	18
1.3.7 使用mksdcard管理虚拟SD卡	18
1.4 开始第一个Android应用	19
1.4.1 使用Eclipse开发第一个Android应用	19
1.4.2 通过ADT运行Android应用	23
1.5 Android应用结构分析	23
1.5.1 创建一个Android应用	24
1.5.2 自动生成的R.java	26
1.5.3 res目录说明	27
1.5.4 Android应用的清单文件：AndroidManifest.xml	28
1.5.5 应用程序权限说明	29
1.6 Android应用的基本组件介绍	30
1.6.1 Activity和View	30
1.6.2 Service	31
1.6.3 BroadcastReceiver	31
1.6.4 ContentProvider	32
1.6.5 Intent和IntentFilter	32
1.7 签名Android应用程序	33
1.7.1 在Eclipse中对Android应用签名	34
1.7.2 使用命令对APK包签名	35
1.8 本章小结	37
第2章 Android应用的界面编程	38
2.1 界面编程与视图（View）组件	39
2.1.1 视图组件与容器组件	39
2.1.2 使用XML布局文件控制UI界面	44
2.1.3 在代码中控制UI界面	45
2.1.4 使用XML布局文件和Java代码混合控制UI界面	46
2.1.5 开发自定义View	47
2.2 第1组UI组件：布局管理器	50
2.2.1 线性布局	50
2.2.2 表格布局	53
2.2.3 帧布局	56
2.2.4 相对布局	59
2.2.5 Android 4.0新增的网格布局	61
2.2.6 绝对布局	63
2.3 第2组UI组件：TextView及其子类	65
2.3.1 文本框（TextView）与编辑框（EditText）的功能和用法	65
2.3.2 EditText的功能与用法	72
2.3.3 按钮（Button）组件的功能和用法	74
2.3.4 使用9Patch图片作为按钮背景	76
2.3.5 单选按钮（RadioButton）与复选框（CheckBox）的功能与用法	77
2.3.6 状态开关按钮（ToggleButton）与开关（Switch）的功能与用法	79
2.3.7 时钟（AnalogClock和DigitalClock）的功能与用法	81
2.3.8 计时器（Chronometer）	83
2.4 第3组UI组件：ImageView及其子类	84
2.5 第4组UI组件：AdapterView及子类	91
2.5.1 列表视图（ListView）和ListActivity	91
2.5.2 Adapter接口及实现类	93
2.5.3 自动完成文本框（AutoCompleteTextView）的功能和用法	102
2.5.4 网格视图（GridView）功能和用法	104
2.5.5 可展开的列表组件（ExpandableListView）	107
2.5.6 Spinner的功能和用法	110
2.5.7 画廊视图（Gallery）的功能和用法	112
2.5.8 AdapterViewFlipper的功能与用法	114
2.5.9 StackView的功能与用法	117
2.6 第5组UI组件：ProgressBar及其子类	119
2.6.1 进度条（ProgressBar）的功能与用法	119
2.6.2 拖动条（SeekBar）的功能和用法	123
2.6.3 星级评分条（RatingBar）的功能和用法	125
2.7 第6组UI组件：ViewAnimator及其子类	126
2.7.1 ViewSwitcher的功能与用法	127
2.7.2 图像切换器（ImageSwitcher）的功能与用法	132
2.7.3 文本切换器（TextSwitcher）的功能与用法	134
2.7.4 ViewFlipper的功能与用法	136
2.8 各种杂项组件	138
2.8.1 使用Toast显示提示信息框	138
2.8.2 日历视图（CalendarView）组件的功能和用法	140
2.8.3 日期、时间选择器（DatePicker和TimePicker）的功能和用法	141
2.8.4 数值选择器（NumberPicker）的功能与用法	144
2.8.5 搜索框（SearchView）的功能与用法	146
2.8.6 选项卡（TabHost）的功能和用法	148
2.8.7 滚动视图（ScrollView）的功能和用法	150
2.8.8 Notification的功能与用法	151
2.9 对话框	154
2.9.1 使用AlertDialog创建对话框	154
2.9.2 对话框风格的窗口	161
2.9.3 使用PopupWindow	161
2.9.4 使用DatePickerDialog、TimePickerDialog	163
2.9.5 使用ProgressDialog创建进度对话框	164
2.10 菜单	167
2.10.1 选项菜单和子菜单（SubMenu）	167
2.10.2 使用监听器来监听菜单事件	171
2.10.3 创建复选菜单项和单选菜单项	171
2.10.4 设置与菜单项关联的Activity	171
2.10.5 上下文菜单	172
2.10.6 使用XML文件定义菜单	174
2.10.7 使用PopupMenu创建弹出式菜单	178
2.11 使用活动条（ActionBar）	179
2.11.1 启用ActionBar	180
2.11.2 使用ActionBar显示选项菜单	181
2.11.3 启用程序图标导航	183
2.11.4 添加Action View	184
2.11.5 使用ActionBar实现Tab导航	185
2.11.6 使用ActionBar实现下拉式导航	191
2.12 本章小结	192
第3章 Android的事件处理	193
3.1 Android事件处理概述	194
3.2 基于监听的事件处理	194
3.2.1 监听的处理模型	195
3.2.2 事件和事件监听器	197
3.2.3 内部类作为事件监听器类	200
3.2.4 外部类作为事件监听器类	200
3.2.5 Activity本身作为事件监听器	202
3.2.6 匿名内部类作为事件监听器类	203
3.2.7 直接绑定到标签	204
3.3 基于回调的事件处理	205
3.3.1 回调机制与监听机制	205
3.3.2 基于回调的事件传播	206
3.3.3 重写onTouchEvent方法响应触摸屏事件	208
3.4 响应的系统设置的事件	210
3.4.1 Configuration类简介	210
3.4.2 重写onConfigurationChanged响应系统设置更改	212
3.5 Handler消息传递机制	214
3.5.1 Handler类简介	214
3.5.2 Handler、Loop、MessageQueue的工作原理	216
3.6 异步任务（AsyncTask）	220
3.7 本章小结	223
第4章 深入理解Activity与Fragment	224
4.1 建立、配置和使用Activity	225
4.1.1 Activity	225
4.1.2 配置Activity	233
4.1.3 启动、关闭Activity	235
4.1.4 使用Bundle在Activity之间交换数据	237
4.1.5 启动其他Activity并返回结果	241
4.2 Activity的回调机制	245
4.3 Activity的生命周期与加载模式	246
4.3.1 Activity的生命周期演示	246
4.3.2 Activity与Servlet的相似性与区别	250
4.3.3 Activity的4种加载模式	251
4.4 Fragment详解	257
4.4.1 Fragment概述及其设计哲学	257
4.4.2 创建Fragment	258
4.4.3 Fragment与Activity通信	262
4.4.4 Fragment管理与Fragment事务	264
4.5 Fragment的生命周期	268
4.6 本章小结	272
第5章 使用Intent和IntentFilter进行通信	273
5.1 Intent对象详解	274
5.1.1 使用Intent启动系统组件	274
5.2 Intent的属性及intent-filter配置	275
5.2.1 Component属性	275
5.2.2 Action、Category属性与intent-filter配置	277
5.2.3 指定Action、Category调用系统Activity	282
5.2.4 Data、Type属性与intent-filter配置	287
5.2.5 Extra属性	295
5.2.6 Flag属性	295
5.3 使用Intent创建Tab页面	296
5.4 本章小结	297
第6章 Android应用的资源	298
6.1 资源的类型及存储方式	299
6.1.1 资源的类型以及存储方式	299
6.1.2 使用资源	301
6.2 使用字符串、颜色、尺寸资源	302
6.2.1 颜色值的定义	303
6.2.2 定义字符串、颜色、尺寸资源文件	303
6.2.3 使用字符串、颜色、尺寸资源	305
6.3 数组（Array）资源	307
6.4 使用（Drawable）资源	310
6.4.1 图片资源	310
6.4.2 StateListDrawable资源	311
6.4.3 LayerDrawable资源	312
6.4.4 ShapeDrawable资源	314
6.4.5 ClipDrawable资源	316
6.4.6 AnimationDrawable资源	318
6.5 属性动画（Property Animation）资源	320
6.6 使用原始XML资源	322
6.6.1 定义原始XML资源	322
6.6.2 使用原始XML文件	323
6.7 使用布局（Layout）资源	325
6.8 使用菜单（Menu）资源	325
6.9 样式（Style）和主题（Theme）资源	326
6.9.1 样式资源	326
6.9.2 主题资源	327
6.10 属性（Attribute）资源	329
6.11 使用原始资源	332
6.12 国际化和资源自适应	333
6.12.1 Java国际化的思路	334
6.12.2 Java支持的语言和国家	334
6.12.3 完成程序国际化	335
6.12.4 为Android应用提供国际化资源	337
6.12.5 国际化Android应用	338
6.13 自适应不同屏幕的资源	340
6.14 本章小结	343
第7章 图形与图像处理	344
7.1 使用简单图片	345
7.1.1 使用Drawable对象	345
7.1.2 Bitmap和BitmapFactory	345
7.2 绘图	348
7.2.1 Android绘图基础：Canvas、Paint等	348
7.2.2 Path类	352
7.2.3 绘制游戏动画	355
7.3 图形特效处理	362
7.3.1 使用Matrix控制变换	362
7.3.2 使用drawBitmapMesh扭曲图像	366
7.3.3 使用Shader填充图形	368
7.4 逐帧（Frame）动画	370
7.4.1 AnimationDrawable与逐帧动画	371
7.5 补间（Tween）动画	374
7.5.1 Tween动画与Interpolator	374
7.5.2 位置、大小、旋转度、透明度改变的补间动画	376
7.5.3 自定义补间动画	380
7.6 属性动画	383
7.6.1 属性动画的API	383
7.6.2 使用属性动画	385
7.7 使用SurfaceView实现动画	393
7.7.1 SurfaceView的绘图机制	394
7.8 本章小结	398
第8章 Android数据存储与IO	399
8.1 使用SharedPreferences	400
8.1.1 SharedPreferences与Editor简介	400
8.1.2 SharedPreferences的存储位置和格式	401
8.1.3 读、写其他应用SharedPreferences	403
8.2 File存储	404
8.2.1 openFileOutput和openFileInput	405
8.2.2 读写SD卡上的文件	407
8.3 SQLite数据库	414
8.3.1 SQLiteDatabase简介	414
8.3.2 创建数据库和表	415
8.3.3 使用SQL语句操作SQLite数据库	416
8.3.4 使用sqlite3工具	418
8.3.5 使用特定方法操作SQLite数据库	419
8.3.6 事务	422
8.3.7 SQLiteOpenHelper类	422
8.4 手势（Gesture）	427
8.4.1 手势检测	427
8.4.2 增加手势	434
8.4.3 识别用户的手势	437
8.5 自动朗读（TTS）	439
8.6 本章小结	441
第9章 使用ContentProvider实现数据共享	442
9.1 数据共享标准：ContentProvider简介	443
9.1.1 ContentProvider简介	443
9.1.2 Uri简介	444
9.1.3 使用ContentResolver操作数据	445
9.2 开发ContentProvider	446
9.2.1 ContentProvider与ContentResolver的关系	446
9.2.2 开发ContentProvider	447
9.2.3 配置ContentProvider	448
9.2.4 使用ContentResolver调用方法	449
9.2.5 创建ContentProvider的说明	451
9.3 操作系统的ContentProvider	457
9.3.1 使用ContentProvider管理联系人	457
9.3.2 使用ContentProvider管理多媒体内容	463
9.4 监听ContentProvider的数据改变	466
9.4.1 ContentObserver简介	466
9.5 本章小结	468
第10章 Service与BroadcastReceiver	469
10.1 Service简介	470
10.1.1 创建、配置Service	470
10.1.2 启动和停止Service	472
10.1.3 绑定本地Service并与之通信	473
10.1.4 Service的生命周期	477
10.1.5 使用IntentService	478
10.2 跨进程调用Service（AIDL Service）	481
10.2.1 AIDL Service简介	482
10.2.2 创建AIDL文件	482
10.2.3 将接口暴露给客户端	483
10.2.4 客户端访问AIDLService	484
10.3 电话管理器（TelephonyManager）	491
10.4 短信管理器（SmsManager）	498
10.5 音频管理器（AudioManager）	502
10.5.1 AudioManager简介	502
10.6 振动器（Vibrator）	504
10.6.1 Vibrator简介	504
10.6.2 使用Vibrator控制手机振动	505
10.7 手机闹钟服务（AlarmManager）	505
10.7.1 AlarmManager简介	505
10.7.2 设置闹钟	506
10.8 接收广播消息	510
10.8.1 BroadcastReceiver简介	510
10.8.2 发送广播	512
10.8.3 有序广播	513
10.9 接收系统广播消息	520
10.10 本章小结	523
第11章 多媒体应用开发	524
11.1 音频和视频的播放	525
11.1.1 使用MediaPlayer播放音频	525
11.1.2 音乐特效控制	528
11.1.3 使用SoundPool播放音效	536
11.1.4 使用VideoView播放视频	539
11.1.5 使用MediaPlayer和SurfaceView播放视频	540
11.2 使用MediaRecorder录制音频	543
11.3 控制摄像头拍照	546
11.3.1 通过Camera进行拍照	546
11.3.2 录制视频短片	551
11.4 本章小结	555
第12章 OpenGL与3D应用开发	556
12.1 3D图像与3D开发的基本知识	557
12.2 OpenGL和OpenGL ES简介	558
12.3 绘制2D图形	559
12.3.1 在Android应用中使用OpenGL ES	559
12.3.2 绘制平面上的多边形	562
12.3.3 旋转	567
12.4 绘制3D图形	569
12.4.1 构建3D图形	569
12.4.2 应用纹理贴图	573
12.5 本章小结	578
第13章 Android网络应用	579
13.1 基于TCP协议的网络通信	580
13.1.1 TCP协议基础	580
13.1.2 使用ServerSocket创建TCP服务器端	581
13.1.3 使用Socket进行通信	582
13.1.4 加入多线程	586
13.2 使用URL访问网络资源	592
13.2.1 使用URL读取网络资源	593
13.2.2 使用URLConnection提交请求	594
13.3 使用HTTP访问网络	599
13.3.1 使用HttpURLConnection	600
13.3.2 使用Apache HttpClient	605
13.4 使用WebView视图显示网页	609
13.4.1 使用WebView浏览网页	610
13.4.2 使用WebView加载HTML代码	611
13.4.3 使用WebView中的JavaScript调用Android方法	612
13.5 使用Web Service进行网络编程	615
13.5.1 Web Service平台概述	615
13.5.2 使用Android应用调用Web Service	617
13.6 本章小结	628
第14章 管理Android手机桌面	629
14.1 管理手机桌面	630
14.1.1 删除桌面组件	630
14.1.2 添加桌面组件	630
14.2 改变手机壁纸	631
14.2.1 开发动态壁纸（Live Wallpapers）	631
14.3 通过程序添加快捷方式	636
14.4 管理桌面控件	638
14.4.1 开发桌面控件	638
14.4.2 Android 4.0新增的显示数据集的桌面控件	642
14.5 本章小结	647
第15章 传感器应用开发	648
15.1 利用Android的传感器	649
15.1.1 开发传感器应用	649
15.2 Android的常用传感器	651
15.2.1 方向传感器Orientation	651
15.2.2 磁场传感器Magnetic Field	652
15.2.3 温度传感器Temperature	652
15.2.4 光传感器Light	652
15.2.5 压力传感器Pressure	653
15.3 传感器应用案例	655
15.4 本章小结	660
第16章 GPS应用开发	661
16.1 支持GPS的核心API	662
16.2 获取LocationProvider	664
16.2.1 获取所有可用的LocationProvider	664
16.2.2 通过名称获得指定LocationProvider	665
16.2.3 根据Criteria获得LocationProvider	665
16.3 获取定位信息	666
16.3.1 通过模拟器发送GPS信息	666
16.3.2 获取定位数据	667
16.4 临近警告	668
16.5 本章小结	670
第17章 使用Google Map服务	671
17.1. 调用Google Map的准备	672
17.1.1 获取Map API Key	672
17.1.2 创建支持Google Map API的AVD	674
17.2 根据GPS信息在地图上定位	676
17.3 GPS导航	681
17.4 根据地址定位	683
17.4.1 地址解析与反向地址解析	683
17.4.2 根据地址定位	688
17.5 本章小结	689
第18章 疯狂连连看	690
18.1 连连看游戏简介	691
18.2 开发游戏界面	691
18.2.1 开发界面布局	692
18.2.2 开发游戏界面组件	693
18.2.3 处理方块之间的连接线	696
18.3 连连看的状态数据模型	697
18.3.1 定义数据模型	697
18.3.2 初始化游戏状态数据	698
18.4 加载界面的图片	700
18.5 实现游戏Activity	703
18.6 实现游戏逻辑	708
18.6.1 定义GameService组件接口	708
18.6.2 实现GameService组件	709
18.6.3 获取触碰点的方块	710
18.6.4 判断两个方块是否可以相连	711
18.6.5 定义获取通道的工具方法	713
18.6.6 没有转折点的横向连接	715
18.6.7 没有转折点的纵向连接	715
18.6.8 一个转折点的连接	716
18.6.9 两个转折点的连接	718
18.6.10 找出最短距离	724
18.7 本章小结	726
第19章 电子拍卖系统	727
19.1 系统功能简介和架构设计	728
19.1.1 系统功能简介	728
19.1.2 系统架构设计	729
19.2 JSON简介	730
19.2.1 使用JSON语法创建对象	731
19.2.2 使用JSON语法创建数组	732
19.2.3 Java的JSON支持	733
19.3 发送请求的工具类	734
19.4 用户登录	735
19.4.1 处理登录的Servlet	736
19.4.2 用户登录	737
19.5 查看流拍物品	745
19.5.1 查看流拍物品的Servlet	745
19.5.2 查看流拍物品	746
19.6 管理物品种类	751
19.6.1 浏览物品种类的Servlet	752
19.6.2 查看物品种类	752
19.6.3 添加种类的Servlet	757
19.6.4 添加物品种类	758
19.7 管理拍卖物品	760
19.7.1 查看自己的拍卖物品的Servlet	760
19.7.2 查看自己的拍卖物品	761
19.7.3 添加拍卖物品的Servlet	764
19.7.4 添加拍卖物品	765
19.8 参与竞拍	771
19.8.1 选择物品种类	771
19.8.2 根据种类浏览物品的Servlet	772
19.8.3 根据种类浏览物品	773
19.8.4 参与竞价的Servlet	775
19.8.5 参与竞价	776
19.9 权限控制	781
19.10 本章小结	782



下载链接: https://pan.baidu.com/s/1feSnQLiuxZuVkCU6QFHudg 密码: 5tm2
]]></description><link>https://blog.gaoredu.com/article/38defb4d-877d-47e8-b188-5537279fa637</link><guid isPermaLink="true">https://blog.gaoredu.com/article/38defb4d-877d-47e8-b188-5537279fa637</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Jun 2018 16:03:42 GMT</pubDate></item><item><title><![CDATA[我爱科技书库--Nginx高性能Web服务器详解 PDF下载]]></title><description><![CDATA[528


第1章 Nginx初探 
第2章 Nginx服务器的安装部署 
第3章 Nginx服务器架构初探 
第4章 Nginx服务器的高级配置 
第5章 Nginx服务器的Gzip压缩 
第6章 Nginx服务器的Rewrite功能 
第7章 Nginx服务器的代理服务 
第8章 Nginx服务器的缓存机制 
第9章 Nginx服务器的邮件服务 
第10章 Nginx源码结构 
第11章 Nginx基本数据结构 



下载链接: https://pan.baidu.com/s/1rGxqx8O2b5YHDIajPQ0e-A 密码: bcgy
]]></description><link>https://blog.gaoredu.com/article/59ba67f8-be63-4ae4-863d-1d8a41582dc1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/59ba67f8-be63-4ae4-863d-1d8a41582dc1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Jun 2018 03:00:00 GMT</pubDate></item><item><title><![CDATA[2018最新java WEB进阶视频教程（包含Spring，MyBatis，Maven等）]]></title><description><![CDATA[536


Spring系列：链接: https://pan.baidu.com/s/1SkPoeAHGDnsW_9j77KeUGg 密码: 72xq
Shiro视频教程：链接: https://pan.baidu.com/s/1A-mrZOkqOEnJEl4WitDzGw 密码: 7q2p
Struts2视频教程：链接: https://pan.baidu.com/s/1d_rB81Dl1YOHshLbdM1TSQ 密码: kk4c
Hibernate视频教程：链接: https://pan.baidu.com/s/1X2WnyrxEnZUa0TmK1fxKBg 密码: xcny
Maven3视频教程：链接: https://pan.baidu.com/s/1ZUqv7Jdn_6XZFoVy9ztoCg 密码: xy6g
MyBatis视频教程：链接: https://pan.baidu.com/s/17Y4TOJe3C15vDg13k0iG-g 密码: f5kr
JMs之ActiveMQ视频教程链接: https://pan.baidu.com/s/1gGNGosnDCQy5EhJ9IP9JRg 密码: kpph

]]></description><link>https://blog.gaoredu.com/article/f5cdc11d-9f1f-40bb-ae64-a3e1e1fe21e5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f5cdc11d-9f1f-40bb-ae64-a3e1e1fe21e5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 20:58:21 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---大型网站技术架构 PDF下载]]></title><description><![CDATA[529


书库目录：


第1篇 概述
1 大型网站架构演化	2
1.1 大型网站软件系统的特点	3
1.2 大型网站架构演化发展历程	4
1.2.1 初始阶段的网站架构	4
1.2.2 应用服务和数据服务分离	4
1.2.3 使用缓存改善网站性能	5
1.2.4 使用应用服务器集群改善网站的并发处理能力	6
1.2.5 数据库读写分离	7
1.2.6 使用反向代理和CDN加速网站响应	8
1.2.7 使用分布式文件系统和分布式数据库系统	9
1.2.8 使用NoSQL和搜索引擎	10
1.2.9 业务拆分	11
1.2.10 分布式服务	11
1.3 大型网站架构演化的价值观	13
1.3.1 大型网站架构技术的核心价值是随网站所需灵活应对	13
1.3.2 驱动大型网站技术发展的主要力量是网站的业务发展	13
1.4 网站架构设计误区	14
1.4.1 一味追随大公司的解决方案	14
1.4.2 为了技术而技术	14
1.4.3 企图用技术解决所有问题	14
1.5 小结	15
2 大型网站架构模式	16
2.1 网站架构模式	16
2.1.1 分层	17
2.1.2 分割	18
2.1.3 分布式	18
2.1.4 集群	19
2.1.5 缓存	20
2.1.6 异步	20
2.1.7 冗余	21
2.1.8 自动化	22
2.1.9 安全	23
2.2 架构模式在新浪微博的应用	23
2.3 小结	25
3 大型网站核心架构要素	26
3.1 性能	27
3.2 可用性	28
3.3 伸缩性	29
3.4 扩展性	30
3.5 安全性	30
3.6 小结	31
第2篇 架构
4 瞬时响应：网站的高性能架构	34
4.1 网站性能测试	35
4.1.1 不同视角下的网站性能	35
4.1.2 性能测试指标	36
4.1.3 性能测试方法	39
4.1.4 性能测试报告	41
4.1.5 性能优化策略	41
4.2 Web前端性能优化	42
4.2.1 浏览器访问优化	42
4.2.2 CDN加速	43
4.2.3 反向代理	44
4.3 应用服务器性能优化	45
4.3.1 分布式缓存	45
4.3.2 异步操作	52
4.3.3 使用集群	53
4.3.4 代码优化	54
4.4 存储性能优化	58
4.4.1 机械硬盘vs. 固态硬盘	58
4.4.2 B+树vs. LSM树	59
4.4.3 RAID vs. HDFS	61
4.5 小结	64
5 万无一失：网站的高可用架构	66
5.1 网站可用性的度量与考核	67
5.1.1 网站可用性度量	67
5.1.2 网站可用性考核	67
5.2 高可用的网站架构	69
5.3 高可用的应用	71
5.3.1 通过负载均衡进行无状态服务的失效转移	72
5.3.2 应用服务器集群的Session管理	73
5.4 高可用的服务	76
5.5 高可用的数据	78
5.5.1 CAP原理	79
5.5.2 数据备份	82
5.5.3 失效转移	84
5.6 高可用网站的软件质量保证	85
5.6.1 网站发布	85
5.6.2 自动化测试	86
5.6.3 预发布验证	87
5.6.4 代码控制	88
5.6.5 自动化发布	90
5.6.6 灰度发布	91
5.7 网站运行监控	91
5.7.1 监控数据采集	92
5.7.2 监控管理	93
5.8 小结	94
6 永无止境：网站的伸缩性架构	95
6.1 网站架构的伸缩性设计	97
6.1.1 不同功能进行物理分离实现伸缩	97
6.1.2 单一功能通过集群规模实现伸缩	98
6.2 应用服务器集群的伸缩性设计	99
6.2.1 HTTP重定向负载均衡	100
6.2.2 DNS域名解析负载均衡	101
6.2.3 反向代理负载均衡	102
6.2.4 IP负载均衡	103
6.2.5 数据链路层负载均衡	104
6.2.6 负载均衡算法	105
6.3 分布式缓存集群的伸缩性设计	106
6.3.1 Memcached分布式缓存集群的访问模型	107
6.3.2 Memcached分布式缓存集群的伸缩性挑战	107
6.3.3 分布式缓存的一致性Hash算法	109
6.4 数据存储服务器集群的伸缩性设计	112
6.4.1 关系数据库集群的伸缩性设计	113
6.4.2 NoSQL数据库的伸缩性设计	117
6.5 小结	119
7 随需应变：网站的可扩展架构	121
7.1 构建可扩展的网站架构	122
7.2 利用分布式消息队列降低系统耦合性	123
7.2.1 事件驱动架构	123
7.2.2 分布式消息队列	124
7.3 利用分布式服务打造可复用的业务平台	126
7.3.1 Web Service与企业级分布式服务	128
7.3.2 大型网站分布式服务的需求与特点	129
7.3.3 分布式服务框架设计	130
7.4 可扩展的数据结构	131
7.5 利用开放平台建设网站生态圈	132
7.6 小结	134
8 固若金汤：网站的安全架构	135
8.1 道高一尺魔高一丈的网站应用攻击与防御	136
8.1.1 XSS攻击	136
8.1.2 注入攻击	138
8.1.3 CSRF攻击	139
8.1.4 其他攻击和漏洞	140
8.1.5 Web应用防火墙	141
8.1.6 网站安全漏洞扫描	142
8.2 信息加密技术及密钥安全管理	142
8.2.1 单向散列加密	143
8.2.2 对称加密	144
8.2.3 非对称加密	144
8.2.4 密钥安全管理	145
8.3 信息过滤与反垃圾	146
8.3.1 文本匹配	147
8.3.2 分类算法	148
8.3.3 黑名单	149
8.4 电子商务风险控制	150
8.4.1 风险	151
8.4.2 风控	151
8.5 小结	153
第3篇 案例
9 淘宝网的架构演化案例分析	156
9.1 淘宝网的业务发展历程	157
9.2 淘宝网技术架构演化	158
9.3 小结	162
10 维基百科的高性能架构设计分析	163
10.1 Wikipedia网站整体架构	163
10.2 Wikipedia性能优化策略	165
10.2.1 Wikipedia前端性能优化	165
10.2.2 Wikipedia服务端性能优化	166
10.2.3 Wikipedia后端性能优化	167
11 海量分布式存储系统Doris的高可用架构设计分析	169
11.1 分布式存储系统的高可用架构	170
11.2 不同故障情况下的高可用解决方案	171
11.2.1 分布式存储系统的故障分类	172
11.2.2 正常情况下系统访问结构	172
11.2.3 瞬时故障的高可用解决方案	173
11.2.4 临时故障的高可用解决方案	174
11.2.5 永久故障的高可用解决方案	175
12 网购秒杀系统架构设计案例分析	176
12.1 秒杀活动的技术挑战	177
12.2 秒杀系统的应对策略	177
12.3 秒杀系统架构设计	178
12.4 小结	182
13 大型网站典型故障案例分析	183
13.1 写日志也会引发故障	184
13.2 高并发访问数据库引发的故障	184
13.3 高并发情况下锁引发的故障	185
13.4 缓存引发的故障	185
13.5 应用启动不同步引发的故障	186
13.6 大文件读写独占磁盘引发的故障	186
13.7 滥用生产环境引发的故障	187
13.8 不规范的流程引发的故障	187
13.9 不好的编程习惯引发的故障	188
13.10 小结	188
第4篇 架构师
14 架构师领导艺术	190
14.1 关注人而不是产品	191
14.2 发掘人的优秀	191
14.3 共享美好蓝图	192
14.4 共同参与架构	193
14.5 学会妥协	194
14.6 成就他人	194
15 网站架构师职场攻略	196
15.1 发现问题，寻找突破	197
15.2 提出问题，寻求支持	199
15.3 解决问题，达成绩效	201
16 漫话网站架构师	203
16.1 按作用划分架构师	203
16.2 按效果划分架构师	204
16.3 按职责角色划分架构师	205
16.4 按关注层次划分架构师	205
16.5 按口碑划分架构师	206
16.6 非主流方式划分架构师	207
附录A 大型网站架构技术一览	208
附录B Web开发技术发展历程	215
后记	218





下载链接: https://pan.baidu.com/s/17bTg_ksRkTYWc5IX3Q22Pg 密码: 9ymv
]]></description><link>https://blog.gaoredu.com/article/d1225be5-74ec-42b7-87f2-b45c4f8c8ba4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d1225be5-74ec-42b7-87f2-b45c4f8c8ba4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 18:00:18 GMT</pubDate></item><item><title><![CDATA[SQLServer 数据库第四季视频教程下载]]></title><description><![CDATA[9数据库函数.avi
8Unoin.avi
7抑制重复数据.avi
6限制结果集范围.avi
5数据分组.avi
4SQL基础2.avi
3SQL基础1.avi
2SQLServer使用.avi
1数据库概念.avi
16Join.avi
15索引.avi
14练习4.avi
13练习3.avi
12练习2.avi
11练习1.avi
10流控函数.avi




云盘下载链接: https://pan.baidu.com/s/1U9D3H0KyeFVrtDPTpiSrgA 密码: rtaz
种子下载链接：链接: https://pan.baidu.com/s/1m21zrKqzDaK5WYtBP7UW6w 密码: 1ssp

]]></description><link>https://blog.gaoredu.com/article/8f1da70e-8739-4f22-893d-2fd0e8fa1a8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8f1da70e-8739-4f22-893d-2fd0e8fa1a8d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 17:01:12 GMT</pubDate></item><item><title><![CDATA[2018最新 MySQL数据库+Oracle+JDBC教程视频 下载]]></title><description><![CDATA[534
Oracle 11g视频教程 链接: https://pan.baidu.com/s/1g83cWhj_WC57QsRs322X0g 密码: 6tth
MySQL数据库+Oracle+JDBC教程视频下载链接：
https://pan.baidu.com/s/1iAzMc8f9u_oHYSgazS9H5Q 密码：uqln

]]></description><link>https://blog.gaoredu.com/article/7b399008-ef26-4a79-970f-de4e820fc593</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7b399008-ef26-4a79-970f-de4e820fc593</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 16:56:39 GMT</pubDate></item><item><title><![CDATA[HTML5最新基础到精通及项目实战 视频教程]]></title><description><![CDATA[533


01、HTML5开发教程教程_38课时.rar
02、HTML5开发视频教程_33课时.rar
03、HTML5经典实例.rar
04、HTML5实例标签页精解.rar
05、HTML5 CSS3 典藏学习手册.rar


下载链接：https://pan.baidu.com/s/1IyiosGD4C_ppF-LKGkL1JA 密码：8xj4
]]></description><link>https://blog.gaoredu.com/article/4d0cb38e-6896-4fa3-8668-556ae7bc5fdc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4d0cb38e-6896-4fa3-8668-556ae7bc5fdc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 16:50:13 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Spring 技术内幕 深入解析Spring架构与设计原理 PDF电子版下载]]></title><description><![CDATA[531


目录：
前言
第1章　spring的设计理念和整体架构 / 1
1.1　spring的各个子项目 / 2
1.2　spring的设计目标 / 5
1.3　spring的整体架构 / 7
1.4　spring的应用场景 / 10
1.5　小结 / 12
第一部分　spring核心实现篇
第2章　spring framework的核心：ioc容器的实现 / 16
2.1　spring ioc容器概述 / 17
2.1.1　ioc容器和依赖反转模式 / 17
2.1.2　spring ioc的应用场景 / 18
2.2　ioc容器系列的设计与实现：beanfactory和applicationcontext / 19
2.2.1　spring的ioc容器系列 / 19
2.2.2　spring ioc容器的设计 / 21
2.3　ic容器的初始化过程 / 28
2.3.1　beandefinition的resource定位 / 29
2.3.2　beandefinition的载入和解析 / 37
2.3.3　beandefinition在ioc容器中的注册 / 52
.2.4　ioc容器的依赖注入 / 54
2.5　容器其他相关特性的设计与实现 / 75
2.5.1　applicationcontext和bean的初始化及销毁 / 75
2.5.2　lazy-init属性和预实例化 / 81
2.5.3　factorybean的实现 / 82
2.5.4　beanpostprocessor的实现 / 85
2.5.5　autowiring（自动依赖装配）的实现 / 88
2.5.6　bean的依赖检查 / 90
2.5.7　bean对ioc容器的感知 / 91
2.6　小结 / 92
第3章　spring aop的实现 / 94
3.1　spring aop概述 / 95
3.1.1　aop概念回顾 / 95
3.1.2　advice通知 / 98
3.1.3　pointcut切点 / 102
3.1.4　advisor通知器 / 105
3.2　spring aop的设计与实现 / 106
3.2.1　jvm的动态代理特性 / 106
3.2.2　spring aop的设计分析 / 108
3.2.3　spring aop的应用场景 / 108
3.3　建立aopproxy代理对象 / 109
3.3.1　设计原理 / 109
3.3.2　配置proxyfactorybean / 110
3.3.3　proxyfactorybean生成aopproxy代理对象 / 111
3.3.4　jdk生成aopproxy代理对象 / 116
3.3.5　cglib生成aopproxy代理对象 / 117
3.4　spring aop拦截器调用的实现 / 119
3.4.1　设计原理 / 119
3.4.2　jdkdynamicaopproxy的invoke拦截 / 120
3.4.3　cglib2aopproxy的intercept拦截 / 121
3.4.4　目标对象方法的调用 / 122
3.4.5　aop拦截器链的调用 / 123
3.4.6　配置通知器 / 124
3.4.7　advice通知的实现 / 129
3.4.8　proxyfactory实现aop / 136
3.5　spring aop的高级特性 / 138
3.6　小结 / 140
第二部分　spring组件实现篇
第4章　spring mvc与web环境 / 145
4.1　spring mvc概述 / 146
4.2　web环境中的spring mvc / 148
4.3　上下文在web容器中的启动 / 149
4.3.1　ioc容器启动的基本过程 / 149
4.3.2　web容器中的上下文设计 / 151
4.3.3　contextloader的设计与实现 / 154
4.4　spring mvc的设计与实现 / 158
4.4.1　spring mvc的应用场景 / 158
4.4.2　spring mvc设计概览 / 158
4.4.3　dispatcherservlet的启动和初始化 / 160
4.4.4　mvc处理http分发请求 / 166
4.5　spring mvc视图的呈现 / 178
4.5.1　dispatcherservlet视图呈现的设计 / 178
4.5.2　jsp视图的实现 / 182
4.5.3　excelview的实现 / 185
4.5.4　pdf视图的实现 / 187
4.6　小结 / 189
第5章　数据库操作组件的实现 / 191
5.1　spring jdbc的设计与实现 / 192
5.1.1　应用场景 / 192
5.1.2　设计概要 / 192
5.2　spring jdbc中模板类的设计与实现 / 193
5.2.1　设计原理 / 193
5.2.2　jdbctemplate的基本使用 / 193
5.2.3　jdbctemplate的execute实现 / 194
5.2.4　jdbctemplate的query实现 / 196
5.2.5　使用数据库connection / 197
5.3　spring jdbc中rdbms操作对象的实现 / 199
5.3.1　sqlquery的实现 / 200
5.3.2　sqlupdate的实现 / 204
5.3.3　sqlfunction / 206
5.4　spring orm的设计与实现 / 208
5.4.1　应用场景 / 208
5.4.2　设计概要 / 208
5.5　spring驱动hibernate的设计与实现 / 209
5.5.1　设计原理 / 210
5.5.2　hibernate的sessionfactory / 210
5.5.3　hibernatetemplate的实现 / 215
5.5.4　session的管理 / 219
5.6　spring驱动ibatis的设计与实现 / 222
5.6.1　设计原理 / 222
5.6.2　创建sqlmapclient / 222
5.6.3　sqlmapclienttemplate的实现 / 224
5.7　小结 / 227
第6章　spring事务处理的实现 / 228
6.1　spring与事务处理 / 229
6.2　spring事务处理的设计概览 / 229
6.3　spring事务处理的应用场景 / 230
6.4　spring声明式事务处理 / 231
6.4.1　设计原理与基本过程 / 231
6.4.2　实现分析 / 231
6.5　spring事务处理的设计与实现 / 241
6.5.1　spring事务处理的编程式使用 / 241
6.5.2　事务的创建 / 242
6.5.3　事务的挂起 / 249
6.5.4　事务的提交 / 251
6.5.5　事务的回滚 / 253
6.6　spring事务处理器的设计与实现 / 255
6.6.1　spring事务处理的应用场景 / 255
6.6.2　datasourcetransactionmanager的实现 / 256
6.6.3　hibernatetransactionmanager的实现 / 259
6.7　小结 / 265
第7章　spring远端调用的实现 / 267
7.1　spring远端调用的应用场景 / 268
7.2　spring远端调用的设计概览 / 268
7.3　spring远端调用的实现 / 271
7.3.1　spring http调用器的实现 / 271
7.3.2　spring hession/burlap的实现原理 / 282
7.3.3　spring rmi的实现 / 295
7.4　小结 / 302
第三部分　spring应用实现篇
第8章　安全框架acegi的设计与实现 / 307
8.1　spring acegi安全框架概述 / 308
8.1.1　概述 / 308
8.1.2　设计原理与基本实现过程 / 308
8.1.3　acegi的bean配置 / 309
8.2　配置spring acegi / 310
8.3　acegi的web过滤器实现 / 313
8.4　acegi验证器的实现 / 315
8.4.1　authenticationmanager的authenticate / 315
8.4.2　daoauthenticationprovider的实现 / 318
8.4.3　读取数据库用户信息 / 320
8.4.4　完成用户信息的对比验证 / 323
8.5　acegi授权器的实现 / 324
8.5.1　与web环境的接口filtersecurityinterceptor / 324
8.5.2　授权器的实现 / 327
8.5.3　投票器的实现 / 329
8.6　小结 / 330
第9章　spring dm模块的设计与实现 / 332
9.1　spring dm模块的应用场景 / 333
9.2　spring dm的应用过程 / 334
9.3　spring dm设计与实现 / 338
9.4　小结 / 348
第10章　spring flex的设计与实现 / 350
10.1　spring flex模块的应用场景 / 351
10.2　spring flex的应用过程 / 353
10.3　spring flex的设计与实现 / 355
10.4　小结 / 362
附录a　spring项目的源代码环境 / 363
附录b　构建spring项目的发布包 / 378
附录c　使用spring ide / 381
附录d　spring pet clinic应用实例 / 385


链接: https://pan.baidu.com/s/1UGm6rYhyH6j-VGVIMfW3Eg 密码: f3rh

]]></description><link>https://blog.gaoredu.com/article/05e63f39-bb06-4b22-b560-150cb1c88953</link><guid isPermaLink="true">https://blog.gaoredu.com/article/05e63f39-bb06-4b22-b560-150cb1c88953</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 16:39:52 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Redis入门指南 PDF电子版下载]]></title><description><![CDATA[530


目录：
第1章　简介　1
　　1.1　历史与发展　1
　　1.2　特性　2
　　1.2.1　存储结构　2
　　1.2.2　内存存储与持久化　3
　　1.2.3　功能丰富　3
　　1.2.4　简单稳定　4
　　第2章　准备　7
　　2.1　安装Redis　7
　　2.1.1　在POSIX系统中安装　7
　　2.1.2　在OS X系统中安装　8
　　2.1.3　在Windows中安装　9
　　2.2　启动和停止Redis　11
　　2.2.1　启动Redis　11
　　2.2.2　停止Redis　14
　　2.3　Redis命令行客户端　14
　　2.3.1　发送命令　14
　　2.3.2　命令返回值　15
　　2.4　配置　16
　　2.5　多数据库　17
　　第3章　入门　19
　　3.1　热身　19
　　3.2　字符串类型　21
　　3.2.1　介绍　22
　　3.2.2　命令　22
　　3.2.3　实践　26
　　3.2.4　命令拾遗　28
　　3.3　散列类型　32
　　3.3.1　介绍　33
　　3.3.2　命令　34
　　3.3.3　实践　37
　　3.3.4　命令拾遗　39
　　3.4　列表类型　40
　　3.4.1　介绍　41
　　3.4.2　命令　41
　　3.4.3　实践　44
　　3.4.5　命令拾遗　46
　　3.5　集合类型　48
　　3.5.1　介绍　48
　　3.5.2　命令　49
　　3.5.3　实践　52
　　3.5.4　命令拾遗　54
　　3.6　有序集合类型　57
　　3.6.1　介绍　57
　　3.6.2　命令　58
　　3.6.3　实践　62
　　3.6.4　命令拾遗　63
　　第4章　进阶　67
　　4.1　事务　67
　　4.1.1　概述　68
　　4.1.2　错误处理　69
　　4.1.3　WATCH命令介绍　70
　　4.2　生存时间　72
　　4.2.1　命令介绍　73
　　4.2.2　实现访问频率限制之一　75
　　4.2.3　实现访问频率限制之二　76
　　4.2.4　实现缓存　77
　　4.3　排序　78
　　4.3.1　有序集合的集合操作　78
　　4.3.2　SORT命令　79
　　4.3.3　BY参数　81
　　4.3.4　GET参数　83
　　4.3.5　STORE参数　84
　　4.3.6　性能优化　85
　　4.4　消息通知　85
　　4.4.1　任务队列　86
　　4.4.2　使用Redis实现任务队列　87
　　4.4.3　优先级队列　88
　　4.4.4　“发布/订阅”模式　90
　　4.4.5　按照规则订阅　91
　　4.5　管道　92
　　4.6　节省空间　93
　　4.6.1　精简键名和键值　94
　　4.6.2　内部编码优化　94
　　第5章　实践　103
　　5.1　PHP与Redis　103
　　5.1.1　安装　104
　　5.1.2　使用方法　104
　　5.1.3　简便用法　105
　　5.1.4　实践：用户注册登录功能　107
　　5.2　Ruby与Redis　111
　　5.2.1　安装　111
　　5.2.2　使用方法　111
　　5.2.3　简便用法　112
　　5.2.4　实践：自动完成　112
　　5.3　Python与Redis　116
　　5.3.1　安装　116
　　5.3.2　使用方法　116
　　5.3.3　简便用法　117
　　5.3.4　实践：在线的好友　117
　　5.4　Node.js与Redis　123
　　5.4.1　安装　123
　　5.4.2　使用方法　123
　　5.4.3　简便用法　125
　　5.4.4　实践：IP地址查询　127
　　第6章　脚本　131
　　6.1　概览　131
　　6.1.1　脚本介绍　132
　　6.1.2　实例：访问频率限制　132
　　6.2　Lua语言　133
　　6.2.1　Lua语法　134
　　6.2.2　标准库　143
　　6.2.3　其他库　146
　　6.3　Redis与Lua　147
　　6.3.1　在脚本中调用Redis命令　147
　　6.3.2　从脚本中返回值　148
　　6.3.3　脚本相关命令　148
　　6.3.4　应用实例　149
　　6.4　深入脚本　152
　　6.4.1　KEYS与ARGV　152
　　6.4.2　沙盒与随机数　153
　　6.4.3　其他脚本相关命令　154
　　6.4.4　原子性和执行时间　155
　　第7章　管理　157
　　7.1　持久化　157
　　7.1.1　RDB方式　157
　　7.1.2　AOF方式　159
　　7.2　复制　161
　　7.2.1　配置　161
　　7.2.2　原理　163
　　7.2.3 图结构　164
　　7.2.4　读写分离　165
　　7.2.5　从数据库持久化　165
　　7.3　安全　166
　　7.3.1　可信的环境　166
　　7.3.2　数据库密码　166
　　7.3.3　命名命令　167
　　7.4　通信协议　167
　　7.4.1　简单协议　167
　　7.4.2　统一请求协议　169
　　7.5　管理工具　170
　　7.5.1　redis-cli　170
　　7.5.2　phpRedisAdmin　171
　　7.5.3　Rdbtools　173
　　附录A　Redis命令属性　175
　　A.1　REDIS_CMD_WRITE　175
　　A.2　REDIS_CMD_DENYOOM　177
　　A.3　REDIS_CMD_NOSCRIPT　178
　　A.4　REDIS_CMD_RANDOM　179
　　A.5　REDIS_CMD_SORT_FOR_SCRIPT　179
　　A.6　REDIS_CMD_LOADING　179
　　附录B　配置参数索引　181

下载链接: https://pan.baidu.com/s/1OiKm9HDM9tPzJwk1w_3V9Q 密码: hiaf
]]></description><link>https://blog.gaoredu.com/article/147770a1-0f21-4be5-bff3-94f38de91076</link><guid isPermaLink="true">https://blog.gaoredu.com/article/147770a1-0f21-4be5-bff3-94f38de91076</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 16:36:09 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---大规模分布式存储系统 PDF电子版下载]]></title><description><![CDATA[527


目录  · · · · · ·
前言
第1章　概述
1.1　分布式存储概念
1.2　分布式存储分类
第一篇　基础篇
第2章　单机存储系统
2.1　硬件基础
2.1.1　CPU架构
2.1.2　IO总线
2.1.3　网络拓扑
2.1.4　性能参数
2.1.5　存储层次架构
2.2　单机存储引擎
2.2.1　哈希存储引擎
2.2.2　B树存储引擎
2.2.3　LSM树存储引擎
2.3　数据模型
2.3.1　文件模型
2.3.2　关系模型
2.3.3　键值模型
2.3.4　SQL与NoSQL
2.4　事务与并发控制
2.4.1　事务
2.4.2　并发控制
2.5　故障恢复
2.5.1　操作日志
2.5.2　重做日志
2.5.3　优化手段
2.6　数据压缩
2.6.1　压缩算法
2.6.2　列式存储
第3章　分布式系统
3.1　基本概念
3.1.1　异常
3.1.2　一致性
3.1.3　衡量指标
3.2　性能分析
3.3　数据分布
3.3.1　哈希分布
3.3.2　顺序分布
3.3.3　负载均衡
3.4　复制
3.4.1　复制的概述
3.4.2　一致性与可用性
3.5　容错
3.5.1　常见故障
3.5.2　故障检测
3.5.3　故障恢复
3.6　可扩展性
3.6.1　总控节点
3.6.2　数据库扩容
3.6.3　异构系统
3.7　分布式协议
3.7.1　两阶段提交协议
3.7.2　Paxos协议
3.7.3　Paxos与2PC
3.8　跨机房部署
第二篇　范型篇
第4章　分布式文件系统
4.1　Google文件系统
4.1.1　系统架构
4.1.2　关键问题
4.1.3　Master设计
4.1.4　ChunkServer设计
4.1.5　讨论
4.2　Taobao File System
4.2.1　系统架构
4.2.2　讨论
4.3　Facebook Haystack
4.3.1　系统架构
4.3.2　讨论
4.4　内容分发网络
4.4.1　CDN架构
4.4.2　讨论
第5章　分布式键值系统
5.1　Amazon Dynamo
5.1.1　数据分布
5.1.2　一致性与复制
5.1.3　容错
5.1.4　负载均衡
5.1.5　读写流程
5.1.6　单机实现
5.1.7　讨论
5.2　淘宝Tair
5.2.1　系统架构
5.2.2　关键问题
5.2.3　讨论
第6章　分布式表格系统
6.1　Google Bigtable
6.1.1　架构
6.1.2　数据分布
6.1.3　复制与一致性
6.1.4　容错
6.1.5　负载均衡
6.1.6　分裂与合并
6.1.7　单机存储
6.1.8　垃圾回收
6.1.9　讨论
6.2　Google Megastore
6.2.1　系统架构
6.2.2　实体组
6.2.3　并发控制
6.2.4　复制
6.2.5　索引
6.2.6　协调者
6.2.7　读取流程
6.2.8　写入流程
6.2.9　讨论
6.3　Windows Azure Storage
6.3.1　整体架构
6.3.2　文件流层
6.3.3　分区层
6.3.4　讨论
第7章　分布式数据库
7.1　数据库中间层
7.1.1　架构
7.1.2　扩容
7.1.3　讨论
7.2　Microsoft SQL Azure
7.2.1　数据模型
7.2.2　架构
7.2.3　复制与一致性
7.2.4　容错
7.2.5　负载均衡
7.2.6　多租户
7.2.7　讨论
7.3　Google Spanner
7.3.1　数据模型
7.3.2　架构
7.3.3　复制与一致性
7.3.4　TrueTime
7.3.5　并发控制
7.3.6　数据迁移
7.3.7　讨论
第三篇　实践篇
第8章　OceanBase架构初探
8.1　背景简介
8.2　设计思路
8.3　系统架构
8.3.1　整体架构图
8.3.2　客户端
8.3.3　RootServer
8.3.4　MergeServer
8.3.5　ChunkServer
8.3.6　UpdateServer
8.3.7　定期合并&数据分发
8.4　架构剖析
8.4.1　一致性选择
8.4.2　数据结构
8.4.3　可靠性与可用性
8.4.4　读写事务
8.4.5　单点性能
8.4.6　SSD支持
8.4.7　数据正确性
8.4.8　分层结构
第9章　分布式存储引擎
9.1　公共模块
9.1.1　内存管理
9.1.2　基础数据结构
9.1.3　锁
9.1.4　任务队列
9.1.5　网络框架
9.1.6　压缩与解压缩
9.2　RootServer实现机制
9.2.1　数据结构
9.2.2　子表复制与负载均衡
9.2.3　子表分裂与合并
9.2.4　UpdateServer选主
9.2.5　RootServer主备
9.3　UpdateServer实现机制
9.3.1　存储引擎
9.3.2　任务模型
9.3.3　主备同步
9.4　ChunkServer实现机制
9.4.1　子表管理
9.4.2　SSTable
9.4.3　缓存实现
9.4.4　IO实现
9.4.5　定期合并&数据分发
9.4.6　定期合并限速
9.5　消除更新瓶颈
9.5.1　读写优化回顾
9.5.2　数据旁路导入
9.5.3　数据分区
第10章　数据库功能
10.1　整体结构
10.2　只读事务
10.2.1　物理操作符接口
10.2.2　单表操作
10.2.3　多表操作
10.2.4　SQL执行本地化
10.3　写事务
10.3.1　写事务执行流程
10.3.2　多版本并发控制
10.4　OLAP业务支持
10.4.1　并发查询
10.4.2　列式存储
10.5　特色功能
10.5.1　大表左连接
10.5.2　数据过期与批量删除
第11章　质量保证、运维及实践
11.1　质量保证
11.1.1　RD开发
11.1.2　QA测试
11.1.3　试运行
11.2　使用与运维
11.2.1　使用
11.2.2　运维
11.3　应用
11.3.1　收藏夹
11.3.2　天猫评价
11.3.3　直通车报表
11.4　最佳实践
11.4.1　系统发展路径
11.4.2　人员成长
11.4.3　系统设计
11.4.4　系统实现
11.4.5　使用与运维
11.4.6　工程现象
11.4.7　经验法则
第四篇　专题篇
第12章　云存储
12.1　云存储的概念
12.2　云存储的产品形态
12.3　云存储技术
12.4　云存储的核心优势
12.5　云平台整体架构
12.5.1　Amazon云平台
12.5.2　Google云平台
12.5.3　Microsoft云平台
12.5.4　云平台架构
12.6　云存储技术体系
12.7　云存储安全
第13章　大数据
13.1　大数据的概念
13.2　MapReduce
13.3　MapReduce扩展
13.3.1　Google Tenzing
13.3.2　Microsoft Dryad
13.3.3　Google Pregel
13.4　流式计算
13.4.1　原理
13.4.2　Yahoo S4
13.4.3　Twitter Storm
13.5　实时分析
13.5.1　MPP架构
13.5.2　EMC Greenplum
13.5.3　HP Vertica
13.5.4　Google Dremel
参考资料


下载链接: https://pan.baidu.com/s/1PU3h_2pga_b0o00uABxP7Q 密码: syim

]]></description><link>https://blog.gaoredu.com/article/98933628-e859-4e2d-ae38-e14651f244f1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/98933628-e859-4e2d-ae38-e14651f244f1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 03:20:29 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Hadoop权威指南第五版 Pdf下载]]></title><description><![CDATA[526

目录  · · · · · ·第1章 初识Hadoop
数据！数据！
数据存储与分析
与其他系统相比
关系型数据库管理系统
网格计算
志愿计算
1.3.4 Hadoop 发展简史
Apache Hadoop和Hadoop生态圈
第2章 关于MapReduce
一个气象数据集
数据的格式
使用Unix工具进行数据分析
使用Hadoop分析数据
map阶段和reduce阶段
横向扩展
合并函数
运行一个分布式的MapReduce作业
Hadoop的Streaming
Ruby版本
Python版本
Hadoop Pipes
编译运行
第3章 Hadoop分布式文件系统
HDFS的设计
HDFS的概念
数据块
namenode和datanode
命令行接口
基本文件系统操作
Hadoop文件系统
接口
Java接口
从Hadoop URL中读取数据
通过FileSystem API读取数据
写入数据
目录
查询文件系统
删除数据
数据流
文件读取剖析
文件写入剖析
一致模型
通过 distcp并行拷贝
保持 HDFS 集群的均衡
Hadoop的归档文件
使用Hadoop归档文件
不足
第4章 Hadoop I/O
数据完整性
HDFS的数据完整性
LocalFileSystem
ChecksumFileSystem
压缩
codec
压缩和输入切分
在MapReduce中使用压缩
序列化
Writable接口
Writable类
实现定制的Writable类型
序列化框架
Avro
依据文件的数据结构
写入SequenceFile
MapFile
第5章 MapReduce应用开发
配置API
合并多个源文件
可变的扩展
配置开发环境
配置管理
辅助类GenericOptionsParser，Tool和ToolRunner
编写单元测试
mapper
reducer
本地运行测试数据
在本地作业运行器上运行作业
测试驱动程序
在集群上运行
打包
启动作业
MapReduce的Web界面
获取结果
作业调试
使用远程调试器
作业调优
分析任务
MapReduce的工作流
将问题分解成MapReduce作业
运行独立的作业
第6章 MapReduce的工作机制
剖析MapReduce作业运行机制
作业的提交
作业的初始化
任务的分配
任务的执行
进度和状态的更新
作业的完成
失败
任务失败
tasktracker失败
jobtracker失败
作业的调度
Fair Scheduler
Capacity Scheduler
shuffle和排序
map端
reduce端
配置的调优
任务的执行
推测式执行
重用JVM
跳过坏记录
任务执行环境
第7章 MapReduce的类型与格式
MapReduce的类型
默认的MapReduce作业
输入格式
输入分片与记录
文本输入
二进制输入
多种输入
数据库输入（和输出）
输出格式
文本输出
二进制输出
多个输出
延迟输出
数据库输出
第8章 MapReduce的特性
计数器
内置计数器
用户定义的Java计数器
用户定义的Streaming计数器
排序
准备
部分排序
总排序
二次排序
联接
map端联接
reduce端联接
边数据分布
利用JobConf来配置作业
分布式缓存
MapReduce库类
第9章 构建Hadoop集群
集群规范
网络拓扑
集群的构建和安装
安装Java
创建Hadoop用户
安装Hadoop
测试安装
SSH配置
Hadoop配置
配置管理
环境设置
Hadoop守护进程的关键属性
Hadoop守护进程的地址和端口
Hadoop的其他属性
创建用户帐号
安全性
Kerberos和Hadoop
委托令牌
其他安全性改进
利用基准测试程序测试Hadoop集群
Hadoop基准测试程序
用户的作业
云上的Hadoop
Amazon EC2上的Hadoop
第10章 管理Hadoop
HDFS
永久性数据结构
安全模式
日志审计
工具
监控
日志
度量
Java管理扩展（JMX）
维护
日常管理过程
委任节点和解除节点
升级
第11章 Pig简介
安装与运行Pig
执行类型
运行Pig程序
Grunt
Pig Latin编辑器
示例
生成示例
与数据库比较
PigLatin
结构
语句
表达式
1.4.4 类型
模式
函数
用户自定义函数
过滤UDF
计算UDF
加载UDF
数据处理操作
加载和存储数据
过滤数据
分组与连接数据
对数据进行排序
组合和分割数据
Pig实战
并行处理
参数代换
第12章 Hive
1.1 安装Hive
1.1.1 Hive外壳环境
1.2 示例
1.3 运行Hive
1.3.1 配置Hive
1.3.2 Hive服务
1.3.3 Metastore
1.4 和传统数据库进行比较
1.4.1 读时模式（Schema on Read）vs.写时模式（Schema on Write）
1.4.2 更新、事务和索引
1.5 HiveQL
1.5.1 数据类型
1.5.2 操作和函数
1.6 表
1.6.1 托管表（Managed Tables）和外部表（External Tables）
1.6.2 分区（Partitions）和桶（Buckets）
1.6.3 存储格式
1.6.4 导入数据
1.6.5 表的修改
1.6.6 表的丢弃
1.7 查询数据
1.7.1 排序（Sorting）和聚集（Aggregating）
1.7.2 MapReduce脚本
1.7.3 连接
1.7.4 子查询
1.7.5 视图（view）
1.8 用户定义函数（User-Defined Functions）
1.8.1 编写UDF
1.8.2 编写UDAF
第13章 HBase
2.1 HBasics
2.1.1 背景
2.2 概念
2.2.1 数据模型的“旋风之旅”
2.2.2 实现
2.3 安装
2.3.1 测试驱动
2.4 客户机
2.4.1 Java
2.4.2 Avro，REST，以及Thrift
2.5 示例
2.5.1 模式
2.5.2 加载数据
2.5.3 Web查询
2.6 HBase和RDBMS的比较
2.6.1 成功的服务
2.6.2 HBase
2.6.3 实例：HBase在Streamy.com的使用
2.7 Praxis
2.7.1 版本
2.7.2 HDFS
2.7.3 用户接口（UI）
2.7.4 度量（metrics）
2.7.5 模式设计
2.7.6 计数器
2.7.7 批量加载（bulkloading）
第14章 ZooKeeper
安装和运行ZooKeeper
示例
ZooKeeper中的组成员关系
创建组
加入组
列出组成员
ZooKeeper服务
数据模型
操作
实现
一致性
会话
状态
使用ZooKeeper来构建应用
配置服务
具有可恢复性的ZooKeeper应用
锁服务
生产环境中的ZooKeeper
可恢复性和性能
配置
第15章 开源工具Sqoop
获取Sqoop
一个导入的例子
生成代码
其他序列化系统
深入了解数据库导入
导入控制
导入和一致性
直接模式导入
使用导入的数据
导入的数据与Hive
导入大对象
执行导出
深入了解导出
导出与事务
导出和SequenceFile
第16章 实例分析
Hadoop 在Last.fm的应用
Last.fm：社会音乐史上的革命
Hadoop a Last.fm
用Hadoop产生图表
Track Statistics程序
总结
Hadoop和Hive在Facebook的应用
概要介绍
Hadoop a Facebook
假想的使用情况案例
Hive
问题与未来工作计划
Nutch 搜索引擎
背景介绍
数据结构
Nutch系统利用Hadoop进行数据处理的精选实例
总结
Rackspace的日志处理
简史
选择Hadoop
收集和存储
日志的MapReduce模型
关于Cascading
字段、元组和管道
操作
Tap类，Scheme对象和Flow对象
Cascading实战
灵活性
Hadoop和Cascading在ShareThis的应用
总结
在Apache Hadoop上的TB字节数量级排序
使用Pig和Wukong来探索10亿数量级边的 网络图
测量社区
每个人都在和我说话：Twitter回复关系图
（度）degree
对称链接
社区提取
附录A 安装Apache Hadoop
附录B Cloudera’s Distribution for Hadoop
附录C 准备NCDC天气数据
索引


下载链接: https://pan.baidu.com/s/1_yHiLnyiYm54pgpUe4OAqA 密码: e3k7




]]></description><link>https://blog.gaoredu.com/article/4e26cb28-b212-40ca-8308-4f471c4c32a9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4e26cb28-b212-40ca-8308-4f471c4c32a9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 03:16:58 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Head First 设计模式 PDF电子版下载]]></title><description><![CDATA[525


目录  · · · · · ·
引子
谁适合读这本书?
我们知道你的大脑在想什么
元认知
让你的大脑就范
技术审校
致谢
1　欢迎来到设计模式世界：设计模式入门
模拟鸭子应用
Joe想到继承
利用接口如何？
软件开发的不变真理
分开变化和不变部分
设计鸭子的行为
测试鸭子的代码
动态地设置行为
封装行为的大局观
“有一个”比“是一个”更好
策略模式
共享模式词汇的威力
我如何使用设计模式？
设计箱内的工具
习题解答
2　让你的对象知悉现况
气象观测站
认识观察者模式
出版者＋订阅者＝观罕者模式
五分钟短剧：观察主题
定义观察者模式
松耦合的威力
设计气象站
实现气象站
使用Java内建的观察者模式
java.util.Observable的黑暗面
设计箱内的工具
习题解答
……
3　装饰者模式：装饰对象
4　工厂模式：烘烤OO的精华
5　单件模式：独一无二的对象
6　命令模式：封装调用
7　适配器模式与外观模式：随遇而安
8　模板方法模式：封装算法
9　送代器与组合模式：管理良好的集合
10　状态模式：事物的状态
11　代理模式：控制对象访问
12　复合模式：模式中的模式
13　与设计模式相处：真实世界中的模式
A　附录A：剩下的模式


下载链接: https://pan.baidu.com/s/1wFWHsjAx1O5yvtR9wQviOg 密码: qe3h

]]></description><link>https://blog.gaoredu.com/article/e1468787-802e-4ff9-952e-dcc694666fad</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e1468787-802e-4ff9-952e-dcc694666fad</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 03:12:34 GMT</pubDate></item><item><title><![CDATA[我爱科技书库---Effective Java 中文第二版电子版PDF下载]]></title><description><![CDATA[524
目录  · · · · · ·译者序
序
前言
第一章 引言
第二章 创建和销毁对象
第1条：考虑用静态工厂方法代替构造函数
第2条：使用私有构造函数强化singleton属性
第3条：通过私有构造函数强化不可实例化属性
第4条：避免创建重复的对象
条5条：消除对期的对象引用
第6条：避免使用终结函数
第三章 对于所有对象都通用的方法
第四章 类和接口
第五章 C语言结构的替代
第六章 方法
第七章 通用程序设计
第八章 异常
第九章 线程
第十章 序列化
中英文术语对照
参考文献
模式和习惯用法索引
索引



下载链接：链接: https://pan.baidu.com/s/1gLX4p2Ao427Gt4GtiGD87w 密码: y6a4
]]></description><link>https://blog.gaoredu.com/article/57f8a9fd-47d8-469a-9667-55760ecf9e56</link><guid isPermaLink="true">https://blog.gaoredu.com/article/57f8a9fd-47d8-469a-9667-55760ecf9e56</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 03:09:29 GMT</pubDate></item><item><title><![CDATA[2018最新27天带你入门到精通java编程基础视频教程最新]]></title><description><![CDATA[java基础视频教程目录：
523
day01Java基础
day02Java基础
day03Java基础
day03Java基础
day04循环语句
day04循环语句.zip
day05数组
day06面向对象
day07面向对象
day08面向对象
day09面向对象
day10面向对象
day11Eclipse+Object
day12常见对象
day13常见对象
day14常见对象
day15集合框架
day16集合框架
day17集合框架
day18集合框架
day19异常+File
day20IO流
day21IO流
day22IO流
day23复
day24多线程
day25多线程+GUI
day26网络编程
day27反射


下载链接：https://pan.baidu.com/s/1HA0j1Jmwjd2lDjGgWRoK0A 密码：xaqx

再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1



]]></description><link>https://blog.gaoredu.com/article/d5da3826-7de6-4324-96f1-b3e41abcffca</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d5da3826-7de6-4324-96f1-b3e41abcffca</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 31 May 2018 03:05:07 GMT</pubDate></item><item><title><![CDATA[VIP视频抢先看--《唐人街探案》在线观看]]></title><description><![CDATA[bg7.png520

导演: 陈思诚
主演: 王宝强 / 刘昊然 / 肖央 / 刘承羽 / 尚语贤 / 更多...
类型: 喜剧 / 动作 / 悬疑 / 犯罪
上映日期: 2018-02-16(中国大陆)
片长: 121分钟
又名: 唐探2 / Detective Chinatown Vol 2




网友评价：
从第一起案件开始就有的疑问，富翁的儿子和前面的白人女性都是身上有Y字形切口并且内脏被完整取出来了，这需要很高的心理素质和手法吧，普通不应该第一个怀疑是医生或者从事相关行业的人吗？所以从法医一出场并且台词那么多就猜到他是凶手了………………


521
【本站VIP免费在线观影步骤】：
        我爱科技论坛提供最新最好看的电影资源在线观看频道，提供高质量的电影视频解析，支持多个通道的观看，让每一位游客可以不用VIP就可以观看到海量优质的电影/电视剧/美剧等VIP会员才能享有的观影权。
爱奇艺在线观看地址：http://www.iqiyi.com/v_19rr839kro.html#vfrm=2-4-0-1
1.对于爱奇艺，优酷，腾讯等网站需要VIP会员的视频，直接复制视频播放链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员，无广告）






]]></description><link>https://blog.gaoredu.com/article/e572b8c9-bdf4-47dd-86a0-4572abf3d0a0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e572b8c9-bdf4-47dd-86a0-4572abf3d0a0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 29 May 2018 03:21:32 GMT</pubDate></item><item><title><![CDATA[电脑字体自动识别工具，这几款软件就够了]]></title><description><![CDATA[有时候在网上看见一款非常好看的字体，却不知道人家用的是什么字体，甚至有时候在网上的字体库中找了好几个小时都没找到。不用找了，有了这几款字体识别软件工具，轻松识别电脑或者你看到的任意字体。1.第一个工具是What the font,只要指定包含有你想要的字体的图片就可以了，然后指定图片的Url地址就可以轻松识别。http://www.myfonts.com/WhatTheFont/

516
2.第二个软件的名字是求字体，使用方法和第一个差不多http://www.qiuziti.com/
517
3.这个是谷歌浏览器上面的一个插件，直接到谷歌商店中下载即可，如果需要科学上网请参见我爱科技论坛的其他相应模块的科学上网教程。https://chrome.google.com/websto ... lpmlmfcogm?hl=zh-CN
518
4.这个软件和1，2差不多，也是指定图片就可以了。http://www.whatfontis.com/
519


]]></description><link>https://blog.gaoredu.com/article/81152322-49f8-4a34-9cbf-0ba518aff7d1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/81152322-49f8-4a34-9cbf-0ba518aff7d1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 28 May 2018 03:11:25 GMT</pubDate></item><item><title><![CDATA[百度云最新下载不限速安卓手机APK软件新鲜出炉]]></title><description><![CDATA[百度云最新下载不限速安卓手机APK，目前已破解手机下载限速的功能，安卓手机下载测试正常，速度在1Mb左右吧。


514
515


下载链接：https://pan.baidu.com/s/1wjmd-wGA5inOkCw7yPslvQ
]]></description><link>https://blog.gaoredu.com/article/837ce252-728a-45de-ad05-b9dac50a1a70</link><guid isPermaLink="true">https://blog.gaoredu.com/article/837ce252-728a-45de-ad05-b9dac50a1a70</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 26 May 2018 19:23:12 GMT</pubDate></item><item><title><![CDATA[老司机全网磁力搜索神器安卓APP软件，没有搜不到的资源]]></title><description><![CDATA[软件名称：深度磁力（*VIP*）
软件版本：v1.0_破解_会员版
经测试，该软件目前在安卓手机上面运行良好，使用方法也很简单，主需要在搜索框里输入你想要的资源，即可全网搜索出，之后即可复制磁力链到手机/或者到电脑上下载即可，目前也支持在线的功能，只不过需要安卓一个插件，其他的功能老司机们就去亲自测试一下吧！


512
513


看片神器黑科技下载:https://www.lanzous.com/i13s07e 密码:52tech

]]></description><link>https://blog.gaoredu.com/article/7bb64069-985e-468a-b7a0-81ce4a6a0fbe</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7bb64069-985e-468a-b7a0-81ce4a6a0fbe</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 26 May 2018 19:01:03 GMT</pubDate></item><item><title><![CDATA[19款全网最全的手机/电脑数据恢复软件来袭，数据丢失再不怕]]></title><description><![CDATA[511



01－万能数据恢复大师.rar  链接: https://pan.baidu.com/s/1sQinS2A1yYwTf--iR0L3Gg 密码: enfi
02－都叫兽数据恢复v2017.5.22.242中文特别版.rar 链接: https://pan.baidu.com/s/1J5ZIscxsQyYOCIy-2ofGWg 密码: gecj
03－艾奇文件数据恢复软件全能版 v1.20.0308 中文特别版.rar  链接: https://pan.baidu.com/s/1j-Fj2imgpUR9JlIzsv-SvQ 密码: jx9x
04－苹果手机数据恢复工具 iStonsoft iPhone Data Recovery 2.1.41 中文版.rar  链接: https://pan.baidu.com/s/1URI2cM4NHySAwkUvf2Fq6g 密码: niwq
05－USB 数据恢复工具 iStonsoft USB Data Recovery 2.1.25 中文多语版.rar  链接: https://pan.baidu.com/s/1UxmQrRZve89KIwnHO1iJAg 密码: 6p7a
06－数据恢复工具 iStonsoft Data Recovery 2.1.37 中文多语版.rar 链接: https://pan.baidu.com/s/163xWhMXUNwHEtwmMpT1VTw 密码: uak8
07－超强数据恢复反删除工具 R-Studio 8.5 build 170117 中文多语版.rar  链接: https://pan.baidu.com/s/17SkTTva6SW67tdOZdjn39Q 密码: 8mu8
08－数据恢复工具 FILERECOVERY 2016 Enterprise 5.5.9.7 中文版.rar 链接: https://pan.baidu.com/s/1mojYikT3_qlvVK0P8Af2EQ 密码: ezvr
09－专业数据恢复工具 7-Data Recovery Suite 4.2 中文企业版.rar  链接: https://pan.baidu.com/s/1voeyZBjGgQqwW9TIk9MEMw 密码: jypx
10－硬盘数据恢复王 ApowerRecover 1.0.3 中文多语免版.rar 链接: https://pan.baidu.com/s/1XF63io6_w2SIecwjolurmQ 密码: jhq4
11－照片数据恢复工具 Ashampoo Photo Recovery 1.0.5 中文多语版.rar  链接: https://pan.baidu.com/s/1uBQHUAjw6kwmc8owVPGhJw 密码: qqje
12－SD卡数据恢复工具7-Data Card Recovery 1.5 中文多语版.rar  链接: https://pan.baidu.com/s/1M3DBWTM93UdoMBH5NnVDfQ 密码: 4jkd
13－数据恢复工具Wise Data Recovery 3.87 + Portable 绿色中文版.rar  链接: https://pan.baidu.com/s/1IyDfHZluG8Arllb3JssUng 密码: vn8e
14－数据恢复工具SanDisk RescuePro Deluxe 5.2.6.6 中文多语版.rar  链接: https://pan.baidu.com/s/13wA16_eCOpOTuVT1QRJj2A 密码: 4bqr
15－顶尖数据恢复软件.rar  链接: https://pan.baidu.com/s/1sqgjxbJAv5gewoDrlABxpw 密码: ag3r
16－安卓数据恢复工具7-Data Android Recovery 1.4 中文多语版.rar  链接: https://pan.baidu.com/s/1CSl71M890EbL7v-nO2ripw 密码: j522
17－iOS 数据恢复工具4Videosoft iOS Data Recovery 8.0.50 中文汉化版.rar  链接: https://pan.baidu.com/s/1-M7tedfrn7VjUVBaY-hMsw 密码: ve39 
18－数据恢复工具iCare Data Recovery Pro 6.2 中文汉化特别版.rar  链接: https://pan.baidu.com/s/1lVzct1tghY4LmD9vMHdPsQ 密码: fygx
19－安卓数据恢复工具EaseUSMobiSaverforAndroidV4.1.zip  链接: https://pan.baidu.com/s/1Cj92RuVqcmEoYHduhCdFeA 密码: tdbp



]]></description><link>https://blog.gaoredu.com/article/b54a9828-a29b-4b39-9467-f7e634ad5ec6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b54a9828-a29b-4b39-9467-f7e634ad5ec6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 25 May 2018 16:59:01 GMT</pubDate></item><item><title><![CDATA[价值400多元的电脑硬盘数据恢复实用视频教程]]></title><description><![CDATA[视频内容主要包含以下六个部分：

1.数据恢复基础课
2.FAT32数据恢复
3.NTFS数据恢复
4.EXFAT数据恢复
5.分区表数据恢复
6.数据恢复综合案例

课程包含分区表、FAT32文件系统、和NTFS文件系统的数据结构和数据恢复方法，以及数据恢复的综合案例，基本上涉及到了目前电脑常用的基本硬盘格式。
510


网盘：https://pan.baidu.com/s/1AgbWB9bO75kVu8K2u3xnQA 密码: uhju


]]></description><link>https://blog.gaoredu.com/article/bca30c35-ae46-4823-8282-e231c21cd267</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bca30c35-ae46-4823-8282-e231c21cd267</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 24 May 2018 03:09:09 GMT</pubDate></item><item><title><![CDATA[六十套WEB渗透&amp;安卓逆向视频教程带你深入玩转Windows安全攻防渗透实战]]></title><description><![CDATA[包含Windows攻防、SQL注入、网络安全、安卓漏洞分析，黑客技术、办公安全等实用黑科技攻防视频教程：
509


网盘：https://pan.baidu.com/s/1_5CsNarh9K1QXtqW7346ag 密码:jzbj


共享文件夹：https://pan.baidu.com/s/4htl7Kwc

如果链接失效请访问：WEB渗透实战教程【包括无线网/KaliLinux系列教程】
http://www.52tech.tech/forum.php?mod=viewthread&tid=41&fromuid=1



]]></description><link>https://blog.gaoredu.com/article/dd2b34a4-ca1e-478e-931c-ff85f477742e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dd2b34a4-ca1e-478e-931c-ff85f477742e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 24 May 2018 03:03:14 GMT</pubDate></item><item><title><![CDATA[一键开启Opera浏览器自带科学上网功能（浏览器福利）]]></title><description><![CDATA[1.到官网去下载Opera浏览器最新的版本，官网：https://www.opera.com/zh-cn
502
2.在本机的系统里面找到设置——区域和语言，将国家或地区设置为：中国台湾


504
3.在浏览器地址栏输入：opera://settings 回车进入设置页，浏览选项将opera浏览器的语言设置成中文繁体，然后直接重启浏览器
505
4.进入opera浏览器设置页，点击 隐私&安全 把VPN科学上网功能开启即可
506
5.最终开启的效果如下，快速开启你的科学上网浏览器Surfing生活
507


注意事项：
成功开启科学上网的关键在于两点：
1.更改计算机默认位置到国外
2.是更改浏览器默认语言
以上两者经测试缺一不可
设置好之后，浏览器的语言改回简体中文不影响已经开启的功能
]]></description><link>https://blog.gaoredu.com/article/539cb2c5-5164-4071-b6ca-d8896ff971ec</link><guid isPermaLink="true">https://blog.gaoredu.com/article/539cb2c5-5164-4071-b6ca-d8896ff971ec</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 21 May 2018 23:06:41 GMT</pubDate></item><item><title><![CDATA[WPS Office绿色去广告免安装破解版本]]></title><description><![CDATA[wps office 2018绿色优化版，它具有运行速度快、体积小巧、强大插件平台支持、免费提供海量在线存储空间及文档模板、支持阅读和输出PDF文件、全面兼容微软Office97-2013格式等独特优势;目前软件已经去掉了广告，支持一键免安装快速启动，功能界面基本上完全一样！
绿色版本特点：
—去wpsupdate_res.dll校验
—去“WPS云文档”虚拟磁盘
—去WPS热点并禁止后台下载相关文件
—禁止添加计划任务、禁止后台下载更新文件
—去备份管理下方金山数据恢复大师的广告
—去字体里的在线字体并禁止后台下载相关文件
—禁止打开程序后弹窗WPS文档漫游首页tab
—去无联网版提示登录进程异常的Tips
—去特色功能docer稻壳儿、用户反馈按钮
—去左上角WPS 文字(演示、表格)图标:帮助菜单
—去两款旧版皮肤(两款皮肤似乎以过了辉煌的时代)
—禁止打开程序后弹窗在线模版tab、禁止按F1弹出帮助
—去右上角帮助、wps热点两个按钮，去开发工具说明按钮
—去保存文档时提示文档保存至本地,建议上传至云文档,更安全的Tips
—去菜单- 帮助- 表格帮助、微博求助、论坛、新特性、产品中心、检查更新
注：绿化后如果桌面右键没有WPS新建项，刷新桌面或重启资源管理器即可!

501

下载链接：https://pan.baidu.com/s/1Ti2UHcERHFXW_g5viRnWyA
网盘密码：1k2v

]]></description><link>https://blog.gaoredu.com/article/eab3e6c9-983e-49c4-8540-16836e721006</link><guid isPermaLink="true">https://blog.gaoredu.com/article/eab3e6c9-983e-49c4-8540-16836e721006</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 20 May 2018 20:41:27 GMT</pubDate></item><item><title><![CDATA[如何让你的计算机定时执行任务工具（支持重启，关机，断电，休眠等）]]></title><description><![CDATA[owerOff是一个免费小巧功能强大的关机管理工具，通过PowerOff您可以设定不同时间，让它自动实现注销、重新启动、关机、切断电源、待机、休眠、锁定、远程唤醒等多项功能。PowerOff支持远程控制计算机，支持关机前提示信息、关机前运行程序、强制结束进程、声音提示等功能。Power定时关机支持开机自动运行，可最小化到系统托盘，使用方便。
这个黑科技软件使用截图如下：
499
500
下载链接：https://pan.baidu.com/s/17a8M_R3NiiOCIubuYPlI3g
网盘密码：eg1l

]]></description><link>https://blog.gaoredu.com/article/0adcffa7-61b4-49f5-b515-8bdf516bf26b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0adcffa7-61b4-49f5-b515-8bdf516bf26b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 20 May 2018 20:35:03 GMT</pubDate></item><item><title><![CDATA[如何不安装安卓模拟器直接用电脑键盘玩手机游戏或软件呢]]></title><description><![CDATA[这个软件可以帮助你用鼠标键盘玩手机游戏，无需安装模拟器，基本上可以保持手机和电脑屏幕的同步传输，画质的话就不是特别好，基本的操作还是比较流畅的，也不用 ROOT 权限，可将手机游戏投屏到电脑上进行游戏直播。
测试效果如下：
496
497
498


对电脑要求的配置相对于模拟器较低，也没有模拟器的经常性卡顿现象，操作是比较流畅的，缺点画质太低，投影到电脑上画质就有点差了，其他的相对来说还是不错的。


软件下载链接：点我下载

]]></description><link>https://blog.gaoredu.com/article/e53d423e-8c88-4e4c-a6d3-3a9f1e9b7df8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e53d423e-8c88-4e4c-a6d3-3a9f1e9b7df8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 20 May 2018 19:44:23 GMT</pubDate></item><item><title><![CDATA[OCR图片转文字利器+屏幕截图转文字最新功能加强升级版本]]></title><description><![CDATA[1.OCR最新软件的功能界面如下，中间的部分是一个图片预览区域，可以直接把图片拖进来就可以直接识别，支持百度/搜狗接口的切换等功能，此外可以设置转换文字后的文字基本格式设置。
494
2.截图的效果如下，识别准确率还是挺高的，在90%以上吧，建议使用搜狗的接口
495


黑科技软件下载：https://pan.baidu.com/s/1N4vyaoBXSxRs0RZXpI7GLQ
网盘密码：4nop
]]></description><link>https://blog.gaoredu.com/article/1217652b-5c08-42e0-8efb-57b3f93d47a7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1217652b-5c08-42e0-8efb-57b3f93d47a7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 20 May 2018 19:36:06 GMT</pubDate></item><item><title><![CDATA[使用Python抓取腾讯宜出行热力图数据实战]]></title><description><![CDATA[491
1.具体的抓取程序已经放在后面了，供大家下载安装，下面具体说一下使用方法。
本软件使用了渔网形式来抓取腾讯宜出行的热力图数据，使用要准备号一张你要进行抓取的目标城市的shape文件，在ArcGIS中打开这个文件后，使用前现在ArcGiS软件中生成渔网操作，在数据管理工具->要素类->创建渔网来进行创建一个渔网。具体的步骤已经截图如下：
492


2.将图层属性中的坐标设置为投影坐标，然后加载shp文件，再使用创建渔网工具进行渔网创建，选择你需要创建渔网的图层，勾选创建标注点，同时像元高度和像元宽度设置为2600（即2.6km），其他参数默认即可。我们需要的使渔网的标注点，删除不需要的标注点，之后设置图层属性中坐标系为wgs1984，生成wgs1984坐标下的经纬度，即可导入宜出行工具中使用。


3.下面把整个程序的主文件目录介绍一下
3.1 chromedriver.exe是你需要使此程序正常跑起来的一个谷歌浏览器驱动，将这个驱动放在你的谷歌浏览器的安装目录，并且把驱动的路径添加到系统环境变量
3.2 data.txt 是我们刚才使用ArcGIS生成的渔网坐标点数据
3.2 main.py 这是我们的爬虫主程序，提前在你的电脑上面配置好Python3.6版本的环境，然后在DOS窗口直接使用python main.py即可运行主程序
3.3 qqlist.py 由于每个QQ有爬取次数限制，大概在120次左右吧，所以这里可以设置多个QQ号，一个QQ号反扒了之后会自动切换到另外一个QQ继续爬取数据
3.4 run.bat 如果你不想输入刚才的DOS命令运行这个程序，那就直接双击这个文件即可运行
3.5 settings.py 这个是程序要抓取的目标地区的输入参数，例如目标城市，城市四至界限的经纬度等
3.6 transCoordinateSystem.py 腾讯坐标系与其他坐标系的相互转换
493


程序下载链接：链接：https://share.weiyun.com/59JIwFH 密码：25zu2p
关于本程序的更多使用说明，文章内容版权请参见文章：https://zhuanlan.zhihu.com/p/30772570
]]></description><link>https://blog.gaoredu.com/article/55bc7233-ff81-4f62-aa70-21a308c29440</link><guid isPermaLink="true">https://blog.gaoredu.com/article/55bc7233-ff81-4f62-aa70-21a308c29440</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 12 May 2018 03:31:26 GMT</pubDate></item><item><title><![CDATA[有了这个黑科技软件，轻松刷完大学生超星在线课堂课程]]></title><description><![CDATA[软件的使用步骤如下：1.打开软件之后，进入登录界面，输入用户名和密码后即可登录
487


2.然后就进入到了刷课界面，选择课程开始进行刷课


488




3.接下来就不用管它了，就可以去干其他事了，基本上就可以自动刷课
489




这个黑科技软件经测试无毒，下面晒出下载链接：
下载:https://pan.lanzou.com/i0dy4fg 密码:fhb6
]]></description><link>https://blog.gaoredu.com/article/8a078f14-9936-4142-83b7-719a796b73dd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8a078f14-9936-4142-83b7-719a796b73dd</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 11 May 2018 02:47:59 GMT</pubDate></item><item><title><![CDATA[考研政治考点解析及答题技巧资料共享]]></title><description><![CDATA[5-政治大纲解析配套习题练习1600题.doc链接: https://pan.baidu.com/s/18drDwWB_4Zij-cp3xJtWDg 密码: adgx


6-政治：徐之明—中国近代史纲要必考点框架经典总结（脉络清晰）.doc链接: https://pan.baidu.com/s/1YivRNa7o2URazHo8f7gsFA 密码: aw37


7-政治：毛概总结-重点鲜明.doc链接: https://pan.baidu.com/s/1189qiYgIfTUMiWlUQ7KRXw 密码: 5e5g


8-政治主观题答题技巧.doc链接: https://pan.baidu.com/s/1-sq4v2e_7IZdE9Ykp0UoEw 密码: skwu


9-政治终极笔记-点睛班专用.doc链接: https://pan.baidu.com/s/1tzh7sfQ2709UlqJBxis4VA 密码: ct48


]]></description><link>https://blog.gaoredu.com/article/2ced5673-7105-4654-bc7f-2cf0e89c2e3a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2ced5673-7105-4654-bc7f-2cf0e89c2e3a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 06 May 2018 18:03:39 GMT</pubDate></item><item><title><![CDATA[2018最新考研英语历年真题打印版及权威答案解析]]></title><description><![CDATA[2010年考研英语（二）真题及参考答案.pdf链接: https://pan.baidu.com/s/1Rm-YGrhvYHRb9ZYuQT33kQ 密码: wb58


2011年考研英语（二）真题及参考答案.docx链接: https://pan.baidu.com/s/1Pmyi1lMs88SHkywOnvVfkw 密码: fk1d


2011年考研英语（一）真题及参考答案.doc链接: https://pan.baidu.com/s/1e5g9Mbe--cdiY-zyMQ8fhw 密码: 2ehj


2012年考研英语（二）真题及参考答案.docx链接: https://pan.baidu.com/s/1TY9_tQiX9BxrhPXIatY5vQ 密码: wr22


2012年考研英语（一）真题及参考答案.pdf链接: https://pan.baidu.com/s/1yklLBdin5gwHlYQmITVbpg 密码: snbn


2013年考研英语（二）真题及参考答案.doc链接: https://pan.baidu.com/s/1uFp2pYZh4qtA3hn1U9owEQ 密码: wyct


2013年考研英语（一）真题及参考答案.doc链接: https://pan.baidu.com/s/1gPImPsDnjsSyYT4i21tZQg 密码: jsc5


2014年考研英语（二）真题及参考答案.doc链接: https://pan.baidu.com/s/1GNpXAO0x_1136AEutchPOA 密码: ut5q


2014年考研英语（一）真题及参考答案.doc链接: https://pan.baidu.com/s/10rtenW9m61pScqvHnS3K2Q 密码: e6qm


31年考研英语真题及答案(1980-2010年).doc链接: https://pan.baidu.com/s/1GdDE2cbUYEy0fQIO0Ngk4g 密码: 8m5k

]]></description><link>https://blog.gaoredu.com/article/2852e9d5-f461-4cd1-96d0-e297b9b6caf4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2852e9d5-f461-4cd1-96d0-e297b9b6caf4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 May 2018 20:24:40 GMT</pubDate></item><item><title><![CDATA[【安卓开发】传智播客76期安卓视频教程分享]]></title><description><![CDATA[14_Android源码级分析(day69)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0713_百度地图(day68)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0712_面试题详解(day67)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0711_智能家居(day66)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0710_android5.0新特性+android studio(day65)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0709_开源中国(day59-day64)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0708_QQ5.0特效专辑(day57-day58)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0707_谷歌电子市场(day51-day56)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0706_智慧北京(day44-day50)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0705_JNI(day41-day43)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0704_自定义控件(day39-day40)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0703_手机安全卫士(day26-day38)(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0702Android基础(更多视频教程关注微信公众号【我爱科技论坛】)-2017-01-15 17:0701Java基础(更多视频教程关注微信公众号【我爱科技论坛】)
-2017-01-15 17:07

下载链接: http://pan.baidu.com/s/1kUKkTBT
 密码: nyh8


【安卓基础】基于Androidstudio的安卓从入门到精通全套视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=767&fromuid=1
价值千元的最新版老罗安卓开发从零到精通实战视频教程（共两季）

https://www.52tech.tech/forum.php?mod=viewthread&tid=21&fromuid=1
黑马28期Android全套视频无加密完整版下载

https://www.52tech.tech/forum.php?mod=viewthread&tid=80&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/02107e08-17f6-413a-ba52-5f4990ff180b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/02107e08-17f6-413a-ba52-5f4990ff180b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 May 2018 05:34:17 GMT</pubDate></item><item><title><![CDATA[安卓开发工具Android studio及其相关套件离线下载]]></title><description><![CDATA[1.主要是Android Studio的离线安装包下载，
Android Studio 3.0 最新国内下载地址： https://pan.baidu.com/s/1qYx1MXI
2.推荐使用下面的方法来安装SDK文件,使用代理的方式：
国内高校的开源镜像站代理如下：
中国科学技术大学(debian.ustc.edu.cn)
上海交通大学(ftp.stju.edu.cn)
大连理工大学(mirror.dlut.edu.cn)
北京交通大学(mirror.bjtu.edu.cn)
北京理工大学(mirror.bit.edu.cn)
东北大学(mirror.neu.edu.cn)
厦门大学(mirrors.xmu.edu.cn)
兰州大学(mirror.lzu.edu.cn)
西安电子科技大学(linux.xidian.edu.cn)
哈尔滨工业大学(run.hit.edu.cn)
天津大学(mirror.tju.edu.cn)
东软信息学院(mirrors.neusoft.edu.cn)
电子科技大学(mirrors.stuhome.net)

3.使用方法：

File-settings-Http Proxy打开后，这只为如下格式：
483
这样问题就解决了

]]></description><link>https://blog.gaoredu.com/article/6abfaa21-5742-4d77-9683-034aaba972cc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6abfaa21-5742-4d77-9683-034aaba972cc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 05 May 2018 04:47:43 GMT</pubDate></item><item><title><![CDATA[最新可用的迅雷破解版软件-破解年费SVIP7，下载速度可提升10倍以上]]></title><description><![CDATA[1.破解年费SVIP7下载限制去除自动更新绿色典藏版，功能简单介绍一下，去除了下载加速限制，去除了软件自动更新功能，同时可以在迅雷影音中直接播放视频；2.使用方法，下载软件安装包之后，直接解压文件即可，然后在Program文件夹里面找到Thunder.exe文件，双击打开文件即可，然后使用自己的迅雷账号登录即可
3.主要问题：对于网络中的冷门的资源和敏感资源暂时无法下载

482



这个黑科技软件经过下载测试，下载速度完全可以轻松提升10倍以上，黑科技软件下载链接：链接：https://share.weiyun.com/5SL8SQU 密码：diqn9s

]]></description><link>https://blog.gaoredu.com/article/fb794117-baf5-47c0-a0ba-214b3edd6aac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fb794117-baf5-47c0-a0ba-214b3edd6aac</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 03 May 2018 23:31:44 GMT</pubDate></item><item><title><![CDATA[U盘中常用的黑科技Windows软件安装包绿色破解版]]></title><description><![CDATA[常用的Windows软件便携绿色破解版软件如下：
477
主要软件介绍：
1.360断网DNS急救箱，软件是个小工具版本的，直接双击可用，无需安装
478
2.Windows常用运行库文件修复（Dll文件修复），如果电脑装机后出现少了什么Dll文件的情况，用这个文件修复一下就可以了
479
3.kCleaner软件工具，主要是金山毒霸里面的垃圾清理工具的单文件版本，以后不用安装金山毒霸软件就可以清理电脑上面的垃圾了，快去试试看
480
4.Potplayer播放器：目前使用过的最纯净功能最多的万能视频播放器软件，推荐大家都去试试看，而且还可以看电视直播，直播看电影，只需要导入响相应的一个配置文件或者播放地址就可以了
481


主要的软件总共分享的有三十个左右吧，其他的软件可以直接去分享的目录文件中去测试下载吧！
软件目录：
BANDIZIP.EXE
bandizipXP专用/5.19.EXE
 HEU_KMS_Activator_v11.1.0.exe
IDM v6.30b6 Full-20180115.exe
IDM清理重置及注册假冒序列号工具，exe
PanDownload.exe
DPotPlayer x86 1.7.10667 美化版20180。。
PP视须V4.2.2.0004.exe
QQ音乐15.9.0 Lite 20180410.exe
网 Qwins1.6.8(20180212）.exe
TencentVide _v10.7.1441.0.7z
TIM 2.1.8.23475 Lite 20180412.exe
U盘加速exe
窗WeGame3.6.1.5080.exe
Wise_Care _365_Pro_v4.8.4.466.exe
WpS Office Pro 10.8.0.6423-2018012。。
阿里旺旺买家版v9.12.03C.exe
爱奇艺V6.0.46.4598.exe
暴风影音V5.75.0418.1111.exe
冰点文库下载器.exe
多功能校验工具.exe
福听阅读器优化版.exe
格式工厂4.3.0.7z
火城4.0.58.4.exe
开机加速.exe
图看图王.exe
酷我音乐v8.7.7.0-BCS37破解豪华VIP
鲁大师V5.15.17.1065.exe
驱动精灵V9.61.418.1421.exe
驱动精灵免安装螺色版.exe
驱动精灵万能网卡版.exe
接狗拼音输入法8.9.0.2180去广告精简优。。
金网易云音乐v2.4.0.196402绿色便捷版.7z
央规影音V4.5.0.1.exe
今影子系统exe


下载链接：链接：https://share.weiyun.com/5O9m8zQ 密码：ungwtq



]]></description><link>https://blog.gaoredu.com/article/c6a665de-e9d1-42a4-8094-dd3686a43cdf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c6a665de-e9d1-42a4-8094-dd3686a43cdf</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 03 May 2018 23:03:28 GMT</pubDate></item><item><title><![CDATA[VIP视频抢先看《后来的我们在线观看》]]></title><description><![CDATA[
473


导演: 刘若英
主演: 井柏然 / 周冬雨 / 田壮壮 / 苏小明 / 张子贤 / 更多...
又名: Us and Them



剧情简介：
　这是一个爱情故事，关于一对异乡漂泊的年轻人。 
　　十年前，见清和小晓偶然地相识在归乡过年的火车上。两人怀揣着共同的梦想，一起在北京打拼，并开始了一段相聚相离的情感之路。 
　　十年后，见清和小晓在飞机上再次偶然重逢…… 
　　命运似乎是一个轮回。在一次次的偶然下，平行线交叉，再平行，故事始终有“然后”。可后来的他们，学会如何去爱了吗？

网友评价：
倘或有一天 
不值得你去尽力
或者你尽力也无法达到的彼岸 
就不要想
便继续投奔人潮 
愧怍是你的自我救赎
而不能救赎除你之外的任何人 



迅雷种子链接：magnet:?xt=urn:btih:33Q3WFGI6ARVYQQZ5QP3S7P42FT6J5C7&。
【本站VIP免费在线观影步骤】：
1.对于爱奇艺，优酷，腾讯等网站需要VIP会员的视频，直接复制视频播放链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员，无广告）
]]></description><link>https://blog.gaoredu.com/article/487e40bd-d0f9-4ef6-9c22-f55dc96e8180</link><guid isPermaLink="true">https://blog.gaoredu.com/article/487e40bd-d0f9-4ef6-9c22-f55dc96e8180</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 01 May 2018 03:50:34 GMT</pubDate></item><item><title><![CDATA[[Discuz网站美化]如何添加代码实现富强民主文明鼠标点击效果]]></title><description><![CDATA[1.以前大多数看到的是在Wordpress博客网站添加鼠标点击效果，但是呢目前还没有关于Discuz网站添加鼠标点击效果的实现步骤，下面就来实现一波；具体的代码我已经封装成了一个函数，addMousePower()函数，具体如下：<font size="5"><font size="4">function addMousePower(){
        
                /* 鼠标点击特效 */
                    var a_idx = 0;
                    jQuery(document).ready(function($) {
                        $("body").click(function(e) {
                    var a = new Array("富强", "民主", "文明", "和谐", "自由", "平等", "公正" ,"法治", "爱国", "敬业", "诚信", "友善");
                    var $i = $("<span/>").text(a);
            a_idx = (a_idx + 1) % a.length;
                    var x = e.pageX,
            y = e.pageY;
            $i.css({
    "z-index": 999999999999999999999999999999999999999999999999999999999999999999999,
    "top": y - 20,
    "left": x,
    "position": "absolute",
    "font-weight": "bold",
    "color": "#ff6651"
            });
            $("body").append($i);
            $i.animate({
    "top": y - 180,
    "opacity": 0
            },
            1500,
    function() {
                $i.remove();
            });
        });
    });
        }

        window.onload = addMousePower;</font></font>2.但是我们发现这段代码竟然是使用JQuery写的，如果直接拿来用的话肯定是不得行的，怎么办呢？经过笔者测试，Discuz网站的js模块集中在static/js/这个文件目录下，而且这里面的函数也基本上都是用JQuery写的，好的，问题解决！
472

3.我是把这块代码放在了common.js这个文件下了，经过测试是可以正常使用的，快去试试看！
注意事项：
1.在使用的时候别少了window.onload=addMousePower()这个函数，否则是没有效果的；
2.更改完毕之后记得去后台，工具里面更新一下缓存；
3.代码的具体位置可以放在common.js文件的最下面就行。





]]></description><link>https://blog.gaoredu.com/article/a4af7548-11b3-4ece-9ead-d98f27ce5505</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a4af7548-11b3-4ece-9ead-d98f27ce5505</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 30 Apr 2018 21:04:54 GMT</pubDate></item><item><title><![CDATA[装逼神器，使用DOS一键加速百度云（破解百度云加速DOS命令）]]></title><description><![CDATA[1.环境准备
需要准备工具：
Windows系统，CMD命令行，BaiduPCS-GO插件。
BaiduPCS-GO插件下载地址：链接: https://pan.baidu.com/s/1NYCpxJ7GgIBAlryaPWRcbg 密码: ubg2


2.下载完毕之后，将软件.exe文件添加到系统的环境变量
466
3.在DOS窗口输入命令：
Win+R键运行CMD，输入BaiduPCS-Go
467

3.记录浏览器Cookie信息
在百度网页上登陆你的账号，打开Cookie，找到BDUSS，复制Cookie的内容信息（效果如下）
468

4.输入下面的命令：login -bduss=刚才复制的cookie内容信息
469
5.如果提示登录成功的话就可以测试下载文件了，速度还是蛮快的哈，快去试试看吧！
470





]]></description><link>https://blog.gaoredu.com/article/a02b49c9-a14a-4080-a820-2a372bbafbb6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a02b49c9-a14a-4080-a820-2a372bbafbb6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 30 Apr 2018 19:00:25 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛微信公众号介绍]]></title><description><![CDATA[bg4.png我爱科技论坛（www.52tech.tech）旨在打造全网最大的免费资源共享平台。目前论坛包括考研资料、编程学习、黑科技/科学上网、开源软件等资源模块，竭力服务于正在学习道路上的每一个人。我爱科技论坛，爱科技，更爱分享。致力于营造一个资源丰富、内容完善的大型网络学习交流资源共享平台！
我爱科技论坛微信主界面：
463
我爱科技论坛最新推荐模块：
464


我爱科技论坛微信公众号二维码：
465
]]></description><link>https://blog.gaoredu.com/article/7e36f5ef-cfb2-4c39-81b0-4150cd1b5e15</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7e36f5ef-cfb2-4c39-81b0-4150cd1b5e15</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 28 Apr 2018 03:47:41 GMT</pubDate></item><item><title><![CDATA[我爱科技轮官方QQ群介绍]]></title><description><![CDATA[bg4.png我爱科技论坛（www.52tech.tech）旨在打造全网最大的免费资源共享平台。目前论坛包括考研资料、编程学习、黑科技/科学上网、开源软件等资源模块，竭力服务于正在学习道路上的每一个人。我爱科技论坛，爱科技，更爱分享。致力于营造一个资源丰富、内容完善的大型网络学习交流资源共享平台！
QQ群介绍：本群创建于2017/2/3:  这是一个集齐考研资料，编程学习，书籍资料，原创资料和开源软件等模块为一体的论坛社区，大家可以在这里畅所欲言，分享或者下载需要的任何资料！
461
QQ群号码：78925824
QQ群二维码：
462

]]></description><link>https://blog.gaoredu.com/article/ae263dab-294a-4902-990b-6a1d3250797e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ae263dab-294a-4902-990b-6a1d3250797e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 28 Apr 2018 03:36:15 GMT</pubDate></item><item><title><![CDATA[【Python学习】对异常的处理机制]]></title><description><![CDATA[1.异常的抛出
# encoding=UTF-8
class ShortInputException(Exception):
    '''一个由用户定义的异常类'''
    def __init__(self, length, atleast):
        # 让这个自定义的异常继承于Exception类
        Exception.__init__(self)
        self.length = length
        self.atleast = atleast

try:
    text = input('Enter something --> ')
    if len(text) < 3:
        # 抛出异常
        raise ShortInputException(len(text), 3)


# 其他工作能在此处继续正常运行
except EOFError:
    print('Why did you do an EOF on me?')
except ShortInputException as ex:
    print(('ShortInputException: The input was ' +
           '{0} long, expected at least {1}')
          .format(ex.length, ex.atleast))
else:
    print('No exception was raised.')
2.异常的处理
try :
    text = input('Enter something -->')
except EOFError:
    print('EOF error')
except KeyboardInterrupt:
    print('KeyboardInterrupt error')
else:
    print('You entered {}'.format(text))3.异常的Finally
import sys
import time


f = None
try:
    # 打开文件
    f = open("poem.txt")
    # 我们常用的文件阅读风格
    while True:
        # 开始读取文件
        line = f.readline()
        if len(line) == 0:
            break
        print(line, end='')
        # 使得控制台中输出与的内容可以立马显示出来
        sys.stdout.flush()
        print("Press ctrl+c now")
        # 为了确保它能运行一段时间
        # time.sleep 函数任意在每打印一行后插入两秒休眠
        time.sleep(2)
except IOError:
    print("Could not find file poem.txt")
except KeyboardInterrupt:
    print("!! You cancelled the reading from the file.")
finally:
    if f:
        # 关闭文件流
        f.close()
print("(Cleaning up: Closed the file)")

]]></description><link>https://blog.gaoredu.com/article/fb20eedb-4559-4cfa-b9e7-452e52c995e2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fb20eedb-4559-4cfa-b9e7-452e52c995e2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 28 Apr 2018 03:20:53 GMT</pubDate></item><item><title><![CDATA[【Python学习】Python面向对象编程]]></title><description><![CDATA[实例1
class Person:
    # 相当于构造函数
    def __init__(self, name):
        self.name = name
    def say_hello(self):
        print('Hello, how are you today?', self.name)


# 创建对象并调用对象的方法
p = Person('haha')
p.say_hello()

# 创建一个匿名对象并且调用它自己的方法
Person('Xiuxiu').say_hello()实例2
# coding = UTF-8

class Robot:
    """
    表示一个带有名字的机器人
    """

    # 定义一个类变量，用于统计机器人的数量
    population = 0

    def __init__(self, name):
        """初始化数据"""
        self.name = name
        print('(Initializing{})'.format(self.name))

        # 对象创建以后数量就增加1
        Robot.population += 1;
    def die(self):
        """对象挂了"""
        print("{} is being destroyed!".format(self.name))

        Robot.population -= 1

        if Robot.population == 0:
            print('{} was the last one '.format(self.name))
        else:
            print('There are still {:d} robots working '.format(Robot.population))
    def say_hi(self):
        """机器人的问候"""

        print('Welcome'.format(self.name))



    # 这是一个类方法，可以不用实例化就可以直接调用这个方法（相当于是一个静态方法）
    @classmethod
    def how_many(cls):
        """打印出当前的人口数量"""
        print('We have {:d} robots'.format(cls.population))


droid1 = Robot("R2-D2")
droid1.say_hi()
Robot.how_many()

droid2 = Robot("C-3PO")
droid2.say_hi()
Robot.how_many()

print("\nRobots can do some work here.\n")
print("Robots have finished their work. So let's destroy them.")
droid1.die()
droid2.die()

Robot.how_many()
# 输出文档字符串
print(droid1.__doc__)实例3：对继承的理解
# coding = UTF-8

class SchoolMember:
    '''代表任何学校里的成员。'''
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('(Initialized SchoolMember: {})'.format(self.name))
    def tell(self):
        '''告诉我有关我的细节。'''
        print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ")


class Teacher(SchoolMember):
    '''代表一位老师。'''
    def __init__(self, name, age, salary):
        # 开始实现继承
        SchoolMember.__init__(self, name, age)
        self.salary = salary
        print('(Initialized Teacher: {})'.format(self.name))
    def tell(self):
        # 调用父类的函数
        SchoolMember.tell(self)
        print('Salary: "{:d}"'.format(self.salary))

class Student(SchoolMember):
    '''代表一位学生。'''
    def __init__(self, name, age, marks):
        # 开始实现继承
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print('(Initialized Student: {})'.format(self.name))
    def tell(self):
        # 调用父类的函数
        SchoolMember.tell(self)
        print('Marks: "{:d}"'.format(self.marks))


t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 25, 75)
# 打印一行空白行
print()
members = 
for member in members:
    # 对全体师生工作
    member.tell()

]]></description><link>https://blog.gaoredu.com/article/502ea2b3-5471-4f09-9f36-c2c5bea9be93</link><guid isPermaLink="true">https://blog.gaoredu.com/article/502ea2b3-5471-4f09-9f36-c2c5bea9be93</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 28 Apr 2018 03:18:07 GMT</pubDate></item><item><title><![CDATA[【Python学习】Python3.6版本中安装scrapy框架]]></title><description><![CDATA[1.首先来到你的Python3.6版本的安装目录下（有Python.exe这个目录下面），使用DOS打开到这个目录下面，输入下面的命令：
Python\Python36-32>pip install scrapy2.发现出现如下错误：
458
3.别担心，解决方案如下：
直接从http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载twisted对应版本的whl文件（如我的Twisted&#8209;17.5.0&#8209;cp36&#8209;cp36m&#8209;win_32.whl），cp后面是Python版本，32代表32位，下面的这个就是我下载的这个文件：
459

4.然后运行下面的命令，后面的是你下载的这个文件的绝对路径

pip install D:\TDownloads\Twisted-17.5.0-cp36-cp36m-win_32.whl5.然后再次运行下面的命令，重新安装scrapy框架

Python\Python36-32>pip install scrapy6.好了，下载的效果如下：

460
]]></description><link>https://blog.gaoredu.com/article/9f14f550-1267-4ed8-87be-37bef23136eb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9f14f550-1267-4ed8-87be-37bef23136eb</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 27 Apr 2018 05:07:47 GMT</pubDate></item><item><title><![CDATA[【Python学习】Python中的数据结构总结]]></title><description><![CDATA[1.List的使用
# This is my shopping list
# 列表是可变的（Mutable） 而字符串是不可变的（Immutable）
shoplist = 

# 输出list的长度
print('I have ', len(shoplist), 'items to purchase')

# 输出items项
print('These items are:', end=' ')
for item in shoplist:
    print(item, end=' ')


# 添加数据
print('\nI also have to buy rice.')
shoplist.append('rice')
print('My shopping list is now', shoplist)
# 排序list，按照首字母排序
print('I will sort my list now')
shoplist.sort()
print('Sorted shopping list is', shoplist)
# 取出第0个数据
print('The first item I will buy is', shoplist)
olditem = shoplist
# 删除第0个数据
del shoplist
print('I bought the', olditem)
# 输出当前的list数据
print('My shopping list is now', shoplist)2.Dic的使用
# “ab”是地址（Address） 簿（Book） 的缩写
ab = {
    'Swaroop': 'swaroop@swaroopch.com',
    'Larry': 'larry@wall.org',
    'Matsumoto': 'matz@ruby-lang.org',
    'Spammer': 'spammer@hotmail.com'
}
print("Swaroop's address is", ab)


# 删除一对键值—值配对
del ab
print('\nThere are {} contacts in the address-book\n'.format(len(ab)))
# 输出字典中的元素
for name, address in ab.items():
    print('Contact {} at {}'.format(name, address))
# 添加一对键值—值配对
ab = 'guido@python.org'
ab = 'uestc@126.com'
# 寻找指定元素的值
if 'Guido' in ab:
    print("\nGuido's address is", ab)3.Set的使用
# 简单对象的无序集合
bri = set()
print('india' in bri)
print('usa' in bri)

# 再次创建一个集合
bric = bri.copy()
print(bric)

# 集合添加元素
bric.add('China')
print(bric)
print(bric.issuperset(bri))

# 删除元素
bric.remove('China')
print(bric)

# 取出两个集合中的交集部分
print(bri & bric)4.Tuple的使用# 我会推荐你总是使用括号
# 来指明元组的开始与结束
# 尽管括号是一个可选选项。
# 明了胜过晦涩，显式优于隐式。

# 元组的初始化（包含项目的元组）
zoo = ('python', 'elephant', 'penguin')
# 输出元组的长度
print('Number of animals in the zoo is', len(zoo))

# 把两个元组拼接起来
new_zoo = 'monkey', 'camel', zoo

# 输出总长度（注意第一个加进来之后就成了一个二维数组）
print('Number of cages in the new zoo is', len(new_zoo))
print('All animals in new zoo are', new_zoo)

# 输出第二个元组松的元素
print('Animals brought from old zoo are', new_zoo)
# 输出第二个元组中的第二个元素
print('Last animal brought from old zoo is', new_zoo)
# 输出新元组的总动物数量
print('Number of animals in the new zoo is',
len(new_zoo)-1+len(new_zoo))5.Sequence的使用
# 注意序列的下标是从0开始的
shoplist = 
name = 'swaroop'


# Indexing or 'Subscription' operation #
# 索引或“下标（Subscription） ”操作符 #
print('Item 0 is', shoplist)
print('Item 1 is', shoplist)
print('Item 2 is', shoplist)
print('Item 3 is', shoplist)

# 输出负数索引值（逆序来找数据）
print('Item -1 is', shoplist)
print('Item -2 is', shoplist)

# 输出第0个单词字母
print('Character 0 is', name)

#序列切片将包括起始位置，但不包括结束位置
# Slicing on a list #
# shoplist 返回的序列的一组切片将从位置 1 开始，包含位置 2 并在位置 3 时结束
print('Item 1 to 3 is', shoplist)
print('Item 2 to end is', shoplist)
print('Item 1 to -1 is', shoplist)
#  shoplist 返回的是整个序列
print('Item start to end is', shoplist)
# 从某一字符串中切片 #
print('characters 1 to 3 is', name)
# 第2个下标以后的所有元素
print('characters 2 to end is', name)
# 从1开始，不包括-1出的位置元素
print('characters 1 to -1 is', name)
# 输出所有的内容
print('characters start to end is', name)


# 设置增长的步长2
print(shoplist)
# 逆序打印输出
print(shoplist)


]]></description><link>https://blog.gaoredu.com/article/c80ec637-18f2-44cf-8e1a-bf51e99d06ac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c80ec637-18f2-44cf-8e1a-bf51e99d06ac</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 26 Apr 2018 06:05:21 GMT</pubDate></item><item><title><![CDATA[【Python学习】初学Python1小时的成果总结]]></title><description><![CDATA[1.基础知识
#! /usr/local/bin/python3
# 这是我在过去几家公司招聘到工程师，Python入职培训的过程。时间分为4周，全部自学，仅提供大纲。
# 适用于Web方向：
# 1、Week1：读完《简明Python教程》，适应Python开发环境
# 2、Week2：写个爬虫，需要深入了解re、urllib2、sqlite3、threading，Queue等几个模块。需要用上多线程抓取，正则表达式分析，并发资源控制，重新开启程序自动继续抓取和分析
# 3、Week3：学习一种Web开发框架，推荐Flask、webpy之类的，学个数据库接口如sqlite3，写个简单的web应用如博客
# 4、Week4：给产品做个小功能并走完测试和上线流程，各个时期是不同的我在之前的几家公司招聘工程师时，学过Python的其实较少。
# 更常见的情况是人聪明，招来再学Python。就是按照如上流程。这个流程安排的挺轻松的，我找到的所有人都成功完成了这个流程。并且之后工作也很顺利。

print("test")
''' 这是一段多行字符串，这是他的第一行
This is the second line.
"What's your name?" I asked!.
He said "are"
'''

# ---------------------------------格式化方法 format() : 将每个参数值替换至格式所在的位置--------------------------------------------------#
age = 20
name = 'Xiuxiu'

print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that Python?'.format(name))

# 联立字符串来输出
print(name + ' is ' + str(age) + ' years old ')
# 数字是一个可选选项{可省略}
print('{} was {} years old when he wrote this book'.format(name, age))
print('Why is {} playing with that Python?'.format(name))

# 浮点数'0.333'保留小数点后三位
print('{0:.3f}'.format(1.0/3))
# 使用下划线填充文本，保持文字hello处于中间位置
print('{0:_^58}'.format('hello'))
# 基于关键词输出
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
# 自定义print的结尾输出字符(以空白结尾)
print('a', end='')
print('b', end=' ')
print('c', end='\n hahaha')

# ---------------------------------转义序列--------------------------------------------------#
print('This is the first line \n This is the second line\t This is the table\'s elements ')
# 原始字符串(双引号里面的是什么内容，就会输出什么内容)
print(r"New lines are indicated there \n")
# 不使用原始字符串
print("New lines are indicated there \\n")




2.流程语句
number = 23
running = True

while running:
    guess = int(input('Enter an integer : '))
    if guess == number:
        print('猜对了')
        running = False
    elif guess < number :
        print('猜错了，再试一次！')
    else:
        print('No, 错的太离谱了！')

    print('Done')


print('开始执行for循环')
for i in range(1, 5):
    print(i)
else:
    print('The for loop is over ')

for i in range(1, 10, 2):
    print(i)


# break 语句的使用
while True:
    s = input('Enter something : ')
    if  s == 'quit':
        # 直接退出循环
        print('Length of the string is', len(s))
        break
    else:
        print('The string you enter is error!')
    print('Done finished!')


# continue的使用测试
while True:
    d = input('Enter something : ')
    if s == 'quit':
        break
    if len(s) < 3:
        print('Too small')
        continue
    print('Input is of sufficient length')3.函数的使用
# 函数的使用测试
def say_hello():
    print('hello say!')

# 调用函数
say_hello()
say_hello()


def print_max(a, b):
    if a > b:
        print(a, 'is maximum')
    elif a == b:
        print(a, 'is equal to', b)
    else:
        print(b, 'is maximum')

# 开始测试大小
print_max(10, 12)

x = 2
y = 7
print_max(x, y)

c = input('Please enter the first number:')
d = input('Please enter the second number:')
print_max(c, d)


# 局部变量的使用测试
num1 = 50

def func(num1):
    print('num1 is', num1)
    num1 = 2
    print('changed local num1 to', num1)

func(num1)




4.global的使用
# global 语句的使用测试
num = 50

def function_global():
    # 这里要使用的变量是全局变量
    global num
    print('num is', num)
    num = 15
    print('num is', num)

function_global()

# 默认参数值的使用
def say(message, times=1):
    # times为连续打印输出的次数
    print(message*times)
say('Hell0')
say('World', 5)



# 这里使用了关键字定义函数
def func(a, b=5, c=10):
    print('a is ', a, 'and b is', b, 'and c is', c)
func(3, 7)
func(25, c=24)
func(c=45, a=100)

# 可变参数的使用
# *params : 星号参数，从此处开始到结束所有位置参数都将成为一个元组
# **params： 从开始到结束到会成为一个字典
def total(a=5, *numbers, **phonebook):
    print('a', a)

    # 开始遍历元祖中的所有项目
    for single_item in numbers:
        print('single_item', single_item)

    # 遍历字典中的所有项目
    for first_part, second_part in phonebook.items():
        print(first_part, second_part)

# 开始测试
print(total(10, 1, 2, 3, Jack=1123,john=2231,inge=1560))



# return 的使用测试
def maximum(x, y):
    if x > y:
        return x
    elif x == y:
        return "the number is equal"
    else:
        return y

# None 在 Python 中一个特殊的类型，代表着虚无, 用于指示一个变量没有值
print('max is',maximum(10, 12))5.文本字符串的使用
def print_max(x, y):
    '''Prints the maximum of two numbers.打印两个数值中的最大数。

    The two values must be integers.这两个数都应该是整数'''
    # 如果可能，将其转换至整数类型
    x = int(x)
    y = int(y)
    if x > y:
        print(x, 'is maximum')
    else:
        print(y, 'is maximum')
print_max(3, 5)

# 打印输出文档字符串
print(print_max.__doc__)6.sys模块的使用
# 导入 sys 模块
import sys
import os

#每一个 Python 模块都定义了它的 __name__ 属性。如果它与 __main__ 属性相同则代表这一模块是由用户独立运行的，因此我们便可以采取适当的行动。

# 导入一个模块中的函数
from math import sqrt

if (__name__ == '__main__'):
    print("This program is being run by itself")
else:
    print('I am being imported from another module')



print('The command line arguments are:')
for i in sys.argv:
    print(i)

print('\n\nTHE PythonPath is ', sys.path, '\n')
print(os.getcwd())

print("Square root of 16 is", sqrt(16))

]]></description><link>https://blog.gaoredu.com/article/6af8bca3-8f43-420d-9a78-4972d7f43712</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6af8bca3-8f43-420d-9a78-4972d7f43712</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 26 Apr 2018 05:59:58 GMT</pubDate></item><item><title><![CDATA[python学习入门到精通资源推荐下载]]></title><description><![CDATA[网上的资源（百度云盘下载）：

简明Python教程 
与孩子一起学编程 
Head First Python 中文版 
笨办法学Python 
Dive.Into.Python中文版(附课程源码) 
Python核心编程 
深入理解Python 
Python标准库 
Python编程指南
django_book中文版
（解压密码均为：http://crossin.me）
在线学习Python的教程：

简明 Python 教程 
Dive Into Python 中文版


视频教程（一周深入理解Python）：
链接: https://pan.baidu.com/s/1XL9BE1YG4vOV6L1o_4ch6A 密码: i27i





]]></description><link>https://blog.gaoredu.com/article/87b62d52-2ee1-438a-8684-f0e77992bfa1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/87b62d52-2ee1-438a-8684-f0e77992bfa1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 25 Apr 2018 21:07:14 GMT</pubDate></item><item><title><![CDATA[java爬虫利器，使用Webcollector爬虫框架网络爬虫]]></title><description><![CDATA[1.首先来对比一下java和python爬虫中比较常用的爬虫框架，如下图457
2.我们发现WebCollector爬虫工具其实网上使用的还是比较广泛的，因此建议大家使用这个框架去爬虫
1）可以自定义遍历策略，分页、AJAX请求等方式爬取
2）可以深度获取、锚文本获取、引用页面获取、POST参数传递、增量更新等。
4）实时爬取数据
6）集成selenium，可以对javascript生成信息进行抽取，可以使用chrome浏览器实时查看
3.下载链接，下载这个Jar包放在自己的java普通项目中即可
https://raw.githubusercontent.com/CrawlScript/WebCollector/master/webcollector-2.71-bin.zip
4.环境测试，运行下面的代码进行测试
<font size="5">import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;
import org.jsoup.nodes.Document;

/**
 * Crawling news from hfut news
 *
 * @author hu
 */
public class AutoNewsCrawler extends BreadthCrawler {
    /**
     * @param crawlPath crawlPath is the path of the directory which maintains
     *                  information of this crawler
     * @param autoParse if autoParse is true,BreadthCrawler will auto extract
     *                  links which match regex rules from pag
     */
    public AutoNewsCrawler(String crawlPath, boolean autoParse) {
        super(crawlPath, autoParse);
        /*start page*/
        this.addSeed("http://news.hfut.edu.cn/list-1-1.html");

        /*fetch url like http://news.hfut.edu.cn/show-xxxxxxhtml*/
        this.addRegex("http://news.hfut.edu.cn/show-.*html");
        /*do not fetch jpg|png|gif*/
        this.addRegex("-.*\\.(jpg|png|gif).*");
        /*do not fetch url contains #*/
        this.addRegex("-.*#.*");

        setThreads(50);
        getConf().setTopN(100);

//        setResumable(true);
    }

    @Override
    public void visit(Page page, CrawlDatums next) {
        String url = page.url();
        /*if page is news page*/
        if (page.matchUrl("http://news.hfut.edu.cn/show-.*html")) {

            /*extract title and content of news by css selector*/
            String title = page.select("div>h2").first().text();
            String content = page.selectText("div#artibody");

            System.out.println("URL:\n" + url);
            System.out.println("title:\n" + title);
            System.out.println("content:\n" + content);

            /*If you want to add urls to crawl,add them to nextLink*/
            /*WebCollector automatically filters links that have been fetched before*/
            /*If autoParse is true and the link you add to nextLinks does not match the 
              regex rules,the link will also been filtered.*/
            //next.add("http://xxxxxx.com");
        }
    }

    public static void main(String args) throws Exception {
        AutoNewsCrawler crawler = new AutoNewsCrawler("crawl", true);
        /*start crawl with depth of 4*/
        crawler.start(4);
    }

}</font>






]]></description><link>https://blog.gaoredu.com/article/c38ecb3a-12fa-4996-a476-453f7a9626f2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c38ecb3a-12fa-4996-a476-453f7a9626f2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 25 Apr 2018 03:53:58 GMT</pubDate></item><item><title><![CDATA[谷歌浏览器所有历史版本下载以及与之对应的Driver下载（python爬取数据闭包）]]></title><description><![CDATA[谷歌浏览器所有Windows历史版本下载旧的谷歌浏览器版本有32位/64位的历史版本，解压之后就可以直接使用32-bit
VersionSizeDate
65.0.3325.18147.92 MB2018-03-22
64.0.3282.14047.5 MB2018-02-6
63.0.3239.10846.14 MB2017-12-26
62.0.3202.751.08 MB2017-10-28
61.0.3163.7944.35 MB2017-09-10
60.0.3112.7842.8 MB2017-09-11
59.0.3071.8643.67 MB2017-06-12
58.0.3029.9641.59 MB2017-05-4
57.0.2987.13341.03 MB2017-04-18
56.0.2924.8742.15 MB2017-02-8
55.0.2883.7542.53 MB2016-12-9
54.0.2840.7142.06 MB2016-10-21
53.0.2785.11644.7 MB2016-09-19
52.0.2743.11642 MB2016-08-3
51.0.2704.8441.86 MB2016-06-9
50.0.2661.7541.52 MB2016-04-15
49.0.2623.7541.1 MB2016-03-3
48.0.2564.9740.76 MB2016-02-2
64-bit
VersionSizeDate
65.0.3325.18148.27 MB2018-03-22
64.0.3282.14047.95 MB2018-02-6
63.0.3239.10850.09 MB2017-12-26
62.0.3202.7548.95 MB2017-10-28
61.0.3163.7948.32 MB2017-09-10
60.0.3112.7846.56 MB2017-09-11
59.0.3071.8647.44 MB2017-06-12
58.0.3029.9645 MB2017-05-4
57.0.2987.13344.48 MB2017-04-18
56.0.2924.8746.3 MB2017-02-8
55.0.2883.7546.5 MB2016-12-9
54.0.2840.7145.89 MB2016-10-21
53.0.2785.11644.7 MB2016-09-19
51.0.2704.8448.3 MB2016-06-9
50.0.2661.7547.86 MB2016-04-20
49.0.2623.7547.15 MB2016-04-15
48.0.2564.10946.67 MB2016-02-18


Driver和谷歌浏览器二者之间的映射关系如下：
456

相应的Driver下载如下：Index of /
http://chromedriver.storage.googleapis.com/icons/blank.gifNameLast modifiedSizeETag

http://chromedriver.storage.googleapis.com/icons/folder.gif2.0---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.1---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.10---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.11---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.12---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.13---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.14---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.15---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.16---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.17---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.18---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.19---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.20---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.2---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.21---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.22---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.23---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.24---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.25---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.26---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.27---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.28---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.29---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.3---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.30---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.31---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.32---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.33---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.34---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.35---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.36---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.37---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.38---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.4---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.5---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.6---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.7---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.8---
http://chromedriver.storage.googleapis.com/icons/folder.gif2.9---
http://chromedriver.storage.googleapis.com/icons/folder.gificons---
http://chromedriver.storage.googleapis.com/icons/binary.gifLATEST_RELEASE2018-04-18 14:29:060.00MBdb4287a98eb528676bcab5b4a46d219a
http://chromedriver.storage.googleapis.com/icons/binary.gifindex.html2013-09-25 16:59:180.01MB704b0f841aad1b1428481b7ff3c759c0







]]></description><link>https://blog.gaoredu.com/article/50bb5fb1-00b9-4915-8aaa-f58e876d7cea</link><guid isPermaLink="true">https://blog.gaoredu.com/article/50bb5fb1-00b9-4915-8aaa-f58e876d7cea</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 24 Apr 2018 05:54:00 GMT</pubDate></item><item><title><![CDATA[大话数据结构+算法设计+23中设计模式视频教程精讲]]></title><description><![CDATA[455
大话数据结构：链接: https://pan.baidu.com/s/1AOogAt0ialqFmUKMywXMCg 密码: t6tq（视频教程）
JavaScript的常见设计模式讲解链接: https://pan.baidu.com/s/1BSxa0-qHhZN1GFFwhoP3eA 密码: 3vkb
算法导论：链接: https://pan.baidu.com/s/1JLtlvsZosWw-j1Ky_oHg4g 密码: tst7
]]></description><link>https://blog.gaoredu.com/article/6cf1f61c-8ec5-468b-af7e-22bc9a96a8b6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6cf1f61c-8ec5-468b-af7e-22bc9a96a8b6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 24 Apr 2018 00:40:16 GMT</pubDate></item><item><title><![CDATA[搜狗OCR识别文字的接口分享，输入图片地址直接出结果]]></title><description><![CDATA[经测试，发现搜狗OCR识别工具的调用接口是：http://pic.sogou.com/pic/ocr/ocrOnline.jsp?query=
1.使用方法如下：复制上面的接口http://pic.sogou.com/pic/ocr/ocrOnline.jsp?query=到你的测试程序
2.上传你需要识别的图片（经测试，本地图片暂时无法识别，故需要上传你的图片到一个服务器）
3.开始测试这个黑科技看看：（这里使用站点我爱科技论坛的logo进行测试）
http://pic.sogou.com/pic/ocr/ocrOnline.jsp?query=http://www.52tech.tech/template/dean_report_151222/deancss/mylogo.png
http://www.52tech.tech/template/dean_report_151222/deancss/mylogo.png
4.返回结果如下：
{"result":},{"content":"www.52tech.tech\n","frame":}],"success":1}
]]></description><link>https://blog.gaoredu.com/article/915cb0ab-7883-48a2-8007-b577666d3d53</link><guid isPermaLink="true">https://blog.gaoredu.com/article/915cb0ab-7883-48a2-8007-b577666d3d53</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 23 Apr 2018 21:22:44 GMT</pubDate></item><item><title><![CDATA[OCR文字识别软件加强版，不限制使用次数永久使用]]></title><description><![CDATA[捷速ocr3.0文字识别软件支持识别前对页面的分析、识别时对文件的预览及修改、识别后直接打开即可进行编辑的超强功能。图片转换成word,图片转换成文字，扫描文件转换成word等功能。454

软件下载链接: https://pan.baidu.com/s/1bscmJ2auI4P-BWF2oZ2AiA 密码: xng3



貌似又发现了一个比这个更好用的软件，大家可以看下这个哈
天若ocr电脑截图后快速转换为文字识别工具包
https://www.52tech.tech/forum.php?mod=viewthread&tid=378&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/0d244045-62d1-4092-a42c-cb8163b7a86f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0d244045-62d1-4092-a42c-cb8163b7a86f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 23 Apr 2018 03:29:33 GMT</pubDate></item><item><title><![CDATA[这款黑科技手机APP带你用手机监听和你所在的局域网小伙伴们流量（支持抓取图片）]]></title><description><![CDATA[Fiddler是一个http协议调试代{过}{滤}理工具，它能够记录并检查所有你的电脑和互联网之间的http通讯，设置断点，查看所有的“进出”Fiddler的数据（指cookie,html,js,css等文件，这些都可以让你胡乱修改的意思）。 1.下载安装软件


452
2.打开Fiddler，Tools-Fiddler Options-Connections，勾选Allow remote computers to connect，端口为8888，保存选项后重启Fiddler；


3.在电脑上开启一个Wifi，我这里使用的是猎豹免费WIFI然后看一下无线网卡IP地址，运行命令ipconfig /all，查看无线局域网适配器的IP信息，我的是192.168.0.101；
4.手机wifi中在高级中设置代理为步骤3中的IP地址，也就是你连接到的这台电脑的IP地址（也就是手机上显示的路由器地址），端口为步骤1中的端口8888；
4.开始打开这个黑科技软件，手机上浏览任意软件，开始测试抓包；（手机能正常上网的前提是你先打开了代理抓包软件，手机上的所有流量都会经过这个抓包软件之后出去）

453


软件下载地址：链接：http://pan.baidu.com/s/1mh5xijQ 密码：hujr

]]></description><link>https://blog.gaoredu.com/article/3ea0b145-2d32-48d3-8fc2-1be6ca7e5fe1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3ea0b145-2d32-48d3-8fc2-1be6ca7e5fe1</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 22 Apr 2018 07:02:22 GMT</pubDate></item><item><title><![CDATA[安卓模拟器Bluestacks所有历史版本下载]]></title><description><![CDATA[安卓模拟器Bluestacks所有历史版本下载，如果觉得最新版本的安卓模拟器不好用，也可以回头试试看这些历史版本：
451
Windows版

0.9.3.4070版本：点击下载

无法本地下载请点击：云盘下载

Mac版

0.3.6.102版本：点击下载

历史版本下载

Windows版

【上一版本】0.9.3.4070版本：点击下载
0.9.1.4057版本：点击下载
0.9.0.4049版本：点击下载
0.8.11.3116版本：点击下载
0.8.10.3101版本：点击下载
0.8.10.3096版本：点击下载
0.8.9.3089版本：点击下载
0.8.9.3088版本：点击下载
0.8.8.8006版本：点击下载
0.8.7.3069版本：点击下载
0.8.7.3066版本：点击下载
0.8.6.3061版本：点击下载
0.8.6.3059版本：点击下载
0.8.5.3042版本：点击下载
0.8.4.3036版本：点击下载
0.8.3.3026版本：点击下载
0.8.2.3018版本：点击下载 
0.8.1.3051版本：点击下载
0.8.1.3011版本：点击下载
0.8.1.3003版本：点击下载
0.8.0.2997版本：点击下载
0.7.18.921版本：点击下载
0.7.17.916版本：点击下载
0.7.16.910版本：点击下载
0.7.14.901版本：点击下载
0.7.13.899版本：点击下载
0.7.12.896版本：点击下载
0.7.11.885版本：点击下载
0.7.11.879版本：点击下载
0.7.10.869版本：点击下载
0.7.7.813版本：  点击下载
0.7.2.751版本：  点击下载

Mac版

0.2.5.107版本：点击下载
0.2.3.151版本：点击下载
]]></description><link>https://blog.gaoredu.com/article/e1f0a17f-95e6-44be-8bb9-e63f291d85f5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e1f0a17f-95e6-44be-8bb9-e63f291d85f5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 21 Apr 2018 01:42:42 GMT</pubDate></item><item><title><![CDATA[Matlab2017安装包破解版本百度网盘在线下载]]></title><description><![CDATA[本次分享Matlab2017安装包文件里面有两个文件，ISO格式的，两个必须都要下载，下载完毕之后使用虚拟光驱软件加载或者直接解压文件到本地进行安装。

450
Matlab安装包文件：链接: https://pan.baidu.com/s/14UYpy9pcCogaVW0MCtf9Vw 密码: 1arq
Matlab2017破解文件：链接: https://pan.baidu.com/s/1pgFojODZ2V5idxswRLL5dA 密码: cj4k


]]></description><link>https://blog.gaoredu.com/article/26ad16f8-a46c-40b6-8dd0-d669708a9fe2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/26ad16f8-a46c-40b6-8dd0-d669708a9fe2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Apr 2018 02:53:51 GMT</pubDate></item><item><title><![CDATA[基于ArcGIS的JavaScriptAPI开发的所有版本js库]]></title><description><![CDATA[目前更新的JavaScript官方API包包括从V30到V42版本：
449

V3*系列API包：链接: https://pan.baidu.com/s/1YjAfmwANEqWvEmBm4XHlTg 密码: wmer
V4*系列API包：链接: https://pan.baidu.com/s/1XKR1sYgoglSzyshbDtWvlg 密码: 8fzm



]]></description><link>https://blog.gaoredu.com/article/145fee60-b91c-42be-98e8-94696d9fb66a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/145fee60-b91c-42be-98e8-94696d9fb66a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Apr 2018 02:47:42 GMT</pubDate></item><item><title><![CDATA[非常好用的GIF动态图片录制黑科技软件推荐-支持一键录制动图]]></title><description><![CDATA[平时录制GIF动图这个需求应该还是挺多的吧，但是有时候由于没有找到方法走了很多弯路，今天就来分享一个黑科技神器带你轻松搞定GIF动图录制哈：
这个小工具支持GIF动态图片的录制，具体操作步骤和录制视频过程差不多，录制过程如下：
448

支持单帧，窗口拖动这些小功能，只需要通过定位就可以一键录制了，
录制完毕之后选择保存其可以了，还是很方便的。
黑科技软件下载链接：https://pan.baidu.com/s/1pLCLZcR

]]></description><link>https://blog.gaoredu.com/article/994b5f4e-be2a-4eec-bc07-eddd33c066c6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/994b5f4e-be2a-4eec-bc07-eddd33c066c6</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Apr 2018 21:19:48 GMT</pubDate></item><item><title><![CDATA[安卓手机迅雷软件，不用登陆网速也可以加速10倍以上]]></title><description><![CDATA[手机运行效果如下：
447
当前使用迅雷下载速度已经达到了1.8MB/s，同时还支持一边下载一边播放的功能，快来试试！

真是一个神器的黑科技！
下载https://pan.baidu.com/s/1nyVogvIqcZUNkl75turDlQ 密码：v13y！！！！

]]></description><link>https://blog.gaoredu.com/article/22a3d805-1655-4906-9524-839323e10fd7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/22a3d805-1655-4906-9524-839323e10fd7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Apr 2018 21:03:42 GMT</pubDate></item><item><title><![CDATA[[黑科技软件]PDF文件万能转换器，可轻松转换为任意文件到PDF文件]]></title><description><![CDATA[使用方法：
1、下载软件安装，一路点击确定。
2、打开任意需要转换的文件、文档、图片、图纸、表格、网页，按下快捷键：Ctrl+P
3、更改目标打印机为：doPDF,选择需要打印的页码、页码布置、转换以后的颜色等选项。
4、点击“打印”，在弹出的对话框中选择相应的转换设置，选择保存的位置，确定。
具体效果如下：
446
是不是马上就新增了一个PDF文件。
黑科技软件下载链接: https://pan.baidu.com/s/1QEY-ge0scqhx0xNIdZlLkg 密码: bdv9

]]></description><link>https://blog.gaoredu.com/article/39bbcd5a-b39f-401b-ab66-6195be06a972</link><guid isPermaLink="true">https://blog.gaoredu.com/article/39bbcd5a-b39f-401b-ab66-6195be06a972</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 17 Apr 2018 20:40:29 GMT</pubDate></item><item><title><![CDATA[设计师室内内装修千套模板分享]]></title><description><![CDATA[6-玄关 过道 地下室 娱乐室及其它
5-儿童房 书房
4-卫生间
3-餐厅 厨房
2-卧室空间
1-客厅空间
442
443
444
445

下载链接：https://pan.baidu.com/s/1U5Aq39AEDESxffJ-TDhq6Q 密码：lzbm

]]></description><link>https://blog.gaoredu.com/article/8ac2ea06-be01-400e-b44a-517e4abb87f3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8ac2ea06-be01-400e-b44a-517e4abb87f3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Apr 2018 20:57:27 GMT</pubDate></item><item><title><![CDATA[黑科技工具之无限网络Wifi下的渗透攻击测试（包括Wifi无限密码的暴力破解）]]></title><description><![CDATA[1.基础简单介绍
10.内网渗透之对局域网下其他客户机限速
11.内网渗透之Arpspoof中间人攻击
12.无线网络的拒绝服务攻击
13.内网渗透之EttercapDNS欺骗
链接: https://pan.baidu.com/s/1rk91O1GAVTR3f_V2wn65RA 密码: sbi3

14.【选学】简述蓝牙Bluebugging攻击技术
15.解密无线网络报文
16.【选学】使用svmap扫描sip设备
17.【选学】抓取VoIP通信
18.【选学】捕获SIP认证
19.【选学】VoIP的拒绝服务攻击
2.aircreck-ng工具包破解WEP
20.【选学】MSF攻击VoIP
21.【选学】嗅探DECT电话
3.破解WPA加密
4.伪造大量恶意AP信号进行正常通讯干扰
5.全自动破解WEP加密
6.内网渗透之Nmap的使用
7.内网渗透之Dsploit的使用
8.内网渗透之MSF完全获取windows权限
9.内网渗透之Ettercap的ARP欺骗截获无线网络数据
链接: https://pan.baidu.com/s/1MPAVmVgqWKSViRYIbCT41Q 密码: wr23
链接: https://pan.baidu.com/s/11rXSHq7b-5gaR2e_k9fp-g 密码: 5i5r
441


]]></description><link>https://blog.gaoredu.com/article/34746b29-f810-451b-8f8c-353f17c6e56c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/34746b29-f810-451b-8f8c-353f17c6e56c</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Apr 2018 18:00:21 GMT</pubDate></item><item><title><![CDATA[黑科技工具Metasploit的使用系列实战视频教程完整版（Linux安全）]]></title><description><![CDATA[第1课：什么是Metasploit.swf
第2课：如何安装Metasploit.swf
第3课：如何更新MSF及其结构.swf
第4课：msf用户接口及核心命令.swf
第5课：Exploits模块 .swf
第6课：payloads模块 .swf
第7课：利用MSF攻击windows .swf
第8课：三个模块作用 .swf
第9课：msfcli命令接口 .swf
第10课：msfweb命令接口 .swf
第11课：msfd命令接口 .swf
第12课：msfpayload和msfencode接口 .swf
第13课：MSF数据库后台命令 .swf
第14课：autopwn命令 .swf
第15课：meterpreter plyload .swf
第16课：vncinject payload.swf
第17课：MSF实战应用演示 .swf
440
视频下载链接: https://pan.baidu.com/s/1RQyiII6rkwNW9DidMDagSQ 密码: zd2k

]]></description><link>https://blog.gaoredu.com/article/d97ccd07-bd0e-43f4-a53d-cafe5d8894a4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d97ccd07-bd0e-43f4-a53d-cafe5d8894a4</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Apr 2018 16:00:55 GMT</pubDate></item><item><title><![CDATA[带你一步一步搭建Windows平台下的Linux下的Web渗透Pentest Box测试环境]]></title><description><![CDATA[Pentest Box是一款Windows平台下的Web渗透测试环境，由于渗透中大部分脚本工具都是基于Linux平台运行，比如bash、cat、chmod、curl、git、gzip、ls、mv、ps、ssh、sh、uname等。而Linux的配置环境相对比较复杂，而且一般需要在虚拟机中运行，可以不安装虚拟机就拥有一个Windows平台下的Linux网络Web渗透测试环境呢？答案是肯定的，下面一步步教你在Windows系统上面安装自己专属的Linux网络渗透测试环境！
1.进入Pentestbox官网，https://pentestbox.org/zh/#download，这里就直接到了下载页面
437
2. 点击下载按钮，建议大家安装我的箭头标注出来的这一款软件哈，这个里面包含有Metasploit渗透模块，这个模块可以实现局域网里面的远程控制，文件后门等功能，应该是很不错的
438
3.然后就开始下载了，快去试试看这款软件的全部功能吧
439
]]></description><link>https://blog.gaoredu.com/article/e2ab2ab9-b93b-474d-b297-35e74b1442cc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e2ab2ab9-b93b-474d-b297-35e74b1442cc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Apr 2018 06:05:49 GMT</pubDate></item><item><title><![CDATA[Matlab在图像处理中的应用编程笔记分享]]></title><description><![CDATA[作业1：采用不同的波段组合方式来显示一副假彩色图像2.1 Matlab代码
>> f1=imread('01.TIF');
>> f2=imread('02.TIF');
>> f3=imread('03.TIF');
>> f = cat(3，f1, f2, f3);.
>> imshow(f);

线性拉伸变换代码：
A=imread('010203.TIF');% 线性灰度线性变换（拉伸）程序
a = 20,b=250,c=50,d=200;
A=rgb2gray(A);
 figure;imshow(A);
X=A;
=size(X);  % 获取输入图像的行列数
Y=zeros(p,q);
for i=1:p
   for j=1:q
       if X(i,j)<a
            Y(i,j)=c;
       else
            if X(i,j)<b
           Y(i,j)=((d-c)/(b-a))*(X(i,j)-a)+c;
       else
            Y(i,j)=d;
            end
       end
   end
end
 Y=uint8(Y);
 figure;imshow(Y);

 
作业2：统计一幅LANDSAT7影像的各个波段的直方图；统计计算该图像各个波段的均值和方差。2.1对前面裁剪的图像1波段的直方图及其均差计算如下Matlab代码：
f1=imread('01.TIF');
   figure(1),imhist(f1);
   title('第1波段直方图');
   m7=mean2(f1)
   s7=std2(f1)
 
输出结果：
m7= 
   76.1891
 
 
s7= 
   61.7657
即该遥感图像的第1波段的均值为76.1891，方差为61.7657
 

2.2对前面裁剪的图像2波段的直方图及其均差计算如下
Matlab代码：
f1=imread('02.TIF');
   figure(1),imhist(f1);
   title('第2波段直方图');
   m7=mean2(f1)
   s7=std2(f1)
输出结果：
m7=
 
   60.7040
 
 
s7=
 
   51.2023
即该遥感图像的第2波段的均值为60.7040，方差为51.2023


2.3对前面裁剪的图像3波段的直方图及其均差计算如下
Matlab代码：
f1=imread('03.TIF');
   figure(1),imhist(f1);
   title('第3波段直方图');
   m7=mean2(f1)
   s7=std2(f1)
输出结果：
m7 =
 
  75.2418
 
 
s7 =
 
  60.4233
即该遥感图像的第3波段的均值为75.2418，方差为60.4233
 

作业3：计算该LANDSAT7图像的NDVI植被指数；完成该图像的PCT变换；完成该图像的KT变换3.1计算图像的NDVi植被指数Matlab代码如下：
f1=imread('01.tif');  =size(f1);  y=mean(f1,1);  yz1=mean(y,2) ;  f2=imread('02.tif');  =size(f2);  y=mean(f2,1);  yz2=mean(y,2) ;  NDVI=(yz1-yz2)/(yz1+yz2) 计算结果如下：
NDVI =

0.2454

3.2对图像进行PCT变换Matlab代码：
I1=imread('01.tif');
I2=imread('02.tif');
I3=imread('03.tif');


X=cat(3,I1,I2,I3);
XX=reshape(X,);

pic1=XX(:,1);
pic1=reshape(pic1,);
subplot(2,3,1);
imshow(pic1);
title('Original Image');

XX=im2double(XX); %图像转化为双精度
covx = cov(XX); % 求图像的协方差
 = pcacov(covx); % 求解K_L 变换矩阵，即PCA
pc
myKL=XX*pc; %进行K_L 变换

pic2=myKL(:,1);
pic2=reshape(pic2,);
subplot(2,3,2);
imshow(pic2);
title('K_L 第一分量');

pic3=myKL(:,2);
pic3=reshape(pic3,);
subplot(2,3,3);
imshow(pic3);
title('K_L 第二分量');

pic4=myKL(:,3);
pic4=reshape(pic4,);
subplot(2,3,4);
imshow(pic4);
title('K_L 第三分量');



3.3对图像进行KT变换Matlab代码：
X1=imread('01.tif');
X1=double(X1);
X2=imread('02.tif');
X2=double(X2);
X3=imread('03.tif');
X3=double(X3);

X11=reshape(X1,1,262144);
X21=reshape(X2,1,262144);
X31=reshape(X3,1,262144);

 XX=;

% KT变换矩阵 ETM
T1=;
T2=;
T3=;

V1=;
 Y=V1*XX;
Y1=Y(1,:); Y2=Y(2,:); Y3=Y(3,:);
W1=reshape(Y1,512,512);W2=reshape(Y2,512,512);W3=reshape(Y3,512,512);

subplot(2,3,1),imshow(uint8(abs(W1)));title('KT1');
subplot(2,3,2),imshow(uint8(abs(W2)));title('KT2');
subplot(2,3,3),imshow(uint8(abs(W3)));title('KT3');




作业4：用空间卷积滤波的方式对一幅图像进行滤波处理（分别采用下列卷积核进行处理）Matlab代码：
I=imread('010203.tif');
subplot(2,3,1),imshow(I);
title('原始图像');

T1=;
H1=imfilter(I,T1);
subplot(2,3,2),imshow(H1);
title('第一次滤波');

T2=;
H2=imfilter(I,T2);
subplot(2,3,3),imshow(H2);
title('第二次滤波');

T3=;
H3=imfilter(I,T3);
subplot(2,3,4),imshow(H3);
title('第三次滤波');

T4=fspecial('gaussian',,2);
H4=imfilter(I,T4);
subplot(2,3,5),imshow(H4);
title('高斯滤波');

T5=fspecial('sobel');
H5=imfilter(I,T5);
subplot(2,3,6),imshow(H5);
title('sobel算子')




作业5 ：对一幅图像进行离散傅立叶变换，并将其频率谱的原点移到图像中心位置，并将频率谱显示出来Matlab代码：
I=imread('010203.tif');
subplot(1,3,1);imshow(I);title('原始图像');
I=im2double(I);
F1=fft2(I);
subplot(1,3,2);imshow(log(1+abs(F1)),);title('傅里叶谱');
FC1=fftshift(F1);
subplot(1,3,3);imshow(log(1+abs(FC1)),);title('傅里叶谱中心化');






]]></description><link>https://blog.gaoredu.com/article/426caeee-78f5-4bce-8a55-b04e800f0ca4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/426caeee-78f5-4bce-8a55-b04e800f0ca4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Apr 2018 05:40:17 GMT</pubDate></item><item><title><![CDATA[【C#进阶】如何实现一个C#中的Windows Form窗体不能拖动（鼠标不能移动）]]></title><description><![CDATA[实现窗口不能拖动的方法主要有两种：
标题一 C# 中在显示标题栏的时候，禁止鼠标拖动窗体 
标题二  C# 中屏蔽窗体的移动
实现这个功能需用到拦截系统消息的知识，拦截系统的消息有两种实现方式，在窗体中重写 WndProc(ref Message m)方法,还有就是创建一个新类或在现有的类中继承System.Windows.Forms.IMessageFilter 接口,并实现这个接口来实现拦截系统消息
方法一通过重写方法来实现
      const int WM_NCLBUTTONDOWN = 0x00A1;
      const int HTCAPTION = 2;
      protected override void WndProc(ref Message m)
      {
          if (m.Msg == WM_NCLBUTTONDOWN && m.WParam.ToInt32() == HTCAPTION)
             return; 
          base.WndProc(ref m);
       }
 方法二  通过继承接口来实现
  public class MessageFilter : System.Windows.Forms.IMessageFilter
    {
        const int WM_NCLBUTTONDOWN = 0x00A1;
        const int HTCAPTION = 2;


        public bool PreFilterMessage(ref System.Windows.Forms.Message m)
        {
            if (m.Msg == WM_NCLBUTTONDOWN && m.WParam.ToInt32() == HTCAPTION)
                return true;
            return false;
        }
    }


  创建完这个类后，创建一个对象，并把该对象添加到应用程序里边，如下列代码,下列代码是Program文件当中的入口方法
  static class Program
    {
        private static MessageFilter filter = new MessageFilter();
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        
        static void Main()
        {
            Application.AddMessageFilter(filter);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainFrm());
        }
    }  


]]></description><link>https://blog.gaoredu.com/article/1472051f-c0f7-4c01-8d9c-c0f6d2af0471</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1472051f-c0f7-4c01-8d9c-c0f6d2af0471</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 15 Apr 2018 02:55:40 GMT</pubDate></item><item><title><![CDATA[【C#进阶】C#实现Excel文件读取的工具类封装]]></title><description><![CDATA[Excel文件读取类：
using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace ReadInfoFromDEM
{
    class ExcelFileReader
    {
        private string m_strFileName = null;

        private Application m_application = null;

        private Workbook m_workBook = null;

        private int m_totalSheets = 0;

        private int m_activeSheet = 0;

        private int m_sheetColumns = 0;

        private int m_sheetRows = 0;

        public ExcelFileReader(string fileName)

        {

            m_strFileName = fileName;

        }

        public string FileName

        {

            get { return this.m_strFileName; }

            set { this.m_strFileName = value; }

        }

        public int TotalSheets

        {

            get { return this.m_totalSheets; }

        }

        public int ActiveSheetIndex

        {

            get { return this.m_activeSheet; }

        }

        public int SheetColumns

        {

            get { return this.m_sheetColumns; }

        }

        public int SheetRows

        {

            get { return this.m_sheetRows; }

        }

        public void ActiveExcelApplication()

        {

            this.m_application = new Application();

            try



            {

                this.m_workBook = m_application.Workbooks.Open(this.m_strFileName,

                Type.Missing, Type.Missing, Type.Missing, Type.Missing,

                Type.Missing, Type.Missing, Type.Missing, Type.Missing,

                Type.Missing, Type.Missing, Type.Missing, Type.Missing,

                Type.Missing, Type.Missing);

                this.m_totalSheets = this.m_workBook.Sheets.Count;

            }

            catch



            {

            }

        }

        public void ScanExcelSheetSizeByIndex(int sheetIndex)

        {

            Worksheet sheet = (Worksheet)m_workBook.Sheets;

            Range excelRange = sheet.UsedRange;

            this.m_sheetColumns = excelRange.Columns.Count;

            this.m_sheetRows = excelRange.Rows.Count;

            this.m_activeSheet = sheetIndex;

        }

        public void ScanExcelSheetSizeByName(string strName)

        {

            for (int sheetNumber = 1; sheetNumber < m_totalSheets + 1; sheetNumber++)

            {

                Worksheet sheet = (Worksheet)m_workBook.Sheets;

                if (sheet.Name.ToLower().Equals(strName.ToLower()))

                {

                    this.m_activeSheet = sheetNumber;

                    Range excelRange = sheet.UsedRange;

                    this.m_sheetColumns = excelRange.Columns.Count;

                    this.m_sheetRows = excelRange.Rows.Count;

                }

            }

        }

        public String GetCellValue(int row, int column)
        {

            Worksheet sheet = (Worksheet)m_workBook.Sheets;
            // double类型转换为String 类型
            String cellInfo = ((Microsoft.Office.Interop.Excel.Range)sheet.Cells).Value + "";

            return cellInfo;
        }



        public void DeactiveExcelApplication()
        {

            try



            {

                this.m_workBook.Close(false, this.m_strFileName, null);

                Marshal.ReleaseComObject(this.m_workBook);

            }

            catch



            {

            }

        }
    }
}
Excel文件写入类：
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ReadInfoFromDEM
{
    class ExcelFileWriter
    {
        public static Boolean SavetoExcel(DataTable data, string outputPath, bool isColumnWritten, string sheetName = "统计结果")
        {
            //sheetName = "统计结果";
            IWorkbook workbook = null;
            FileStream fs = null;
            try
            {
                int i = 0;
                int j = 0;
                int count = 0;
                ISheet sheet = null;

                fs = new FileStream(outputPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                if (outputPath.IndexOf(".xlsx") > 0) // 2007版本
                    workbook = new XSSFWorkbook();
                else if (outputPath.IndexOf(".xls") > 0) // 2003版本
                    workbook = new HSSFWorkbook();

                if (workbook != null)
                {
                    sheet = workbook.GetSheet(sheetName);//获取工作表
                }
                else
                {
                    //callback.PrintErrorMessage("\n新建工作表失败！");
                    return false;
                }

                //创建列名
                if (sheet == null)//如果表单为空，则为datatable初始化列名
                {
                    workbook.CreateSheet(sheetName);
                    sheet = workbook.GetSheet(sheetName);
                    if (sheet == null)
                    {
                        //callback.PrintErrorMessage("\n创建Excel表单" + foldername + "出错！");
                        MessageBox.Show("\n创建Excel表单" + sheetName + "出错！", "提示");
                        return false;
                    }
                }

                if (isColumnWritten == true) //写入DataTable的列名
                {
                    IRow row = sheet.CreateRow(0);
                    for (j = 0; j < data.Columns.Count; ++j)
                    {
                        row.CreateCell(j).SetCellValue(data.Columns.ColumnName);
                    }
                    count = 1;
                }
                else
                {
                    count = 0;
                }

                for (i = 0; i < data.Rows.Count; ++i)
                {
                    IRow row = sheet.CreateRow(count);
                    for (j = 0; j < data.Columns.Count; ++j)
                    {
                        row.CreateCell(j).SetCellValue(data.Rows.ToString());
                    }
                    ++count;
                }
                workbook.Write(fs); //写入到excel
                workbook = null;
                fs.Close();
                return true;

            }
            catch (Exception ex)
            {
                //callback.PrintErrorMessage("\n" + ex.ToString());
                return false;
            }
            return true;
        }


        //添加新的sheet
        public static Boolean SavetoExcelAddNewSheet(DataTable data, string outputPath, bool isColumnWritten,  string sheetName = "统计结果")
        {
            //sheetName = "统计结果";
            IWorkbook workbook = null;
            FileStream fs = null;
            try
            {
                int i = 0;
                int j = 0;
                int count = 0;
                ISheet sheet = null;
                ////创建文件 
                if (!File.Exists(outputPath))
                {
                    HSSFWorkbook hssfworkbook = new HSSFWorkbook();
                    //保存  
                    FileStream file = new FileStream(outputPath, FileMode.Create);
                    hssfworkbook.Write(file);
                    file.Close();
                }
                fs = new FileStream(outputPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                if (outputPath.IndexOf(".xlsx") > 0) // 2007版本
                    workbook = new XSSFWorkbook(fs);
                else if (outputPath.IndexOf(".xls") > 0) // 2003版本
                    workbook = new HSSFWorkbook(fs);

                if (workbook != null)
                {
                    sheet = workbook.GetSheet(sheetName);//获取工作表
                    if (sheet != null)
                    {
                        //callback.PrintErrorMessage("\n已存在工作表" + sheetName + "，请检查统计文件！");
                        return false;
                    }
                }
                else
                {
                    //callback.PrintErrorMessage("\n新建工作表失败！");
                    return false;
                }

                //创建列名
                if (sheet == null)//如果表单为空，则为datatable初始化列名
                {
                    workbook.CreateSheet(sheetName);
                    sheet = workbook.GetSheet(sheetName);
                    if (sheet == null)
                    {
                        //callback.PrintErrorMessage("\n创建Excel表单" + foldername + "出错！");
                        MessageBox.Show("\n创建Excel表单" + sheetName + "出错！", "提示");
                        return false;
                    }
                }

                if (isColumnWritten == true) //写入DataTable的列名
                {
                    IRow row = sheet.CreateRow(0);
                    for (j = 0; j < data.Columns.Count; ++j)
                    {
                        row.CreateCell(j).SetCellValue(data.Columns.ColumnName);
                    }
                    count = 1;
                }
                else
                {
                    count = 0;
                }

                for (i = 0; i < data.Rows.Count; ++i)
                {
                    IRow row = sheet.CreateRow(count);
                    for (j = 0; j < data.Columns.Count; ++j)
                    {
                        row.CreateCell(j).SetCellValue(data.Rows.ToString());
                    }
                    ++count;
                }

                //workbook.Write(fs); //写入到excel
                //workbook = null;
                //fs.Close();

                FileStream fout = new FileStream(outputPath, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);//写入流
                fout.Flush();
                workbook.Write(fout);//写入文件
                workbook = null;
                fout.Close();

                return true;

            }
            catch (Exception ex)
            {
                //callback.PrintErrorMessage("\n" + ex.ToString());
                return false;
            }
            return true;
        }
    }
}
附加写入数据类：
 private void writeDataToExcel()
        {
            // 开始写入数据到Excel中去
            int row = dataGridView.Rows.Count;
            int col = dataGridView.ColumnCount;
            // 定义一个二维数组9 * 9
            wArray = new string;
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    // 先读取行数据， 再读取列数据
                    wArray = dataGridView.Rows.Cells.Value.ToString();
                }
            }

            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象，您的电脑可能未安装Excel");
                return;
            }

            Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook workbook =
                        workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            Microsoft.Office.Interop.Excel.Worksheet worksheet =
                        (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets;//取得sheet1 

            //写入标题             
            /*for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                worksheet.Cells = dataGridView1.Columns.HeaderText;
            }*/



            //写入数值
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    // 注意worksheet是从1开始的
                    worksheet.Cells = wArray;
                }
            }

            worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
            try
            {
                workbook.Saved = true;
                workbook.SaveCopyAs(inputFilePath);  //fileSaved = true;   
                MessageBox.Show("数据已经成功被写入到Excel文件，保存路径为："+inputFilePath);
            }
            catch (Exception ex)
            {                
                MessageBox.Show("导出文件时出错,文件可能正被打开！\n" + ex.Message);
            }

            xlApp.Quit();
            // 强行销毁
            GC.Collect();
        }


]]></description><link>https://blog.gaoredu.com/article/db532618-ac03-4689-b59d-f4efc17d5a49</link><guid isPermaLink="true">https://blog.gaoredu.com/article/db532618-ac03-4689-b59d-f4efc17d5a49</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 14 Apr 2018 05:08:39 GMT</pubDate></item><item><title><![CDATA[[黑科技]Window程序窗口跑到屏幕外边去了怎么办？两个按键快速恢复！]]></title><description><![CDATA[1.今天在编程的时候，突然VS2017窗口不知道跑到哪里去了，最大化最小化都不起作用，本来想的是只能把程序关了在重新启动，但这也太麻烦了吧，突然摸索出下面的方法！
435
2.
我们来同时按下你的键盘上的win键和左箭头或者win+上，或者win+下，或者win+右箭头？ 咦？发现什么了，原来的窗口竟然跑出来了，哈哈，就这么简单，快去试试看哈！436
如果大家觉得这个黑科技还不错，欢迎评分支持哈。 ]]></description><link>https://blog.gaoredu.com/article/ceac5db1-72a3-4ef6-8bba-7576481af13d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ceac5db1-72a3-4ef6-8bba-7576481af13d</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 14 Apr 2018 04:52:31 GMT</pubDate></item><item><title><![CDATA[最新Windows系统明文密码查看器使用教程-全网首款可查看电脑明文密码的软件]]></title><description><![CDATA[一、黑科技简介
mimikatz是法国人Gentil Kiwi编写的一款windows平台下的神器，它具备很多功能，其中最亮的功能是直接从 lsass.exe 进程里获取windows处于active状态账号的明文密码。

二、mimikatz获取Windows系统明文密码教程
1.下载mimikatz软件，【点我下载】，下载完毕之后的目录树如下
431
2.运行主程序：mimikatz.exe430
 3. 输入：privilege::debug      提升权限4324. 输入：inject::process lsass.exesekurlsa.dll    将sekurlsa.dll 注入到lsass.exe 中433
5. 输入：@getLogonPasswords    即可获取hash和当前用户的明文密码
434

原理如下：登陆的时候输入的密码，经过 lsass.exe 里的 wdigest 和 tspkg 两个模块调用后，它们对之进行加密处理，而没有进行擦除，而且该加密通过特征可以定位，并且按照微软的算法可逆。 只要登陆过，就可以抓出来，它进行枚举的。黑科技链接: https://pan.baidu.com/s/1Hw8ZxzRty6vIWWttri1bOQ 密码: qanr



]]></description><link>https://blog.gaoredu.com/article/250e50c6-d1aa-4b1f-9a23-44c2cae69ef2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/250e50c6-d1aa-4b1f-9a23-44c2cae69ef2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Apr 2018 21:12:16 GMT</pubDate></item><item><title><![CDATA[【谷歌bug】轻松获取隐藏在chrome浏览器cookie中的账号密码的方法（明文密码）]]></title><description><![CDATA[步骤一：点击右上角的按钮，打开浏览器的菜单，选择设置；
423
步骤二：选择更多高级设置；
424
步骤三：选择管理密码；（当然上面的步骤也可以直接在谷歌浏览器地址栏中输入：chrome://settings/passwords来跳转到密码管理页面）
425
步骤四：正常情况下，当我们要查看Chrome浏览器上保存的密码时，点击显示，会弹出一个对话框来要求输入Windows密码来验证你的权限。426
427
关键步骤：这一步，就来教你如何获取保存在chrome浏览器cookie中的账号密码的方法的关键步骤了，我们关闭系统密码输入的窗口，直接点击网址，我们发现此时会直接跳转到该网站的登录页面，而且密码已经帮我们填充好了，那如何查看明文密码呢？下面就是这个黑科技的重点了。敲黑板。


428
步骤五：进入目标站点的登录页面，输入用户名前几位字符，让浏览器自动填充。右键审查元素，将密码字段的type=”password”改为type=”text”。
429
好了，这样就可以直接查看到他登陆这个网站的明文密码了，其他网站类似步骤，快去试试看。


]]></description><link>https://blog.gaoredu.com/article/4dba8b3a-b1d7-405b-9f60-dd33700da6db</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4dba8b3a-b1d7-405b-9f60-dd33700da6db</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Apr 2018 02:53:50 GMT</pubDate></item><item><title><![CDATA[360浏览器安装谷歌访问助手快速打开谷歌chrome浏览器商店、同步书签、Gmail]]></title><description><![CDATA[第一步：下载谷歌访问助手的插件；【点我下载】
第二步：打开360浏览器，选中谷歌访问助手2.2.2.crx，左键选中谷歌访问助手2.2.2.crx，直接拖到360浏览器的主页面中；
416
第三步：出现上面的界面表示已经安装成功了，接下来我们来实现永久激活该插件；

417
第四步：在浏览器菜单栏中点击工具，选择选项
418
第五步：第二步，在选项卡的基本设置中点击修改主页，在弹出框中输入（http://123.hao245.com），点击确定即可
419
第六步：现在来看看效果，基本上是毫无压力；
420
421
422



大家看看这个黑科技是不是很简单呢，科学上网VPN这个插件就足够了！
]]></description><link>https://blog.gaoredu.com/article/8de029d6-0914-47de-b523-c0f06f19983d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8de029d6-0914-47de-b523-c0f06f19983d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 11 Apr 2018 21:25:46 GMT</pubDate></item><item><title><![CDATA[【java进阶】如何在eclipse中通过Maven搭建普通java项目（超详细）]]></title><description><![CDATA[1.利用Maven创建普通java项目安装maven 本地仓库,至于在Eclipse中配置安装maven本地项目的具体细节这里就不多讲了，这里直接从新建Maven项目开始；
在Eclipse中新建，选择Maven Project。
410
2. 下一步后勾选create a simple project,选择下一步；
411
3.第一个参数也就是你所在企业的名字：com.52tech
第二个参数为这个maven项目的名字：java-maven-test
第三个参数用于指定版本号：选择默认
第四个参数用于指定项目的类型，由于这个是一个java普通项目，这里就选择jar类型
412

4. 创建完成之后的项目框架如下
413

5. 下面我们来配置pom文件，类似于我下面这块写的；

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.uestc</groupId>
  <artifactId>java-pachong-frame</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  	<name>pachong</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
		</dependency>
		<dependency>
			<groupId>commons-dbutils</groupId>
			<artifactId>commons-dbutils</artifactId>
			<version>1.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.4.5</version>
		</dependency>
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.7.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.5</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.25</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.4</version>
		</dependency>

		<!-- Quartz定时器的使用 -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.json/json -->
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20160810</version>
		</dependency>

		<!-- selenium的使用 -->
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>2.44.0</version>
		</dependency>

		<!-- 文字识别 -->
		
	</dependencies>


	<build>

		<plugins>
			<!-- 资源文件拷贝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>

	</build>
</project>6. 修改一下默认的java版本，这里默认的是javase1.5版本的，我们把它修改为1.7版本的；直接再默认的java1.5上面右键选择，build path, 具体的配置如下：
414
7.好了至此，已经完全配置好了，来写个程序测试一下， 源码如下：

public class Test {
	public static void main(String args){
		System.out.println("Hello www.52tech.tech, This is my first maven project!");
	}
}


415
]]></description><link>https://blog.gaoredu.com/article/4b21b95e-2165-4b54-b610-467fcfd159db</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4b21b95e-2165-4b54-b610-467fcfd159db</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 10 Apr 2018 23:05:28 GMT</pubDate></item><item><title><![CDATA[【java进阶】Java中使用Tess4J实现图片中文字的识别功能]]></title><description><![CDATA[1.首先进入Tess4J官网去下载最新的Ocr识别包，下载地址：https://sourceforge.net/projects/tess4j/files/tess4j/
405
2.下载完毕之后开始解压到你的本地，解压后的目录如下。
406
3.把/dist路径下面的tess4j-3.4.6.jar以及lib目录下面的所有jar包导入到你新建的项目里面去。

407
4. 开始编写代码，识别测试，源码如下。
package test;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import net.sourceforge.tess4j.util.ImageHelper;

public class CheckNodeTest {
        public static void main(String args) {
                try {
                        
                        
                        File imageFile = new File("D:\\Tesseract-OCR\\doc\\2.jpg");// 图片位置
                        ITesseract instance = new Tesseract(); // JNA Interface Mapping
                        instance.setDatapath("D:\\Tesseract-OCR\\Tess4J\\tessdata");// 设置tessdata位置
                        instance.setLanguage("eng");// 选择字库文件（只需要文件名，不需要后缀名）
                        String result = instance.doOCR(imageFile);// 开始识别
                        
                        BufferedImage img = change(new File("D:\\Tesseract-OCR\\doc\\2.jpg"));
                        String rs = instance.doOCR(img);

                        System.out.println("图片实际为：xxxx" + "\t图片识别结果为：" + result);// 打印图片内容
                        System.out.println("图片实际为：xxxx" + "\t图片识别结果为：" + rs);// 打印图片内容
                } catch (TesseractException e) {
                        e.printStackTrace();
                }
        }

        
        
        public static BufferedImage change(File file) {

                // 读取图片字节数组
                BufferedImage textImage = null;
                try {
                        InputStream in = new FileInputStream(file);
                        BufferedImage image = ImageIO.read(in);
                        textImage = ImageHelper
                                        .convertImageToGrayscale(ImageHelper.getSubImage(image, 0, 0, image.getWidth(), image.getHeight())); // 对图片进行处理
                        textImage = ImageHelper.getScaledInstance(image, image.getWidth() * 5, image.getHeight() * 5); // 将图片扩大5倍

                } catch (IOException e) {
                        e.printStackTrace();
                }

                return textImage;
        }
}
测试效果如下：
408
图片实际为：xxxx        图片识别结果为：ASDFESA. DA54


图片实际为：xxxx        图片识别结果为：ASDF E 5A . DA54

409
图片实际为：xxxx        图片识别结果为：Mt


图片实际为：xxxx        图片识别结果为：mm这种方式识别对于普通的文字识别是有效的，但是对于一些网站的比较模糊一点的验证码识别基本上就失效了哈，大家可以看下有没有更好的方法去改进一下。

注意事项：
1.上面的测试实例中我写了一个将图片放大一定比例的函数，用于比对识别效果；
2.本项目我是使用Maven工具搭建的，但是这里直接将下载的jar包文件导入到了我的工程中去，因此没有必要再去pom.xml文件中去配置这个插件的版本信息。

]]></description><link>https://blog.gaoredu.com/article/15c6073e-7512-46b2-81dd-03aedba13f24</link><guid isPermaLink="true">https://blog.gaoredu.com/article/15c6073e-7512-46b2-81dd-03aedba13f24</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 10 Apr 2018 18:02:34 GMT</pubDate></item><item><title><![CDATA[【基础部分】java编写排序算法总结整理]]></title><description><![CDATA[Code_01_InsertionSort
package basic_class_01;

import java.util.Arrays;

public class Code_01_InsertionSort {

    publicstatic void insertionSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       for(int i = 1; i < arr.length; i++) {
           for(int j = i - 1; j >= 0 && arr > arr; j--) {
              swap(arr,j, j + 1);
           }
       }
    }

    publicstatic void swap(int arr, int i, int j) {
       arr= arr ^ arr;
       arr= arr ^ arr;
       arr= arr ^ arr;
    }

    // fortest
    publicstatic void comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
       }
       returnarr;
    }

    // for test
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           returntrue;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // fortest
    publicstatic void printArray(int arr) {
       if(arr == null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       inttestTime = 500000;
       intmaxSize = 100;
       intmaxValue = 100;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           insertionSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       insertionSort(arr);
       printArray(arr);
    }

}
Code_02_SelectionSort
package basic_class_01;

import java.util.Arrays;

public class Code_02_SelectionSort {

    publicstatic void selectionSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       for(int i = 0; i < arr.length - 1; i++) {
           intminIndex = i;
           for(int j = i + 1; j < arr.length; j++) {
              minIndex= arr < arr ? j : minIndex;
           }
           swap(arr,i, minIndex);
       }
    }

    publicstatic void swap(int arr, int i, int j) {
       inttmp = arr;
       arr= arr;
       arr= tmp;
    }

    // fortest
    publicstatic void comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
       }
       returnarr;
    }

    // fortest
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           returntrue;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // fortest
    publicstatic void printArray(int arr) {
       if(arr == null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       inttestTime = 500000;
       intmaxSize = 100;
       intmaxValue = 100;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           selectionSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              printArray(arr1);
              printArray(arr2);
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       selectionSort(arr);
       printArray(arr);
    }

}
Code_03_HeapSort
package basic_class_01;

import java.util.Arrays;

public class Code_03_HeapSort {

    publicstatic void heapSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           heapInsert(arr,i);
       }
       intsize = arr.length;
       swap(arr,0, --size);
       while(size > 0) {
           heapify(arr, 0, size);
           swap(arr,0, --size);
       }
    }

    publicstatic void heapInsert(int arr, int index) {
       while(arr > arr) {
           swap(arr,index, (index - 1) / 2);
           index= (index - 1) / 2;
       }
    }

    publicstatic void heapify(int arr, int index, int size) {
       intleft = index * 2 + 1;
       while(left < size) {
           intlargest = left + 1 < size && arr > arr ? left + 1: left;
           largest= arr > arr ? largest : index;
           if(largest == index) {
              break;
           }
           swap(arr,largest, index);
           index= largest;
           left= index * 2 + 1;
       }
    }

    publicstatic void swap(int arr, int i, int j) {
       inttmp = arr;
       arr= arr;
       arr= tmp;
    }

    // fortest
    publicstatic void comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
       }
       returnarr;
    }

    // fortest
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           return true;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // fortest
    publicstatic void printArray(int arr) {
       if (arr== null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       inttestTime = 500000;
       intmaxSize = 100;
       intmaxValue = 100;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           heapSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       heapSort(arr);
       printArray(arr);
    }

}
Code_04_QuickSort
package basic_class_01;

import java.util.Arrays;

public class Code_04_QuickSort {

    publicstatic void quickSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       quickSort(arr,0, arr.length - 1);
    }

    publicstatic void quickSort(int arr, int l, int r) {
       if (l <r) {
           swap(arr,l + (int) (Math.random() * (r - l + 1)), r);
           intp = partition(arr, l, r);
           quickSort(arr,l, p - 1);
           quickSort(arr,p + 1, r);
       }
    }

    publicstatic int partition(int arr, int l, int r) {
       intless = l - 1;
       int more= r;
       while(l < more) {
           if(arr < arr) {
              swap(arr,++less, l++);
           }else if (arr > arr) {
              swap(arr,--more, l);
           }else {
              l++;
           }
       }
       swap(arr,more, r);
       returnnew int { less + 1, more };
    }

    publicstatic void swap(int arr, int i, int j) {
       inttmp = arr;
       arr= arr;
       arr= tmp;
    }

    // fortest
    publicstatic void comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
       }
       returnarr;
    }

    // fortest
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           returntrue;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // fortest
    publicstatic void printArray(int arr) {
       if(arr == null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       inttestTime = 500000;
       intmaxSize = 100;
       intmaxValue = 100;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           quickSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              printArray(arr1);
              printArray(arr2);
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       quickSort(arr);
       printArray(arr);

    }

}
Code_05_MergeSort
package basic_class_01;

import java.util.Arrays;

public class Code_05_MergeSort {

    publicstatic void mergeSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       mergeSort(arr,0, arr.length - 1);
    }

    publicstatic void mergeSort(int arr, int l, int r) {
       if (l== r) {
           return;
       }
       intmid = l + ((r - l) >> 1);
       mergeSort(arr,l, mid);
       mergeSort(arr,mid + 1, r);
       merge(arr,l, mid, r);
    }

    publicstatic void merge(int arr, int l, int m, int r) {
       inthelp = new int;
       int i= 0;
       int p1= l;
       int p2= m + 1;
       while(p1 <= m && p2 <= r) {
           help= arr < arr ? arr : arr;
       }
       while(p1 <= m) {
           help= arr;
       }
       while(p2 <= r) {
           help= arr;
       }
       for (i= 0; i < help.length; i++) {
           arr = help;
       }
    }

    // fortest
    public staticvoid comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
       }
       returnarr;
    }

    // fortest
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           returntrue;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // fortest
    publicstatic void printArray(int arr) {
       if(arr == null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       inttestTime = 500000;
       intmaxSize = 100;
       int maxValue= 100;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           mergeSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              printArray(arr1);
              printArray(arr2);
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       mergeSort(arr);
       printArray(arr);

    }

}
Code_06_BucketSort
package basic_class_01;

import java.util.Arrays;

public class Code_06_BucketSort {

    // onlyfor 0~200 value
    publicstatic void bucketSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       intmax = Integer.MIN_VALUE;
       for(int i = 0; i < arr.length; i++) {
           max= Math.max(max, arr);
       }
       intbucket = new int;
       for(int i = 0; i < arr.length; i++) {
           bucket]++;
       }
       int i= 0;
       for(int j = 0; j < bucket.length; j++) {
           while (bucket-- > 0) {
              arr= j;
           }
       }
    }

    // fortest
    publicstatic void comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random());
       }
       returnarr;
    }

    // fortest
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           returntrue;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // for test
    publicstatic void printArray(int arr) {
       if(arr == null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       int testTime= 500000;
       intmaxSize = 100;
       intmaxValue = 150;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           bucketSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              printArray(arr1);
              printArray(arr2);
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       bucketSort(arr);
       printArray(arr);

    }

}
Code_07_RadixSort
package basic_class_01;

import java.util.Arrays;

public class Code_07_RadixSort {

    // onlyfor no-negative value
    publicstatic void radixSort(int arr) {
       if(arr == null || arr.length < 2) {
           return;
       }
       radixSort(arr,0, arr.length - 1, maxbits(arr));
    }

    publicstatic int maxbits(int arr) {
       intmax = Integer.MIN_VALUE;
       for(int i = 0; i < arr.length; i++) {
           max= Math.max(max, arr);
       }
       intres = 0;
       while(max != 0) {
           res++;
           max/= 10;
       }
       returnres;
    }

    publicstatic void radixSort(int arr, int begin, int end, int digit) {
       finalint radix = 10;
       int i= 0, j = 0;
       intcount = new int;
       intbucket = new int;
       for(int d = 1; d <= digit; d++) {
           for(i = 0; i < radix; i++) {
              count= 0;
           }
           for(i = begin; i <= end; i++) {
              j= getDigit(arr, d);
              count++;
           }
           for(i = 1; i < radix; i++) {
              count= count + count;
           }
           for(i = end; i >= begin; i--) {
              j= getDigit(arr, d);
              bucket- 1] = arr;
              count--;
           }
           for(i = begin, j = 0; i <= end; i++, j++) {
              arr= bucket;
           }
       }
    }

    publicstatic int getDigit(int x, int d) {
       return((x / ((int) Math.pow(10, d - 1))) % 10);
    }

    // fortest
    publicstatic void comparator(int arr) {
       Arrays.sort(arr);
    }

    // fortest
    publicstatic int generateRandomArray(int maxSize, int maxValue) {
       intarr = new int;
       for(int i = 0; i < arr.length; i++) {
           arr= (int) ((maxValue + 1) * Math.random());
       }
       returnarr;
    }

    // fortest
    publicstatic int copyArray(int arr) {
       if(arr == null) {
           returnnull;
       }
       intres = new int;
       for(int i = 0; i < arr.length; i++) {
           res= arr;
       }
       returnres;
    }

    // fortest
    publicstatic boolean isEqual(int arr1, int arr2) {
       if((arr1 == null && arr2 != null) || (arr1 != null && arr2 ==null)) {
           returnfalse;
       }
       if(arr1 == null && arr2 == null) {
           returntrue;
       }
       if(arr1.length != arr2.length) {
           returnfalse;
       }
       for(int i = 0; i < arr1.length; i++) {
           if(arr1 != arr2) {
              returnfalse;
           }
       }
       returntrue;
    }

    // fortest
    publicstatic void printArray(int arr) {
       if(arr == null) {
           return;
       }
       for(int i = 0; i < arr.length; i++) {
           System.out.print(arr+ " ");
       }
       System.out.println();
    }

    // fortest
    publicstatic void main(String args) {
       inttestTime = 500000;
       intmaxSize = 100;
       intmaxValue = 100000;
       booleansucceed = true;
       for(int i = 0; i < testTime; i++) {
           intarr1 = generateRandomArray(maxSize, maxValue);
           intarr2 = copyArray(arr1);
           radixSort(arr1);
           comparator(arr2);
           if(!isEqual(arr1, arr2)) {
              succeed= false;
              printArray(arr1);
              printArray(arr2);
              break;
           }
       }
       System.out.println(succeed? "Nice!" : "Fucking fucked!");

       intarr = generateRandomArray(maxSize, maxValue);
       printArray(arr);
       radixSort(arr);
       printArray(arr);

    }

}

]]></description><link>https://blog.gaoredu.com/article/36d78424-e095-4fa9-bc61-46ed23507b9b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/36d78424-e095-4fa9-bc61-46ed23507b9b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 10 Apr 2018 00:46:58 GMT</pubDate></item><item><title><![CDATA[黑科技之WEB渗透第一课虚拟机介绍及Kali Linux系统的安装]]></title><description><![CDATA[1.Kali Linux系统下载安装包

Image NameDownloadSizeVersionsha256sum
Kali Linux 64 Bit（64位的安装包）HTTP | Torrent2.9G2018.1ed88466834ceeba65f426235ec191fb3580f71d50364ac5131daec1bf976b317
Kali Linux 32 Bit（32位的安装包【推荐下载】）HTTP | Torrent2.9G2018.1b541a78a063b6385365ac00248631c4a18c92b8c4e3618db0b1bf751b495149f
Kali Linux Light 64 Bit（轻量级的64位系统，功能不完整，不建议下载）HTTP | Torrent846M2018.1e47646078a5f31a952e9b5243a292d61bf6fc7af0d325f996c1fb45e0f721286
Kali Linux Light 32 Bit（轻量级的32位系统，功能不完善）HTTP | Torrent846M2018.15bf5ac2b1bfa969527c5125c404049400f9df0c44dbeb5ed716135f040ef95dc
Kali Linux Light ArmelHTTP | Torrent479M2018.1061616914d64ab8b444be9b27a90a6d75b251945d2c86b19b75cfa4bab98520e

2.安装方法参见百度经验或者博客
3.常用使用技巧
/etc/init.d/ssh start   启动ssh服务
service ssh status      查看服务是否正常运行

局域网断网攻击：
arpspoof -i eth0(网卡名) -t 192.168.1.101(被攻击的地址) 192.168.1.1(网关地址)   监听的时候反过来
fping -asg 192.168.1.0/24-----------显示所有子网掩码为24为的局域网的所有在线ip上


使能数据转发功能：
echo "1" > /proc/sys/net/ipv4/ip_forward
禁止数据转发功能：
echo "0" > /proc/sys/net/ipv4/ip_forward
查看数据转发状态：
cat /proc/sys/net/ipv4/ip_forward


driftnet -i eth0        监听图片

ettercap -Tq -i eth0  //进入HTTP监听模式

vim /etc/ettercap/etter.conf  （把linux下面的那两行的注释去掉）


劫持cookie的黑科技:
先打开ip转发--->设置浏览器端口（127.0.0.1:1234）--->然后使用ferret -i eth0 ,然后打开hamster进行抓取


]]></description><link>https://blog.gaoredu.com/article/444bb7ed-f540-4486-88d0-20cdfe9412b4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/444bb7ed-f540-4486-88d0-20cdfe9412b4</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Apr 2018 21:23:11 GMT</pubDate></item><item><title><![CDATA[【JavaScript进阶】JavaScript中使用的一些技巧分析]]></title><description><![CDATA[使用 var 关键字进行变量赋值在Javascript中，如果一个变量没有经过声明就直接进行赋值操作，那么这个变量就会自动转变成全局变量。我们要尽量避免这种情况（全局变量）。使用 === 来代替 == 进行判等== 和 != 操作符会在某些情况下自动进行类型转化。但是 === 和 !== 不会做自动转化，它们在做比较时，会同时比较数据类型和值，这也使得 === 和 !== 要比 == 和 != 的速度要快。10] === 10    // is false10]  == 10    // is true'10' == 10     // is true'10' === 10    // is false == 0        // is true ===  0      // is false'' == false    // is true but true == "a" is false'' ===   false // is false

undefined ， null ，0， false ， NaN ， '' （空字符串）都为逻辑假值使用分号 ; 来结束一行代码使用分号来结束代码行是一个被Javascript社区推荐的最佳实践。如果你忘了也没有关系，因为现在的Javascript引擎将会自动给你加上分号。至于我们为什么应该使用分号，可以参阅这篇文章点击打开链接 。使用对象构造器function Person(firstName, lastName){    this.firstName =  firstName;    this.lastName = lastName;}var Saad = new Person("Saad", "Mousliki");

使用 typeof 、 instanceof 、 constructor 时要谨慎小心
typeof ：JavaScript的一元操作符，用于以字符串的形式返回变量的原始类型，注意， typeof null 也会返回 object ，大多数的对象类型（数组 Array 、时间 Date 等）也会返回 object
constructor ：对象（函数）的内部原型属性，它是可写的（可以被重写）
instanceof ：JavaScript操作符，会在原型链中的构造器中搜索，找到则返回 true ，否则返回 false （常用于判断某一个对象是否是某个构造器或者其父类构造器的实例）（instanceof在原型链及实例属性中查找，区别于hasOwnProperty，后者只在实例属性中进行查找）
var arr = "a", "b", "c"];typeof arr;   // return "object" arr instanceof Array // truearr.constructor();  // 

学会使用自调用函数函数在创建之后直接自动执行，通常称之为自调用匿名函数（Self-Invoked Anonymous Function）或直接调用函数表达式（Immediately Invoked Function Expression ）。比如，(function(){    // some private code that will be executed automatically})();(function(a,b){    var result = a+b;    return result;})(10,20);

随机从数组中取出一个元素var items = 12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];var randomItem = itemsMath.floor(Math.random() * items.length)];

从一个指定的范围中取出一个随机数这个功能在生成测试用的假数据时特别有用。比如取一个指定范围内的工资数。var x = Math.floor(Math.random() * (max - min + 1)) + min;

生成一个从0开始到指定数字的序列var numbersArray =  , max = 100;for( var i=1; numbersArray.push(i++) < max;);  // numbers = 

生成一个随机的字母数字序列function generateRandomAlphaNum(len) {    var rdmString = "";    for( ;rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));        return  rdmString.substr(0, len);}

译者注toString() 方法可以接受一个参数表示数字进制。而36进制刚好可以使用a-z和0-9这些字符。所以此方法可以用于生成简单的随机串。
打乱一个数字数组的顺序var numbers = 5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];numbers = numbers.sort(function(){ return Math.random() - 0.5});/* the array numbers will be equal for example to   */

这里采用了原生的排序函数 sort() ，此外我们还可以使用专门的工具库来得到这一目的。字符串去空格像Java、C#、PHP这些语言都内置了 trim() 功能函数用于字符串去空格。但是Javascript没有这个内置方法。可以通过下面的方法来得到此目的，String.prototype.trim = function() {    return this.replace(/^\s+|\s+$/g, "");};

不过，在新的Javascript引擎中，已经内置支持了这个功能。将一个数组追加到另一个数组中var array1 = 12 , "foo" , {name "Joe"} , -2458];var array2 = "Doe" , 555 , 100];Array.prototype.push.apply(array1, array2);/* array1 值为  12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */

将 argruments 转换成数组var argArray = Array.prototype.slice.call(arguments);

检验一个参数是否为数字function isNumber(n){    return !isNaN(parseFloat(n)) && isFinite(n);}

检验一个参数是否为数组function isArray(obj){    return Object.prototype.toString.call(obj) === '' ;}

如果 toString() 被重写过的话，上面的方法就不行了。此时我们可以使用下面的方法，Array.isArray(obj); // its a new Array method

如果在浏览器中没有使用iframe，还可以用 instanceof ，但如果上下文太复杂，也有可能出错。比如，var myFrame = document.createElement('iframe');document.body.appendChild(myFrame);var myArray = window.frameswindow.frames.length-1].Array;var arr = new myArray(a,b,10); // // myArray 的构造器已经丢失，instanceof 的结果将不正常// 不同iframe中的构造器是不能共享的arr instanceof Array; // false

取出一个数组中的最大值和最小值var numbers = 5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; var maxInNumbers = Math.max.apply(Math, numbers); var minInNumbers = Math.min.apply(Math, numbers);

清空一个数组var myArray = 12 , 222 , 1000 ];  myArray.length = 0; // myArray will be equal to .

不用使用 delete 关键字来移除一个数组元素应该使用 splice 方法而不是 delete 来移除一个数组元素。对一个数组元素使用 delete 会让这个数组元素的值变为 undefined ，并没有将这个数组元素给删除掉。错误的用法，var items = 12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ]; items.length; // return 11 delete items3]; // return true items.length; // return 11 /* items will be equal to 12, 548, "a", undefined × 1, 5478, "foo", 8852, undefined × 1, "Doe", 2154,       119]   */

正确的用法，var items = 12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ]; items.length; // return 11 items.splice(3,1) ; items.length; // return 10 /* items 结果为 12, 548, "a", 5478, "foo", 8852, undefined × 1, "Doe", 2154, 119] */

注意，要想移除一个对象的属性，应该采用 delete 方法。可以通过操作数组长度 length 来截断一个数组与前面那个使用 length 清空数组的示例类似，我们可以使用 length 来截断一个数组。var myArray = 12 , 222 , 1000 , 124 , 98 , 10 ];  myArray.length = 4; // myArray will be equal to .

除此之外，如果我们使用一个更大的值去重写 length ，那么数组的长度将会改变，同时会用undefined 填充新增的数组元素。myArray.length = 10; // the new array length is 10 myArray1] ; // undefined

在条件中使用 && 及 || 进行短语判断var foo = 10;  foo == 10 && doSomething(); // is the same thing as if (foo == 10) doSomething(); foo == 5 || doSomething(); // is the same thing as if (foo != 5) doSomething();

|| 还用于给函数参数设置默认值，比如function doSomething(arg1){     arg1 = arg1 || 10; // arg1 will have 10 as a default value if it’s not already set}

使用 map() 对数组进行遍历操作var squares = 1,2,3,4].map(function (val) {      return val * val;  }); // squares will be equal to 

保留指定位数的小数点var num = 2.443242342;num = num.toFixed(4);  // num will be equal to 2.4432

注意， toFixed() 方法返回的是字符串而不是一个数字。浮点数计算问题0.1 + 0.2 === 0.3 // is false 9007199254740992 + 1 // is equal to 9007199254740992  9007199254740992 + 2 // is equal to 9007199254740994

为什么呢？因为0.1+0.2等于0.30000000000000004。JavaScript的数字都遵循IEEE 754标准构建，在内部都是64位浮点小数表示，具体可以参阅 这篇文章 。另外，你也可以使用 toFixed() 或者 toPrecision() 来解决这个问题。译者注关于这个问题，博主也有一篇相关的文章， Javascript中浮点数的计算精度问题 。
使用 for...in 来遍历对象的属性下面的代码片段使用 for...in 来遍历对象属性，可以防止遍历到对象原型链上的属性。for (var name in object) {      if (object.hasOwnProperty(name)) {         // do something with name                        }  }

逗号运算符var a = 0; var b = ( a++, 99 ); console.log(a);  // a will be equal to 1 console.log(b);  // b is equal to 99

缓存临时变量用于避免再次计算或者查询在使用jquery时，我们可以临时缓存整个jq对象，比如var navright = document.querySelector('#right'); var navleft = document.querySelector('#left'); var navup = document.querySelector('#up'); var navdown = document.querySelector('#down');

提前检查传入 isFinite() 的参数isFinite(0/0) ; // false isFinite("foo"); // false isFinite("10"); // true isFinite(10);   // true isFinite(undefined);  // false isFinite();   // false isFinite(null);  // true  注意这里！！！

避免对数组进行负值索引var numbersArray = 1,2,3,4,5]; var from = numbersArray.indexOf("foo") ;  // from is equal to -1 numbersArray.splice(from,2);    // will return 5]

注意传给 splice 的索引参数不要是负数，当是负数时，会从数组结尾处删除元素。使用 JSON 来进行序列化和反序列化var person = {name :'Saad', age : 26, department : {ID : 15, name : "R&D"} }; var stringFromPerson = JSON.stringify(person); /* stringFromPerson is equal to "{"name":"Saad","age":26,"department":{"ID":15,"name":"R&D"}}"   */ var personFromString = JSON.parse(stringFromPerson);  /* personFromString is equal to person object  */

避免使用 eval() 和函数构造器eval() 和函数构造器（ Function consturctor）的开销都比较大，每次调用JavaScript引擎都要将源代码转换为可执行的代码。var func1 = new Function(functionCode);var func2 = eval(functionCode);

避免使用 with()使用 with() 语法会将变量注入到全局变量中。因此，如果有重名的变量，就会发生覆盖或者重写的问题。避免使用 for...in 遍历数组错误的用法，var sum = 0;  for (var i in arrayNumbers) {      sum += arrayNumbers;  }

更好的做法，var sum = 0;  for (var i = 0, len = arrayNumbers.length; i < len; i++) {      sum += arrayNumbers;  }

除此之外， i 和 len 是在 for 循环的第一个声明中，二者只会初始化一次，这要比下面这种写法快：for (var i = 0; i < arrayNumbers.length; i++)

为什么呢？因为数组 arrayNumbers 的长度在每次遍历的时候都会计算一次，这就造成了不必要的消耗。注意，这个问题其实在最新的Javascript引擎中已经被修复了。给 setTimeout() 及 setInterval() 传递函数而不是字符串更好如果你给 setTimeout() 或者 setInterval() 传递字符串的话，那么它内部的执行机制其实是和 eval() 是一样的，这样会比较慢。错误的用法，setInterval('doSomethingPeriodically()', 1000);  setTimeout('doSomethingAfterFiveSeconds()', 5000);

正确的用法，setInterval(doSomethingPeriodically, 1000);  setTimeout(doSomethingAfterFiveSeconds, 5000);

使用 switch/case 来代替一坨 if/else当判断有超过两个分支的时候使用 switch/case 要更快一些，而且也更优雅，更利于代码的组织，当然，如果有超过10个分支，就不要使用 switch/case 了。在 switch/case 中使用数字范围进行分界其实 switch/case 中的 case 条件，还可以这样写：function getCategory(age) {      var category = "";      switch (true) {          case isNaN(age):              category = "not an age";              break;          case (age >= 50):              category = "Old";              break;          case (age <= 20):              category = "Baby";              break;          default:              category = "Young";              break;      };      return category;  }  getCategory(5);  // will return "Baby"

为创建的对象指定原型下面的示例演示了可以给定对象作为参数，来创建以此为原型的新对象：function clone(object) {      function OneShotConstructor(){};     OneShotConstructor.prototype = object;      return new OneShotConstructor(); } clone(Array).prototype ;  // 

html转义函数function escapeHTML(text) {      var replacements= {'<': '<', '>': '>', '&': '&', '"': '"'};                          return text.replace(//g, function(character) {          return replacements;      }); }

不要在循环中使用 try...catch...finallytry...catch...finally 在捕获一个异常时，会创建一个运行时环境的子作用域。而异常变量的生命周期仅限在这个运行时的子作用域。译者注这里我们可以使用闭包来保存这个运行时的异常变量。
错误的用法var object = 'foo', 'bar'], i;  for (i = 0, len = object.length; i <len; i++) {      try {          // do something that throws an exception     } catch (e) {           // handle exception      } }

正确的用法var object = 'foo', 'bar'], i;  try {     for (i = 0, len = object.length; i <len; i++) {          // do something that throws an exception     } } catch (e) {       // handle exception  }

使用 XMLHttpRequests 时注意设置超时参数如果一个ajax请求长时间没有响应，我们应该中止请求。否则浏览器将会一直等待。我们可以使用 setTimeout() 来做一个定时器，var xhr = new XMLHttpRequest (); xhr.onreadystatechange = function () {      if (this.readyState == 4) {          clearTimeout(timeout);          // do something with response data     }  }  var timeout = setTimeout( function () {      xhr.abort(); // call error callback  }, 60*1000 /* timeout after a minute */ ); xhr.open('GET', url, true);  xhr.send();

除此之外，我们应该避免同时发送多个 同步的 ajax请求。处理websocket超时一般地，WebSocket连接创建后，如果30秒内没有任何活动服务器端会对连接进行超时处理，防火墙也可以对单位周期内没有活动的连接进行超时处理。为了防止超时中断，你需要每隔一段时间发送一个心跳数据（空字符串）以保持websocket连接。下面的两个方法一个用于周期的发送心跳数据保持连接，一个是取消心跳数据包。var timerID = 0;function keepAlive() {    var timeout = 15000;    if (webSocket.readyState == webSocket.OPEN) {        webSocket.send('');    }    timerId = setTimeout(keepAlive, timeout);}function cancelKeepAlive() {    if (timerId) {        cancelTimeout(timerId);    }}

keepAlive() 方法应该被添加在 webSOcket 连接的 onOpen() 方法的最后，而 cancelKeepAlive() 添加在 onClose() 方法的最后。记住：原生操作肯定比函数调用要效率高比如，错误的用法，var min = Math.min(a,b); A.push(v);

正确的用法，var min = a < b ? a : b; AA.length] = v;


]]></description><link>https://blog.gaoredu.com/article/e22f52d2-326e-4d69-88cc-d662325a0d39</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e22f52d2-326e-4d69-88cc-d662325a0d39</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Apr 2018 20:46:12 GMT</pubDate></item><item><title><![CDATA[【数据结构与算法】冒泡排序法]]></title><description><![CDATA[
1.算法原理
400
2.算法实现源码：
package basic_class_01;

import java.util.Arrays;

public class Code_00_BubbleSort {

	public static void bubbleSort(int arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		for (int e = arr.length - 1; e > 0; e--) {
			for (int i = 0; i < e; i++) {
				if (arr > arr) {
					swap(arr, i, i + 1);
				}
			}
		}
}
	public static void swap(int arr, int i, int j) {
		arr = arr ^ arr;
		arr = arr ^ arr;
		arr = arr ^ arr;
	}

	// for test
	public static void comparator(int arr) {
		Arrays.sort(arr);
	}

	// for test
	public static int generateRandomArray(int maxSize, int maxValue) {
		int arr = new int;
		for (int i = 0; i < arr.length; i++) {
			arr = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
		}
		return arr;
	}

	// for test
	public static int copyArray(int arr) {
		if (arr == null) {
			return null;
		}
		int res = new int;
		for (int i = 0; i < arr.length; i++) {
			res = arr;
		}
		return res;
	}

	// for test
	public static boolean isEqual(int arr1, int arr2) {
		if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
			return false;
		}
		if (arr1 == null && arr2 == null) {
			return true;
		}
		if (arr1.length != arr2.length) {
			return false;
		}
		for (int i = 0; i < arr1.length; i++) {
			if (arr1 != arr2) {
				return false;
			}
		}
		return true;
	}

	// for test
	public static void printArray(int arr) {
		if (arr == null) {
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr + " ");
		}
		System.out.println();
	}

	// for test
	public static void main(String args) {
		int testTime = 500000;
		int maxSize = 100;
		int maxValue = 100;
		boolean succeed = true;
		for (int i = 0; i < testTime; i++) {
			int arr1 = generateRandomArray(maxSize, maxValue);
			int arr2 = copyArray(arr1);
			bubbleSort(arr1);
			comparator(arr2);
			if (!isEqual(arr1, arr2)) {
				succeed = false;
				break;
			}
		}
		System.out.println(succeed ? "Nice!" : "Fucking fucked!");

		int arr = generateRandomArray(maxSize, maxValue);
		printArray(arr);
		bubbleSort(arr);
		printArray(arr);
	}

}package basic_class_01;

import java.util.Arrays;

public class Code_00_BubbleSort {

	public static void bubbleSort(int arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		for (int e = arr.length - 1; e > 0; e--) {
			for (int i = 0; i < e; i++) {
				if (arr > arr) {
					swap(arr, i, i + 1);
				}
			}
		}
	}

	public static void swap(int arr, int i, int j) {
		arr = arr ^ arr;
		arr = arr ^ arr;
		arr = arr ^ arr;
	}

	// for test
	public static void comparator(int arr) {
		Arrays.sort(arr);
	}

	// for test
	public static int generateRandomArray(int maxSize, int maxValue) {
		int arr = new int;
		for (int i = 0; i < arr.length; i++) {
			arr = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
		}
		return arr;
	}

	// for test
	public static int copyArray(int arr) {
		if (arr == null) {
			return null;
		}
		int res = new int;
		for (int i = 0; i < arr.length; i++) {
			res = arr;
		}
		return res;
	}

	// for test
	public static boolean isEqual(int arr1, int arr2) {
		if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
			return false;
		}
		if (arr1 == null && arr2 == null) {
			return true;
		}
		if (arr1.length != arr2.length) {
			return false;
		}
		for (int i = 0; i < arr1.length; i++) {
			if (arr1 != arr2) {
				return false;
			}
		}
		return true;
	}

	// for test
	public static void printArray(int arr) {
		if (arr == null) {
			return;
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr + " ");
		}
		System.out.println();
	}

	// for test
	public static void main(String args) {
		int testTime = 500000;
		int maxSize = 100;
		int maxValue = 100;
		boolean succeed = true;
		for (int i = 0; i < testTime; i++) {
			int arr1 = generateRandomArray(maxSize, maxValue);
			int arr2 = copyArray(arr1);
			bubbleSort(arr1);
			comparator(arr2);
			if (!isEqual(arr1, arr2)) {
				succeed = false;
				break;
			}
		}
		System.out.println(succeed ? "Nice!" : "Fucking fucked!");

		int arr = generateRandomArray(maxSize, maxValue);
		printArray(arr);
		bubbleSort(arr);
		printArray(arr);
	}

}


]]></description><link>https://blog.gaoredu.com/article/2c3bd690-32bc-4896-9857-bd5582d88569</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2c3bd690-32bc-4896-9857-bd5582d88569</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Apr 2018 20:42:54 GMT</pubDate></item><item><title><![CDATA[【科技电影】《移动迷宫》电影在线观看]]></title><description><![CDATA[bg1.png电影名称：移动迷宫 The Maze Runner 
主演: 迪伦·奥布莱恩 / 阿梅尔·艾米恩 / 李起弘 / 布雷克·库珀 / 托马斯·布罗迪-桑斯特 / 更多...
类型: 动作 / 科幻 / 冒险/科技

399
网友评价：　男孩托马斯（迪伦·欧布莱恩 Dylan O'Brien 饰）在电梯中醒来，奇怪的是他除了名字之外什么都记不得。一天，电梯为他们送来了一个女孩特雷莎，她是来这里的第一个女孩。此后，迷宫逐渐开始发生变化，一切都陷入了混乱中，托马斯和特雷莎决定一起走上破解迷宫之路，找出迷宫背后令人不寒而栗的秘密…………

爱奇艺在线观影地址：http://www.iqiyi.com/v_19rrnxilhs.html
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院点我走起
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）

]]></description><link>https://blog.gaoredu.com/article/0140629a-613d-4c9e-995b-8b3de3c99e52</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0140629a-613d-4c9e-995b-8b3de3c99e52</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 07 Apr 2018 01:47:38 GMT</pubDate></item><item><title><![CDATA[2018最新激活WebStorm2017.3.5软件教程]]></title><description><![CDATA[主要步骤如下：
1.下载破解补丁
IntelliJ IDEA 注册码
*.lanyus.com及*.qinxi1992.cn下的全部授权服务器已遭JetBrains封杀 
请搭建自己的IntelliJ IDEA授权服务器，教程在http://blog.lanyus.com/archives/174.html若资金允许，请点击https://www.jetbrains.com/idea/buy/购买正版，谢谢合作 
学生凭学生证可免费申请正版授权 | 创业公司可5折购买正版授权欢迎加入 IntelliJ IDEA开源社区 QQ群 | 欢迎加入 企业后台管理基础框架 开源项目 
欢迎使用 极客桌面搜索, 毫秒级响应, 要多快就有多快, 让本地搜索飞起来破解补丁无需使用注册码，下载地址：http://idea.lanyus.com/jar/JetbrainsCrack-2.7-release-str.jar 
idea14 keygen下载地址：http://idea.lanyus.com/jar/JetbrainsPatchKeygen-1.2.1.jar注册码有效期为2017年10月15日至2018年10月14日
使用前请将“0.0.0.0 account.jetbrains.com”添加到hosts文件中
2.修改路径
复制破解文件.jar文件到你的安装目录bin目录，
E:\WebStorm 2017.3.5\bin（这里是自己的软件安装的bin目录下）
用文本编辑器打开同目录下的 WebStorm.exe.vmoptions 和WebStorm64.exe.vmoptions，在文件最上面加一行代码 ：
-javaagent:E:\WebStorm 2017.2.5\bin\JetbrainsCrack-2.5.6.jar
3.获取激活码
398
4.重启软件


]]></description><link>https://blog.gaoredu.com/article/b45528ac-015a-49cd-8c44-2c211d36112b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b45528ac-015a-49cd-8c44-2c211d36112b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 06 Apr 2018 23:16:55 GMT</pubDate></item><item><title><![CDATA[不使用VPN就能访问谷歌或者谷歌学术的方法]]></title><description><![CDATA[396谷歌学术搜索黑科技1：通过下面的谷歌学术镜像，就可以直接访问谷歌学术搜索。学术搜索学术镜像1：takes 0.21s.   现在访问
学术镜像2：takes 0.57s.   现在访问
学术镜像3：takes 0.72s.   现在访问
学术镜像4：takes 0.12s.   现在访问
学术镜像5：takes 0.61s.   现在访问
美国官网(US)：scholar.google.com
香港官网(HK)：scholar.google.com.hk







397
谷歌搜索黑科技2：通过本站提供的谷歌搜索访问接口就可以直接访问谷歌进行搜索。网页搜索网页镜像1：takes 0.85s.   现在访问
网页镜像2：takes 1.51s.   现在访问
网页镜像3：takes 1.39s.   现在访问
网页镜像4：takes 1.21s.   现在访问
网页镜像5：takes 1.38s.   现在访问
网页镜像6：takes 1.35s.   现在访问
网页镜像7：takes 1.45s.   现在访问
美国官网(US)：www.google.com
香港官网(HK)：www.google.com.hk


]]></description><link>https://blog.gaoredu.com/article/0d3ab568-1a70-4b54-b9ca-d51c929e8aba</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0d3ab568-1a70-4b54-b9ca-d51c929e8aba</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 06 Apr 2018 21:33:48 GMT</pubDate></item><item><title><![CDATA[Windows系统激活工具包,支持Xp到win10之间的所有系统]]></title><description><![CDATA[【软件模块】
    →正版 Windows XP 注册机
    →OemY3.2 小马激活
    →Windows7Loader v2.2.2
    →KMSpico  v10.2.0
    →KMSAuto Net v1.4.9
    →AAct v2.1

395
【下载地址】链接: http://pan.baidu.com/s/1kVEyoJ1   
密码: db5r


]]></description><link>https://blog.gaoredu.com/article/e50c6ea2-19e0-4b71-a090-129c27c40b34</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e50c6ea2-19e0-4b71-a090-129c27c40b34</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Apr 2018 21:33:33 GMT</pubDate></item><item><title><![CDATA[BenVista PhotoZoom Pro 6 中文注册版软件]]></title><description><![CDATA[BenVista PhotoZoom Pro 6 中文注册版是一款对数码图片进行放大的工具。 通常的工具对数码图片进行放大时，总会降低图片的品质，而这款软体使用了S-SPLINE技术(一种申请过专利的，拥有自动调节、进阶的插值算法的技术)，支持对图片进行放大而没有锯齿。
394


 下载链接：http://pan.baidu.com/s/1pLjGr6F 密码：3gnh
]]></description><link>https://blog.gaoredu.com/article/e13b3d5e-85cd-4b63-a821-14a4821c417b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e13b3d5e-85cd-4b63-a821-14a4821c417b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 05 Apr 2018 21:29:04 GMT</pubDate></item><item><title><![CDATA[2018最新最全价值千元的Python实战教程]]></title><description><![CDATA[393
Python是一种面向对象、解释型计算机程序设计语言，Python语法简洁而清晰，具有丰富和强大的类库它常被称为胶水语言，能够把用其他语言制作的各种模块（尤其是C、c++）很轻松联结在一起Python语言的简洁、开发效率高，它常被用于网站开发，网络编程，图形处理，黑客编程等等。

网盘：https://pan.baidu.com/s/1xvBf1oImNvA9nOp4vbwb5A 密码: 36gs
网盘：https://pan.baidu.com/s/1qZvuexI 密码: gpb9
]]></description><link>https://blog.gaoredu.com/article/c7bbfd41-b128-496f-8e11-8dcf24cf351c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c7bbfd41-b128-496f-8e11-8dcf24cf351c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 04 Apr 2018 21:05:03 GMT</pubDate></item><item><title><![CDATA[Widows10操作系统专业精简版本免费下载安装]]></title><description><![CDATA[390
391
392
Windows 10是美国微软公司研发的跨平台及设备应用的操作系统, 是微软发布的最后一个独立Windows版本。
Windows 10共有7个发行版本，分别面向不同用户和设备,但是大部分软件安装体积也是相当大的，这个Windows10操作系统精简版是精简优化过后的系统镜像体积大幅减小，没有添加任何推广！特别注重精简及流畅度！
包括32和64位版本，用户可以根据自己需求下载，精简后镜像体积小下载方便，低配电脑上同样运行非常流畅。


下载链接：网盘：https://pan.baidu.com/s/1dFauzFr 密码: jgv1

]]></description><link>https://blog.gaoredu.com/article/8daea9fe-fece-4541-9ab9-c49bb89a28da</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8daea9fe-fece-4541-9ab9-c49bb89a28da</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 04 Apr 2018 21:00:17 GMT</pubDate></item><item><title><![CDATA[2018最新电脑软件万能注册机便携版]]></title><description><![CDATA[具体使用方法如下：
389

目前该软件集成了集合Adobe，Corel，Autodesk，Win，Office等等软件注册机，基本上以上公司的软件都可以一键激活。该万能注册码生成器作为一款非常实用的注册码生成工具，能够自动随机生成2至32位注册序列号及对应的注册码，利用生成的注册码可破解大部分收费软件的使用权限，达到免费使用的目的。
下载链接：点我下载
]]></description><link>https://blog.gaoredu.com/article/0cbc6fac-ca2c-4adf-a1d2-749f95faa96b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0cbc6fac-ca2c-4adf-a1d2-749f95faa96b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 04 Apr 2018 20:53:20 GMT</pubDate></item><item><title><![CDATA[哔哩哔哩BiliBili视频 B站视频下载器软件]]></title><description><![CDATA[注：软件运行必须下载.NET
388

使用方法： 直接复制你的视频地址到这个地址栏里，点击下载即可。
1、百度软件中心.NET 4.0下载地址：http://dl1sw.baidu.com/soft/9b/1 ... e?version=585709662
 2、微软官方.NET 4.0下载地址：http://download.microsoft.com/do ... 40_Full_x86_x64.exe




]]></description><link>https://blog.gaoredu.com/article/657d4362-70a5-4ab7-bd14-488d8b936362</link><guid isPermaLink="true">https://blog.gaoredu.com/article/657d4362-70a5-4ab7-bd14-488d8b936362</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 03 Apr 2018 18:57:31 GMT</pubDate></item><item><title><![CDATA[看动漫完全免费的布米米安卓手机软件分享]]></title><description><![CDATA[  软件名称：布米米   软件介绍：布米米安卓手机软件当前拥有上万集高清晰画质的在线动漫，观看完全免费、无须注册、高速播放、更新及时，在这里可以观看得到高清、清晰的影视剧内容。386  软件特点：  1、拥有上万集高清晰画质的在线动漫.  2、完全免费、无须注册、高速播放。软件连接: http://pan.baidu.com/s/1dDOaxzF 密码: an7m     
]]></description><link>https://blog.gaoredu.com/article/6d37e8f3-a756-4e9a-8a5c-12ae1d04d1e5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6d37e8f3-a756-4e9a-8a5c-12ae1d04d1e5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 03 Apr 2018 02:59:41 GMT</pubDate></item><item><title><![CDATA[免配置网上邻居实现局域网文件打印机共享等功能]]></title><description><![CDATA[软件功能介绍：
一键获取局域网在线计算机，共享文件夹和磁盘，共享打印机，开启远程和链接到远程桌面，
设置共享密码等功能。以上功能均可以一键开启。
385

下载链接：https://pan.baidu.com/s/1pKCRLf9



]]></description><link>https://blog.gaoredu.com/article/14c28959-206d-445d-8c48-1ac3feecd689</link><guid isPermaLink="true">https://blog.gaoredu.com/article/14c28959-206d-445d-8c48-1ac3feecd689</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 03 Apr 2018 02:54:22 GMT</pubDate></item><item><title><![CDATA[[黑科技]如何通过手机QQ注销自己的QQ账号]]></title><description><![CDATA[1.先来看下腾讯官方的QQ号注销说明吧。
379
2.在手机上打开最新版本的QQ后，点击右上角的“头像”， 然后点击下面的设置。
380
3.然后选择关于QQ与帮助这个按钮。
381
4.选择帮助
382
5.选择基础功能
383
6.选择QQ账号如何注销这个选项卡，按照步骤注销即可。
384
]]></description><link>https://blog.gaoredu.com/article/5fcc6e9e-ca65-4f57-8539-3e07676efa70</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5fcc6e9e-ca65-4f57-8539-3e07676efa70</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 02 Apr 2018 02:39:52 GMT</pubDate></item><item><title><![CDATA[使用IDM软件一键设置快速抓取网站整站源码（静态网页）方法]]></title><description><![CDATA[网站整站抓取源码步骤如下：
1.打开IDM软件，如果没有下载的话先下载一下这个软件并安装。（下载地址：点我查看）373

2. 设置开始抓取的页面，设置起始方案的名称。
374
3.将文件保存到指定为位置
375
4. 设置相应的探索过滤器
376
5.设置文件过滤器
377
6.开始站点抓取
378

站点抓取结束之后，就可以去直接访问了，快去试试这个黑科技工具吧。



]]></description><link>https://blog.gaoredu.com/article/6ede55bf-480f-449f-b108-e378cac633e4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6ede55bf-480f-449f-b108-e378cac633e4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 02 Apr 2018 02:29:46 GMT</pubDate></item><item><title><![CDATA[两台电脑在局域网中使用同一个鼠标和键盘，同时支持复制拷贝文件的功能]]></title><description><![CDATA[1.Synergy、Input Director 都可以实现用一套键盘/鼠标控制多台电脑，其中Synergy 还可以跨 Windows、OS X、Linux 使用， 但是这几款软件还不支持直接拖拽文件复制的功能。
2.Mouse without Borders支持 XP SP3 以上系统，首次连接会有一个 Security Key，在另外一台机器里输入这个 Key 以及计算机名就可以连接了。
3.Mouse without Borders 也支持快捷键切换不同电脑，拖动文件到边缘松开就自动将文件传送给另外一台电脑了。

对于一般的操作就是需要进行硬件的配置，比如说安装一个HDMI接口转换VGA的线才可以，但是今天这个黑科技操作起来的话，你完全不需要考虑这么多，直接就是用就行了、
361
362


官方下载地址：http://download.microsoft.com/download/6/5/8/658AFC4C-DC02-4CB8-839D-10253E89FFF7/MouseWithoutBordersSetup.msi

]]></description><link>https://blog.gaoredu.com/article/bcc151d7-b10e-4075-9b3b-0b818da013d5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bcc151d7-b10e-4075-9b3b-0b818da013d5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 30 Mar 2018 21:53:08 GMT</pubDate></item><item><title><![CDATA[【黑科技工具】使用shiAndroid Killer软件手动去除优酷土豆视频安卓版APK软件...]]></title><description><![CDATA[shiAndroid Killer软件的主要功能如下：
1、支持批量编译APK。
2、管理反编译出的Apk源码文件，浏览、打开、编辑。
3、自动识别图像资源，并提供该类资源的快捷替换功能，方便修改这类图片资源。
4、支持Unicode、UTF8、ANSI编码互转的功能。
5、使用ADB向设备（或模拟器）安装、卸载、运行修改后的apk，管理所连接设备的存储文件

360


黑科技软件下载链接：【点击下载】
]]></description><link>https://blog.gaoredu.com/article/9ea0acbd-aa49-4071-9690-7ad7814246cc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9ea0acbd-aa49-4071-9690-7ad7814246cc</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 30 Mar 2018 21:23:52 GMT</pubDate></item><item><title><![CDATA[【数据结构与算法】计算机基础知识点总结归纳速记版]]></title><description><![CDATA[要点：
1.注意题目中的要求是“正确”还是“错误”的选项
2.一定要注意静态变量static int a这样的数据类型， 在进行程序运算的的时候静态变量会缓存结果
3.注意结束符‘\0’不是“\0”






$公共基础知识
第一章：数据结构与算法
1.】算法的复杂度是指运行该算法所需要的计算机资源的多少，所需的资源越多，该算法的复杂度越高；反之，所需资源越少，复杂度越低。算法复杂度包括算法的时间复杂度和算法的空间复杂度，
算法的时间复杂度是指执行算法所需要的计算工作量(执行该算法的基本运算次数)，
算法空间复杂度指执行这个算法所需要的内存空间。
（【1】：输入数据所占的存储空间；程序本身所占的存储空间；算法执行过程中所需要的额外空间。
   【2】如果额外空间量相对于问题规模（即输入数据所占的存储空间）来说是常数，即额外空间量不随问题规模的变化而变化，则称该算法是原地工作的。
）
2.】面向对象基本方法的基本概念有【对象】、【类】和【实例】、【消息】、【继承】与【多态性】
3.】程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。
4.】满足有且只有一个根结点并且每一个结点最多有一个前件，也最多有一个后件的非空的数据结构认为是线性结构，不满足条件的结构为非线性结构。空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点，如非性线结构"图"就没有根结点。
5.】在线性表的链式存储结构中，各数据结点的存储序号是不连续的，并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素，只需改变结点的指针域即可。
6.】一个非空的数据结构如果满足以下两个条件：
1）有且只有一个根节点；2）每一个节点最多有一个前件，也最多有一个后件，称为线性结构，称为线性表，可以采用顺序存储和链接存储，其中链式存储空间不连续。双向链表节点有两个指针域，指向前一个节点的指针和指向后一个节点的指针，也是线性结构。顺序存储结构中可能根节点不唯一，故可能不是线性结构。栈是所有的插入与删除都限定在表的同一端进行的线性表；队列是指允许在一端进行插入，而在另一端进行删除的线性表。
7】算法是指对解题方案的准确而完整的描述，简单地说，就是解决问题的操作步骤。算法不同于数学上的计算方法，强调实现。算法的有穷性是指，算法中的操作步骤为有限个，且每个步骤都能在有限时间内完成。
8.】栈是所有的插入与删除都限定在表的同一端进行的线性表；队列是指允许在一端进行插入，而在另一端进行删除的线性表，二者均即可以顺序存储也可以链式存储。为了充分地利用数组的存储空间，把数组的前端和后端连接起来，形成一个环形的表，称为循环队列，因此循环队列是队列的一种顺序存储结构，。
9】带链的队列就是用一个单链表来表示队列，队列中的每一个元素对应链表中的一个节点，其存储结构既可以采用顺序存储也可以是链接存储，其中顺序存储的空间连续而链式存储空间不连续，D选项错误。循环队列中，由于指针超过队列地址最大值时会移动到队列最小地址处，所以队头指针可以大于也可以小于队尾指针，
10】线性链式存储结构中每个结点都由数据域与指针域两部分组成，增加了存储空间，所以一般要多于顺序存储结构。
11】顺序表具有以下两个基本特征：线性表中所有元素所占的存储空间是连续的；线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表中，每个元素占有相同的存储单元。
12】栈是一种先进后出的线性表，队列是一种先进先出的线性表，栈与队列都是线性结构。
13】栈顶元素总是后被插入的元素，从而也是最先被删除的元素；栈底元素总是最先被插入的元素，从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行的。因此，栈称为先进后出表，或"后进先出"表
14】栈是一种特殊的线性表，它所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素，退栈运算即是取出栈顶元素赋予指定变量。当栈为空时，栈顶指针top=0，经过入栈和退栈运算，指针始终指向栈顶元素。top=20，则当前栈中有20个元素
15】队列是指允许在一端进行插入，而在另一端进行删除的线性表。由于最先进入队列的元素将最先出队，所以队列具有"先进先出"的特性，体现了"先来先服务"的原则。
作业调度是指根据一定信息，按照一定的算法，从外存的后备队列中选取某些作业调入内存分配资源并将新创建的进程插入就绪队列的过程。
执行程序中的过程调用一般指函数调用，需要调用时候转入被调用函数地址执行程序，与队列无关。
执行程序中的循环控制是指算法的基本控制结构，包括对循环条件的判定与执行循环体，与队列无关。
二叉树是一个有限的结点集合，二叉树的遍历是指不重复地访问二叉树中的所有结点，与队列无关。
16】在循环队列中，用队尾指针rear指向队列中的队尾元素，用排头指针front指向排头元素的前一个位置。在循环队列中进行出队、入队操作时，头尾指针仍要加１，朝前移动。只不过当头尾指针指向向量上界时，其加１操作的结果是指向向量的下界０。由于入队时尾指针向前追赶头指针，出队时头指针向前追赶尾指针，故队空和队满时，头尾指针均相等。


第二章：程序设计基础
1】对象的基本特点是：标识唯一性、分类性、多态性、封装性、模块独立性好。
     类是具有共同属性、共同方法的对象的集合，是关于对象的抽象描述，反映属于该对象类型的所有对象的性质。对象具有的性质，类也具有。
2】整数类实例包括：十进制常量用0~9表示，不能以0开头；八进制常量用0~7表示，必须用0开头；十六进制常量用0～9和A～F(a～f)表示，必须以0x或0X开头。A选项（ox1201）正确。B选项是浮点数实例（0.518），C选项是字符串实例（-152），D选项为科学计数法表示的浮点数实例。（518E-2）
3】【字符实例的一般形式是用一对单引号括起来的一个字符。】另外ASCII码中还有一些控制字符，C语言中用转义字符的形式来书写这些常，【转义字符一反斜杠（\）开始，后面跟1个字符或字符序列。】'518'单引号中有三个字符，A选项错误。"5"双引号为字符串，B选项错误。'nm'单引号中有两个字符，C选项错误。'\n'为换行符，属于字符类实例，D选项正确。
警告：特别要注意【‘’】（字符）和【 “”】（字符串）的区别


第三章：软件工程基础
1】计算机软件由两部分组成：一是机器可执行的程序和数据；二是机器不可执行的，与软件开发、运行、维护、使用等有关的文档。
2】软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是：可行性研究与计划阶段，需求分析，软件设计，软件实现，软件测试，运行和维护。
3】计算机软件按功能分为应用软件、系统软件、支撑软件（或工具软件）。系统软件是管理计算机的资源，提高计算机的使用效率，为用户提供各种服务的软件，如（【操作系统】、【数据库管理系统】、【编译程序】、【汇编程序】和【网络软件】、【c编译程序】等）
4】软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。C选项叙述不全面。
软件工程包含３个要素：方法、工具和过程。B选项错误。
软件工程的目标是：
（1.）在给定成本、进度的前提下，开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品，追求这些目标有助于提高软件产品的质量和开发效率，减少维护的困难。D选项错误。
（2.）软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。
4】数据定义语言：负责数据的模式定义与数据的物理存取构建；数据操纵语言：负责数据的操纵，包括查询及增、删、改等操作；数据控制语言：负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。
5】数据库系统的三级模式是【概念模式、外模式和内模式。】概念模式是数据库系统中全局数据逻辑结构的描述，是全体用户公共数据视图。外模式也称子模式或用户模式，它是用户的数据视图，给出了每个用户的局部数据描述。内模式又称物理模式，它给出了数据库物理存储结构与物理存取方法
6】软件生命周期各阶段的主要任务是：问题定义、可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行维护。其中需求分析是指对待开发软件提出的需求进行分析并给出详细定义，也即是确定软件系统要做什么
7】需求分析阶段的工作可概括为４个方面：①需求获取。②需求分析。③编写需求规格说明书。④需求审评。
6】在测试之前制定测试计划，并严格执行，测试用例的选择不可随意，应选择有代表性的，尽可能发现迄今为止尚未发现的错误。测试根本目的是【尽可能多地发现并排除软件中隐藏的错误。软件测试是保证软件质量、可靠性的关键步骤】
7】在需求分析阶段可以使用的工具有数据流图【DFD图】 （数据流图中，对所有元素都进行了命名，所有名字的定义集中起来就构成了【数据字典】），【数据字典DD】，【判定树与判定表】
8】程序设计分为：结构化程序设计，面向对象的程序设计。结构化设计方法使用的描述方式是【系统结构图】
9】软件需求规格说明书有以下几个方面的作用。①便于用户、开发人员进行理解和交流，B正确；②反映出用户问题的结构，可以作为软件开发工作的基础和依据，C正确；③作为确认测试和验收的依据，A正确。
10】软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求，以保证模块划分合理，并进一步保证以此为依据开发出的软件系统可靠性强，易于理解和维护。模块之间的耦合应尽可能的低，模块的内聚度应尽可能的高。
11】软件设计包括软件结构设计、数据设计、接口设计、过程设计
12】扇出指的是由一个模块直接调用的其他模块数。题干中某系统为一个模块，其扇出数目为n(n>3)，功能1与功能n模块扇出数均为2


第四章 数据库设计基础
1】数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。
           数据库系统是由数据库及其管理软件组成的系统，是应用软件。
           数据库管理系统是数据库系统的核心，它位于用户与操作系统之间，属于系统软件。 
           数据结构是计算机存储、组织数据的方式。
2】数据字典是在需求分析阶段建立，在数据库设计过程中不断修改、充实和完善的。【数据流图】
3】数据管理技术的发展经历了３个阶段：人工管理阶段、文件系统阶段和数据库系统阶段。由下表可知C选项正确。
特点	人工管理阶段	文件系统阶段	数据库系统阶段	
管理者	人	文件系统	数据库管理系统	
面向对象	某个应用程序	某个应用程序	现实世界	
共享程度	无共享，冗余度大	共享性差，冗余度大	共享性大，冗余度小	
独立性	不独立，完全依赖于程序	独立性差	具有高度的物理独立性和一定的逻辑独立性	
结构化	无结构	记录内有结构，整体无结构	整体结构化，用数据模型描述	
控制能力	由应用程序控制	由应用程序控制	由DBMS提供数据安全性、完整性、并发控制和恢复	
4】数据库应用系统中的核心问题是数据库的设计， 注意不是数据库管理系统的设计
5】数据独立性包括物理独立性和逻辑独立性，物理独立性指数据的物理结构的改变，不会影响数据库的逻辑结构，也不会引起应用程序的改动；逻辑独立性指数据库的总体逻辑结构的改变，不会导致相应的应用程序的改变数据库系统的数据独立性，是指数据库中数据独立于应用程序且不依赖于应用程序，即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。
6】数据库系统的三级模式是【概念模式】、【外模式】和【内模式】。
概念模式是数据库系统中全局数据逻辑结构的描述，是全体用户公共数据视图。
【外模式也称子模式或用户模式】，它是用户的数据视图，给出了每个用户的局部数据描述，所以选择C)。
【内模式又称物理模式】，它给出了数据库物理存储结构与物理存取方法
7】数据模型通常由数据结构、数据操作及数据约束３部分组成。
8】关系模型实体间的联系采用二维表来表示，简称表。选项C为网状模型实体间的联系，选项D为层次模型实体间的联系，选项A【属性刻画了实体】
9】在E－R图中【实体集用矩形】，【属性用椭圆】，【联系用菱形】。
10】层次模型的基本结构是树形结构，网状模型是一个不加任何条件限制的无向图，关系模型采用二维表来表示，所以三种数据库的划分原则是数据之间的联系方式。
11】关系模型采用二维表来表示，即每个二维表称为一个关系。
12】二维表中的一行称为元组。候选键（码）是二维表中能唯一标识元组的最小属性集。若一个二维表有多个候选码，则选定其中一个作为主键（码）供用户使用。表M中的某属性集是表Ｎ的候选键或者主键，则称该属性集为表Ｍ的外键（码）
13】系模型中可以有3类完整性约束：实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指，若属性M是关系的主键，则属性M中的属性值不能为空值。属性B为主键，最后一个记录为空，违反了实体完整性约束，A选项正确
14】关系模型中可以有3类完整性约束：实体完整性约束、参照完整性约束和用户定义的完整性约束。【实体完整性】约束是指，若属性Ｍ是关系的主键，则属性Ｍ中的属性值不能为空值。T中主键不为空，A选项错误。【参照完整性】约束是指，若属性（或属性组）A是关系M的外键，它与关系M的主码相对应，则对于关系M中的每个元组在A上的值必须为：要么取空值；要么等于关系M中某个元组的主码值。属性B为关系S的外键，它与关系S的主键相对应，则T中元组在B上应该为空或者与S中主键值相等，题目中不相等，违反参照完整性约束，B选项正确。此题关系中无语义要求，C选项错误。


$二级C语言
第一章：C语言概述
1】结构化程序设计把一个复杂问题的求解过程分阶段进行，需要保证自顶向下、逐步细化、模块化设计、结构化编码。进行模块化设计时，1】首先设计框架，并定义和调试好各个模块之间的输入输出关系，2】然后完成各个模块的编写调试后再集中编译，模块化的程序设计采用自顶向下、逐步细化的原则，A选项叙述错误，C选项叙述正确。各个模块可以由不同人员同时进行编写调试，提高编写程序的效率，B选项叙述正确。结构化程序主要由3种基本控制结构组成，顺序结构、选择结构、循环结构，这三种基本结构可以解决任何复杂的问题，D选项叙述正确。故选择A选项。
2】函数体是函数首部下面的花括号内的部分，所以函数体必须由{开始，A选项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义，程序总是从【main函数】开始执行的，不是main语句
3】编译就是把高级语言变成计算机可以识别的二进制语言，不经过编译的源程序是不能运行的
4】【书写风格良好的程序易读性好，方便团队合作，分模块来完成复杂的程序设计】，B选项叙述正确。但是书写风格与程序执行效率无关，【程序执行效率与程序的数据结构有关】，由算法的时间复杂度【所能处理的工作量】和空间复杂度【所需要的内存】决定
5】算法的特征:①有穷性?一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成?②确定性?算法中的每一步都有确切的含义?③可行性?算法中的操作能够用已经实现的基本运算执行有限次来实现?④输入:一个算法有零个或者多个输入,【零个输入就是算法本身确定了初始条件?】⑤输出:一个算法有一个或者多个输出,以反映出数据加工的结果?
6】算法的描述有伪代码、流程图、N-S结构图等?           E-R是实体联系模型?
7】C语言程序的模块化通过函数来体现,所以选择A?                                                                                           
8】模块化程序的优点【良好的代码书写风格】：1、易于维护和复用，可以提高程序编制的效率，2、易于分工合作，3、易于模块化调试测试。模块化程序的副作用：1、可能会降低程序运行效率，2、设计的前期工作需要多花费时间。
9】C程序中主函数不能被其他函数调用,所以A选项错误?main函数可以放在程序开始,也可以放在中间,也可以放在最后,位置不固定,但程序执行时必须从main函数开始,所以B选项错误?在C程序的函数中不能定义另一个函数,可以声明或调用另一个函数,所以C选项正确?每个C程序中必须包含一个main函数,但不一定是每个C程序文件中必须有,用户单独编写的某个函数也可以存储为一个C程序文件,所以D选项错误
 10】简单程序设计步骤为：确定数据结构、确定算法、编码、调试、整理文档，不包括安装编译程序
11】C语言中标识符由字母、下划线、数字组成，且开头必须是字母或下划线。另外，关键字不能作为标识符。因为C语言中区分大小写，所以B)选项中的"FOR"可以作为标识符来用。A)选项中含有非法字符&，所以选择A)。






第二章 运算符与表达式
1】sizeof是C语言中的一个操作符(operator),不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数?
2】由于按位或"|"优先级高于赋值"="，10=1010B，5=0101B，按位或结果为1111B=15，故c=15,d=15；”c语言中异或的用法，也就这个“^"符号“
3】*与（）的优先级，（）的优先级高于*，因为(*f)()是在定义函数指针。f指向函数的指针。f=add,将函数add()的首地址赋给指针f，所以调用函数add()可以写为f()，【其返回值是整型，不是指针类型】，不能用 *   取指针指向的内存单元的数据，故k=*f(a,b)的调用方式错误。
4】C 语言中，逗号运算符可以把两个以上（包含两个）的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的，逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说，逗号运算符是一个序列点，其左边所有副作用都结束后，才对其右边的子表达式进行运算，并以最右边表达式值作为整个逗号表达式的值。
5】1、后置自增运算：k++表示先运算，后自加。 2、前置自增运算：++k表示先自加，后运算。因此，表达式x=0,x+10,x++的计算过程为首先赋值x=0，【然后将x加10，但是并不对x进行赋值，最后计算x++，】并,根据后置自增运算的计算结果，即为x=0.0。
6】【*p=s, 可得p指向s, p->y指向s,现p->y=s,因此p->y指向s。因此p->x=1,++p->x等价于++(p->x),因此打印结果为2
7】浮点数1.99被强制转换成1，执行语句a=（int）1.99  *  3；计算得a=1*3=3【注意强制数据类型转换的作用域】
8】A选项中不能将变量y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10?
9】表达式【c = (13>>1) | 1】【注意按位或  |  运算符的执行规则】中，>>是右移符号，【13换算成二进制后右移1位】，【再和 1 进行按位或运算】，结果为7；表达式d = (13>1)||1中，首先判断13是否大于1，此时条件成立返回1后，再和1进行或运算，结果为1
10】表达式c = (13>>1)|1中，>>是右移符号，13换算成二进制后右移1位，再和1进行按位或运算，结果为7；表达式d = (13>1)||1中，首先判断13是否大于1，此时条件成立返回1后，再和1进行或运算，结果为1
11】逗号表达式的计算过程是从左到右逐个求每个表达式的值，取最右边一个表达式的值作为该逗号表达式的值
12】表达式1？表达式2：表达式3，若表达式1为真，则执行表达式2，否则执行表达式3，++a表示先将变量a+1，再执行其他操作，逻辑或运算符遵循"短路求值"策略，即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时，才会求解右操作数，表达式(++a || ++b)中，左操作数++a的值为1，已经可以确定整个逻辑表达式的结果为1，因此右操作数++b不再求解，直接执行表达式2，即++c








第四章 选择结构
1】当x为大于1的奇数时，值为0的表达式是  x%2==0
2】注意在C语言中，逻辑真值对应非0； C选项中，表达式：x==y 是合法的；D选项中，分支结构的流程走向是根据表达式的值，并
3】【警告：】0<x<5在C语言里不能这样直接表达，需要分步骤来实现，一般使用x>0&&x<5来描述。在C语言0<x<5属于一个逻辑运算表达式，可以理解为（0<x）<5，因此选项A错误
4】与 ( !a== 0 )的逻辑值不等价的表达式；!与==运算，!的优先级高于==，即等价于(!a)==0。如果a 0,则表达式为真，否则表达式为假，因此可以验证选项
5】'a'=1/2*(x=y=20,x*3)， 'a'即表示a为字符常量，再给'a'赋值1/2*(x=y=20,x*3)，是不正确的
6】由&&构成的逻辑表达式与由||构成的逻辑表达式都有"短路"现象
；
7】注意：0<x<10完全等价于: (0<x) && (x<10)。条件是x>0 并且x <10，表达式(x>0)&&(x<10)的值是1或0。但是 0<x<10的执行顺序：先执行0<x是否为真，返回值为0或1，再执行y<10，表达式的结果为1； C选项中，逻辑"非"（即运算符!）的运算级别是最高的；A选项中，算术运算符优先级较高，关系和逻辑运算符优先级较低。
8】由&&构成的逻辑表达式与由||构成的逻辑表达式都有"短路"现象
9】逻辑或"||"要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1?
10】














第五章 循环结构
1】  while(--k)  printf("%d",k -= 3);--k先自减在使用,所以第一次判断条件即为while(4),条件为真执行打印k的值k=4-3,结果为1,第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符?
2】while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体。即 条件表达式的执行次数总是比循环体的执行次数多一次
3】while循环语句一般形式为：while(表达式){循环体}，执行过程为：首先判断表达式，成立（非0）则执行循环体，不成立（0）则退出循环。do…while循环语句一般形式为：do{循环体}while(表达式)，执行过程为：首先执行循环体，之后判断表达式，成立（非0）则再一次执行循环体，不成立（0）则退出循环。假设表达式1与表达式2成立次数为n1与n2。若n1>n2，则循环体A执行次数为n2+1，B执行次数n2+1；若n1<n2，则循环体A执行次数为n1，B执行次数n1；循环体A与循环体B的执行次数相同


4】执行过程为，从键盘读入一个字符，存放在缓冲区，直到读入的字符为"#"（不存入内存）时才退出循环，遇到"回车"时，将缓存区内的字符依次输出。while((c=getchar()) != '#')
5】题目使用更相减损术求最大公约数，其思想：1、任意给定两个正整数，判断它们是否都是偶数。若是，则用2约简，若不是则执行第二步。
第二步：以较大的数减较小的数，接着把所得的差与较小的数比较，并以大数减小数。继续这个操作，直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
6】程序执行过程为：执行do…while的循环体：y=5,判断y为真，x=1；y=4，x=2；y=3,x=3；y=2,x=4；y=1,x=5；y=0,判断y为假，退出循环体。判断do…while条件y=0为假，y=-1,退出循环。输出x,y为5，-1
7】 printf("%c", *p + password);
  程序执行过程为：定义字符数组str并且初始化为："wind"，定义password并通过scanf函数从键盘为其赋值2。定义指针p并使其指向字符串。通过while循环，将字符数组中每一个字符的ASCII码加2，并且按字符格式输出每一个字符。程序运行后输出结果是：ykpf
8】字符之间做加减法，是【注意：用其ASCII码进行加减，但是不能超过范围0~255，否则不是合法的字符。】while循环语句一般形式为：while(表达式){循环体}，执行过程为，首先判断表达式，成立（非0）则执行循环体，不成立（0）则退出循环。程序执行过程为：定义字符变量ch = 'A'，判断'A'<'D'成立，输出0，ch='B'；判断'B'<'D'成立，输出1，ch='C'；判断'C'<'D'成立，输出2，ch='D'；判断'D'<'D'不成立，退出循环。程序运行后的输出结果是012
9】putchar()函数功能是输出一个字符，由whlie判断条件和ch初始值可知，,只要ch ＇A＇,每次执行二次putchar，否则跳出。第一次输出CD,第二次输出BC,第三次输出A,跳出循环
10】while(E)中的(E)等价的表达式：(E>0||E<0）和  (! E==0)   和  ( E != 0 )
11】在fun函数中，while循环的功能是：逐个取字符数组s的字符判断其是否是数字。若是则将其作为个位数字保存到变量n中，n的原数据的各个数位将相应左移一个10进制位。当指针s指向数组的第3位时，循环条件不成立，循环结束，返回n的值，输出n的值为61。while(*s <= '9'&&*s >='0')  { n=10*n+*s-'0' ; s++; }
12】第一次while判断条件中a++,先用后加,为-2不为0条件为真,执行a的自加与++b操作,a的值变为-1,b的值变为1?第二次while判断后,a的值变为0,b的值变为2?第三次while判断条件为假,但是仍要执行自加操作,即值为1,跳出循环?
13】while(!E) s；while语句的一般形式为：while(表达式)语句；其中表达式是循环条件，语句为循环体。while语句的语义是：计算表达式的值，当值为真(非0)时， 执行循环体语句。该题中如要执行语句s，则!E应为真，因此E应等于0
14】 while((*b=*a)!='\0')  
；While循环条件为：(*b=*a)!='\0'，执行时先把指针a所指向的字符赋给指针b所在内存单元，如果该字符不是结束标识"\0"，执行循环体a++;b++;，指针a、b分别指向下一个字符单元。再判断循环条件，如果成立，继续把指针a所指向的字符赋给指针b所在内存单元，直到遇到结束标识为止。
15】本题重点考察while循环语句的简单应用。函数fun()中，前一个while循环的作用是：如果形参指针t所指内容不为0，则让t增1，直到它指向0。后一个 while循环的作用是：将s所指内容赋给t所指地址，然后两者同时增1，直到赋给t的内容为0。由此可见，函数fun()的作用就是将形参s所指字符串连接到形参t所指字符串末尾，相当于库函数中的strcat()。主函数中使用fun()将数组aa中的字符串连接到了数组ss中原有字符串之后，所以执行完后，ss中的字符串为"accbbxxyy"。程序最后输出的结果是：accbbxxyy,bbxxyy。
16】题中传入字符串OABCDEF，然后执行fun后，就得到了该字符串中字符的个数，不包括结尾符，该字符串有7个字符




















第六章 数组
1】没有A选项的引用形式。【*与&放在一起作用抵消】，所以B选项错误，最大只能引用到x。*(pt+i)表示引用指针pt所指元素后的第i个元素，所以C选项错误，最大只能为*(pt+9)
2】printf函数按照格式符说明输出对应的数据。%s控制符用于输出字符串，输出时从给定地址开始依次输出字符，直到遇到'\0'结束。给字符变量赋值0，相当于赋值'\0'。初始化时name="STRING"，改动数组第4个和第6个元素之后字符串变为"STREN"。调用printf输出字符串为STREN
3】【警告：一定要注意静态变量static int a遮掩的数据类型， 在进行程序运算的的时候静态变量会缓存结果】内部静态变量是始终存在的，当函数被调用退出后，内部静态变量会保存数据，再次调用该函数时，以前调用时的数值仍然保留着。fun(a,5)的值是15，再次调用后sum=15，所以fun(b,4)=45，s=45+15=60。
4】注意【长度为n的数组其各个元素的下标应该是从0到n-1】,因此，长度为10的数组a,第10个元素为a，而不是a
5】数组名后面括号的值必须是整形常量，不可以是变量
正确定义：int a={0}     #define N 3       int a       int a = {1,2,3,4,5,6};
错误定义：int N = 6, a;    error
6】int a={0}表示定义一个数组a初值为0，int  b = {9}，表示定义一个数组b，其中只有一个值9，系统自动识别数组有1个元素。
char  c = {"A", "B"}，【注意：数组元素为字符串，需要用二维数组来表示】  error
char  d = "12";，字符串常量不能赋值给字符变量  error
char a = {"A", "B"};不合法，应为char a = {'A', 'B'};
7】 char c1, *c2, **c3, c4; 是C语言的合法语句  其中c1是字符型变量，c2是字符型指针变量，c3是【指向字符型指针】的指针变量，c4是一个一维字符数组，这些都是C语言的合法语句
8】【用字符串方式赋值比用字符逐个赋值要多占1个字节】，在该选项中应为3个字节。用字符串方式赋值比用字符逐个赋值要多占1个字节，在该选项中应为3个字节。
9】，一条语句只能定义一个数组是不准确的，可以通过一条语句定义多个数组；C选项中，数组说明符的一对方括号中可以是整型常量，可以是整型常量表达式；D选项中，在引用数组元素时，【下标表达式必须是【整型】的】










第七章 函数
1】本题考查malloc函数，题目中要求p指向一个int型的动态存储单元，那么就应该将分配的存储单元转化为int
2】选项中函数pow(x，e)错误应该直接使用exp(x)函数。C)选项中函数abs(n^x＋e^x)错误，应该使用fabs()返回浮点数的绝对值
3】sin是库函数，在使用时应包含math.h，其参数应该为被求角度的弧度制表示。C语言中π不是已定义的常量，需要用户自定义或者直接使用3.14代替π。B选项没有替换π，也没有将30度换算成弧度，错误。C选项没有将30度换算成弧度，错误。D选项弧度换算错误, 【π对应于180°，应该除以180.0而不是360.0。】
4】" \t  \"  \\  \n  \'  \0 6 5 \0 8 A B (\0)"中共有13个字符，而strlen()函数从字符串第一个字符开始扫描，直到碰到第一个结束符'\0'为止，然后返回计数器值(长度不包含"\0")。故输出结果为6。
5】函数名后括号内的数据称为"函数参数"，其中列出的是各个参数的【数据类型和名称】。调用函数时，括号里面的实参应该与形参的个数与数据类型一致。函数fun参数列表中有两个参数，分别是逗号表达式（exp1，exp2）值与（exp1, exp2, exp3）值
6】程序编译是从上到下进行的，所以如果函数定义放在主函数之后，那么在函数调用时必须提前声明函数，可以在主函数之前声明函数，也可以在主函数中函数调用之前声明函数。题目中函数findmax定义放在了函数之后，所以主函数中声明了findma函数。【int findmax(int,int,int);为函数声明，m=findmax(a,b,c);为函数调用，int findmax(intx,inty,int z){}为函数定义。】A选项正确。B选项是在main函数外定义的findmax函数，错误。在main函数中，出现了一次findmax函数的声明和一次findmax函数的调用，不是两次调用，C选项错误。D选项在main函数内不是定义findmax函数而是声明findmax函数。
7】C语言C程序的入口函数是main(),因此C程序中有且只有一个main函数，故选项B错误。分号是C语言一条语句的结束标志，不是分隔符, 【C语言分隔符是用来分隔多个变量、数据项、表达式等的符号，包括逗号、空白符、分号和冒号等等】，选项C错误。C语言的程序不是以分号结束的，分号是C语言一条语句的结束标志，【C语言是面向过程的，从main函数开始在main函数里结束】，选项D错误。










第八章 指针
1】在计算机内存中，用一个字节表示一个内存单元并为每一个存储单元编号，这个编号就是存储单元的"地址"。【一个变量的地址称为该变量的"指针"】。专门用来存放变量地址的变量，称为"指针变量"。A选项正确。常量存储在编译文件中，不能取地址。B选项错误。一个指针变量的地址只能赋给指向这种类型的指针变量，与其本身类型不同，不能赋值，C选项错误。未赋初值的指针变量自动赋任意地址值
2】指针运算符 (通常称为间接引用运算符:indirection operator或复引用运算符:dereferencing operator),它返回其操作数(即一个指针)所指向的对象的值。【定义语句中的 * 号不是一个间址运算符，而是定义指针变量的说明符】,因此，A项错误，B项正确，原则上说p可以放double兼容性的变量地址
3】A选项语句中b变量还没有定义不能直接用于给a变量赋值?C选项语句中*b?*c表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c?D选项语句中a=0.0后面应该为逗号,不能是分号?
4】在f(int *p,int*q)函数中，执行【p=p+1是将p所对应的地址加1，而*q=*q+1是将q所指向的n的地址所对应的值加1】，所以m的得知所对应的值没有变，而n的值则为3了。
5】如果p是指针变量，则*p表示变量p所指向的地址的值；A选项中，如果p是指针变量，则&p表示变量p的地址；D选项中，如果p是指针变量，*p+1表示将p所指的值加上1，而*(p+1)表示的是先将指针右移一位再取所指向变量的值。
6】【注意！！】题干中定义一个指针变量ptr,再把a的地址值赋给ptr，此时a和*ptr代表同一内存单元中的值，*ptr=8表示把a和*ptr的值修改为8，【a = (*ptr) ++表示把指针ptr对应地址单元里的值赋给a，再将ptr对应地址单元里的值加1】，因此*（ptr）值为9，同时a也为9，因此答案为A选项。
7】函数f()的功能是：定义一个临时的整型指针变量s，指向全局变量k，然后用k的值对s指向的内存地址进行赋值，结果当然是k的值不变；另外在调用函数f()过程中，虽然使用m的地址初始化s，但是s在f函数内部又被指向k的地址，所以s的后续操作对m没有任何影响，因此最后输出为3,5
8】把一个指针变量的值赋给另一个指针变量，但一定要确保这两个指针变量的（基类型是相同的）【强制类型转换】
9】只要两个指针变量基类型相同，可以指向同一个对象
10】sizeof(FILE*)=4，因为file* 为指针，指针的大小4 ,sizeof(int*)=4,理由同前面。文件指针的值是地址，是一个16进制的数，它的值不一定小于文件字节数,因此选项B错误。【文件指针是所指文件的当前读取位置，而不是文件指针的值】因此选项C错误。intfscanf(FILE*stream,constchar*format,);
fscanf函数可以向任意类型的文件，写入任意数量不能超过系统的缓冲区，写文件先写入缓冲区，最后一起写入文件，因此选项D错误
11】函数调用中形参值的变化不会传递给实参；(float array, int *ptr)均表示定义了2个指针变量*array和ptr,其中函数形参中int array其实相当于int* array
12】static定义一个静态分布变量，变量只会初始化一次。在for函数的循环体中调用sum（i）函数，循环3次，每次都把i值累加在init中，再执行i+1操作，因此，退出循环后，init=1+1+2+3=7，再执行次sum（1），init=8后，把init的地址赋给指针p，输出指针p指向的init的值
13】指针变量可以通过求地址运算符（&) 来获得地址值，可以通过指针变量获得地址值，还可以通过标准函数获得地址值；C选项中，【p=NULL；和p=0；或p='\0'；等价；】D选项中，【语句p=NULL;执行后，指针p并不是指向地址为0的存储单元，而是具有一个确定的值-"空"】
14】指针变量的赋值只能赋予地址， 决不能赋予任何其它数据，否则将引起错误；C选项中，p=NULL；和p=0；是等价的；D选项中，【指向同一数组的两指针变量进行关系运算可表示它们所值数组元素之间的关系】
15】如果企图通过一个空指针来访问一个存储单元，将会得到一个出错信息
16】【常数的地址存储在内存的常量区，常量区存储的都是常量，值都是不可修改的】，所以直接取常量的地址赋给指针变量没有任何意义，C语言也不允许这样做，编译会出错，B选项错误；表达式的值存储在临时变量中，内存中存在专门用来存储临时变量的区域，对这块地址进行操作也是没有意义的，C语言不允许这样做，编译会出错，C选项错误；可以取一个指针变量的地址，但是指针变量的地址属于指针，只能赋值给指针类型的指针变量
17】本题主要考查了指向字符串的指针和字符数组，str1为一个字符指针，所以sizeof为4，str2为字符数组，其中包含6个字符，所以答案为4 6
因为p是指向一个指针数组，作为数组名，不能指向别的地方。B选项错误，因为p是一个int指针，也就是int*；而a是一个指向指针的指针int**。C选项正确，因为p是一个int*，a是int，&a是int*，类型吻合。D选项错误，因为a作为数组名，不能取地址。即使能取，p是int*，&a是int***
18】因为p是指向一个指针数组，作为数组名，不能指向别的地方。B选项错误，因为p是一个int指针，也就是int*；而a是一个指向指针的指针int**。C选项正确，因为p是一个int*，a是int，&a是int*，类型吻合。D选项错误，因为a作为数组名，不能取地址。即使能取，p是int*，&a是int***，类型不对。
19】 char str={"One*World",     "One*Dream!"},*p=str;
，   unsigned int strlen(char *s）; 计算字符串s的（unsigned int型）长度，不包括'\0'在内； p指向数组的第二个元素，因此strlen(p)=10
20】注意strlen（）【长度，不包括\0】和sizeof（）【包括\0】二者的区别










第九章 编译预处理与动态存储分配
1】预处理命令是以"#"号开头的命令，它们不是C语言的可执行命令，这些命令应该在函数之外书写，一般在源文件的最前面书写，但不是必须在起始位置书写，所以B)，C)错误。C)语言的预处理能够实现宏定义和条件编译等功能
2】宏名习惯采用大写字母，以便与一般变量区别，但是并没有规定一定要用大写字母而且宏替换不占用运行时间，不具有类型，不具有计算功能
3】#define命令是C语言中的一个宏定义命令，标识符一般使用大写，为了区分其他标识符,它用来将一个标识符定义为一个字符串，【该标识符被称为宏名，被定义的字符串称为替换文本】。宏定义不进行其他操作，仅仅只是替换标识符。S(k+j+2)=k+j+2*k+j+2/k+j+2,经计算可得29，S(j+k+2)=j+k+2*k+j+2/j+k+2，计算可得29。因此输出为29,29
4】宏定义不是C语句，末尾不需要有分号。所以语句printf("%4.1f\n" ， S(a＋b))；展开后为printf("%4.1f\n" ,3.5；*a＋b*a＋b；)；所以程序会出现语法错误
5】注意：【预处理是在程序编译之前进行的】；预处理是在程序编译之前进行的；
6】数学库中定义了函数的名称、参数个数与类型、返回值类型与具体的函数体，A选项正确。【编译预处理时，预处理程序将查找指定的被包含文件，并将其复制到#include命令出现的位置上，BC选项错误。不引用math.h文件，文件编译时，编译器无法识别没有被定义的sin函数，D选项错误。
7】本题考查malloc函数，题目中要求p指向一个int型的动态存储单元，那么就应该将分配的存储单元转化为int
8】B选项中，所谓函数类型是指函数返回值的类型。在Ｃ语言中允许一个函数的返回值是一个指针(即地址)，这种返回指针值的函数称为指针型函数；C选项中，函数的参数不仅可以是整型、实型、字符型等数据，还可以是指针类型；A选项中，虽然不同基类型的指针变量占用字节数是相同的,但是不能混用
9】














第十章 结构体与共用体
1】【typedef　类型名　新类型名】 表示为一个已有定义的类型标识符重新定义一个类型名，题中，首先为指针类型命名为T，再通过T定义了一个数组指针*a，整个功能等价于int  **a
2】C语言允许由用户自己定义类型说明符，也就是说允许由用户为数据类型取"别名"。类型定义符typedef即可用来完成此功能，可以完全代替原来的类型说明符。因此，变量a的类型为int *a。typedef int *T,由于运算符优先级高于*，可以看成typedef int *T,替换T可得int *a=>int *a
3】注意：关键字typedef的作用只是将C语言中的已有的数据类型作了置换，并不是增加新的类型
4】stud.name为数组stud第一个元素的成员name字符数组的第四个元素m。stud.name为数组stud第四个元素的成员name字符数组的第四个元素u。stud.name为数组stud第三个元素的成员name字符数组的第三个元素u。stud.name为数组stud第二个元素的成员name字符数组的第二个元素u
5】用typedef说明一种新类型名STU，其使用情况与结构体基本一致。程序执行过程为：定义STU类型数组，长度为2，并为其初始化。s.name="Hua",s.sex='m',s.age=18,s.name="Qin",s.sex='f',s.age=19。调用函数fun(s+1)将变量s地址传入函数，则s.name="Tong"，s.age=20。依次输出s.name,s.age,s.name ,s.age，结果为Hua,18,Tong,20
6】Ｃ语言允许用typedef说明一种新类型名，其一般形式如下：typedef 类型名　新类型名;题目中定义了新类型Date，这种类型变量包含3个成员，DATE是这种新类型的名字。DATE是用户说明的新结构体类型名，不是结构体变量，C选项叙述正确，A选项叙述错误，选择A选项。struct Date是用户定义的结构体类型，B选项叙述正确。struct是结构体类型的关键字，D选项叙述正确。
7】主函数首先为结构体定义两个变量s1,s2，分别使用字符串拷贝函数strcpy()为s1和s2的成员name赋值，再将s2中的成员信息赋值给s1，因此输出为"="【s1 = s2 ,在结构体变量之间也表示赋值】
8】oid  fun(int  array, int  *ptr); fun()函数，第一个参数虽然是数组类型，但是会退化为指针，并且形参数组的个数没有用。第二个参数是指针，因此实际上二个形参都是指针。两个形参都是指针，传递的都是地址，而不是值。
9】








第十一章 文件
1】本题考查文件的概念，【文件是由数据序列组成，可以构成二进制文件或文本文件】
2】文件指针【指向的是文件缓冲区】，而不是文件本身位置，因此B,C选项错误；fscanf()函数作用是从指定的文件中格式化读数据，读取数据类型由格式控制符决定；在【C语言中用一个指针变量指向一个文件，这个指针称为文件指针】。通过文件指针就可对它所指的文件进行各种操作。【文件指针不是文件位置指针；文件指针是指针变量，存储的是文件缓存区首地址】，而不是文件在计算机磁盘中的路径信息
3】sizeof(FILE*)=4，因为file* 为指针，指针的大小4 ,sizeof(int*)=4,理由同前面。文件指针的值是地址，是一个16进制的数，它的值不一定小于文件字节数,因此选项B错误。【文件指针是所指文件的当前读取位置，而不是文件指针的值】
4】fopen函数以一定方式打开指定文件，返回一个指向文件的文件指针，如果不能实现打开指定文件的操作，则返回一个空指针NULL。
【   fscanf函数从文本文件中按格式输入。
      fprintf函数按照格式向文本文件中输出数据。文件定位函数fseek，将指针由文件开头0、当前位置1、末尾2移动指定字节。      rewind函数功能使文件的位置指针返回到文件头。程序执行过程为：以读／写方式建立一个新的文本文件data.dat，将1写入文件；执行for循环，将文件指针移到文件开头，将文件第一个数值1赋给k，再将指针移动到开头，向文件内输入a+k=3。for循环实现将a数组中元素累加，结果21存放在文件中。
      调用rewind将文件指针移动到开头，调用fscanf函数从文件中读出数值赋予k=21，调用fclose函数关闭文件，打印k值
5】C语言中打开一个文件通过系统函数fopen实现，其调用的一般形式为：FILE* fopen("文件名","操作方式")；通过这个函数把程序中要读、写的文件与磁盘上实际的数据文件联系起来，A选项正确。B选项函数调用中缺少参数"操作方法"，错误。【fopen函数返回一个指向指定文件的文件指针,如果不能实现打开指定文件的操作，则返回一个空指针NULL】，C选项错误。fopen函数的返回值必须赋给一个文件类型的指针变量
6】】fopen函数以一定方式打开指定文件，返回一个指向文件的文件指针，如果不能实现打开指定文件的操作，则返回一个空指针NULL。如果指定文件不存在则创建一个文件名为指定文件名的新文件，然后打开它。在指定文件有错误或者指定文件不存在却不能创建新文件的情况下，打开文件操作错误，返回空指针。本题程序中，文件test.txt已存在，程序运行后，文件test.txt中的原有内容将全部消失
7】对一个文件操作完成后，要将该文件关闭，"关闭"就是使文件指针变量不再指向该文件。程序编写者应该在程序终止之前关闭所有文件，如果不关闭，文件将会丢失数据。因为，【在向文件写数据时，是先将数据输出到缓冲区，待缓冲区充满后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行，就会将缓冲区中的数据丢失】【用fclose函数关闭文件，可以避免这个问题，它先把缓冲区中的数据输出到磁盘文件，然后才释放文件指针变量。】
8】【文件结束或者错误，则返回符EOF是在头文件stdio.h中定义的宏，一般值为-1】，在while循环中以EOF作为文件结束标志，这种以EOF作为文件结束标志的文件，必须是文本文件。【在文本文件中，数据都是以字符的ASCII代码值的形式存放，由于不可能出现-1，因此可以用EOF作为文件结束标志。】0----255的字符
9】fputc函数，该函数将字符ch写到文件指针fp所指向的文件的当前写指针的位置。函数格式：int fputc (int n, File *fp)
10】fputs函数的功能是用来向指定文件输出一个字符串。fwrite函数的功能是用来向文件写数据块。fprintf函数按照格式向文本文件中输出数据。这三者都是库函数，而fpout不是库函数
11】 fgetc()从文件读入一个字符到指定变量。fputc()将指定字符写入fp文件中，fprintf(),fwrite()均是写入文件操作函数
12】fgets读取一个长度为(n-1)的字符串，
        fread按照指定的长度读取数据项，对应2进制的打开方式，
        fscanf按指定格式读，对应文本打开方式，
        getc从指定的文件读入一个字符，即从fp所指向的文件中读入一个字符赋给ch。
13】【 fread（）函数用法是fread（void *buffer,int size,int n,FILE *fp）,其中buffer为指针类型，应该传入指针类型的值，a应该改为&a    】
14】本题考查文件的定位，【feof函数的用法是从输入流读取数据，如果到达文件末尾（遇文件结束符）】，eof函数值为非零值，否则为0
15】在C语言中，或更精确地说成C标准函数库中表示文件结束符（end of file）。在while循环中以EOF作为文件结束标志，这种【以EOF作为文件结束标志的文件，必须是文本文件】。在文本文件中，数据都是以字符的ASCII代码值的形式存放。我们知道，ASCII代码值的范围是0~255，不可能出现-1，因此可以用EOF作为文件结束标志。EOF是在stdio.h库函数文件中定义的符号常量，其值等于-1
16】
  

]]></description><link>https://blog.gaoredu.com/article/94182ddf-244e-4841-9937-834f0deb7c76</link><guid isPermaLink="true">https://blog.gaoredu.com/article/94182ddf-244e-4841-9937-834f0deb7c76</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 29 Mar 2018 03:03:00 GMT</pubDate></item><item><title><![CDATA[【C语言资料进阶】分享自己收集整理的计算机二级资料笔记]]></title><description><![CDATA[全国计算机二级C语言等级考试
2016.1.23日晚22:00
数据类型的转换
#include  <stdio.h>
double fun(double  e)
{ int  i, k;    double  s, t, x;
  s=0;  k=1;  i=2;
/**********found**********/
  x=3.0/4;//需要转换成double类型
/**********found**********/
  while(x > e)//注意10~-3 = e
  { s=s+k*x;//求和项
    k=k* (-1);//每项的正负
    t=2*i;//分母
/**********found**********/
    x=(t+1)/(t*t);
    i++;
  }
  return  s;
}
main()
{ double  e=1e-3;
  printf("\nThe result is: %f\n",fun(e));
}


二维数组的大小比较
#include<stdio.h>
# define M = 4;
Int compare(int a)
{
Int I, j, max = a;
For(I = 0; i<2; i++)
{
   For(j = 0; j<M; j++)
   {
      If(max  < a)
       {
        Max = a;
}
}
}

2016.1.24日晚22:00
利用迭代法求值

Double fun(double eps)
{
  Double s1 = 1.0, s = 1.0;
Int n = 1;
While(s1 > =eps)
{
 S1 = s1*n/(2*n + 1);
S = s + s1;
n++;
}
  Return (2*s);
}
2016.1.29日晚22:00

#include     <stdio.h>
void fun(char  *s, int  *t)
{  int i, n;
   n=0;
/**********found**********/
   for(i=0; s !=0; i++)
/**********found**********/
      if(s>='0'&&s<= '9') n++;//数字字符是 0 - 9
/**********found**********/
    *t = n;//将n的值赋给t所指向的内存空间
}
main()
{  char  s="abcdef35adgh3kjsdf7";
   int t;
   printf("\nThe original string is :  %s\n",s);
   fun(s,&t);
   printf("\nThe result is :  %d\n",t);
}

#include <stdio.h>
void  fun (int *a, int *n)
{
	int i, j;
	for(i = 1; i<1000; i++)
	{
		if (i % 7  == 0 || i % 11 == 0  && i % 77 != 0)
		{
			a = i;//把符合条件的i放在数组里面
            *n = j;
		//	i++; 这里error

			//	i++;
			//	n++;//计算属于条件的个数
			//    a = a;
		}
	}
	 
}

main( )
{  int aa, n, k ;
void NONO (  );

fun ( aa, &n ) ;
for ( k = 0 ; k < n ; k++ )
if((k + 1) % 10 == 0) printf("\n") ;
else printf("%5d", aa) ;
}

2016.1.30日晚22:00
求最大公约数
#include <stdio.h>
int  fun(int  a,int  b)
{  int   r,t;
   if(a<b) {
/************found************/
     t=a; a=b; b=t;//交换位置
   }
   r=a%b;
   while(r!=0)
   {  a=b; b=r; r=a%b; }
/************found************/
   return(b);//返回个数
}

#include <stdio.h>

void  fun (int *a, int *n)
{
	int i,j;
	char s;
	for(i=0; i == '\0'; i++)
		if(a != '*')
		{
			s = a;
		}
}
字符串的删除
#include <stdio.h>
void  fun( char *a )
{
	//注意附一个初始值
	int i,j = 0;
	//char s; error
	for(i=0; a != '\0'; i++)//注意这里的判别条件
		if(a != '*')
		{
			a = a;
		}		
	a = '\0';//字符串以‘\0’结尾
}

取余操作
#include  <stdio.h>
unsigned long fun(unsigned long  n)
{ unsigned long  x=0;    int  t;
  while(n)
  { t=n%10;
/**********found**********/
       if(t%2==0)
/**********found**********/
       x=10*x + t;//将t作为x的个位数，原来x的各个位上升1位，即x＝10*x+1
/**********found**********/
      n=n / 10;//每循环一次，通过除法运算，去掉数值最后一位。

  }
  //如果知道某数n的各个位的数值，可以得到该数值n，
  //如n的个位为a、十位为b、百位为c，那么n＝c*100＋b*10＋a。
  //如果知道数值n，可以采用求余和除法操作来表示其各个位，
  //如n%10(取个位)、n/10(取十位)，
【三位数】n = c*100  + b*10 + a
【四位数】n = d*100 + c*100 + b*10 + a

取个位十位百位数
个位：a = n % 10;  两位数
十位：b =n/10;

个位：a = n%10三位数
十位：b = n
百位：c = n/100;  
  return  x;
}
2016.1.31日晚21:00
*t = 0;//error  这里应该给t所指向的内存空间里赋一个初值
  while ( s > 0)
  {  d = s%10;
/************found************/
     if (d%2 == 1)//判断是否为奇数
     {  *t = d * sl + *t; //把t所指向的内存空间的值不断赋给新位
	   sl *= 10;
     }
     s /= 10;  //删除最后一位
  }

字符串的插入
	int i, j;//逐个遍历两个数组
	for(i=0; p1 != '\0'; i++);//这里只循环，不做其他操作，通过i值可以知道字符串结束的位置
		for(j=0; p2 != '\0'; j++)
			p1 = p2;//赋值完成之后，让p1的下标后移一位
		p1 = '\0';
【注意】
//第1个循环的作用是求出第1个字符串的长度，
		//即将i指到第1个字符串的末尾。
		//第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。
		//最后在第1个字符串的结尾加上字符串结束标识′\0′。

最大值最小值数组元素的筛选
void fun(int  a, int  n)
{  int  i,j, max, min, px, pn, t;
   for (i=0; i<n-1; i+=2)
   {
/**********found**********/
      max = min = a;//for循环语句循环体中将数组元素a赋值给变量max和变量min。
      px = pn = i;
      for (j=i+1; j<n; j++) {
/**********found**********/
         if (max<a)
         {   max = a; px = j;  }
/**********found**********/
         if (min>a)
         {   min = a; pn = j;  }
      }
      if (pn != i)
      {  t = a; a = min; a = t;
         if (px == i) px =pn;
      }
      if (px != i+1)
      {  t = a; a = max; a = t; }
   }
}

斐波拉契数列的算法实现
#include <stdio.h>
long fun(int  g)
{
/**********found**********/
    switch(g); //waring!!! error//注意switch语句的写法 switch() {}  注意switch（）之后不能有符号
    switch(g) //true
	{  case 0: return 0;
/**********found**********/
	case 1 ；case 2 : return 1 ;//error
	case 1 :case 2 : return 1 ;//在第一项和第二项的的结果都是1
    }
    return( fun(g-1)+fun(g-2) );
}

结构体计算成绩平均值，总和
结构体类型成员运算，指向结构体类型的指针变量作函数参数
#include <stdio.h>
#define   N   8
typedef  struct
{  char  num;
   double  s;
   double  ave;
} STREC;

void  fun(STREC *a)//通过结构体变量参数可以获取相应的结构体成员变量
{
int i;
a->ave = 0.0;//注意这里是double类型,指针类型的结构体不要用“.”，要尽量用“->”
for(i=0; i<N; i++)
{
	a->ave = a->ave + a->s;//a->ave现在保存了数组元素中各们成绩之和之和
//	a->ave = a->ave/N;//error!!!求其平均分
}
	a->ave = a->ave/N;//注意要在把所有数值的和求出来以后才能求平均值 求其平均分

}

main()
{  STREC  s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
   int  i;
   void NONO (  );
   fun( &s );
   printf("The %s's student data:\n", s.num);
   for(i=0;i<N; i++)
     printf("%4.1f\n",s.s);//【思路：】提供了成绩信息，可据此逐个遍历数组
   printf("\nave=%7.3f\n",s.ave);
   NONO();
}
Switch语句应用要点
本题考查：switch语句，其一般形式为：
switch(表达式){  
case常量表达式1:  语句1；
case常量表达式2:  语句2；
……  
case常量表达式n:  语句n；
default:  语句n＋1；
}
其中switch(表达式)后不应该带有"；"，同时case语句常量后应该是"："。
2016.2.11日晚21:00
利用链表求解数据的平均值
#include <stdio.h>
#include <stdlib.h>
#define   N   8
struct  slist
{  double   s;
struct slist  *next;
};
typedef  struct slist  STREC;
double  fun( STREC *h  )
{
	double ave = 0.0;
	STREC* p = h->next;
	//while(h != NULL)  error
	while(p != NULL)
	{
		ave = ave + p->s;
	//	p->s = p->next;  error
		p = p->next;
	}
	/*
	int i;
	for(i=0; i<N; i++)
	h->s = h->s + h->next;
	return (h->s / N);
	*/
	return ave / 10;
}
注意：
1.】遍历链表时应定义一个指向结点的指针p，因为"头结点"中没有数值，所以程序中让p直接指向"头结点"的下一个结点，使用语句STREC *p＝h－>next
2.】对链表的主要操作有以下几种：建立链表、结构的查找与输出、插入一个结点、删除一个结点
2016.2.12日晚11:00
#include <stdio.h>
#include <string.h>
char* fun( char tt )
{
  int i;
  for( i = 0; tt; i++ )
/**********found***********/
    if(( 'a' <= tt )&&( tt <= 'z' ) )
/**********found***********/
      tt -= 32;
  return( tt );
}

素数的判断
#include <stdio.h>

void fun( int m, int *k, int xx )
{
	//判定一个数是否为素数，即该数除了能被1和它本身外，不能被任何数整除
	int i, j, n = 0;
	for(i = 4; i<m; i++)//因为2 3 都是素数， 所以从4开始判断
	{
		for(j = 2; j<i; j++)			/*找出大于1小于整数m的非素数*/
		{
			if(i % j == 0)//　/*如余数为0，证明i不是素数*/
				break;
			if(j < i)
				xx = i;
		}
		*k = n;    /*返回非素数的个数*/
	}
	/*
	int i;
	for(i=0; i<m; i++)
	{
	if(m>1 && i%m != 0 && 1%m != 0)
	{
	xx = i;  
	//	*k++;
	//k ++;
	}
	}
	*/
2016.2.13日晚10:00
求ss中指定字符串的个数
#include <stdio.h>
#include <string.h>
#define  M 81

int fun(char *ss, char c)
{
//c是输入的字符
int i, k = 0;
for(i=0; ss != '\0'; i++)//遍历字符串
//判断出现字符数量
{
	if(ss == c) k++;
}
return k;

}
将一个数组中的字符串和数字字符分开重新存储

#include    <stdio.h>
void fun(char  *s)
{  int  i, j=0, k=0;    char  t1, t2;
   for(i=0; s!='\0'; i++)
     if(s>='0' && s<='9')
     {
/**********found**********/
       t2=s; j++;
     }
     else  t1=s;
  t2=0;  t1=0;
/**********found**********/
  for(i=0; i<k; i++)  s=t1;
/**********found**********/
  for(i=0; i<j; i++)  s=t2;
}
冒泡排序法进行升序排序
. #include <stdio.h>
#include <string.h>
#define MAXLINE 20

fun ( char *pstr)
{   int  i, j ;
    char *p ;

    for (i = 0 ; i < 5 ; i++ ) {
/**************found**************/
      for (j = i + 1; j < 6; j++)
      {
        if(strcmp(*(pstr + i), *(pstr + j)) > 0)
        {
//注意指针和指针所指向的内存空间是两个不同的概念
            p = *(pstr + i) ;
/**************found**************/
            *(pstr + i) = *(pstr + j) ;
            *(pstr + j) = p ;
        }
      }
    }
}
2016.2.14日晚11:00
链表的插入、排序操作
#include    <stdio.h>
#include    <stdlib.h>
#define    N    8
typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;
void fun( SLIST  *h, int  x)
{  SLIST  *p, *q, *s;
   s=(SLIST *)malloc(sizeof(SLIST));
/**********found**********/
   s->data=x;//将链表节点的数值赋给s指向的数据
   q=h;
   p=h->next;
   while(p!=NULL && x>p->data) {
/**********found**********/
      q=p;//实现循环
      p=p->next;
   }
   s->next=p;//实现节点的插入操作
/**********found**********/
   q->next=s;
}

计算正整数各位上的数字之积
#include <stdio.h>

long  fun (long num)
{
/************found************/
  long k=1.0;//这里要赋初始值
  do
  { k*=(num%10) ;
/************found************/
    num/=10 ;//注意除号的写法
  } while(num) ;
  return  (k) ;
}
将形参a所指向数组中的前半部分元素的值与后半部分元素中的值互换
#include    <stdio.h>
#define    N    9
void fun(int  a, int  n)
{  int  i, t, p;
/**********found**********/
   p = (n%2==0)?n/2:n/2+1;
   for (i=0; i<n/2; i++)
   {
      t=a;
/**********found**********/
      a = a;
/**********found**********/
      a = t;
   }
}

结构体数组求平均值和和
#include <stdio.h>
#define   N   16
typedef  struct
{  char  num;
int   s;
} STREC;
int  fun( STREC  *a, STREC *b )
{
	/*
	int i, j, k=0;
	for(i=0; i<N; i++)
	{
		for(j=i+1; j<N; j++)
		{
			if(a.s > a.s)
			{
				b = a;
			}
		}
	}
	return k;
	*/
	int i, j=0, max = a.s;
	for(i=0; i<N; i++)
		if(max<a.s) max = a.s;
	for(i=0; i<N; i++)
		if(max == a.s)
			b = a;
		return j;
}
2016.2.17日晚11:00


float  fun ( float  *a ,  int  n )
{
   int i;
   float av=0.0; 
   for(i=0; i<n;i++)       /*求分数的总和*/
       av=av+a; 
   return(av/n);             /*返回平均值*/
}

//结构体求数值大小
	int i, j = 0, max = 0;
	for(i=0; i<N; i++)
	{
		if(a.s > a.s)
		{
			//	max = a.s;
			b = a;
		}
	}
	return j;

	int i,j = 0, max = a.s;
	for(i=0; i<N; i++)
		if(max < a.s) max = a.s;
	for(i=0; i<N; i++)
		if(max == a.s) 
			b = a;
2016年3月1日星期二
删除满足条件的字符串
#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   10
int fun(char  (*ss), int  k)
{ int  i,j=0,len;
/**********found**********/
  for(i=0; i< N ; i++)
  {  len=strlen(ss);
/**********found**********/
     if(len<= k)
/**********found**********/
        strcpy(ss, ss);
  }
  return  j;
}
变量初始化，需根据题意确定变量含义，然后对其进行初始化操作；while循环语句。

#include <stdio.h>
#include <string.h>
void  fun(char *p ,char *q, char *c)
{
/************found************/
  int k = 0;//变量k存放数组c的下标，因此应初始化为0。

/************found************/
    while( *p || *q )// while循环语句的循环条件是判断两个字符串是否到达结尾。

    {  if( *p>=*q )  c=*q;
       else         c=*p;
       if(*p) p++;
       if(*q) q++;  
       k++; 
    }
}



  for(i=0; a != '\0'; i++)
  {
	  if(a == '*')
	  {
		  a = a;
	  }

  }
//临时指针p，初始指向原串首地址；(2) 利用循环语句把字符串前导*号拷贝到原串；(3) 继续移动指针，把串中和串尾的非*号字符拷贝到原串；
#include <stdio.h>
void  fun( char *a )
{

int i=0;
char *p =a;//辅助指针变量遍历数组
while(*p != NULL && *p == '*')
{
	a = *p;
	i++;
	p++;//指针后移
}
while(*p != NULL)
{
	if(*p != '*')
	{
		a=*p;
		i++;//指针地址变化
	}
	p++;//指针后移
}
a = '\0';//指针结束的标记
2016.3.3
字符串的移动
#include     <stdio.h>
void fun(char  *s)
{  int  i, n, k;    char c;
   n=0;
   for(i=0; s!='\0'; i++)  n++;
/**********found**********/
   if(n%2==0) k=n- 1;// 统计字符的长度
   else       k=n-2;
/**********found**********/
   c=s ;//k的作用后，则将最右边的奇数位置的数赋值给变量c。
   for(i=k-2; i>=1; i=i-2)  s=s;
/**********found**********/
   s=c ;//将最后一个下标为奇数的元素移到第一个奇数位置。

}


【警告】

去掉数值n的个位的方法是采用除法运算【/】，如果需要取出个位数才使用求余运算【%】

【参考答案】
void fun(char *tt, int pp)
{
int i;
  for(i=0;i<26;i++)
     pp=0;         /*初始化pp数组各元素为0*/
  for(;*tt!='\0';tt++)//地址加加
     if(*tt>='a'&&*tt<='z')   
        pp++;  //用tt指针所指向的内存空间的数值与‘a’的asscii马数值相比较， 并让当前的数值不断后移
}

字符串的删除
#include <stdio.h>
void  fun( char *a )
{
	int i = 0;
	char *p = a;//指向数组的首地址
	while(*p != '\0') //注意赋值 = 操作和 == 的区别
	{
		p ++;//让指针移动到数组元素的末尾 指向‘\0’
	}
	p--;//让指针指向数组的最后一个元素
	
	while(*p == '*')
	{
		 p--;
		 //a = *p;
		 //i++;
		 p = '\0';
	}
	
	
}
//链表的操作
void fun( SLIST  *p)
{  SLIST  *t, *s;
   t=p->next;    s=p;
   while(t->next != NULL)
   {  s=t;
/**********found**********/
      t=t->next;//指针不断下移
   }
/**********found**********/
   printf(" %d ",t->data);//输出指针t指向的数据
   s->next=NULL;
/**********found**********/
   free(t);//释放t
}

数组元素的交换
#include    <stdio.h>
void fun(int  a, int  n)
{  int  i,t;
/**********found**********/
   for (i=0; i<n/2; i++)//注意这里的数组元素的交换 【< n / 2】
   {
      t=a;
/**********found**********/
      a = a;
/**********found**********/
      a = t;
   }
}

数字和字符转换方法；八进制转十进制方法。
#include <stdio.h>
int  fun( char *p )
{   int   n;
/**********fo
字符'0'的ASCII码，就得到对应的数字。题中给出的是"o"，不是"0"。盘【n是个位数】und**********/
    n= *p-'0';//(1)"0"和"1"是字符串中的数字字符，为了进行数字运算，必须要将数字字符转换为数字，用数字字符减去
    p++;
    while( *p!=0 ) {
/**********found**********/
     	n=n*8+*p-'0';//(2)要在一个八进制数的最后加上一位，原来各个位上的数上升一位，只需将原数乘以8再加上个位数。
	p++;
    }
    return  n;
}



结构体元素的选择筛选
typedef  struct
{  char  num;
int   s;
} STREC;
STREC  fun( STREC  *a, char *b )
{
	int i;
	STREC str = {'\0', -1};//若没找到指定的学号，在结构体变量中给学号置空串，给成绩置
	
	for(i=0; i<N; i++)//对已知的学号成绩数组进行遍历
	{
//发现数据以后则执行操作
		if(strcmp(a.num, b) == 0);//如果a.num 中的数据和 b 所指向的内存空间的数据相同 
		str = a;//直接把a数组中的元素拷贝到 str中去
	}
	return str;//返回str中的数据
	
}
文件的读写操作
#include    <stdio.h>
#include    <stdlib.h>
int fun(char  *source, char  *target)
{  FILE  *fs,*ft;      char  ch;
/**********found**********/
   if((fs=fopen(source, "r"))==NULL)//只读方式
	   //打开一个文件的调用方式是，fs＝fopen(文件名，使用文件方式)，以只读的方式打开文件，所以文件打开方式为"r"。

      return 0;
   if((ft=fopen(target, "w"))==NULL)//
      return 0;
   printf("\nThe data in file :\n");
   ch=fgetc(fs);
/**********found**********/
  // while(!feof(source))//判断文件是否读取完成,如果文件结束，则返回非0值，否则返回0
   while(!feof(fs))//源文件是否读取完成判断
   {  putchar( ch );
/**********found**********/
    //  fputc(ch,target);// 将字符ch写到文件指针fp所指向的文件的当前写指针的位置。
   fputc(ch, ft);//写入文件
      ch=fgetc(fs);
   }
   fclose(fs);  fclose(ft);
   printf("\n\n");
   return  1;
}
二维数组实现矩阵的排列
void fun(int  (*t), int  m)
{  int  i, j;
/**********found**********/
   for(i=0; i<N; i++ )
   {  for(j=N-1-m; j>=0; j--)
/**********found**********/
         t=t;
/**********found**********/
      for(j=0; j<m; j++)
         t=0;
  }
}
递归方法实现函数的计算
#include <math.h>
#include <stdio.h>
double fun()
{
//利用递归方法实现函数的计算直到满足条件为止
double x1 = 0.0, x0;
/*
x0 = x1;
x1 = fun(x0);
/*  f分析：如果在此处通if语句， 则循环语句不好掌握  故可采用使用纬while()语句
if(fabs(x0-x1) < 0.000001)
{
	return x1;
}

*/
do
{
	x0 = x1;
	x1 = cos(x0);
}while(fabs(x0-x1) > 0.000001);
return x1;

}

#include <stdio.h>
void  fun( char *a )
{
	int i=0,n=0;
	char *p;
	p=a;//让指针p指向a的首地址
	while (*p=='*')   /*判断*p是否是*号，并统计*号的个数*/  
	{
		n++;p++;//n记录了‘*’的个数， p移动到了*的位置
	}
	while(*p != NULL)       /*将前导*号后的字符传递给a*/       
	{
		a=*p;i++;p++;//将p位置之后的内容拷贝到哦a【】数组中去
	}

	while(n!=0)
	{
		a='*';i++;n--;//把*放到a数组的后面
	}
	a='\0';//在指针的末尾加上结束标识符
	/*int i = 0, j = 0;
	char *p = a;
	a = 0;
	while(p == '*')
	{
	//	m = p;
	a = p;
	i++;
	}	
	while(p != '\0')
	{
	a = p;
	j++;
	}
	a = '\0';*/
}


 附加：
	sl = sl*10;//(2)重新组合一个数，从个位开始，然后十位，依次类推，因此每增加一位数，原数值需乘以10，即s1＝s1*10;。

结构体数组的排序筛选操作
int  fun( STREC  *a, STREC *b )
{
	int min = a.s;
	int i,j=0;
	for(i=0; i<N; i++)
	{
		if(a.s < min)
			min = a.s;
		
	}
	for(i=0; i<N; i++)
		if(min == a.s)///*找出成绩与min相等的学生的记录，存入结构体b中*/
		{
			///	b.s = a.s; 注意这里可以直接存放到结构体中去
			b = a;///*找出成绩与min相等的学生的记录，存入结构体b中*/

		}
		//	b.s = '\0';
		return j;//注意这里要把j的数值返回出去
		
		
}
字符串的删除
#include <stdio.h>
void  fun( char *a, int n,int h,int e )
{
	int i, j =0;
	for(i=h; i<n-e; i++)
		a = a;
	a = '\0';
//保留字母 删除其他字符
	/*
	//h前个数 e后个数
	char *p = a;
	int i = 0;
	int j = 0;
	//while(a == '*')
		while(h != 0)
		{
			p = a;//j指向了前置*点末尾
			//a++;
			h--;			
		}
		while(a != 0)
		{
			j++;
		}
		while(e != 0 )
		{
			a = a;
			e--;
		}
		*/
}
二维数组元素的大小比较
	int i; int j, max;
	for(j=0; j<N; j++)
	{
		max = tt;
		for(i=0; i<M; i++)
		{
			if(tt > max)
			max = tt;
		}
		pp = max;
	}
结构体数组元素筛选要点
int  fun( STREC  *a,STREC *b,int l, int h )
{
	int i, j = 0;
	for(i=0; i<N; i++)
	{
		if(a.s >= l && a.s <= h)		//注意这里if语句和 while语句的区别
	//   while(a.s >= l && a.s <= h)  error！！
				
			{
				//b.s = a.s;//error
				b = a;//b.s = a.s是错误的表述
			}
	}
	//	return b;
	//	b.s = '\0';
	return j;
	
	
	
}


void fun(int  *a, int  n)
{  int  i, j, max, min, px, pn, t;
/**********found**********/
   for (i=0; i<n-1; i+=2)
   {  max = min = a;
      px = pn = i;
/**********found**********/
      for (j=i+1; j<n; j++)//注意这里与i的相互关系
      {  if (max < a)
         {  max = a; px = j;  }
         if (min > a)
         {  min = a; pn = j;  }
      }


ave
如何取出数n的各个位数值
void fun(int a, int b, long *c)
{         /*b%10 获取b的个位，a/10 获取a的十位，a%10 获取a的个位，b/10 获取b的十位*/
 *c=b%10+(a%10)*10+(b/10)*100+(a/10)*1000;

	//*c = (a/10)*1000 +  (a%10)*10  + (b/10)*100 +    (b%10)*1;
	// a 的十位： a /10;  a的个位：  a % 10；
	// b 的十位： b /10;  b的个位：  b % 10；
	int ge, shi, bai, data;
	scanf("%d", data);
	bai = data /100;//百位
	shi = data /10 % 10; //十位
	ge = data % 10;//个位
	printf("ge = %d, shi = %d, bai = %d\n", ge, shi, bai);
}
【考点分析】
本题考查：如何取出数n的各个位数值；知道数n的各个位数值，又如何表示该数值；指针型变量的使用。
【解题思路】
本题中主要的问题是如何取出a和b的个位数和十位数，取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数，所以分别对它们除10可得到它们的十位数，分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1，就可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。
将指定字符串中奇数位置的字母转换为大写
将指定字符串中奇数位置的字母转换为大写
	for(i=0; ss != '\0'; i++)
	{
		if(i % 3 == 0 && ss >= 'a' && ss <= 'z')
		{
			ss = ss - 32;//转换为大写
		}	
	}
	

/**********found**********/
   for(i=0; i<N; i++)
     {
/**********found**********/
        x=t ;
        for(j=N-1; j>=1; j--)
          t=t;
/**********found**********/
        t=x;
     }


【参考答案】
int  fun( int  t)
{
int f0 = 0, f1 = 1, f ;
  do {
    f = f0 + f1 ;
    f0 = f1 ;
    f1 = f ;
      } while(f < t) ;
  return f ;
}
【考点分析】
本题考查：变量数据类型及初始化；循环语句。
【解题思路】
根据所给数列定义不难发现，该数列最终的结果是由两个数列之和组成，所以可以在循环内部始终把f看成是前两项之和，而f0始终代表第n－2项，f1代表第n－1项。退出循环时得到的数f，就是大于指定数的最小的数

]]></description><link>https://blog.gaoredu.com/article/0970be68-7349-49ea-9588-fe0b5d4075c4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0970be68-7349-49ea-9588-fe0b5d4075c4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 29 Mar 2018 01:15:14 GMT</pubDate></item><item><title><![CDATA[【C++源码】自定义实现一个Set和List的集合源码资料共享]]></title><description><![CDATA[【List.h】
//---------------------------------------------------------------------
// Name: 
// Email: @psu.edu
// Class: CMPSC 122, Section 3
// Program 3.1
// Due Date: March 28, 2018, 11:59 PM
//
// Description: Contains List class implemenation that will be 
// used to implement Set class
//
// Acknowledgements:
// 
//---------------------------------------------------------------------

class ListNode
{
private: 
	int data;
	ListNode* prev;
	ListNode* next;

public:
	ListNode() 
	{ prev = next = NULL; }
	ListNode(int d, ListNode* p, ListNode* n) 
	{ data = d; prev = p; next = n; }
	friend class List;
};

class List
{
private:
	ListNode* head;
	ListNode* tail;

public:
	List() 
	{ head = tail = NULL; }
	~List();

	bool isEmpty() 
	{ return head == NULL; }
	bool contains(int value);
	void addToHead(int value);
	void addToTail(int value);
	int removeHead();
	int removeTail();
	int removeAt(int index);
	bool remove(int value);
	int at(int index);
	int valueOf(const ListNode* elem);
	const ListNode* getNext(const ListNode* node);
	const ListNode* getPrevious(const ListNode* node);
	const ListNode* getHead() { return head; }
	const ListNode* getTail() { return tail; }
};

List::~List()
{
	while (!isEmpty())
		removeTail();
}

bool List::contains(int value)
{
	ListNode *temp;
	temp = head;
	while (temp != NULL && temp->data != value)
		temp = temp->next;

	return temp != NULL;
}

void List::addToHead(int value)
{
	if (isEmpty())
	{
		head = tail = new ListNode(value, NULL, NULL);
	}
	else
	{
		head = new ListNode(value, NULL, head);
		head->next->prev = head;	
	}
}

void List::addToTail(int value)
{
	if (isEmpty())
	{
		head = tail = new ListNode(value, NULL, NULL);
	}
	else
	{
		tail = new ListNode(value, tail, NULL);
		tail->prev->next = tail;
	}
}

int List::removeHead()
{
	int value = head->data;
	if (head == tail)
	{
		delete tail;
		head = tail = NULL;
	}
	else
	{
		head = head->next;
		delete head->prev;
		head->prev = NULL;
	}

	return value;
}

int List::removeTail()
{
	int value = head->data;
	if (head == tail)
	{
		delete tail;
		head = tail = NULL;
	}
	else
	{
		tail = tail->prev;
		delete tail->next;
		tail->next = NULL;
	}

	return value;
}

int List::removeAt(int index)
{
	int i;
	int va = -1;
	ListNode* tmp = head;
	ListNode*curr = head;
	for ( i = 0;i <=index;i++)
	{
		if (curr != NULL)
		{
			curr = tmp;
			tmp = tmp->next;
		}
		else
		{
			break;
		}
		
	}
	if (curr == NULL)
	{
		
	}
	else
	{
		va = curr->data;
		curr->prev->next = tmp;
		tmp->prev = curr->prev;
	}
	return va;
	
	
}

bool List::remove(int value)
{	
	bool flage = false;
	ListNode *temp = head;
	ListNode *curr = head;
	while (temp != NULL)
	{
		
		if (temp->data == value)
		{
			curr->next = temp->next;
			temp->next->prev = curr;
			flage = true;

		}
		curr = temp;
		temp = temp->next;
		 
	}
	return flage;
}


int List::at(int index)
{
	int va = -1;
	ListNode* temp = head;
	ListNode* curr = head;
	int i;
	for (i = 0;i <= index;i++)
	{
		curr = temp;
		temp = temp->next;
	}
	if (curr != NULL)
	{
		va = curr->data;
	}
	return va;
}

int List::valueOf(const ListNode* elem)
{
	return elem->data;
}

const ListNode* List::getNext(const ListNode* node)
{
	return node->next;
	
}

const ListNode* List::getPrevious(const ListNode* node)
{
	return node->prev;
}
【set.cpp】
//---------------------------------------------------------------------
// Name: 
// Email: @psu.edu
// Class: CMPSC 122, Section 3
// Program 3.2
// Due Date: March 28, 2018, 11:59 PM
//
// Description: 
//
//
// Acknowledgements:
//
//---------------------------------------------------------------------

#include "stdafx.h"
#include <iostream>
#include "list.h"
#include <vector>
#include <string>
#include <sstream>




using namespace std;

class Set
{
private: 
	List* list;
	//int set_size;
public:
	int set_size;
	int input_data;
	Set();
	Set(int size);
	~Set();

	bool contains(int value);
	bool add(int value);
	bool remove(int value);
	void clear();
	Set* set_union(Set&);
	Set* intersection(Set&);
	Set* difference(Set&);
	void print();
	int size() { return set_size; }

};
Set::~Set()
{
	set_size = 0;
}
Set::Set()
{
	list = new List();
}
Set::Set(int size)
{
	list = new List();
	set_size = size;
}
 bool Set::contains(int value)
{
	 return list->contains(value);
}
 bool Set::add(int value)
 {
	
	 bool flage = false;
	 if (!Set::list->contains(value))
	 {
		 list->addToTail(value);
		 flage = true;
	}
	 return flage;
 }
 bool Set::remove(int value)
 {
	 return list->remove(value);
 }
 void  Set::clear()
 {
	 set_size = 0;
	 list->~List();
 }
 Set* Set::set_union(Set& p)
 {
	 Set* s = new Set();
	 for (int i = 0;i < set_size;i++)
	 {
		 s->add(list->at(i));
	 }
	 for (int i = 0;i < p.set_size;i++)
	 {
		s->add(p.list->at(i));
	 }

	 return s;
	 
 }
 Set* Set::intersection(Set&p)
 {
	 Set* s = new Set();
	 for (int i = 0;i < set_size;i++)
	 {
		 s->add(list->at(i));
	 }
	 Set*d= difference(p);
	 int size = d->set_size;
	 for (int i = 0;i < size;i++)
	 {
		 s->list->remove(d->list->at(i));
	 }
	 
	 return s;
	 
 }
 Set* Set::difference(Set&p)
 {
	 Set* s = new Set();
	 for (int i = 0;i < set_size;i++)
	 {
		 s->add(list->at(i));
	 }
	 for (int i = 0;i < p.set_size;i++)
	 {
		 if (s->list->contains(p.list->at(i)))
		 {
			s-> list->remove(p.list->at(i));
		 }
	 }
	 return s;
 }
 void Set::print()
 {
	 cout << "set element(" << size() << ")";
	 for (int i = 0;i < size();i++)
	 {
		 int a = list->at(i);
		 stringstream ss;
		 ss<<a;
		 string str = ss.str();
		 
		 str = str + " ";
		 cout << str;
	 }
	 cout << endl;
 }


 vector<string> parseStrtoArray(string str1){
	 int iBegin = 0;
	 string::size_type iLatter = 0;
	 string::size_type iFormer = string::npos;
	 vector<string> arr;

	 while (1)
	 {
		 iLatter = str1.find_first_not_of(' ', iLatter);
		 if (string::npos == iLatter)
		 {
			 break;
		 }

		 iFormer = str1.find_first_of(' ', iLatter + 1);
		 if (string::npos == iFormer)
		 {
			 iFormer = str1.length();
		 }

		 // str2, str3, str4
		 string strNew(str1, iLatter, iFormer - iLatter);

		 cout << strNew << endl;
		 arr.push_back(strNew);


		 iLatter = iFormer + 1;
	 }

	 return arr;
 }


 vector<int> readConsoleLineToArray(){
	 string input_str;
	 getline(cin, input_str);
	 stringstream stringin(input_str);
	 vector<int> bufferData;
	 int num;
	 while (stringin >> num)
	 {
		 bufferData.push_back(num);
	 }
	
	 return bufferData;
 }
int main()
{
	Set set1, set2;
	vector <int> strArr1, strArr2;

		
	cout << "Enter starting size of set #1:";
	cin >> set1.set_size;

	cout<< "Enter starting size of set #2:";
	cin >> set2.set_size;

	cout << "Enter "<<set1.set_size<<" values for set #1:" << endl;
	getchar();
	strArr1 = readConsoleLineToArray();

	for (int i = 0; i < set1.set_size; i++){
		if (strArr1.size() == set1.set_size){
			set1.add(strArr1);
		}
	}

	cout << "Enter "<<set2.set_size<<" values for set #2:"<<endl;
	strArr2 = readConsoleLineToArray();
	for (int i = 0; i < set2.set_size; i++){
		if (strArr2.size() == set2.set_size){
			set2.add(strArr2);
		}
	}


	cout << "Now accepting commands (quit to exit program)" << endl;
	while (true)
	{
		string command = "";
		cin >> command;
		if (command == "print1"){
			set1.print();
			cout << endl;
		} else if (command == "print2"){
			set2.print();
			cout << endl;
		}else if (command == "union"){
			Set * s=set1.set_union(set2);
			s->print();
		} else if (command == "add"){
			cout << "Please enter the number you want to add:";
			//getchar();
			set1.set_size++;
			int addValue;
			cin >> addValue;

			set1.add(addValue);
			set1.print();
		} else if (command == "remove"){
			cout << "Please enter the number you want to remove:";
			int removeValue;
			cin >> removeValue;
			if (set1.contains(removeValue)){
				set1.remove(removeValue);
				set1.set_size--;
				set1.print();
			} else {
				cout << "The "<<removeValue<<" value you want to remove is not exist in this set";
			}
			
		}
		else if (command == "subtraction"){
			Set * s1 = set1.difference(set2);
			Set * s2 = set2.difference(set1);
			
		} else if (command == "quit"){
			return 0;
		} else{
			cout << "The command is error, please retry later……" << endl;
		}

		cout << "Now accepting commands (quit to exit program)" << endl;
	}

		return 0;
}



]]></description><link>https://blog.gaoredu.com/article/740eaee8-0955-4640-a027-828b41ca367e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/740eaee8-0955-4640-a027-828b41ca367e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 28 Mar 2018 18:03:49 GMT</pubDate></item><item><title><![CDATA[【java进阶】利用Java实现B+树的添加和删除源码]]></title><description><![CDATA[定义一个接口Bpackage bptree;

// 先来定义一个接口
// 每一个树都应该具备下面的这三个功能 
public interface B {
	// 查询
	public Object get(Comparable key);
	// 移除节点
	public void remove(Comparable key);
	// 插入或者更新节点， 如果节点已经存在就更新； 只有节点不存在的时候就插入这个节点
	public void insertOrUpdate(Comparable key, Object obj);
}
开始实现我的B+树
package bptree;

import java.util.Random;

// 这个是我的B+树，实现我自己定义的三个接口(接口一旦定义了， 实现类都必须要一一实现这个接口)
public class IBPlusTree implements B{
	
	// 定义B+树的一些节点属性
	// 根节点
	protected INode root;
	
	// 阶数：一个节点最多能够有多少个子节点(也就是M阶)
	protected int order;
	
	// 叶子结点的链表头
	protected INode head;
	
	
	

	public INode getRoot() {
		return root;
	}

	public void setRoot(INode root) {
		this.root = root;
	}

	public int getOrder() {
		return order;
	}

	public void setOrder(int order) {
		this.order = order;
	}

	public INode getHead() {
		return head;
	}

	public void setHead(INode head) {
		this.head = head;
	}
	
	

	// 获得一个节点
	@Override
	public Object get(Comparable key) {
		// TODO Auto-generated method stub
		return root.get(key);
	}
	

	
	// 删除节点的实现
	@Override
	public void remove(Comparable key) {
		// TODO Auto-generated method stub
		// 删除这一颗树的节点key(直接删除即可)
		root.remove(key, this);
		
	}

	
	// 添加或者更新节点
	@Override
	public void insertOrUpdate(Comparable key, Object obj) {
		// TODO Auto-generated method stub
		// 在这一颗树的key的位置添加一个新的节点obj
		root.insertOrUpdate(key, obj, this);
	}
	
	
	
	// 定义我的构造函数（B+树的构造函数）
	/**
	 * 这是一个order(M阶)的B+树
	 * @param order
	 */
	public IBPlusTree(int order){
		// 要保证这个树的阶数大于2(也就是一个节点至少要有两个子节点)
		if (order < 3){
			System.out.println("order (M阶数) must be greater than 2");
			System.exit(0);;
		}
		
		// 当前的树的阶数设置进来
		this.order = order;
		// 开始新建我的根节点
		this.root = new INode(true, true);
		// 这个树的当前头结点就是自己本身
		this.head = root;
	}
	
	
	// toString()函数的重写
	@Override
	public String toString() {
		return "BPlusTree ";
	}
	
	
	
}
我的节点
package bptree;
import java.util.AbstractMap.SimpleEntry;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Map.Entry;  

/**
 * 这个是B+树的节点
 * @author Xiugang
 *
 */
public class INode {
	// 添加树的节点的一些属性
	// 这个节点是不是叶子节点
	protected boolean isLeaf;
	
	// 这个节点是不是根节点
	protected boolean isRoot;
	
	// 父节点
	protected INode parent;
	
	// 叶子节点的前一个节点
	protected INode previous;
	
	// 叶子节点的后一个节点
	protected INode next;
	
	// 一个节点位置的关键字
	protected List<Entry<Comparable, Object>> entries;
	
	// 孩子节点(一个节点有多个孩子节点， 这里需要使用List集合来存储孩子节点)
	protected List<INode> children;
	
	
	
	
	
	public boolean isLeaf() {
		return isLeaf;
	}


	public void setLeaf(boolean isLeaf) {
		this.isLeaf = isLeaf;
	}


	public boolean isRoot() {
		return isRoot;
	}


	public void setRoot(boolean isRoot) {
		this.isRoot = isRoot;
	}


	public INode getParent() {
		return parent;
	}


	public void setParent(INode parent) {
		this.parent = parent;
	}


	public INode getPrevious() {
		return previous;
	}


	public void setPrevious(INode previous) {
		this.previous = previous;
	}


	public INode getNext() {
		return next;
	}


	public void setNext(INode next) {
		this.next = next;
	}


	public List<Entry<Comparable, Object>> getEntries() {
		return entries;
	}


	public void setEntries(List<Entry<Comparable, Object>> entries) {
		this.entries = entries;
	}


	public List<INode> getChildren() {
		return children;
	}


	public void setChildren(List<INode> children) {
		this.children = children;
	}


	// 定义我的这个节点的构造函数
	/**
	 * 根据是不是叶子节点来进行构造
	 * @param isLeaf
	 */
	public INode(boolean isLeaf){
		// 每次生成一个节点都要看一下是不是叶子节点
		this.isLeaf = isLeaf;
		
		// 设置这个节点位置的关键字
		this.entries = new ArrayList<Entry<Comparable,Object>>();
		
		// 如果不是叶子节点的话
		if (!isLeaf){
			// 只要不是叶子节点的话， 那么这个节点就有一个孩子节点
			this.children = new ArrayList<INode>();
		}
	}
	
	
	/**
	 * 通过是不是叶子节点，是不是根节点来构造
	 * @param isLeaf
	 * @param isRoot
	 */
	public INode(boolean isLeaf, boolean isRoot){
		// 调用我上面的构造函数
		this(isLeaf);
		// 根节点
		this.isRoot = isRoot;
	}
	
	
	/**
	 * 根据key值获得一个节点
	 * @param key
	 * @return
	 */
	public Object get(Comparable key){
		// 如果这个节点是叶子节点的话
		if (this.isLeaf){
			// 开始遍历我的所有的关键字集合
			for (Entry<Comparable, Object> entry : entries){
				// 如果在这个集合里面找到了和我的这个key相等的key
				if (entry.getKey().compareTo(key) == 0){
					// 就把这个对象返回出去
					return entry.getValue();
				}
			}
			// 如果没有找到，就返回空
			return null;
		} 
		// 如果当前的这个节点不是叶子节点的话
		else {
			// 如果key小于等于节点最左边的key, 就沿着第一个子节点继续搜索
			if (key.compareTo(entries.get(0).getKey()) <= 0){
				return children.get(0).get(key);
			}
			// 如果key 大于节点最右边的key, 就沿着最后一个子节点继续搜索
			else if (key.compareTo(entries.get(entries.size()-1).getKey()) >= 0) {  
                return children.get(children.size()-1).get(key);  
            //否则沿比key大的前一个子节点继续搜索  
            }
			else {  
				for (int i = 0; i < entries.size(); i++) {  
                    if (entries.get(i).getKey().compareTo(key) <= 0 && entries.get(i+1).getKey().compareTo(key) > 0) {  
                        return children.get(i).get(key);  
                    }  
                }
		
			}
	}
	return null;
	}
	
	
	
	/**
	 * 如果key不存在就添加， 如果存在了就更新
	 * @param key
	 * @param obj
	 * @param tree
	 */
	public void insertOrUpdate(Comparable key, Object obj, IBPlusTree tree){  
        //如果是叶子节点  
        if (isLeaf){  
            //不需要分裂，直接插入或更新  
            if (contains(key) || entries.size() < tree.getOrder()){  
                insertOrUpdate(key, obj);  
                if (parent != null) {  
                    //更新父节点  
                    parent.updateInsert(tree);  
                }  
  
            //需要分裂    
            }else {  
                //分裂成左右两个节点  
                INode left = new INode(true);  
                INode right = new INode(true);  
                //设置链接  
                if (previous != null){  
                    previous.setNext(left);  
                    left.setPrevious(previous);  
                }  
                if (next != null) {  
                    next.setPrevious(right);  
                    right.setNext(next);  
                }  
                if (previous == null){  
                    tree.setHead(left);  
                }  
  
                left.setNext(right);  
                right.setPrevious(left);  
                previous = null;  
                next = null;  
                  
                //左右两个节点关键字长度  
                int leftSize = (tree.getOrder() + 1) / 2 + (tree.getOrder() + 1) % 2;   
                int rightSize = (tree.getOrder() + 1) / 2;  
                //复制原节点关键字到分裂出来的新节点  
                insertOrUpdate(key, obj);  
                for (int i = 0; i < leftSize; i++){  
                    left.getEntries().add(entries.get(i));  
                }  
                for (int i = 0; i < rightSize; i++){  
                    right.getEntries().add(entries.get(leftSize + i));  
                }  
                  
                //如果不是根节点  
                if (parent != null) {  
                    //调整父子节点关系  
                    int index = parent.getChildren().indexOf(this);  
                    parent.getChildren().remove(this);  
                    left.setParent(parent);  
                    right.setParent(parent);  
                    parent.getChildren().add(index,left);  
                    parent.getChildren().add(index + 1, right);  
                    setEntries(null);  
                    setChildren(null);  
                      
                    //父节点插入或更新关键字  
                    parent.updateInsert(tree);  
                    setParent(null);  
                //如果是根节点      
                }else {  
                    isRoot = false;  
                    INode parent = new INode(false, true);  
                    tree.setRoot(parent);  
                    left.setParent(parent);  
                    right.setParent(parent);  
                    parent.getChildren().add(left);  
                    parent.getChildren().add(right);  
                    setEntries(null);  
                    setChildren(null);  
                      
                    //更新根节点  
                    parent.updateInsert(tree);  
                }  
                  
  
            }  
              
        //如果不是叶子节点  
        }else {  
            //如果key小于等于节点最左边的key，沿第一个子节点继续搜索  
            if (key.compareTo(entries.get(0).getKey()) <= 0) {  
                children.get(0).insertOrUpdate(key, obj, tree);  
            //如果key大于节点最右边的key，沿最后一个子节点继续搜索  
            }else if (key.compareTo(entries.get(entries.size()-1).getKey()) >= 0) {  
                children.get(children.size()-1).insertOrUpdate(key, obj, tree);  
            //否则沿比key大的前一个子节点继续搜索  
            }else {  
                for (int i = 0; i < entries.size(); i++) {  
                    if (entries.get(i).getKey().compareTo(key) <= 0 && entries.get(i+1).getKey().compareTo(key) > 0) {  
                        children.get(i).insertOrUpdate(key, obj, tree);  
                        break;  
                    }  
                }     
            }  
        }  
    }  
      
    /** 插入节点后中间节点的更新 */  
	/**
	 * 更新添加的操作
	 * @param tree
	 */
    protected void updateInsert(IBPlusTree tree){  
  
        validate(this, tree);  
          
        //如果子节点数超出阶数，则需要分裂该节点     
        if (children.size() > tree.getOrder()) {  
            //分裂成左右两个节点  
            INode left = new INode(false);  
            INode right = new INode(false);  
            //左右两个节点关键字长度  
            int leftSize = (tree.getOrder() + 1) / 2 + (tree.getOrder() + 1) % 2;  
            int rightSize = (tree.getOrder() + 1) / 2;  
            //复制子节点到分裂出来的新节点，并更新关键字  
            for (int i = 0; i < leftSize; i++){  
                left.getChildren().add(children.get(i));  
                left.getEntries().add(new SimpleEntry(children.get(i).getEntries().get(0).getKey(), null));  
                children.get(i).setParent(left);  
            }  
            for (int i = 0; i < rightSize; i++){  
                right.getChildren().add(children.get(leftSize + i));  
                right.getEntries().add(new SimpleEntry(children.get(leftSize + i).getEntries().get(0).getKey(), null));  
                children.get(leftSize + i).setParent(right);  
            }  
              
            //如果不是根节点  
            if (parent != null) {  
                //调整父子节点关系  
                int index = parent.getChildren().indexOf(this);  
                parent.getChildren().remove(this);  
                left.setParent(parent);  
                right.setParent(parent);  
                parent.getChildren().add(index,left);  
                parent.getChildren().add(index + 1, right);  
                setEntries(null);  
                setChildren(null);  
                  
                //父节点更新关键字  
                parent.updateInsert(tree);  
                setParent(null);  
            //如果是根节点      
            }else {  
                isRoot = false;  
                INode parent = new INode(false, true);  
                tree.setRoot(parent);  
                left.setParent(parent);  
                right.setParent(parent);  
                parent.getChildren().add(left);  
                parent.getChildren().add(right);  
                setEntries(null);  
                setChildren(null);  
                  
                //更新根节点  
                parent.updateInsert(tree);  
            }  
        }  
    }  
      
    /** 调整节点关键字*/  
    /**
     * 检查节点的有效性
     * @param node
     * @param tree
     */
    protected static void validate(INode node, IBPlusTree tree) {  
          
        // 如果关键字个数与子节点个数相同  
        if (node.getEntries().size() == node.getChildren().size()) {  
            for (int i = 0; i < node.getEntries().size(); i++) {  
                Comparable key = node.getChildren().get(i).getEntries().get(0).getKey();  
                if (node.getEntries().get(i).getKey().compareTo(key) != 0) {  
                    node.getEntries().remove(i);  
                    node.getEntries().add(i, new SimpleEntry(key, null));  
                    if(!node.isRoot()){  
                        validate(node.getParent(), tree);  
                    }  
                }  
            }  
            // 如果子节点数不等于关键字个数但仍大于M / 2并且小于M，并且大于2  
        } else if (node.isRoot() && node.getChildren().size() >= 2   
                ||node.getChildren().size() >= tree.getOrder() / 2   
                && node.getChildren().size() <= tree.getOrder()  
                && node.getChildren().size() >= 2) {  
            node.getEntries().clear();  
            for (int i = 0; i < node.getChildren().size(); i++) {  
                Comparable key = node.getChildren().get(i).getEntries().get(0).getKey();  
                node.getEntries().add(new SimpleEntry(key, null));  
                if (!node.isRoot()) {  
                    validate(node.getParent(), tree);  
                }  
            }  
        }  
    }  
      
    /** 删除节点后中间节点的更新*/  
    /**
     * 删除节点之后的更新操作
     * @param tree
     */
    protected void updateRemove(IBPlusTree tree) {  
          
        validate(this, tree);  
  
        // 如果子节点数小于M / 2或者小于2，则需要合并节点  
        if (children.size() < tree.getOrder() / 2 || children.size() < 2) {  
            if (isRoot) {  
                // 如果是根节点并且子节点数大于等于2，OK  
                if (children.size() >= 2) {  
                    return;  
                // 否则与子节点合并  
                } else {  
                    INode root = children.get(0);  
                    tree.setRoot(root);  
                    root.setParent(null);  
                    root.setRoot(true);  
                    setEntries(null);  
                    setChildren(null);  
                }  
            } else {  
                //计算前后节点   
                int currIdx = parent.getChildren().indexOf(this);  
                int prevIdx = currIdx - 1;  
                int nextIdx = currIdx + 1;  
                INode previous = null, next = null;  
                if (prevIdx >= 0) {  
                    previous = parent.getChildren().get(prevIdx);  
                }  
                if (nextIdx < parent.getChildren().size()) {  
                    next = parent.getChildren().get(nextIdx);  
                }  
                  
                // 如果前节点子节点数大于M / 2并且大于2，则从其处借补  
                if (previous != null   
                        && previous.getChildren().size() > tree.getOrder() / 2  
                        && previous.getChildren().size() > 2) {  
                    //前叶子节点末尾节点添加到首位  
                    int idx = previous.getChildren().size() - 1;  
                    INode borrow = previous.getChildren().get(idx);  
                    previous.getChildren().remove(idx);  
                    borrow.setParent(this);  
                    children.add(0, borrow);  
                    validate(previous, tree);  
                    validate(this, tree);  
                    parent.updateRemove(tree);  
                      
                // 如果后节点子节点数大于M / 2并且大于2，则从其处借补  
                } else if (next != null   
                        && next.getChildren().size() > tree.getOrder() / 2  
                        && next.getChildren().size() > 2) {  
                    //后叶子节点首位添加到末尾  
                    INode borrow = next.getChildren().get(0);  
                    next.getChildren().remove(0);  
                    borrow.setParent(this);  
                    children.add(borrow);  
                    validate(next, tree);  
                    validate(this, tree);  
                    parent.updateRemove(tree);  
                      
                // 否则需要合并节点  
                } else {  
                    // 同前面节点合并  
                    if (previous != null   
                            && (previous.getChildren().size() <= tree.getOrder() / 2 || previous.getChildren().size() <= 2)) {  
                          
                        for (int i = previous.getChildren().size() - 1; i >= 0; i--) {  
                            INode child = previous.getChildren().get(i);  
                            children.add(0, child);  
                            child.setParent(this);  
                        }  
                        previous.setChildren(null);  
                        previous.setEntries(null);  
                        previous.setParent(null);  
                        parent.getChildren().remove(previous);  
                        validate(this, tree);  
                        parent.updateRemove(tree);  
                          
                    // 同后面节点合并  
                    } else if (next != null   
                            && (next.getChildren().size() <= tree.getOrder() / 2 || next.getChildren().size() <= 2)) {  
  
                        for (int i = 0; i < next.getChildren().size(); i++) {  
                            INode child = next.getChildren().get(i);  
                            children.add(child);  
                            child.setParent(this);  
                        }  
                        next.setChildren(null);  
                        next.setEntries(null);  
                        next.setParent(null);  
                        parent.getChildren().remove(next);  
                        validate(this, tree);  
                        parent.updateRemove(tree);  
                    }  
                }  
            }  
        }  
    }  
      
    /**
     * 删除一棵树上的key
     * @param key
     * @param tree
     */
    public void remove(Comparable key, IBPlusTree tree){  
        //如果是叶子节点  
        if (isLeaf){  
              
            //如果不包含该关键字，则直接返回  
            if (!contains(key)){  
                return;  
            }  
              
            //如果既是叶子节点又是跟节点，直接删除  
            if (isRoot) {  
                remove(key);  
            }else {  
                //如果关键字数大于M / 2，直接删除  
                if (entries.size() > tree.getOrder() / 2 && entries.size() > 2) {  
                    remove(key);  
                }else {  
                    //如果自身关键字数小于M / 2，并且前节点关键字数大于M / 2，则从其处借补  
                    if (previous != null   
                            && previous.getEntries().size() > tree.getOrder() / 2  
                            && previous.getEntries().size() > 2  
                            && previous.getParent() == parent) {  
                        int size = previous.getEntries().size();  
                        Entry<Comparable, Object> entry = previous.getEntries().get(size - 1);  
                        previous.getEntries().remove(entry);  
                        //添加到首位  
                        entries.add(0, entry);  
                        remove(key);  
                    //如果自身关键字数小于M / 2，并且后节点关键字数大于M / 2，则从其处借补     
                    }else if (next != null   
                            && next.getEntries().size() > tree.getOrder() / 2  
                            && next.getEntries().size() > 2  
                            && next.getParent() == parent) {  
                        Entry<Comparable, Object> entry = next.getEntries().get(0);  
                        next.getEntries().remove(entry);  
                        //添加到末尾  
                        entries.add(entry);  
                        remove(key);  
                    //否则需要合并叶子节点      
                    }else {  
                        //同前面节点合并  
                        if (previous != null   
                                && (previous.getEntries().size() <= tree.getOrder() / 2 || previous.getEntries().size() <= 2)  
                                && previous.getParent() == parent) {  
                            for (int i = previous.getEntries().size() - 1; i >=0; i--) {  
                                //从末尾开始添加到首位  
                                entries.add(0, previous.getEntries().get(i));  
                            }  
                            remove(key);  
                            previous.setParent(null);  
                            previous.setEntries(null);  
                            parent.getChildren().remove(previous);  
                            //更新链表  
                            if (previous.getPrevious() != null) {  
                                INode temp = previous;  
                                temp.getPrevious().setNext(this);  
                                previous = temp.getPrevious();  
                                temp.setPrevious(null);  
                                temp.setNext(null);                           
                            }else {  
                                tree.setHead(this);  
                                previous.setNext(null);  
                                previous = null;  
                            }  
                        //同后面节点合并     
                        }else if(next != null   
                                && (next.getEntries().size() <= tree.getOrder() / 2 || next.getEntries().size() <= 2)  
                                && next.getParent() == parent){  
                            for (int i = 0; i < next.getEntries().size(); i++) {  
                                //从首位开始添加到末尾  
                                entries.add(next.getEntries().get(i));  
                            }  
                            remove(key);  
                            next.setParent(null);  
                            next.setEntries(null);  
                            parent.getChildren().remove(next);  
                            //更新链表  
                            if (next.getNext() != null) {  
                                INode temp = next;  
                                temp.getNext().setPrevious(this);  
                                next = temp.getNext();  
                                temp.setPrevious(null);  
                                temp.setNext(null);  
                            }else {  
                                next.setPrevious(null);  
                                next = null;  
                            }  
                        }  
                    }  
                }  
                parent.updateRemove(tree);  
            }  
        //如果不是叶子节点    
        }else {  
            //如果key小于等于节点最左边的key，沿第一个子节点继续搜索  
            if (key.compareTo(entries.get(0).getKey()) <= 0) {  
                children.get(0).remove(key, tree);  
            //如果key大于节点最右边的key，沿最后一个子节点继续搜索  
            }else if (key.compareTo(entries.get(entries.size()-1).getKey()) >= 0) {  
                children.get(children.size()-1).remove(key, tree);  
            //否则沿比key大的前一个子节点继续搜索  
            }else {  
                for (int i = 0; i < entries.size(); i++) {  
                    if (entries.get(i).getKey().compareTo(key) <= 0 && entries.get(i+1).getKey().compareTo(key) > 0) {  
                        children.get(i).remove(key, tree);  
                        break;  
                    }  
                }     
            }  
        }  
    }  
      
    /** 判断当前节点是否包含该关键字*/  
    /**
     * 
     * @param key
     * @return
     */
    protected boolean contains(Comparable key) {  
        for (Entry<Comparable, Object> entry : entries) {  
            if (entry.getKey().compareTo(key) == 0) {  
                return true;  
            }  
        }  
        return false;  
    }  
      
    /** 插入到当前节点的关键字中*/  
    /**
     * 
     * @param key
     * @param obj
     */
    protected void insertOrUpdate(Comparable key, Object obj){  
        Entry<Comparable, Object> entry = new SimpleEntry<Comparable, Object>(key, obj);  
        //如果关键字列表长度为0，则直接插入  
        if (entries.size() == 0) {  
            entries.add(entry);  
            return;  
        }  
        //否则遍历列表  
        for (int i = 0; i < entries.size(); i++) {  
            //如果该关键字键值已存在，则更新  
            if (entries.get(i).getKey().compareTo(key) == 0) {  
                entries.get(i).setValue(obj);  
                return;  
            //否则插入    
            }else if (entries.get(i).getKey().compareTo(key) > 0){  
                //插入到链首  
                if (i == 0) {  
                    entries.add(0, entry);  
                    return;  
                //插入到中间  
                }else {  
                    entries.add(i, entry);  
                    return;  
                }  
            }  
        }  
        //插入到末尾  
        entries.add(entries.size(), entry);  
    }  
      
    /** 删除节点*/  
    /**
     * 函数的重写：根据key来进行删除
     * @param key
     */
    protected void remove(Comparable key){  
        int index = -1;  
        for (int i = 0; i < entries.size(); i++) {  
            if (entries.get(i).getKey().compareTo(key) == 0) {  
                index = i;  
                break;  
            }  
        }  
        if (index != -1) {  
            entries.remove(index);  
        }  
    }  
    
    
    /**
     *  重写这个toString() 函数
     */
    public String toString(){  
        StringBuilder sb = new StringBuilder();  
        sb.append("isRoot: ");  
        sb.append(isRoot);  
        sb.append(", ");  
        sb.append("isLeaf: ");  
        sb.append(isLeaf);  
        sb.append(", ");  
        sb.append("keys: ");  
        for (Entry entry : entries){  
            sb.append(entry.getKey());  
            sb.append(", ");  
        }  
        sb.append(", ");  
        
        // 可以直接返回一个对象的属性
        return sb.toString();  
          
    }  
	
	
}




]]></description><link>https://blog.gaoredu.com/article/b34b4508-8920-4a14-a76a-e820c1675a0d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b34b4508-8920-4a14-a76a-e820c1675a0d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 27 Mar 2018 00:35:31 GMT</pubDate></item><item><title><![CDATA[【JavaScript进阶】利用HTML5中的Canvas实现小球运动的Animation动画模型实现思路]]></title><description><![CDATA[主要源码如下：
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>实现小球的运动</title>
    <style>
        #canvas{
            background: #ffffff;
            cursor: pointer;
            margin-left: 10px;
            margin-top: 10px;
            -webkit-box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.5);
            -moz-box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.5);
            box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.5);
        }
    </style>
    <script type="text/javascript" src="../requestNextAnimationFrame.js"></script>
</head>
<body>
<div id="controlPanel">
    <button id="animateButton">开始动画</button>
</div>
<canvas id="canvas" width="1024" height="512"></canvas>
<script>
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    // 是否暂停动画
    var paused = true;

    // 来一个小球对象
    var ball = {
        x : 40,
        y : 40,
        // 给xy方向分别增加一个速度来控制小球的移动
        velocityX : -3.2,
        velocityY : -3.5,
        radius : 25
    };


    var animateButton = document.getElementById("animateButton");
    animateButton.addEventListener("click", function () {
        paused = paused ? false : true;
        // 如果暂停
        if (paused){
            animateButton.innerText = "开始动画";
        }else{
            // 已经开始了动画
            animateButton.innerText = "暂停动画";
            window.requestNextAnimationFrame(animate);
        }
    });



    // 绘制背景（来一张图片）----这种方式是异步加载的的， 是不得行的， 浏览器每次刷新都要重新加载
    function drawBackground() {
        var image = new Image();
        image.src = "./sky.png";
        image.onload = function () {
            context.drawImage(image, 0, 0, canvas.width, canvas.height);
        }

    }

    // update
    function update() {
        // 修改小球的坐标
        if (ball.x > canvas.width || ball.x < 0){
            // 超出了范围速度为相反
            ball.velocityX = -ball.velocityX;
        }

        if (ball.y > canvas.height || ball.y < 0){
            ball.velocityY = -ball.velocityY;
        }

        ball.x += ball.velocityX;
        ball.y += ball.velocityY;
    }

    // draw
    function draw() {
        // 绘制精灵小球
        context.beginPath();
        context.arc(ball.x, ball.y, ball.radius, 0, Math.PI*2, false);
        context.fillStyle = "#FF0000";
        context.strokeStyle = "#FFFFFF";
        context.fill();
        context.stroke();
    }


    // 根据上一次更新fps的时间来判断当前是否已经超过了1秒钟（如果超过了1s就更新）
    // aniamtion
    var lastFPSUpdateTime = 0,
        lastFPSUpdate = 0;
    function animate() {
        var fps = 0;
        // 当前时间
        var now = Date.now();

        //drawBackground();
        if (!paused){
            // 清空画布
            //context.clearRect(0, 0, context.canvas.width, context.canvas.height);
            //绘制背景
            drawBackground();
            // 更新精灵坐标
            update();
            // 绘制精灵
            draw();
            //drawBackground();

            // 显示帧速率
            context.font = "40px Consols";
            fps = caculateFPS();

            // 实现每一秒更新一次帧速率
            if(now - lastFPSUpdateTime > 1000){
                lastFPSUpdateTime = now;
                lastFPSUpdate = fps;
            }
            // 这里始终显示的是上一次的结果
            context.fillText(lastFPSUpdate.toFixed()+"fps", 20, 60);



            // 反复调用动画循环
            window.requestNextAnimationFrame(animate);

        }
    }
    
    // 计算帧速率
    var lastTime = 0;
    function caculateFPS() {
        var now = Date.now();
        var deltaTime = now - lastTime;
        // 计算1,秒运行了几个帧
        var fps = 1000 / deltaTime;

        lastTime = now;

        return fps;
    }

</script>
</body>
</html>其中实现代码的：drawBackGround(), update(),draw()是Animation动画模型不可缺少的三部分。
drawBackGround()：实现游戏背景的绘制
update（）：不断修改人物或者精灵的状态坐标；
draw(); 实现精灵的绘制
Animation（）：这个函数是一个主循环，实现了游戏场景的实时绘制更新；
函数原型如下：
function animate(){
canvas.clearRect(0, 0, canvas.width, canvas.height);
drawBackground();
update();
draw()
}
]]></description><link>https://blog.gaoredu.com/article/d71f9627-76f6-41bc-b278-9ed9976a5c49</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d71f9627-76f6-41bc-b278-9ed9976a5c49</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 24 Mar 2018 02:50:22 GMT</pubDate></item><item><title><![CDATA[OPENGL或WEBGL开发三维引擎资料推荐]]></title><description><![CDATA[在这里分享的五本书如下：
1.WebGL Insights
目录说明I. WebGL Implementations
ANGLE: A Desktop Foundation for WebGL
Mozilla's Implementation of WebGL
Continuous Testing of Chrome's WebGL Implementation
II. Moving to WebGL
Getting Serious with JavaScript
Emscripten & WebGL
Data Visualization with WebGL: from Python to JavaScript
Teaching an Introductory Computer Graphics Course with WebGL
III. Mobile
Bug-Free and Fast Mobile WebGL
IV. Engine Design
WebGL Engine Design in Babylon.js
Rendering Optimizations in the Turbulenz Engine
Performance and Rendering Algorithms in Blend4Web
Sketchfab Material Pipeline: From File Variations to Shader Generation
glslify: A module system for GLSL
Budgeting Frame Time
V. Rendering
Deferred Shading in Luma
HDR Image-Based Lighting on the Web
Real-Time Volumetric Lighting for WebGL
Terrain Geometry - LOD Adapting Concentric Rings
VI. Visualization
Data Visualization Techniques with WebGL
hare3d - Rendering Large Models in the Browser
The BrainBrowser Surface Viewer: WebGL-based Neurological Data Visualization
VII. Interaction
Usability of WebGL Applications
Designing Cameras for WebGL Applications
下载链接：http://pan.baidu.com/s/1dF7ERG9
2.OpenGL Insights
359
源码地址：源码地址：https://github.com/OpenGLInsights/OpenGLInsightsCode
下载链接：http://pan.baidu.com/s/1gfCu7K3
3.Game Programming Patterns
目录说明
Introduction
Architecture, Performance, and Games
Design Patterns Revisited
Command
Flyweight
Observer
Prototype
Singleton
State
Sequencing Patterns
Double Buffer
Game Loop
Update Method
Behavioral Patterns
Bytecode
Subclass Sandbox
Type Object
Decoupling Patterns
Component
Event Queue
Service Locator
Optimization Patterns
Data Locality
Dirty Flag
Object Pool
Spatial Partition
阅读链接：http://gameprogrammingpatterns.com/contents.html
4.Design by Contract 原则与实践
5.游戏引擎架构
目录说明推荐序1 iii
推荐序2 v
译序 vii
序言 xvii
前言 xix
致谢 xxi
第一部分 基础 1
第1章 导论 3
1.1 典型游戏团队的结构 4
1.2 游戏是什么 7
1.3 游戏引擎是什么 10
1.4 不同游戏类型中的引擎差异 11
1.5 游戏引擎概观 22
1.6 运行时引擎架构 27
1.7 工具及资产管道 46
第2章 专业工具 53
2.1 版本控制 53
2.2 微软Visual Studio 61
2.3 剖析工具 78
2.4 内存泄漏和损坏检测 79
2.5 其他工具 80
第3章 游戏软件工程基础 83
3.1 重温C++及最佳实践 83
3.2 C/C++的数据、代码及内存 90
3.3 捕捉及处理错误 118
第4章 游戏所需的三维数学 125
4.1 在二维中解决三维问题 125
4.2 点和矢量 125
4.3 矩阵 139
4.4 四元数 156
4.5 比较各种旋转表达方式 164
4.6 其他数学对象 168
4.7 硬件加速的SIMD运算 173
4.8 产生随机数 180
第二部分 低阶引擎系统 183
第5章 游戏支持系统 185
5.1 子系统的启动和终止 185
5.2 内存管理 193
5.3 容器 208
5.4 字符串 225
5.5 引擎配置 234
第6章 资源及文件系统 241
6.1 文件系统 241
6.2 资源管理器 251
第7章 游戏循环及实时模拟 277
7.1 渲染循环 277
7.2 游戏循环 278
7.3 游戏循环的架构风格 280
7.4 抽象时间线 283
7.5 测量及处理时间 285
7.6 多处理器的游戏循环 296
7.7 网络多人游戏循环 304
第8章 人体学接口设备（HID） 309
8.1 各种人体学接口设备 309
8.2 人体学接口设备的接口技术 311
8.3 输入类型 312
8.4 输出类型 316
8.5 游戏引擎的人体学接口设备系统 318
8.6 人体学接口设备使用实践 332
第9章 调试及开发工具 333
9.1 日志及跟踪 333
9.2 调试用的绘图功能 337
9.3 游戏内置菜单 344
9.4 游戏内置主控台 347
9.5 调试用摄像机和游戏暂停 348
9.6 作弊 348
9.7 屏幕截图及录像 349
9.8 游戏内置性能剖析 349
9.9 游戏内置的内存统计和泄漏检测 356
第三部分 图形及动画 359
第10章 渲染引擎 361
10.1 采用深度缓冲的三角形光栅化基础 361
10.2 渲染管道 404
10.3 高级光照及全局光照 426
10.4 视觉效果和覆盖层 438
10.5 延伸阅读 446
第11章 动画系统 447
11.1 角色动画的类型 447
11.2 骨骼 452
11.3 姿势 454
11.4 动画片段 459
11.5 蒙皮及生成矩阵调色板 471
11.6 动画混合 476
11.7 后期处理 493
11.8 压缩技术 496
11.9 动画系统架构 501
11.10 动画管道 502
11.11 动作状态机 515
11.12 动画控制器 535
第12章 碰撞及刚体动力学 537
12.1 你想在游戏中加入物理吗 537
12.2 碰撞/物理中间件 542
12.3 碰撞检测系统 544
12.4 刚体动力学 569
12.5 整合物理引擎至游戏 601
12.6 展望：高级物理功能 616
第四部分 游戏性 617
第13章 游戏性系统简介 619
13.1 剖析游戏世界 619
13.2 实现动态元素：游戏对象 623
13.3 数据驱动游戏引擎 626
13.4 游戏世界编辑器 627
第14章 运行时游戏性基础系统 637
14.1 游戏性基础系统的组件 637
14.2 各种运行时对象模型架构 640
14.3 世界组块的数据格式 657
14.4 游戏世界的加载和串流 663
14.5 对象引用与世界查询 670
14.6 实时更新游戏对象 676
14.7 事件与消息泵 690
14.8 脚本 707
14.9 高层次的游戏流程 726
第五部分 总结 727
第15章 还有更多内容吗 729
15.1 一些未谈及的引擎系统 729
15.2 游戏性系统 730
参考文献 733
中文索引 737
英文索引 755

下载链接：https://page74.ctfile.com/fs/14147674-212295115
6.编程珠玑
目录说明第一部分　基础
　　第1章　开篇
　　1.1　一次友好的对话
　　1.2　准确的问题描述
　　1.3　程序设计
　　1.4　实现概要
　　1.5　原理
　　1.6　习题
　　1.7　深入阅读
　　第2章　啊哈！算法
　　2.1　三个问题
　　2.2　无处不在的二分搜索
　　2.3　基本操作的威力
　　2.4　排序
　　2.5　原理
　　2.6　习题
　　2.7　深入阅读
　　2.8　变位词程序的实现（边栏）
　　第3章　数据决定程序结构
　　3.1　一个调查程序
　　.　3.2　格式信函编程
　　3.3　一组示例
　　3.4　结构化数据
　　3.5　用于特殊数据的强大工具
　　3.6　原理
　　3.7　习题
　　3.8　深入阅读
　　第4章　编写正确的程序
　　4.1　二分搜索的挑战
　　4.2　编写程序
　　4.3　理解程序
　　4.4　原理
　　4.5　程序验证的角色
　　4.6　习题
　　4.7　深入阅读
　　第5章　编程小事
　　5.1　从伪代码到c程序
　　5.2　测试工具
　　5.3　断言的艺术
　　5.4　自动测试
　　5.5　计时
　　5.6　完整的程序
　　5.7　原理
　　5.8　习题
　　5.9　深入阅读
　　5.10　调试（边栏）
　　第二部分　性能
　　第6章　程序性能分析
　　6.1　实例研究
　　6.2　设计层面
　　6.3　原理
　　6.4　习题
　　6.5　深入阅读
　　第7章　粗略估算
　　7.1　基本技巧
　　7.2　性能估计
　　7.3　安全系数
　　7.4　little定律
　　7.5　原理
　　7.6　习题
　　7.7　深入阅读
　　7.8　日常生活中的速算（边栏）
　　第8章　算法设计技术
　　8.1　问题及简单算法
　　8.2　两个平方算法
　　8.3　分治算法
　　8.4　扫描算法
　　8.5　实际运行时间
　　8.6　原理
　　8.7　习题
　　8.8　深入阅读
　　第9章　代码调优
　　9.1　典型的故事
　　9.2　急救方案集锦
　　9.3　大手术——二分搜索
　　9.4　原理
　　9.5　习题
　　9.6　深入阅读
　　第10章　节省空间
　　10.1　关键在于简单
　　10.2　示例问题
　　10.3　数据空间技术
　　10.4　代码空间技术
　　10.5　原理
　　10.6　习题
　　10.7　深入阅读
　　10.8　巨大的节省（边栏）
　　第三部分　应用
　　第11章　排序
　　11.1　插入排序
　　11.2　一种简单的快速排序
　　11.3　更好的几种快速排序
　　11.4　原理
　　11.5　习题
　　11.6　深入阅读
　　第12章　取样问题
　　12.1　问题
　　12.2　一种解决方案
　　12.3　设计空间
　　12.4　原理
　　12.5　习题
　　12.6　深入阅读
　　第13章　搜索
　　13.1　接口
　　13.2　线性结构
　　13.3　二分搜索树
　　13.4　用于整数的结构
　　13.5　原理
　　13.6　习题
　　13.7　深入阅读
　　13.8　一个实际搜索问题（边栏）
　　第14章　堆
　　14.1　数据结构
　　14.2　两个关键函数
　　14.3　优先级队列
　　14.4　一种排序算法
　　14.5　原理
　　14.6　习题
　　14.7　深入阅读
　　第15章　字符串
　　15.1　单词
　　15.2　短语
　　15.3　生成文本
　　15.4　原理
　　15.5　习题
　　15.6　深入阅读
　　第1版跋
　　第2版跋
　　附录a　算法分类
　　附录b　估算测试
　　附录c　时空开销模型
　　附录d　代码调优法则
　　附录e　用于搜索的c++类
　　部分习题提示
　　部分习题答案
下载链接：https://page74.ctfile.com/fs/14147674-203524262

]]></description><link>https://blog.gaoredu.com/article/1d50fc73-25b7-4a17-9ace-138fc769bd07</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1d50fc73-25b7-4a17-9ace-138fc769bd07</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 23 Mar 2018 02:41:51 GMT</pubDate></item><item><title><![CDATA[不使用VGA接口或者HDMI接口实现两台电脑之间的屏幕扩展]]></title><description><![CDATA[1. 步骤一：下载一款 spacedesk软件,https://www.spacedesk.net/download/ , 在主机上安装spacedesk_64_driver_099z11_BETA.msi，在扩展屏机上安装spacedeskWindowsVIEWER_v099z11_BETA.msi。（相当于在你的主屏幕设置为server端， 扩展屏幕一端为client端。）356步骤二：进入扩展屏机，用Google Chrome浏览器 进入 http://spacedesk.ph/html5viewer/，在下方输入框输入你的局域网端服务器的IP地址。连接即可。357
步骤三：在主机打开这个安装好的软件之后再右下角上找到运行的space desk图标，右键-> Display setting, 设置为 “扩展这些显示”。1、2两个显示屏在下图中的位置关系，在操作过程中实物屏也按照这个关系摆放，这样鼠标跨屏移动的方式就和设置得一致了。可以使用鼠标和键盘在你的两个屏幕上面任意跨域使用了。358
 是不是很简单，不使用接线就可以实现两台电脑之间的屏幕跨域使用了。赶快试试吧！其他使用说明书地址：http://spacedesk.ph/download/documentation.pdf

]]></description><link>https://blog.gaoredu.com/article/127d0992-ae21-42ea-83d2-0610dadd6b33</link><guid isPermaLink="true">https://blog.gaoredu.com/article/127d0992-ae21-42ea-83d2-0610dadd6b33</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 22 Mar 2018 03:10:13 GMT</pubDate></item><item><title><![CDATA[2020年最新最好用的科学上网工具(2020年2月更新)【安卓+苹果+电脑版】]]></title><description><![CDATA[免费版————————
pc电脑VPN：链接：https://pan.baidu.com/s/1dttSR0SsHP3PQf0Q5CKXfg 密码：gc3o【测试可用】
92新版的，测试速度可以
安卓科学上网：链接：https://pan.baidu.com/s/10e7DR8pbnAbma7CHHR-zYQ 密码：cdy5
安卓的浏览器测试一下还可以
苹果科学上网：https://itunes.apple.com/cn/app/ ... y/id1280218729?mt=8运行效果图如下：
353
354
355
付费版————————
账号注册地址：http://www.qidian789.com/union/share/?fn=32001【其他方式】
说明一下，下面的这个软件是付费的，可以免费试用，觉得不错可以买个玩玩。
387

这个软件1个账号是支持2台设备同时用的，实算下来基本上在30/月，可以俩设备一起用，1个设备划下来也就15/月， 可以先试用一下，在决定买不买。
下载试用：http://www.qidian789.com/union/share/?fn=32001
直接下载链接：
链接: https://pan.baidu.com/s/1d-ttiTIZNY77Cz0Li8DN-A 密码: 2dy8

补充方法（更新于2020年2月）
由于Chrome浏览器本身在没有翻墙的情况下是不能访问谷歌商店的，因此你也无法去谷歌商店安装一些插件。
但是Firefox浏览器却没有这个限制，直接可以搜索到一大堆VPN 的免费工具，试用后效果也还不错，就分享给大家吧！

插件搜索页详情： https://addons.mozilla.org/zh-CN/firefox/search/?q=vpn&platform=WINNT&appver=72.0.2
1165
]]></description><link>https://blog.gaoredu.com/article/9ccab4a4-396a-44f2-aacc-1de51e6d9d8b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9ccab4a4-396a-44f2-aacc-1de51e6d9d8b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 21 Mar 2018 03:06:11 GMT</pubDate></item><item><title><![CDATA[JavaScript中的call,bind,apply的使用]]></title><description><![CDATA[<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
JavaScript中的call,bind,apply的使用
</body>
<script>
    var name = "小王", age = 18;
    var obj = {
        name: "花花",
        objAge: this.age,
        myFunc: function () {
            // 这个this指向obj对象
            console.log(this.name + "年龄" + this.age);
        }
    };

    // 答应日志信息
    console.log(obj.objAge);
    obj.myFunc();


    var fav = "盲僧";

    function Shows() {
        // 这里的this指向的是window对象
        console.log(this.fav);
    }

    Shows();


    // call(), apply(), bind(); 用来重定义this这个对象
    var name = "小王", age = 17;
    var object = {
        name: "校长",
        objAge: this.age,
        myFunc: function () {
            console.log(this.name + "年龄" + this.age);
        }
    };
    var db = {
        name: "秀秀",
        age: 99
    };

    // 开始测试
    obj.myFunc.call(db);
    obj.myFunc.apply(db);
    obj.myFunc.bind(db)();

    // 测试2
    obj.myFunc.call(db, "成都", "上海");
    obj.myFunc.apply(db, );
    obj.myFunc.bind(db, '成都', '上海')();
    obj.myFunc.bind(db, )();


    // apply 实例
    // 定义一个人类
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }

    // 定义一个学生类
    // apply 的使用
    function Student(name, age, grade) {
        // arguments:是一个数组,也就是;
        Person.apply(this, arguments);
        this.grade = grade;
    }

    // call 的使用
    function Pupile(name, age, grade) {
        Person.call(this, name, age);
    }

    // 创建一个学生类
    var student = new Student("zhangsan", 25, "一年级");
    alert("name:" + student.name + "\n" + "age:" + student.age + "\n" + "grade" + student.grade + "\n");

</script>
</html>

]]></description><link>https://blog.gaoredu.com/article/f20bac67-bed4-4374-a8b5-87ade2660671</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f20bac67-bed4-4374-a8b5-87ade2660671</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 19 Mar 2018 16:35:38 GMT</pubDate></item><item><title><![CDATA[计算机程序设计艺术三板合集PDF高清电子版分享]]></title><description><![CDATA[352


计算机程序设计艺术【第一版】下载链接: https://pan.baidu.com/s/1i14pdPIsGAPhKmi6txCbdA 密码: zrz3
计算机程序设计艺术【第二版】下载链接: https://pan.baidu.com/s/1LtgXRyHy1UtXaGS6tD_lxg 密码: adh3
计算机程序设计艺术【第三版】下载链接: https://pan.baidu.com/s/1hzDJa59fLxsdh4Q_KLROqw 密码: ztf8
]]></description><link>https://blog.gaoredu.com/article/d50be650-f36a-485c-b306-8ec5f9fc1bc7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d50be650-f36a-485c-b306-8ec5f9fc1bc7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 18 Mar 2018 02:47:40 GMT</pubDate></item><item><title><![CDATA[算法导论(原书第3版)中文完整版高清扫描版]]></title><description><![CDATA[351


前言


第一部分　基础知识


第1章　算法在计算中的作用
第2章　算法基础
第3章　函数的增长
第4章　分治策略
第5章　概率分析和随机算法


第二部分　排序和顺序统计量


第6章　堆排序
第7章　快速排序
第8章　线性时间排序
第9章　中位数和顺序统计量




第三部分　数据结构


第10章　基本数据结构
第11章　散列表
第12章　二叉搜索树
第13章　红黑树
第14章　数据结构的扩张


第四部分　高级设计和分析技术


第15章　动态规划
第16章　贪心算法
第17章　摊还分析




第五部分　高级数据结构


第18章　B树
第19章　斐波那契堆
第20章　van Emde Boas树
第21章　用于不相交集合的数据结构




第六部分　图算法


第22章　基本的图算法
第23章　最小生成树
第24章　单源最短路径
第25章　所有结点对的最短路径问题
第26章　最大流




第七部分　算法问题选编


第27章　多线程算法
第28章　矩阵运算
第29章　线性规划
第30章　多项式与快速傅里叶变换
第31章　数论算法
第32章　字符串匹配
第33章　计算几何学
第34章　NP完全性
第35章　近似算法




第八部分　附录：数学基础知识


附录A　求和
附录B　集合等离散数学内容
附录C　计数与概率
附录D　矩阵
参考文献
索引



下载链接：链接: https://pan.baidu.com/s/1_UgUDBu3sZleQgY_cqBMTw 密码: untk






再分享几个算法的视频教程：
【算法面试】2020最新玩转算法面试 C++版本 互联网公司真题【完整版】
https://www.52tech.tech/forum.php?mod=viewthread&tid=953&fromuid=1



【WEB前端】玩转前端javascript数据结构和算法2019全网首发最新版
https://www.52tech.tech/forum.php?mod=viewthread&tid=951&fromuid=1

新东方2019考研基础班之计算机基础课程数据结构与算法精讲班视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=669&fromuid=1

传智播客数据结构和算法精讲班
https://www.52tech.tech/forum.php?mod=viewthread&tid=393&fromuid=1
(出处: 我爱科技论坛)





]]></description><link>https://blog.gaoredu.com/article/7de4bc97-acb8-4f3f-9c8a-96c290cfa21d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7de4bc97-acb8-4f3f-9c8a-96c290cfa21d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 18 Mar 2018 02:43:58 GMT</pubDate></item><item><title><![CDATA[【VIP视频抢先看】再见前任 (2017)]]></title><description><![CDATA[片名: 田羽生 / 游非 / 大宽 / 大广
主演: 韩庚 / 郑恺 / 于文文 / 曾梦雪 / 罗米
片长: 120分钟
又名: 前任3 / 前任攻略3 / 前任3：颜值大作战 / The Ex-File: The Return of the Exes


350
349

网友评价：
过去的我可能只是单纯的交朋友，而且那时的我，是真的不懂什么是爱，就已经把所谓的好感夸张成喜欢，又把喜欢夸张成爱。但是，最终，我明白了，爱是责任，是无论付出多少都不计回报仅仅希望可以永久的陪伴在一起。所以，有多少感情可以称得上是爱，又有多少爱可以恒久不变。于是，等到最后，一切都归于平静，恢复到我原来的状态。看过前任3后，突然发现所有分过手的人，就像天上的两颗星星，彼此还在闪耀，只不过再也不可能回归到同一条轨道上罢了。

爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr7pgf14.html#vfrm=19-9-0-1。
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）

]]></description><link>https://blog.gaoredu.com/article/b1102519-1bd6-4915-94a8-6b29c8a073ac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b1102519-1bd6-4915-94a8-6b29c8a073ac</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 15 Mar 2018 21:16:25 GMT</pubDate></item><item><title><![CDATA[【C#进阶】C#中在对一个自定义的控件实现继承的时候出错的解决方法]]></title><description><![CDATA[解决步骤如下：1: 关闭VS所有窗口，后重启．即可返回正常．2: 第一种方案不成功,关闭VS所有窗口,点击解决方案->清理解决方案->点击解决方案->重新生成解决方案  即可3: 第二种方案不成功,关闭VS所有窗口,检查是否引用第三方控件,如Developer Express4 : 第四种方案不成功,卸载第三方控件,重新安装第三方控件,在导入控件,启动VS，重新编译
]]></description><link>https://blog.gaoredu.com/article/f36e1bdb-12ba-4ea3-bc42-ec08b07c91f5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f36e1bdb-12ba-4ea3-bc42-ec08b07c91f5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 15 Mar 2018 05:30:50 GMT</pubDate></item><item><title><![CDATA[【JavaScript进阶】JavaScript+Html5原型开发坦克大战游戏源码分享]]></title><description><![CDATA[tank.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body onkeydown="getCommand();">
<h1>hmtl5-经典的坦克大战</h1>
<!--坦克大战的战场-->
<canvas id="tankMap" width="400px" height="300px" style="background-color:black"></canvas>
<span id="aa">数据</span>
<!--把tankGames.js引入到本页面-->
<script type="text/javascript" src="tankGame7.js"></script>
<script type="text/javascript">

	//得到画布
	var canvas1=document.getElementById("tankMap");
	//得到绘图上下文(你可以理解是画笔)
	var cxt=canvas1.getContext("2d");
	

	//我的坦克 hero
	//方向 
	var hero=new Hero(140,140,0,heroColor);
	//定义子弹数组
	var heroBullets=new Array();

	//定义敌人的坦克(敌人的坦克有多少? 思路 : 是单个单个的定义，还是放在数组中?)
	var enemyTanks=new Array();

	//定义敌人子弹的数组

	var enemyBullets=new Array();


	//定义一个炸弹数组(可以存放很多炸弹,)

	var bombs=new Array();
	//先死后活 ，定3个，后面我们把敌人坦克的数量，作出变量
	//0->上, 1->右, 2->下 3->左
	for(var i=0;i<3;i++){
		
		//创建一个坦克
		var enemyTank=new EnemyTank((i+1)*50,0,2,enmeyColor);
		//把这个坦克放入数组
		enemyTanks=enemyTank;

		//启动这个敌人的坦克
		window.setInterval("enemyTanks.run()",50);

		//当创建敌人坦克时就分配子弹
		var eb=new Bullet(enemyTanks.x+9,enemyTanks.y+30,2,1.2,"enemy",enemyTanks);

		enemyBullets=eb;
		//启动该子弹
		var ettimer=window.setInterval("enemyBullets.run()",50);
		enemyBullets.timer=ettimer;
		
	}
		//先调用一次
		flashTankMap();

	//专门写一个函数，用于定时刷新我们的作战区，把要在作战区出现的元素(自己坦克，敌人坦克，子弹，炸弹，
	//障碍物...)->游戏思想
	function flashTankMap(){
		
		//把画布清理
		cxt.clearRect(0,0,400,300); 

		//我的坦克
		drawTank(hero);

		//画出自己的子弹
		//子弹飞效果是怎么出现的?
		drawHeroBullet();

		//敌人的坦克
		//判断一下敌人坦克是否击中
		isHitEnemyTank();
		drawEnemyBomb();
		drawEnemyBullet();
		
		//画出所有敌人坦克
		for(var i=0;i<3;i++){
			drawTank(enemyTanks);
		}
			
	}

	


	//这是一个接受用户按键函数
	function getCommand(){
		
		//我怎么知道，玩家按下的是什么键
		//说明当按下键后 事件--->event对象----->事件处理函数()
		var code=event.keyCode;//对应字母的ascii码->我们看码表
		
		switch(code){
			case 87://上
				hero.moveUp();
				
			   break;
			case 68:
			
			  hero.moveRight();
			   break;
			 case 83:
				
				hero.moveDown();
				break;
			case 65:
				hero.moveLeft();
				break;
			case 74:
				hero.shotEnemy();
				break;
		}
		
		//触发这个函数 flashTankMap();
		flashTankMap();

		//重新绘制所有的敌人的坦克.你可以在这里写代码(思想,我们干脆些一个函数，专门用于定时刷新我们的画布)
	}
	
	//每隔100毫秒去刷新一次作战区
	window.setInterval("flashTankMap()",100);

</script>
</body>
</html>tank.js
//为了编程方便，我们定义两个颜色数组
var heroColor=new Array("#BA9658","#FEF26E");
var enmeyColor=new Array("#00A2B5","#00FEFE");
//其它的敌人坦克，这里的扩展性，还是不错的.
//定义一个炸弹类
function Bomb(x,y){
	this.x=x;
	this.y=y;
	this.isLive=true; //炸弹是否活的，默认true;
	//炸弹有一个生命值
	this.blood=9;
	//减生命值
	this.bloodDown=function(){
		if(this.blood>0){
			this.blood--;
		}else{
			//说明炸弹死亡
			this.isLive=false;
		}
	}
}


//子弹类
//type表示：这颗子弹是敌人的，还是自己的
//tank表示对象，说明这颗子弹，属于哪个坦克.
function Bullet(x,y,direct,speed,type,tank){
	this.x=x;
	this.y=y;
	this.direct=direct;
	this.speed=speed;
	this.timer=null;
	this.isLive=true;
	this.type=type;
	this.tank=tank;
	this.run=function run(){
		
			//在该表这个子弹的坐标时，我们先判断子弹是否已经到边界
			//子弹不前进，有两个逻辑，1.碰到边界，2. 碰到敌人坦克.
			if(this.x<=0||this.x>=400||this.y<=0||this.y>=300||this.isLive==false){
				//子弹要停止.
				window.clearInterval(this.timer);
				//子弹死亡
				this.isLive=false;

				if(this.type=="enemy"){
						this.tank.bulletIsLive=false;
				}
			}else{
				//这个可以去修改坐标
				switch(this.direct){
					case 0:
							this.y-=this.speed;
							break;
					case 1:
							this.x+=this.speed;
							break;
					case 2:
							this.y+=this.speed;
							break;
					case 3:
							this.x-=this.speed;
							break;
				}
			}

			document.getElementById("aa").innerText="子弹x="+this.x+" 子弹y="+this.y;
	}
}

//这是一个Tank类
function Tank(x,y,direct,color){
	
		this.x=x;
		this.y=y;
		this.speed=1;
		this.isLive=true;
		this.direct=direct;
		//一个坦克，需要两个颜色.
		this.color=color;
		//上移
		this.moveUp=function(){
			this.y-=this.speed;
			this.direct=0;
		}
		//向右
		this.moveRight=function(){
			this.x+=this.speed;
			this.direct=1;
		}

		//下移
		this.moveDown=function(){
			this.y+=this.speed;
			this.direct=2;
		}
		//左
		this.moveLeft=function(){
			this.x-=this.speed;
			this.direct=3;
		}
}

//定义一个Hero类
	//x 表示坦克的 横坐标, y 表示纵坐标, direct 方向	
	function Hero(x,y,direct,color){
	
		//下面两句话的作用是通过对象冒充，达到继承的效果
		this.tank=Tank;
		this.tank(x,y,direct,color);

		//增加一个函数，射击敌人坦克.
		this.shotEnemy=function(){
			
			//创建子弹, 子弹的位置应该和hero有关系，并且和hero的方向有关.!!!
			//this.x 就是当前hero的横坐标,这里我们简单的处理(细化)

			switch(this.direct){
				case 0:
				heroBullet=new Bullet(this.x+9,this.y,this.direct,1,"hero",this);
				break;
				case 1:
				heroBullet=new Bullet(this.x+30,this.y+9,this.direct,1,"hero",this);
				break;
				case 2:
				heroBullet=new Bullet(this.x+9,this.y+30,this.direct,1,"hero",this);
				break;
				case 3: //右
				heroBullet=new Bullet(this.x,this.y+9,this.direct,1,"hero",this);
				break;
			}

			//把这个子弹对象放入到数组中	 -> push函数
			heroBullets.push(heroBullet);
			//调用我们的子弹run, 50 是老师多次测试得到的一个结论., 这里技术难度比较大.
			//就算你工作过1-2年，你也未必想到, 下面启动方式，每个子弹的定时器是独立,如果按原来的方法
			//则所有子弹共享一个定时器.
			var timer=window.setInterval("heroBullets.run()",50);
			//把这个timer赋给这个子弹(js对象是引用传递!)
			heroBullets.timer=timer;

		}



	}

	//定义一个EnemyTank类
	function EnemyTank (x,y,direct,color){
		
		//也通过对象冒充，来继承Tank
		this.tank=Tank;
		this.count=0;
		this.bulletIsLive=true;
		
		this.tank(x,y,direct,color);

		this.run=function run(){
			
			//判断敌人的坦克当前方向
			switch(this.direct){
				
				case 0:
					if(this.y>0){
						this.y-=this.speed;
					}	
					break;
				case 1:
					if(this.x+30<400){
						this.x+=this.speed;
					}
					break;
				case 2:
					if(this.y+30<300){
						this.y+=this.speed;
					}
					break;
				case 3:
					if(this.x>0){
						this.x-=this.speed;
					}
					break;
			}
			//改变方向,走30次，再改变方向
			if(this.count>30){
				this.direct=Math.round(Math.random()*3);//随机生成 0,1,2,3
				this.count=0;
			}
			this.count++;

			//判断子弹是否已经死亡，如果死亡，则增加新的一颗子弹
			if(this.bulletIsLive==false){
				//增子弹,这是需要考虑当前这个敌人坦克的方向，在增加子弹
					switch(this.direct){
						case 0:
						etBullet=new Bullet(this.x+9,this.y,this.direct,1,"enemy",this);
						break;
						case 1:
						etBullet=new Bullet(this.x+30,this.y+9,this.direct,1,"enemy",this);
						break;
						case 2:
						etBullet=new Bullet(this.x+9,this.y+30,this.direct,1,"enemy",this);
						break;
						case 3: //右
						etBullet=new Bullet(this.x,this.y+9,this.direct,1,"enemy",this);
						break;
				}

				//把子弹添加到敌人子弹数组中
				enemyBullets.push(etBullet);
				//启动新子弹run
				var mytimer=window.setInterval("enemyBullets.run()",50);
				enemyBullets.timer=mytimer;

				this.bulletIsLive=true;
			}

		}
	}

		//画出自己的子弹,多说一句，你也可以把该函数封装到Hero类中
		function drawHeroBullet(){

				//现在要画出所有子弹
				for( var i=0;i<heroBullets.length;i++){
					var heroBullet=heroBullets;
					//这里，我们加入了一句话，但是要知道这里加，是需要对整个程序有把握
					if(heroBullet!=null&&heroBullet.isLive){
						cxt.fillStyle="#FEF26E";
						cxt.fillRect(heroBullet.x,heroBullet.y,2,2);
					}
				}

		}

		//这里我们还需要添加一个函数，用于画出敌人的子弹,当然，画出敌人的子弹和自己的子弹是可以合并的.
		function drawEnemyBullet(){
			
			//现在要画出所有子弹
				for( var i=0;i<enemyBullets.length;i++){
					var etBullet=enemyBullets;
					//这里，我们加入了一句话，但是要知道这里加，是需要对整个程序有把握
					if(etBullet.isLive){
						cxt.fillStyle="#00FEFE";
						cxt.fillRect(etBullet.x,etBullet.y,2,2);
					}
				}
		}
	
	//绘制坦克(敌人坦克和自己的坦克)
	function drawTank(tank){
	
		//说明所有的坦克都要isLive这个属性
		if(tank.isLive){
		

			//考虑方向
			switch(tank.direct){

			case 0: //上
			case 2:// 下
				//画出自己的坦克，使用前面的绘图技术
				//设置颜色
				cxt.fillStyle=tank.color;
				//韩老师使用 先死--->后活 (初学者最好用这个方法)
				//先画出左面的矩形
				cxt.fillRect(tank.x,tank.y,5,30);
				//画出右边的矩形(这时请大家思路->一定要一个参照点)
				cxt.fillRect(tank.x+15,tank.y,5,30);
				//画出中间矩形
				cxt.fillRect(tank.x+6,tank.y+5,8,20);
				//画出坦克的盖子
				cxt.fillStyle=tank.color;
				cxt.arc(tank.x+10,tank.y+15,4,0,360,true);
				cxt.fill();
				//画出炮筒(直线)
				cxt.strokeStyle=tank.color;
				//设置线条的宽度
				cxt.lineWidth=1.5;
				cxt.beginPath();
				cxt.moveTo(tank.x+10,tank.y+15);
				
				if(tank.direct==0){
				cxt.lineTo(tank.x+10,tank.y);
				}else if(tank.direct==2){
				cxt.lineTo(tank.x+10,tank.y+30);
				}

				cxt.closePath();
				cxt.stroke();
				break;
			case 1: //右和左
			case 3:
				//画出自己的坦克，使用前面的绘图技术
				//设置颜色
				cxt.fillStyle=tank.color;
				//韩老师使用 先死--->后活 (初学者最好用这个方法)
				//先画出左面的矩形
				cxt.fillRect(tank.x,tank.y,30,5);
				//画出右边的矩形(这时请大家思路->一定要一个参照点)
				cxt.fillRect(tank.x,tank.y+15,30,5);
				//画出中间矩形
				cxt.fillRect(tank.x+5,tank.y+6,20,8);
				//画出坦克的盖子
				cxt.fillStyle=tank.color;
				cxt.arc(tank.x+15,tank.y+10,4,0,360,true);
				cxt.fill();
				//画出炮筒(直线)
				cxt.strokeStyle=tank.color;
				//设置线条的宽度
				cxt.lineWidth=1.5;
				cxt.beginPath();
				cxt.moveTo(tank.x+15,tank.y+10);
				//向右
				if(tank.direct==1){
				cxt.lineTo(tank.x+30,tank.y+10);
				}else if(tank.direct==3){ //向左
				cxt.lineTo(tank.x,tank.y+10);
				}

				cxt.closePath();
				cxt.stroke();
				break;

			}
		}
	}

//编写一个函数，专门用于判断我的子弹，是否击中了某个敌人坦克
function isHitEnemyTank(){
	
		//取出每颗子弹
		for(var i=0;i<heroBullets.length;i++){
			
				//取出一颗子弹
				var heroBullet=heroBullets;
				if(heroBullet.isLive){ //子弹是活的，才去判断
				//让这颗子弹去和遍历每个敌人坦克判断
				for(var j=0;j<enemyTanks.length;j++){
					
							var enemyTank=enemyTanks;
						
							if(enemyTank.isLive){
							//子弹击中敌人坦克的条件是什么? 很多思路 , 韩老师的思想是
							//(看看这颗子弹，是否进入坦克所在矩形)
							//根据当时敌人坦克的方向来决定
							switch(enemyTank.direct){
								case 0: //敌人坦克向上
								case 2://敌人坦克向下
									if(heroBullet.x>=enemyTank.x&&heroBullet.x<=enemyTank.x+20
										&&heroBullet.y>=enemyTank.y&&heroBullet.y<=enemyTank.y+30){
										//把坦克isLive 设为false ,表示死亡
										enemyTank.isLive=false;
										//该子弹也死亡
										heroBullet.isLive=false;
										//创建一颗炸弹
										var bomb=new Bomb(enemyTank.x,enemyTank.y);
										//然后把该炸弹放入到bombs数组中
										bombs.push(bomb);
									}
								break;
								case 1: //敌人坦克向右
								case 3://敌人坦克向左
									if(heroBullet.x>=enemyTank.x&&heroBullet.x<=enemyTank.x+30
										&&heroBullet.y>=enemyTank.y&&heroBullet.y<=enemyTank.y+20){
										//把坦克isLive 设为false ,表示死亡
										enemyTank.isLive=false;
										heroBullet.isLive=false;

										//创建一颗炸弹
										var bomb=new Bomb(enemyTank.x,enemyTank.y);
										//然后把该炸弹放入到bombs数组中
										bombs.push(bomb);
									}
								break;

							}

						}


				}//for
			}
		}
}

//画出敌人炸弹 
function drawEnemyBomb(){
	
	for(var i=0;i<bombs.length;i++){
	
		//取出一颗炸弹
		var bomb=bombs;
		if(bomb.isLive){


			
			//更据当前这个炸弹的生命值，来画出不同的炸弹图片
			if(bomb.blood>6){  //显示最大炸弹图
				var img1=new Image();
				img1.src="bomb_1.gif";
				var x=bomb.x;
				var y=bomb.y;
				img1.onload=function(){
					cxt.drawImage(img1,x,y,30,30);
				}
			}else if(bomb.blood>3){
				var img2=new Image();
				img2.src="bomb_2.gif";
				var x=bomb.x;
				var y=bomb.y;
				img2.onload=function(){
					cxt.drawImage(img2,x,y,30,30);
				}
			}else {
				var img3=new Image();
				img3.src="bomb_3.gif";
				var x=bomb.x;
				var y=bomb.y;
				img3.onload=function(){
					cxt.drawImage(img3,x,y,30,30);
				}
			}

			//减血
			bomb.bloodDown();
			if(bomb.blood<=0){
				//怎么办?把这个炸弹从数组中去掉
				bombs.splice(i,1);

			}
		}
	}
}



]]></description><link>https://blog.gaoredu.com/article/3b252233-bf60-455b-af6d-376ba021a30d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3b252233-bf60-455b-af6d-376ba021a30d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 14 Mar 2018 02:41:32 GMT</pubDate></item><item><title><![CDATA[【synergy软件】局域网中多台态电脑共享一个鼠标和键盘的新方法Get一下]]></title><description><![CDATA[1.软件功能简介
synergy是个开源的软件，当在所有机器上都安装这个软件后，并进行相应的配置，就可以实现其他主机共享使用这套鼠标键盘。
2.黑科技工具软件下载地址
synergy 官网：http://synergy-project.org/
百度云盘：链接: https://pan.baidu.com/s/1nwSB9MT 密码: ijj3
3.使用方法
343
344
345
346
347
348
4.常见问题解答
4.1 WARNING: unrecognised client name "******-PC", check server config
答：需要在服务器端把两台或者多台电脑的名字都要添加进去，否则会失败。
4.2 如何实现两台电脑之间的键盘鼠标之间的切换？
进入服务器配置-->热键设置-->添加热键-->（此时按下你需要进行切换的快捷键）-->这里需要添加两个事件，按下按键之后切换屏幕（一个快捷键给主机服务器， 一个快捷键给客户端）-->这样测试下来基本上就配置完成了。


这个黑科技现在有没有Get √到呢？

]]></description><link>https://blog.gaoredu.com/article/b2b3c5ce-35b2-442f-94ca-b8532690322b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b2b3c5ce-35b2-442f-94ca-b8532690322b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 12 Mar 2018 02:52:04 GMT</pubDate></item><item><title><![CDATA[Java和HTML签单开发工具、技术文档、jar包资料手机完整版资料共享]]></title><description><![CDATA[Java：
java基础文档：https://pan.baidu.com/s/1o8A5kKy 
JavaWeb技术文档：https://pan.baidu.com/s/1c1KcMNu 
javaee技术文档：https://pan.baidu.com/s/1dFwAuNR   
教学课件资料共享：https://pan.baidu.com/s/1c2tUAHU   
就业相关：https://pan.baidu.com/s/1slv5Yrz   
Java开发工具：http://www.atguigu.com/opensource.shtml 
Jar: https://pan.baidu.com/s/1jIKMHcM 
Android：
Android内部讲课文档：https://pan.baidu.com/s/1bpnkZCV   
Android技术文档：https://pan.baidu.com/s/1o78TbUM 
Android使用工具：https://pan.baidu.com/s/1skZRoLZ   
Android框架包清单：https://pan.baidu.com/s/1skLEly9 
前端H5：  
开发工具资料共享：https://pan.baidu.com/s/1jH8vplG   
技术文档：https://pan.baidu.com/s/1mhZv3q4   
框架包： https://pan.baidu.com/s/1nvBThmp   
Jar：https://pan.baidu.

]]></description><link>https://blog.gaoredu.com/article/17af5095-c8ce-4220-a5eb-228a35d31a61</link><guid isPermaLink="true">https://blog.gaoredu.com/article/17af5095-c8ce-4220-a5eb-228a35d31a61</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 10 Mar 2018 01:07:25 GMT</pubDate></item><item><title><![CDATA[2018尚硅谷最新40季公开课教程资料共享-打包地址下载]]></title><description><![CDATA[第1季：横扫Java基础核心技术 o  https://pan.baidu.com/s/1cGZpyY 
第2季：Java基础加强   https://pan.baidu.com/s/1qXNcgpu 
第3季：数据库关键技术资料共享   https://pan.baidu.com/s/1dEHsT0H 
特别季：光棍节，4晚搞定面向对象   https://pan.baidu.com/s/1skTfGyp 
第4季：Java就业面试攻略（含：简历模板、面试技巧)   https://pan.baidu.com/s/1hsQWvVQ 
第5季：JavaWeb书城实战   https://pan.baidu.com/s/1dFOuFbb 
第6季：Android从入门到实战   https://pan.baidu.com/s/1pL7LnUN 
第7季：锋利的JavaScript   https://pan.baidu.com/s/1bKgJxW 
第8季：从容面对Java基础笔试&面试   https://pan.baidu.com/s/1slVxKjN 
附加课：最流行的JS框架_jQuery   https://pan.baidu.com/s/1dEX7Ozv 
第9季：Android实战_来电拦截专家   https://pan.baidu.com/s/1cAnHam
第10季：Java基础实战_战队组建管理系统   https://pan.baidu.com/s/1o7TlL2a
第11季：深入解析Ajax网页无刷新技术与项目实战   https://pan.baidu.com/s/1hs7Z3cK 
第12季：30分钟打造Android万能播放器  https://pan.baidu.com/s/1gfq0FS3
第13季：Android高薪就业攻略   https://pan.baidu.com/s/1jIEbd4a 
第14季：客户信息管理系统   https://pan.baidu.com/s/1c2niZJE 
辅导课：Android全套视频-学习指导&答疑   https://pan.baidu.com/s/1b9X0Sm 
第15季：Android Studio入门及使用技巧   https://pan.baidu.com/s/1nv63xHZ
第16季：玩转Android与H5互调   https://pan.baidu.com/s/1dFo2PNF
第17季：HTML5实战_天猫商城品牌墙   https://pan.baidu.com/s/1hr4v8Pm 
第18季：全栈开发_node服务端开发资料共享   https://pan.baidu.com/s/1hrOEuuK 
第19季：实战：360度全景图片   https://pan.baidu.com/s/1hsKkPJQ 
第20季：HTML5特效实战   https://pan.baidu.com/s/1kVBrpZp 
第21季：3小时玩转微信小程序入门   https://pan.baidu.com/s/1sngDZeX
第22季：CSS3特效实战   https://pan.baidu.com/s/1dESOjFr
第23季：轻松搞定毕业设计:论文写作+项目实战   https://pan.baidu.com/s/1eS2DVjW 
第24季：Java8新特性全剖析   https://pan.baidu.com/s/1boL0IMr
第25季：BAT前端面试揭秘   https://pan.baidu.com/s/1i4WdO4t 
第26季：1小时带你走进大数据世界   https://pan.baidu.com/s/1c4NYTC 
第27季：大数据项目实战--仿天猫用户行为分析   https://pan.baidu.com/s/1dEKGHQL 
第28季：如何做互联网时代的“出彩”Java工程师   https://pan.baidu.com/s/1nvFqWHF 
第29季：下一个风口--Python与人工智能   https://pan.baidu.com/s/1nuS7Qwp
第30季：1小时解密程序员的黑魔法Python   https://pan.baidu.com/s/1kV9Voyj 
第31季：1小时参悟Java8面向对象   https://pan.baidu.com/s/1hsAHvbI
第32季：更好的Java IDE之争资料共享：IDEA挑战Eclipse   https://pan.baidu.com/s/1c2LEPJ6 
第33季：Python学员作品之《雷电战机》   https://pan.baidu.com/s/1o7Ha6eA 
第34季：HTML5实战之Canvas刮刮卡   https://pan.baidu.com/s/1ge7Lw9l 
第35季：强大的R语言   https://pan.baidu.com/s/1gfENmeR 
第36季：毕业的三岔口https://pan.baidu.com/s/1o8qmSlk 
第37季：模块化打包神器：pack   http://pan.baidu.com/s/1nvxHvnz 
第38季：快速入门JVM   http://pan.baidu.com/s/1pKHalAz 
第39季：抛开噱头，看大数据与人工智能   https://pan.baidu.com/s/1c20dj1m 
第40季：Java8&9就业面试攻略   https://pan.baidu.com/s/1nv45pZr 



再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1


]]></description><link>https://blog.gaoredu.com/article/d6d98d1d-a3c8-46d6-a742-acff3bcea273</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d6d98d1d-a3c8-46d6-a742-acff3bcea273</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 10 Mar 2018 01:05:48 GMT</pubDate></item><item><title><![CDATA[2018尚硅谷全套HTML5最新视频教程资料共享]]></title><description><![CDATA[一、HTML & CSS 核心教程：（103集实战教学，从入门到精通）    http://pan.baidu.com/s/1pLwKZN1 
二、尚硅谷JavaScript视频（140集实战教学，从入门到精通）https://pan.baidu.com/s/1gfh9q8r 
三、尚硅谷JavaScript高级视频https://pan.baidu.com/s/1cLhs0u 
四、尚硅谷jQuery视频https://pan.baidu.com/s/1i5Gjxlj 
五、最新尚硅谷NodeJS 视频链接: https://pan.baidu.com/s/1cnr0Cm密码: sqku 
六、最新尚硅谷MongoDB 视频 链接: https://pan.baidu.com/s/1mirGFyw密码: nwe1 
七、最新尚硅谷Zepto 视频链接: https://pan.baidu.com/s/1o7PSymu密码: e86p 
八、最新尚硅谷AngularJS 视频链接: https://pan.baidu.com/s/1o85jOVK密码: 7vi2 
九、最新尚硅谷ES5_6_7 视频链接: https://pan.baidu.com/s/1i4Z5VNZ密码: 3fuy 
十、最新尚硅谷JS模块化 视频链接: https://pan.baidu.com/s/1skO0tJZ密码: tekn 
十一、最新尚硅谷自动化构建工具 视频
（1）webpack  链接: https://pan.baidu.com/s/1kUG5cLT密码: ru45
（2）Gulp     链接: https://pan.baidu.com/s/1hsMqZkS密码: nprj 
（3）Grunt    链接: https://pan.baidu.com/s/1bGhxL0密码: m7kq
十二、最新尚硅谷React视频链接: https://pan.baidu.com/s/1o8FZotO密码: ax96 

]]></description><link>https://blog.gaoredu.com/article/b4567437-ec91-4e12-b68e-92b03937241f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b4567437-ec91-4e12-b68e-92b03937241f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 10 Mar 2018 01:03:46 GMT</pubDate></item><item><title><![CDATA[2018尚硅谷全套Android教程资料共享--打包下载地址]]></title><description><![CDATA[Android核心技术
一、Android核心基础_15天精讲精练 https://pan.baidu.com/s/1b86u2E 
二、Android自定义控件视频https://pan.baidu.com/s/1hrOVZd6 
三、Android—JNI视频http://pan.baidu.com/s/1kVqBCmr 
四、Android与H5互调https://pan.baidu.com/s/1miHaDbM 
五、Android常用第三方框架源码分析http://pan.baidu.com/s/1o789Vjc 
六、尚硅谷Android视频《多渠道打包》http://pan.baidu.com/s/1dEVpQyX 
Android项目实战
一、Android项目实战—手机影音http://pan.baidu.com/s/1i5wLMbN                                                                          
二、最新Android项目—硅谷新闻https://pan.baidu.com/s/1nvASXvF 
三、最新Android项目实战—硅谷社交https://pan.baidu.com/s/1dFyXZxR 
四、最新Android项目—硅谷商城http://pan.baidu.com/s/1o8MyptC 
五、最新Android项目—硅谷P2P金融https://pan.baidu.com/s/1nv7f02d 
Android前沿技术
一、Android_软件框架搭建https://pan.baidu.com/s/1hsFIYig 
二、Android_OKHttp使用方法https://pan.baidu.com/s/1c5McVW 
三、Android_JSON解析http://pan.baidu.com/s/1c23eePE 
四、Android_xUtils3https://pan.baidu.com/s/1nvGsExF
五、Android_Afinalhttp://pan.baidu.com/s/1c7lXH8 
六、Android_Volleyhttp://pan.baidu.com/s/1jIkBalg 
七、Android_ButterKnifehttp://pan.baidu.com/s/1pKOgh9x 
八、Android_EventBushttp://pan.baidu.com/s/1qXYTyA4 
九、Android_ImageLoaderhttp://pan.baidu.com/s/1o7DsPmy 
十、Android_Picassohttp://pan.baidu.com/s/1c1JITo8 
十一、Android_Glidehttp://pan.baidu.com/s/1hswlhu0 
十二、Android_Frescohttp://pan.baidu.com/s/1qXHtwdA 
十三、Android_RecyclerViewhttp://pan.baidu.com/s/1kVjTLJ5 
十四、Android_Pulltorefreshhttp://pan.baidu.com/s/1c20xVm4 
十五、 Android_UniversalVideoViewhttp://pan.baidu.com/s/1mhEK9EK
十六、 Android_JieCaoVideoPlayer  https://pan.baidu.com/s/1geZZ1Ov 
十七、 Android_Bannerhttps://pan.baidu.com/s/1nv2jpDB
十八、CountdownView秒杀https://pan.baidu.com/s/1nvAWFMT 
十九、OpenDanmaku弹幕https://pan.baidu.com/s/1eS2x2Hc
二十、TabLayout&ViewPagerhttps://pan.baidu.com/s/1mhCKJag#list/path=%2F 

]]></description><link>https://blog.gaoredu.com/article/a090524f-0eef-4af7-92dc-5365189be2ee</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a090524f-0eef-4af7-92dc-5365189be2ee</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 10 Mar 2018 01:01:49 GMT</pubDate></item><item><title><![CDATA[2018尚硅谷JavaWEB视频教程完整版]]></title><description><![CDATA[一、尚硅谷_JavaScript DOM编程视频教程https://pan.baidu.com/s/1kVPg8gZ
二、尚硅谷jQuery 视频教程https://pan.baidu.com/s/1bq1jouF 
三、尚硅谷Ajax视频教程https://pan.baidu.com/s/1skDOKZ7 
四、尚硅谷JavaWeb视频基础（涵盖JavaWEB 企业级开发所需的Servlet、JSP、MVC 设计模式、EL 表达式、JavaBean、国际化、Cookie和HttpSession、JavaMail等全部核心技术。）    
   https://pan.baidu.com/s/1kU6Ley7 
五、尚硅谷JavaWEB 项目实战（图书商城）https://pan.baidu.com/s/1jIoAMKe 

]]></description><link>https://blog.gaoredu.com/article/403e17df-f712-487a-bfea-1e6d4398850d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/403e17df-f712-487a-bfea-1e6d4398850d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 09 Mar 2018 03:07:32 GMT</pubDate></item><item><title><![CDATA[2020最新尚硅谷java基础视频教程完整版[无加密版本]]]></title><description><![CDATA[一、20天横扫Java基础（课堂实录）https://pan.baidu.com/s/1jJpzHv4 
二、尚硅谷Java基础实战——Bank项目http://pan.baidu.com/share/link?
shareid=3690978764&uk=573533038 
三、尚硅谷_ORACLE、SQL、PLSQL 视频教程https://pan.baidu.com/s/1o9LfC7K
四、尚硅谷JDBC视频教程https://pan.baidu.com/s/1o96m6rK
五、Java8新特性  http://pan.baidu.com/s/1cgWOH4 
六、Java——JUC http://pan.baidu.com/s/1hsoh76k 
七、Java——NIOhttp://pan.baidu.com/s/1c2N1ADy 
八、最新Java9新特性 视频       链接: https://pan.baidu.com/s/1ge85H4Z密码: 9e1k 



再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/8d449397-ea31-4b4e-8ad0-9265945cda1d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8d449397-ea31-4b4e-8ad0-9265945cda1d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 09 Mar 2018 03:05:50 GMT</pubDate></item><item><title><![CDATA[Web GIS架构下的矢量数据编辑的设计与实现视频教程]]></title><description><![CDATA[342

PDF文档下载链接: https://pan.baidu.com/s/11UmQb3f6SzyY6Eex2mmd_w 密码: rdh8
视频讲解：链接: https://pan.baidu.com/s/1F1fuw0Mty6QJ25MUt0Z4hw 密码: vfgy
]]></description><link>https://blog.gaoredu.com/article/5ffec994-489c-4359-ad4e-9a3597c7c18a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5ffec994-489c-4359-ad4e-9a3597c7c18a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 09 Mar 2018 02:57:17 GMT</pubDate></item><item><title><![CDATA[2018考研专业课精讲计算机网络考点精讲课程]]></title><description><![CDATA[01.赠送


1__一、计算机网络概述.flv
2__二、计算机网络体系结构与参考模型（1）.flv
3__三、计算机网络体系结构与参考模型（2）.flv
链接: https://pan.baidu.com/s/1IzW3deEFabybMgDK85zWpA 密码: 2a69
02.概述


1__考核目标和专业备考.flv
2__学习方法和学时分配.flv
链接: https://pan.baidu.com/s/1jmiaBYun7Iv-URkQe9k5rg 密码: fxnp


03.计算机网络体系结构
1__计算机网络概述.flv
2__计算机网络体系结构与参考模型1.abc
3__计算机网络体系结构与参考模型2.abc
4__计算机网络体系结构与参考模型3.abc
5__题型分析.abc
链接: https://pan.baidu.com/s/1RNeBKsw24wVbgI0siNiscw 密码: ddit


04.物理层


1__通信基础1.abc
2__通信基础2.abc
3__通信基础3.abc
4__通信基础4.abc
5__通信基础5.abc
6__传输介质.abc
7__题型分析.abc
链接: https://pan.baidu.com/s/1yBl-fNhMOYsuZx-xig-9Vw 密码: wr38
05.数据链路层


10__广域网和数据链路层设备.flv
1__数据链路层的功能和组帧.abc
2__差错控制.flv
3__流量控制与可靠传输机制1.abc
4__流量控制与可靠传输机制2.abc
5__流量控制与可靠传输机制3.abc
6__介质访问控制1.abc
7__介质访问控制2.abc
8__介质访问控制3.abc
9__局域网.flv
链接: https://pan.baidu.com/s/11Es7CTqnaQbo6VRN5nQBaw 密码: xf5c


06.网络层
10__IPV6.abc
11__IP组播和移动IP.abc
1__网络层的功能.flv
2__路由算法.flv
3__IPV4 1.abc
链接: https://pan.baidu.com/s/1DUhvKmFI4ebKhFLpAhgvJg 密码: tqau
07.传输层
1__传输层提供的服务和UDP协议.flv
2__TCP协议1.flv
3__TCP协议2.flv
链接: https://pan.baidu.com/s/1rIqZdtuMrC2-ycnUaDSBXw 密码: arin
08.应用层
1__网络应用模型和DNS系统.flv
2__FTP、电子邮件和 WWW.flv
链接: https://pan.baidu.com/s/16LpOxaufzReFBs74BHLxgQ 密码: 5wpg

]]></description><link>https://blog.gaoredu.com/article/4bdfc75a-c812-4c72-b732-ccbb1a310977</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4bdfc75a-c812-4c72-b732-ccbb1a310977</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 08 Mar 2018 03:14:06 GMT</pubDate></item><item><title><![CDATA[2018考研专业课精讲计算机组成原理考点精讲课程]]></title><description><![CDATA[01.题型特点
链接: https://pan.baidu.com/s/1ic-O7sF8eUV1SsmHVkVmNQ 密码: w5gj
02.复习教材介绍
链接: https://pan.baidu.com/s/1uDnUVUa4hndfj7L3yc9N4w 密码: jeqd
03.第一章、计算机系统概念
链接: https://pan.baidu.com/s/1ycADkF9EmoZzNX07KK8owQ 密码: cq8p
04.第二章、数据的表示和运算
链接: https://pan.baidu.com/s/1DvNAbCbgDkxbIoLDEW6d_w 密码: bwry
05.第三章、存储器层次结构
链接: https://pan.baidu.com/s/10-2VoJge8orsAqQpZjluLg 密码: dniq
06.第四章、指令系统
链接: https://pan.baidu.com/s/1nvAlJLcq14zCdNdPkdzqHw 密码: c2se
07.第五章、中央处理器
链接: https://pan.baidu.com/s/1TtZ5q73nmrEYxOni90XhYg 密码: q54z

]]></description><link>https://blog.gaoredu.com/article/0e034ebf-4f81-41aa-9054-cb76cee2106b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0e034ebf-4f81-41aa-9054-cb76cee2106b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 08 Mar 2018 03:07:03 GMT</pubDate></item><item><title><![CDATA[2018计算机网络数据结构考研专业课考点精讲讲义]]></title><description><![CDATA[一、导学部分
5__命题思路总结（1）.flv
7__复习规划.flv
6__复习指南.flv
4__命题思路总结（1）.flv
3__考试大纲分析总结（2）.flv
8__复习要点和大纲要求.flv
2__考试大纲分析总结（1）.flv
1__复习指导.flv
链接: https://pan.baidu.com/s/1uBifa6ijBLLBk7sdgKKhfw 密码: 6f1k

二、知识点精讲
8__第七章 输入输出系统.flv
5__第四章 指令系统.flv
12__命题思路分析总结.flv
4__第三章 存储器层次架构.flv
2__第一章 计算机系统概述.flv
3__第二章 数据的表示与运算.flv
6__第五章 中央处理器.flv
11__初试解析.flv
1__前言.flv
13__复习指南.flv
10__【赠送】操作系统复习权威指导.flv
7__第六章 总线.flv
9__【赠送】计算机网络导学.flv

计算机网络链接: https://pan.baidu.com/s/1vNtLw2uWKEzMpO51dI18Ig 密码: qecj
数据结构链接: https://pan.baidu.com/s/1a5Smx8jGSf7KcHww7LIyZA 密码: jwhc

]]></description><link>https://blog.gaoredu.com/article/30b042f4-ac6e-4da9-8796-e3d2c4c61305</link><guid isPermaLink="true">https://blog.gaoredu.com/article/30b042f4-ac6e-4da9-8796-e3d2c4c61305</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 08 Mar 2018 03:03:13 GMT</pubDate></item><item><title><![CDATA[【C#进阶】利用动软代码自动生成器自动生成类代码的使用]]></title><description><![CDATA[1.打开动软代码生成器，在服务器上右键，新建一个数据连接，这里我们选择的是SQLite数据库，这里需要将我们的数据库.db文件的全路径赋值到
数据库文件的输入框中。

337

2.在数据库上右键，选择代码批量生成，选择我们要生成的数据库表，这里我们选择所有的数据库表。
339

3.选择开始生成，即可生成Model， Bll层， Dal层的所有代码。
340
4.代码预览效果如下。
341



]]></description><link>https://blog.gaoredu.com/article/3c6c2bc9-5c77-45a3-a2ef-4ca8f0121354</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3c6c2bc9-5c77-45a3-a2ef-4ca8f0121354</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 08 Mar 2018 02:55:57 GMT</pubDate></item><item><title><![CDATA[【C#进阶】实现单例窗体的技术要点核心代码]]></title><description><![CDATA[using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using CaterBll;
using CaterModel;

namespace CaterUI
{
    public partial class FormManageInfo : Form
    {
        // 对这个类实现单例(构造函数私有化)
        private FormManageInfo()
        {
            InitializeComponent();
        }

        // 单例的实现
        private static FormManageInfo _form;
        // 静态方法获取单例
        public static FormManageInfo CreateSigleInstance()
        {
            if (_form == null)
            {
                _form = new FormManageInfo();
            }
            return _form;
        }

        //创建业务逻辑层对象，得到查询到的结果
        ManagerInfoBll miBll = new ManagerInfoBll();

        private void FormManageInfo_Load(object sender, EventArgs e)
        {
            //准备数据
            LoadList();
        }

        //加载数据
        private void LoadList()
        {

            //默认的表格只有三列，但是从数据库中如果查询到多列，就会自动生成，可取消自动生成
            dgvList.AutoGenerateColumns = false;
            //设置查询结果刚好充满整个表格
            dgvList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

            //在UI层显示查询到的结果,绑定到列表的数据源
            dgvList.DataSource = miBll.GetList();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //不管添加还是修改，文本框里的内容都是要显示的
            ManagerInfo mi = new ManagerInfo()
            {
                MName = this.txtName.Text.ToString(),
                MPwd = this.txtPwd.Text.ToString(),
                //经理为1，店员为0
                MType = this.rbManager.Checked ? 1 : 0
            };

            if (btnAdd.Text == "添加" || txtId.Text.Equals("添加时无编号"))
            {
                #region 添加信息
                //实现添加数据
                if (this.txtName.Text == "" || this.txtPwd.Text == "")
                {
                    MessageBox.Show("请将用户名或密码填写完整！", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                //开始调用BLL层的Add方法
                if (miBll.Add(mi))
                {
                    //添加成功之后，就重新加载表中的数据
                    LoadList();

                }
                else
                {
                    MessageBox.Show("添加失败，请稍后重试！", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                #endregion
            }
            else
            {
                #region 修改信息
                //根据用户的ID号码去修改信息
                mi.MId = int.Parse(this.txtId.Text);
                if (miBll.Edit(mi))
                {
                    //添加成功后重新加载列表
                    LoadList();

                    //修改成功，给一个提示信息
                    MessageBox.Show("密码修改成功，请使用新密码！", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    //恢复到最初的状态
                    txtId.Text = "添加时无编号";
                    rbEmployer.Checked = true;
                    btnAdd.Text = "添加";
                }
                else
                {
                    //添加失败
                    MessageBox.Show("修改失败，请稍后重试！", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                #endregion
            }


            //添加/修改完成之后，重置文本框
            this.txtName.Text = "";
            this.txtPwd.Text = "";




        }


        //只是在显示的时候改变了效果，表中数据并没有改变
        private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //查询出来结果后，格式化内容
            if (e.ColumnIndex == 2)
            {
                //类型列
                e.Value = Convert.ToInt32(e.Value) == 1 ? "经理" : "店员";
            }
        }


        //单元格双击
        private void dgvList_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            //在某一个单元格双击的时候
            //只有在双击内容列才会有效果，双击其他地方没反应
            if (e.RowIndex >= 0)
            {
                //根据点击的单元格，找到行与列，进行赋值
                DataGridViewRow row = dgvList.Rows;
                //拿到这行后，就可以操作列了
                this.txtId.Text = row.Cells.Value.ToString();    //id列
                this.txtName.Text = row.Cells.Value.ToString();      //name列
                if (row.Cells.Value.ToString().Equals("1"))
                {
                    this.rbManager.Checked = true;
                }
                else
                {
                    this.rbEmployer.Checked = true;
                }


                //开始指定密码的值
                this.txtPwd.Text = "这是原来的密码吗？";
                //按钮改变了
                this.btnAdd.Text = "修改";
            }

        }


        /// <summary>
        /// 注意在删除前记得把 list的MultiSelect属性设置为false（不允许选中多行，只能根据用户单行选中的行来删除数据）
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDelete_Click(object sender, EventArgs e)
        {
            //删除操作
            //获取选中的行
            var rows = dgvList.SelectedRows;
            if (rows.Count > 0)
            {
                //删除前的提示操作
                DialogResult dr = MessageBox.Show("确认要删除吗？", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.Cancel)
                {
                    //用户取消删除
                    return;
                }

                //获取选中行的编号
                string s_id = rows.Cells.Value.ToString();
                int id = int.Parse(s_id);

                ///开始删除
                if (miBll.Remove(id))
                {
                    //删除成功
                    LoadList();
                }
            }
            else
            {
                MessageBox.Show("请先选择要删除的行", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            //取消操作
            this.txtId.Text = "添加时编号不可修改";
            this.txtName.Text = "";
            this.txtPwd.Text = "";

            this.rbEmployer.Checked = true;
            this.btnAdd.Text = "添加";
        }


        // 当我的这个主窗体被关闭了以后， 就把_form 指向为null
        private void FormManageInfo_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 与单例保持一致
            // 出现这种代码的原因： Form的close()方法会自动释放当前的窗体对象（）
            _form = null;
        }
    }
}


]]></description><link>https://blog.gaoredu.com/article/c10b907a-aa43-4fce-866d-789ab909be6a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c10b907a-aa43-4fce-866d-789ab909be6a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Mar 2018 05:08:21 GMT</pubDate></item><item><title><![CDATA[【C#进阶】实现用户的权限级别控制（窗体间传值思路）]]></title><description><![CDATA[1.CaterUI层
private void btnLogin_Click(object sender, EventArgs e)
        {
            //获取用户输入的信息
            string name = txtName.Text;
            string pwd = txtPwd.Text;

            //调用业务逻辑层查询用户名密码是否正确
            ManagerInfoBll mibll = new ManagerInfoBll();


            // 获得登录成功的用户级别信息
            int type = -1;

            // 开始登录验证
            LoginState loginState = mibll.Login(name, pwd, out type);


            switch (loginState)
            {
                //登录成功就打开一个新的窗体
                case LoginState.OK:
                    FormMain fm = new FormMain();

                    // 在这里通过使用tag属性吧这个值传递过去给我的餐饮管理主窗体（员工级别信息）
                    fm.Tag = type;

                    //显示登录成功后的主窗体
                    fm.Show();
                    //将当前的窗体隐藏起来(因为这个窗体是一个主窗体， 我们不能直接关闭掉)
                    this.Hide();


                    break;
                case LoginState.NameError:
                    MessageBox.Show("该用户不存在", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
                case LoginState.PwdError:
                    MessageBox.Show("密码错误", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
            }
        }

2.CaterBll层
// 调用Dal层， 实现用户的登录
        /// <summary>
        /// 
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <param name="type">返回用户的登录级别信息</param>
        /// <returns></returns>
        public LoginState Login(string name, string pwd, out int type)
        {
            // 设置type的默认值， 如果为此值的时候， 就不会使用
            type = -1;

            //根据用户名进行对象的查询
            ManagerInfo mi = miDal.getManagerByName(name);
            if (mi == null)
            {
                //用户名错误
                return LoginState.NameError;
            }
            else
            {
                //用户名正确
                //由于这里查询出来的是一个MD5加密后的结果， 因此我需要提前把我的这个密码进行MD5加密后再比较是否相同
                string md5_pwd = Md5Helper.EncryptString(pwd);
                //两个都加密了的密码进行比较
                if (mi.MPwd.Equals(md5_pwd))
                {
                    type = mi.MType;
                    //密码正确
                    return LoginState.OK;
                }
                else
                {
                    //密码错误
                    return LoginState.PwdError;
                }
            }
        }
3.主窗体之间进行传值
private void FormMain_Load(object sender, EventArgs e)
        {
            // 当登录成功后， 判断登录进来的员工级别， 以确定是否显示menuManager图标
            int type = Convert.ToInt32(this.Tag);
            if (type == 1)
            {
                //经理(默认已经是要显示出来的)
            }
            else{
                // 店员（管理员的菜单不需要显示出来）
                this.menuManagerInfo.Visible = false;
            }

        }



]]></description><link>https://blog.gaoredu.com/article/5a1bf284-2701-4400-9b49-32c65a1e83d9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5a1bf284-2701-4400-9b49-32c65a1e83d9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Mar 2018 05:06:02 GMT</pubDate></item><item><title><![CDATA[Cloudreve网盘程序带您快速搭建起公私兼备的网盘]]></title><description><![CDATA[Cloudreve是有树洞图床的作者开发的一款网盘程序，支持七牛、又拍云、阿里云OSS、AWS S3等，目前还能支持本地存储功能。目前已经实现的特性：
快速对接多家云存储，支持七牛、又拍云、阿里云OSS、AWS S3、自建远程服务器，当然，还有本地存储
可限制单文件最大大小、MIMEType、文件后缀、用户可用容量
图片、音频、视频、文本、Markdown、Ofiice文档 在线预览
移动端全站响应式布局
文件、目录分享系统，可创建私有分享或公开分享链接
用户个人主页，可查看用户所有分享
………………………………



336


项目官网：https://cloudreve.org/GitHub项目地址：https://github.com/HFO4/Cloudreve


]]></description><link>https://blog.gaoredu.com/article/6dcc86c5-2741-43ff-bf20-3c11a366e018</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6dcc86c5-2741-43ff-bf20-3c11a366e018</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Mar 2018 00:22:46 GMT</pubDate></item><item><title><![CDATA[[黑科技软件]局域网超强管理软件---网路岗软件免费下载]]></title><description><![CDATA[局域网管软件安装要求：
1 最好是2003的系统
2.用双网卡，100\1000都可以。
3.安装接线方法如下。
335




黑科技软件的免费下载链接：https://pan.baidu.com/s/1mjz7lMg 密码：cs2e 备用下载地址：http://d6.smzy.com/2017/sort0151 ... ng9.0.2pojieban.zip



]]></description><link>https://blog.gaoredu.com/article/f8315d2a-8afa-467b-8249-2cbf8dd19df1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f8315d2a-8afa-467b-8249-2cbf8dd19df1</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Mar 2018 22:27:21 GMT</pubDate></item><item><title><![CDATA[【计算机类】谭浩强《C语言程序设计》考研考点讲义]]></title><description><![CDATA[谭浩强《C语言程序设计》内容目录如下：
328
329


下载链接: https://pan.baidu.com/s/17-PGJaa1-25QjOUemOLZtw 密码: 51e3
]]></description><link>https://blog.gaoredu.com/article/0da4a752-84f2-4405-bd90-d315d151eea2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0da4a752-84f2-4405-bd90-d315d151eea2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Mar 2018 03:31:25 GMT</pubDate></item><item><title><![CDATA[【计算机类】王珊、萨师煊《数据库系统概论》考研考点讲义]]></title><description><![CDATA[主要目录如下：

333334

下载链接: https://pan.baidu.com/s/1o6fLwaIYYww_ImrH27agew 密码: qcmn



]]></description><link>https://blog.gaoredu.com/article/f0f414cc-a887-487b-9e06-a1cbfb7b7694</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f0f414cc-a887-487b-9e06-a1cbfb7b7694</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Mar 2018 03:04:15 GMT</pubDate></item><item><title><![CDATA[韩顺平带你玩转前端开发之HTML5坦克大战游戏开发实战视频教程]]></title><description><![CDATA[坦克大战html5.zip：链接: https://pan.baidu.com/s/1P8Lb6relzTzJiY9YtqutSQ 密码: zfdj
韩顺平 HTML5游戏-坦克大战.rar：链接: https://pan.baidu.com/s/1maIsAhESbLflH5yXinLU9w 密码: 2bxr


游戏运行效果如下：
327

]]></description><link>https://blog.gaoredu.com/article/2bd3b836-7ce6-4023-9089-dc5cda90628a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2bd3b836-7ce6-4023-9089-dc5cda90628a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Mar 2018 02:50:05 GMT</pubDate></item><item><title><![CDATA[【C#进阶】实现用户的登录操作]]></title><description><![CDATA[1.CaterUI层
using CaterBll;
using CaterModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CaterUI
{
    public partial class FormLogin : Form
    {
        public FormLogin()
        {
            InitializeComponent();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //关闭当前窗体
            this.Close();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            //获取用户输入的信息
            string name = txtName.Text;
            string pwd = txtPwd.Text;

            //调用业务逻辑层查询用户名密码是否正确
            ManagerInfoBll mibll = new ManagerInfoBll();
            LoginState loginState = mibll.Login(name, pwd);
            switch (loginState)
            {
                //登录成功就打开一个新的窗体
                case LoginState.OK:
                    FormMain fm = new FormMain();

                    //显示登录成功后的主窗体
                    fm.Show();
                    //将当前的窗体隐藏起来(因为这个窗体是一个主窗体， 我们不能直接关闭掉)
                    this.Hide();


                    break;
                case LoginState.NameError:
                    MessageBox.Show("用户名错误", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
                case LoginState.PwdError:
                    MessageBox.Show("密码错误", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    break;
            }
        }

        private void FormLogin_Load(object sender, EventArgs e)
        {

        }
    }
}
2.CaterBll层
// 调用Dal层， 实现用户的登录
        /// <summary>
        /// 返回一个枚举类型
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        public LoginState Login(string name, string pwd)
        {
            //根据用户名进行对象的查询
            ManagerInfo mi = miDal.getManagerByName(name);
            if (mi == null)
            {
                //用户名错误
                return LoginState.NameError;
            }
            else
            {
                //用户名正确
                //由于这里查询出来的是一个MD5加密后的结果， 因此我需要提前把我的这个密码进行MD5加密后再比较是否相同
                string md5_pwd = Md5Helper.EncryptString(pwd);
                //两个都加密了的密码进行比较
                if (mi.MPwd.Equals(md5_pwd))
                {
                    //密码正确
                    return LoginState.OK;
                }
                else
                {
                    //密码错误
                    return LoginState.PwdError;
                }
            }
        }
    }
}
3.CaterDal层
/// <summary>
        /// 根据用户名查找对象
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public ManagerInfo getManagerByName(string name)
        {
            //定义一个对象
            ManagerInfo mi = null;

            //构造SQL语句
            string sql = "select * from ManagerInfo where mname = @name";
            SQLiteParameter p = new SQLiteParameter("@name", name);

            //执行查询， 得到结果
            DataTable dt = SqliteHelper.GetDataTable(sql, p);
            // 由于用户名是唯一的，因此如果查到了就是唯一的一条记录
            if (dt.Rows.Count > 0)
            {
                //该用户存在
                mi = new ManagerInfo()
                {
                    //Int.parse（string str） 该函数参数接收的是一个字符串
                    //Convert.ToInt32(Object obj) 该函数接收的是一个对象类型
                    MId = Convert.ToInt32(dt.Rows),
                    MName = name,
                    MPwd = dt.Rows.ToString(),
                    MType = Convert.ToInt32(dt.Rows)
                };
            }
            else
            {
                //用户不存在
            }

            return mi;
        }


]]></description><link>https://blog.gaoredu.com/article/841cf40e-1121-4b3e-8946-15629f10002f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/841cf40e-1121-4b3e-8946-15629f10002f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Mar 2018 02:44:55 GMT</pubDate></item><item><title><![CDATA[【C#进阶】团队项目开发SVN工具使用的要点总结]]></title><description><![CDATA[经过笔者对SVN工具在实际开发中的总结，SVN工具使用要点如下：1.      工作开始初次打开解决方案的时候向服务器请求最新代码；（Update）2.      工作结束时，保证解决方案能够编译通过(如果自己的代码中有错误，现将错误代码注释掉，待编译通过之后重新上传代码到服务器)，然后将代码提交；（Commite）3.      不要长时间签出解决方案文件和项目文件（VS创建后会自动改写）                               4.      不要签出整个目录。（比如SqlHelper文件我现在用不上，我就不用签出这个文件）5.      某项工作步骤完成之后，编译整个项目；（完成一个基本工作单元后再签入自己的代码）6.      依赖项也要签入。（诸如.lib这些库文件）7.      编译出来的文件不需要签入。（.exe文件，Debug文件， 反复编译会覆盖掉之前的文件。）
]]></description><link>https://blog.gaoredu.com/article/633b24bc-3728-49d0-9abb-986553597ad8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/633b24bc-3728-49d0-9abb-986553597ad8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 05 Mar 2018 01:03:01 GMT</pubDate></item><item><title><![CDATA[JavaScript前端《2048游戏》开发实例完整版视频教程]]></title><description><![CDATA[主要内容如下：
网页版《2048游戏》教程.doc
02_游戏优化一.avi
03_优化gameover.avi
01_回顾上次完成的游戏逻辑.avi
04_完成游戏逻辑总结.avi
03_初始化棋盘格.avi
04_初始化数字格.avi
02_构建游戏页面.avi
06_完成游戏逻辑.avi
网页版《2048游戏》教程一.doc
01_游戏介绍.avi



326

下载链接: https://pan.baidu.com/s/1pxgpVjwS2jXENXDI0Tyz0w 密码: e9ss
]]></description><link>https://blog.gaoredu.com/article/ae9e12b6-d02b-4d57-9772-797b9e7ee02c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ae9e12b6-d02b-4d57-9772-797b9e7ee02c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 05 Mar 2018 00:47:05 GMT</pubDate></item><item><title><![CDATA[【C#进阶】SQLite数据库工具类SQLHelper封装]]></title><description><![CDATA[主要代码如下，分为了三种获取数据的方式：1.执行查询（多个参数）， 可变参数的使用（返回受到影响的行数）
2.获取首行首列值得方法(object就是System.Object的别称，string等价于System.String，int等价于System.Int32)
3.获得查询结果集

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//导入命名空间
using System.Configuration;
using System.Data.SQLite;
using System.Data;

namespace _01复习
{
    //封装成为一个工具类
    public static class SqliteHelper
    {
        //从配置文件中读取链接字符串
        private static string connStr = ConfigurationManager.ConnectionStrings.ConnectionString;

        //执行命令的三个方法：insert, update, delete
        //1.执行查询（多个参数）， 可变参数的使用（返回受到影响的行数）
        public static int ExecuteNonQuery(string sql, params SQLiteParameter ps)
        {
            using (SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                //创建Command对象
                SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                //添加参数
                cmd.Parameters.AddRange(ps);

                //打开链接
                conn.Open();
                //执行命令，返回收到影响的行数
                return cmd.ExecuteNonQuery();
            }
        }


        //2.获取首行首列值得方法(object就是System.Object的别称，string等价于System.String，int等价于System.Int32)
        public static object ExecuteScalar(string sql, params SQLiteParameter ps)
        {
            using (SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                cmd.Parameters.AddRange(ps);

                conn.Open();
                //执行命令，获得查询结果中的首行首列值，并且返回
                return cmd.ExecuteScalar();
            }
        }

        //3.获得结果集
        public static DataTable GetDataTable(string sql, params SQLiteParameter ps)
        {
            using (SQLiteConnection conn = new SQLiteConnection(connStr))
            {
                //构造适配器对象
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(sql, conn);
                //构造数据表， 用于接收查询结果
                DataTable dt = new DataTable();
                //添加参数
                adapter.SelectCommand.Parameters.AddRange(ps);
                //执行结果
                adapter.Fill(dt);

                //返回结果集
                return dt;
            }
        } 


    }


}



]]></description><link>https://blog.gaoredu.com/article/b7b9d8b5-9d3e-4b80-a1a9-df5f74cc75dd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b7b9d8b5-9d3e-4b80-a1a9-df5f74cc75dd</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 05 Mar 2018 00:36:19 GMT</pubDate></item><item><title><![CDATA[2018JavaScript前端开发最全的视频教程--分期共享发布]]></title><description><![CDATA[325
这一次分享的主要资源内容如下：
12.node
7.CSS3 
3.JS.rar  链接: https://pan.baidu.com/s/1ratAjMW 密码: hk98 
10.面向对象.rar
5.jQuery.rar
3.79G2018-03-04 11:31
11.主流框架.rar
5.34G2018-03-04 11:31
6.HTML5.rar
2.CSS.zip  链接: https://pan.baidu.com/s/1mjjYDnE 密码: fr3v
4.07G2018-03-04 11:31
8.移动web开发.rar
4.前端基本功.rar
9.canvas.rar
1.html.rar   链接: https://pan.baidu.com/s/1dnaQz8 密码: y37k


由于百度网盘吞噬资源的速度很快，链接会不定期更新！

]]></description><link>https://blog.gaoredu.com/article/52baa5cf-6d6e-48bd-9c09-e483ca5b37b2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/52baa5cf-6d6e-48bd-9c09-e483ca5b37b2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Mar 2018 21:39:20 GMT</pubDate></item><item><title><![CDATA[安卓近百款经典手游破解版，带你重温经典]]></title><description><![CDATA[高深水英雄高神庙逃亡：勇敢的心
高神商逃亡1高神奇的阿力Amazing Alex 1.0.1
画食马大作战Must Eat Birds V1.0已。。画食人盖3.0.0
高食人路3Hungry Shark _Part 3 v。。高食人宝3
高树叶灵高水果忍者1.54
高水果忍省Fruit Ninja V1.5.2鸽水果忍者Fruit Ninja v1.6.2官方正。
高水果忍者高水果忍者：穿靴子的蜡
副水果忍者Fruit Ninja v1.5.4完整版高水果忍者高清变态版V1.5.4
高水果忍者完整版 Fruit Ninja 2.0.5篇死亡战虫
高随风而行高商吃烤鱼Gobble Gator v4.2
副特答判言大战征尸高提基高尔夫Tiki Golfv3.5
副天至的荣耀 Skies of Glory v1.0.1高天生杀人狂之食人鲨3D HD Hungry。。
高拱路送言高通道维修TileStorm HD v1.1.1
高涂鸦切制高涂彩跳跃
副土菩猴子保龄球Tik510Pin画敬关女福子
副小清快跑Pig.Rush-v1.3高邪恶星球Demo版Sinister Planet v1。。
高星猫大道高章福街
高这光吃豆人高清版 EVAC HDV1.11高球举之P篇
画幽灵战争专业版画游击队组勃Ver1.3
高砸罐子2高砸罐子2_Can Knockdown2
高碍气悬球高植物大战组尸V0.21
画植物大战伍尸画植物大战街尸2.4
高植物大战征户-改良版高抽绳子Drag the Rope 1.0.3
324


下载链接：https://pan.baidu.com/s/1ggqoyun

]]></description><link>https://blog.gaoredu.com/article/5e6821af-4521-4b7f-872a-76e3f6ae1735</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5e6821af-4521-4b7f-872a-76e3f6ae1735</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Mar 2018 02:00:27 GMT</pubDate></item><item><title><![CDATA[微信跳一跳小程序一键突破1000分教程]]></title><description><![CDATA[软件名称：全能宝
软件大小：3.1M

黑科技简介：采用最新接口，加密上传模式。具体请参见软件内教程。
注意事项：
1.刷分尽量不要超过1100，如果被清零可重新刷
2.需要提交高分数，必须先提交低分数后提交高分数

323




这个黑科技软件下载链接:https://pan.baidu.com/s/1mjv3SNI

密码:9q25

]]></description><link>https://blog.gaoredu.com/article/1e360120-89f0-4fb0-b72e-a5cdc47b75a9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1e360120-89f0-4fb0-b72e-a5cdc47b75a9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 02 Mar 2018 23:02:36 GMT</pubDate></item><item><title><![CDATA[OpenGL三维粒子引擎系列制作教程完整版]]></title><description><![CDATA[本套教程主要分为三个部分：
第一部分：OpenGL基础知识及回顾
第二部分：三维粒子引擎制作基础
第三部分：引擎制作高级部分

321


322

三维粒子引擎制作：链接: https://pan.baidu.com/s/1mhVX232 密码:srz7OPENGL或WEBGL开发三维引擎资料推荐
http://www.52tech.tech/forum.php?mod=viewthread&tid=460&fromuid=1




如果还没有学过OpenGl的，可以看一下这个入门视频教程哈：入门基础：链接: https://pan.baidu.com/s/1i5tefoL 密码: mbh9


如果要进阶学习OpenGL的话，可以参见文章：目前网上最全面实用的OpenGL视频教程http://www.52tech.tech/forum.php?mod=viewthread&tid=11&fromuid=1


如果对WEBGL感兴趣的话，可参见文章：
WEBGL中英文学习资料和视频教程
http://www.52tech.tech/forum.php?mod=viewthread&tid=39&fromuid=1


此外，还提供了一些WEBGl的网站与资源哈：二十七个WEBGL动态实例和视频资源让你快速体验WEBGL的世界
http://www.52tech.tech/forum.php?mod=viewthread&tid=47&fromuid=1









]]></description><link>https://blog.gaoredu.com/article/7c1ba16c-9732-47c6-852b-82082c532f1f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7c1ba16c-9732-47c6-852b-82082c532f1f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 19 Feb 2018 20:04:20 GMT</pubDate></item><item><title><![CDATA[[黑科技软件]利用微信6.6自动抢红包防撤回apk小程序免费下载]]></title><description><![CDATA[利用微信6.6自动抢红包防撤回apk小程序的主要改动如下：

1.修改微信图标为官方图标
2.修改启动图为狗年新春图
3.去除版权等无用信息


320


下载链接: https://pan.baidu.com/s/1pMXqBmb 密码: dpvr
]]></description><link>https://blog.gaoredu.com/article/e798fc22-8936-4906-9b98-586216ce7560</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e798fc22-8936-4906-9b98-586216ce7560</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 18 Feb 2018 16:08:37 GMT</pubDate></item><item><title><![CDATA[2020最新利用IDM快速有效的下载百度云里的大文件工具，让你的下载速度快速提升6倍以上]]></title><description><![CDATA[使用方法如下：
第一：你得使用一款chrome内核的浏览器，一般可以添加很多有效的的插件（功能自行了解）！
第二：下载安装IDM，为了不盗取别人的成果就麻烦亲自动手在本网站自行搜索安装。
第三：浏览器插件


319


云盘下载链接：链接: https://pan.baidu.com/s/1nwscIUl 密码: zm6v






最新的6.3版本，更新于12月3日：
下载地址：https://www.lanzous.com/b134572/
https://eyun.baidu.com/s/3miwISp6  密码：3131


]]></description><link>https://blog.gaoredu.com/article/de55af20-ff9c-4664-a4b0-aa84933cf56e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/de55af20-ff9c-4664-a4b0-aa84933cf56e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Feb 2018 22:05:35 GMT</pubDate></item><item><title><![CDATA[油猴的全网歌曲下载插件，可以下载全网任意网站的音乐]]></title><description><![CDATA[支持QQ音乐，酷狗音乐，网易云音乐，酷我音乐，虾米音乐，百度音乐，蜻蜓FM，荔枝FM，喜马拉雅等平台的歌曲在线试听和下载。


318


链接: https://pan.baidu.com/s/1eSTUtEE 密码: zaf5
]]></description><link>https://blog.gaoredu.com/article/295dda4e-c92e-4429-827c-b9f8ce336096</link><guid isPermaLink="true">https://blog.gaoredu.com/article/295dda4e-c92e-4429-827c-b9f8ce336096</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Feb 2018 18:03:22 GMT</pubDate></item><item><title><![CDATA[破解版网易云音乐，可下载网易云上面的任意音乐]]></title><description><![CDATA[注意事项：搜歌要精确到歌名，歌手。如果搜到的是灰色也没关系，点击还是可以播放，点后面的那三个个点，选择下载，选一个歌单就可下载了!
软件名称:网易云音乐

317

软件安装包大小:30.2MB

软件版本:v4.1.2 191481

软件下载链接:https://share.weiyun.com/a091cd62b2fdbd62b019a0406586ef02

此外。我爱科技论坛音乐馆也可以下载音乐的，大家可以去试试看：https://music.163.com/





]]></description><link>https://blog.gaoredu.com/article/1ddd027c-0de8-44c4-a465-f78a0cf9c580</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1ddd027c-0de8-44c4-a465-f78a0cf9c580</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Feb 2018 04:01:06 GMT</pubDate></item><item><title><![CDATA[1300多个BT游戏种子免费分享]]></title><description><![CDATA[这是在淘宝买了一些近1300多个游戏BT种子，现在分享给大家！
316

下载链接：https://pan.baidu.com/s/1rat8FF2
    密码：4kxe]]></description><link>https://blog.gaoredu.com/article/77ccbdcb-b150-4a9a-abd6-0961845f5c85</link><guid isPermaLink="true">https://blog.gaoredu.com/article/77ccbdcb-b150-4a9a-abd6-0961845f5c85</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Feb 2018 03:50:00 GMT</pubDate></item><item><title><![CDATA[练手速，用这个鼠标连点器就够了]]></title><description><![CDATA[以前玩网游朋友自己写的小软件。一直存在自己度盘。现在拿出来分享给大家。主要是实现了鼠标连续点击的功能！分为普通模式和超级模式，也可以选择左键还是右键点击，同时也可以自由调整鼠标点击的间隔时间！

下载链接：https://pan.baidu.com/s/1ggDTNjX 密码：pmf1

]]></description><link>https://blog.gaoredu.com/article/5141273a-6f9b-44c4-b074-ab3bc499ff8c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5141273a-6f9b-44c4-b074-ab3bc499ff8c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 07 Feb 2018 03:43:12 GMT</pubDate></item><item><title><![CDATA[C/c++系列视频教程之三天带你玩转SHell编程]]></title><description><![CDATA[311

下载链接: https://pan.baidu.com/s/1nvZfKYd 密码: nbi2
]]></description><link>https://blog.gaoredu.com/article/9c61ebff-5f9c-4001-accf-64e130e5f0c1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9c61ebff-5f9c-4001-accf-64e130e5f0c1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 06 Feb 2018 00:02:07 GMT</pubDate></item><item><title><![CDATA[C++系列的6.3G的MFC系列编程视频教程]]></title><description><![CDATA[310

视频下载链接: https://pan.baidu.com/s/1dG1gzAD 密码: d2u9
]]></description><link>https://blog.gaoredu.com/article/e76f9aab-0fec-404e-a2a0-a6436afdb4b4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e76f9aab-0fec-404e-a2a0-a6436afdb4b4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 05 Feb 2018 00:03:58 GMT</pubDate></item><item><title><![CDATA[传智播客C/c++系列教程之Win32编程]]></title><description><![CDATA[309

主要介绍了win32环境下面的C语言和c++系列开发的视频教程系列，大概有20天的教程系列。
下载链接：https://pan.baidu.com/s/1dGCBHTn 密码: mbey

]]></description><link>https://blog.gaoredu.com/article/45e2bce2-0621-4a7c-992c-a259852e0c41</link><guid isPermaLink="true">https://blog.gaoredu.com/article/45e2bce2-0621-4a7c-992c-a259852e0c41</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 04 Feb 2018 18:02:35 GMT</pubDate></item><item><title><![CDATA[利用SQLite工具成功修改QQ运动步数方法]]></title><description><![CDATA[由于手机上的软件大部分的数据库都是使用的Sqlite数据库，因此我们可以按照下面的步骤实现修改数据库：

1.将手机Root之后，找到对应软件的数据库文件，Sqlite数据库的默认后缀名字为.db。
314


2.找到下面的数据库文件，使用SQlite数据库管理文件，打开这个数据库文件，修改相应的数据即可。
修改完了，打开软件再来看看效果如下！


315


这个黑科技就是如此简单，原理大概就是修改你手机本地的数据库信息，然后就达到我们目的了哈。
]]></description><link>https://blog.gaoredu.com/article/d88cdca3-f7cc-4002-b296-55cbb63f4c44</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d88cdca3-f7cc-4002-b296-55cbb63f4c44</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 04 Feb 2018 01:15:35 GMT</pubDate></item><item><title><![CDATA[杨强DMS数据的采集与实现(客户端和服务器)]]></title><description><![CDATA[杨强DMS数据的采集与实现教程目录如下：
day02AM_客户端设计及实现.zip
135.5M2017-06-01 18:56
day01PM_客户端设计及实现.zip
185.5M2017-06-01 18:56
08_day02PM_服务器设计及实现.rar
239.5M2017-06-01 18:56
08_day01AM_客户端设计及实现.rar
117.7M2017-06-01 18:56



下载链接: https://pan.baidu.com/s/1oAn7fK2 密码: nh5w
]]></description><link>https://blog.gaoredu.com/article/440df00b-3346-4863-abd1-7b88a3ad49eb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/440df00b-3346-4863-abd1-7b88a3ad49eb</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 04 Feb 2018 00:00:32 GMT</pubDate></item><item><title><![CDATA[学好QT，下面这些电子书资料应该就够了]]></title><description><![CDATA[304


QT电子书系列集合：
下载链接: https://pan.baidu.com/s/1mjLQR5u 密码: up1r




此外学习Qt推荐几个资源哈：
基于QT的开发实战
https://www.52tech.tech/forum.php?mod=viewthread&tid=23&fromuid=1
(出处: 我爱科技论坛)


【Qt教程】2018最新最适合初学者入门的QT5最新入门视频教程完整版
https://www.52tech.tech/forum.ph ... d=906&fromuid=1
(出处: 我爱科技论坛)


QT所有版本下载链接，从QT1.0版本到QT5.10版本全系列
https://www.52tech.tech/forum.ph ... d=165&fromuid=1
(出处: 我爱科技论坛)
]]></description><link>https://blog.gaoredu.com/article/00cbe4e0-2f19-4fe1-adf0-bb297841e60e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/00cbe4e0-2f19-4fe1-adf0-bb297841e60e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 18:07:02 GMT</pubDate></item><item><title><![CDATA[传智播客数据结构和算法精讲班]]></title><description><![CDATA[308


视频目录如下：
数据结构和算法_day03PM_排序算法_冒泡_选择_插入_快速.rar
110.2M2017-06-01 18:56
数据结构和算法_day03AM_二叉树_算法基础_二分法查找.rar
80.7M2017-06-01 18:56
数据结构和算法_day02PM_二叉树.rar
110.2M2017-06-01 18:56
数据结构和算法_day02AM_链表_栈_队列.rar
108.2M2017-06-01 18:56
数据结构和算法_day01PM_链表.rar
121M2017-06-01 18:56
数据结构和算法_day01AM_数据结构介绍_节点.rar



下载链接: https://pan.baidu.com/s/1o9wetPw 密码: p72z


再分享几个算法设计的相关视频教程吧：
【算法面试】2020最新玩转算法面试 C++版本 互联网公司真题【完整版】
https://www.52tech.tech/forum.php?mod=viewthread&tid=953&fromuid=1

新东方2019考研基础班之计算机基础课程数据结构与算法精讲班视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=669&fromuid=1


【Web前端】玩转前端Javascript数据结构和算法2019全网首发最新版
https://www.52tech.tech/forum.php?mod=viewthread&tid=951&fromuid=1

算法导论(原书第3版)中文完整版高清扫描版
https://www.52tech.tech/forum.php?mod=viewthread&tid=451&fromuid=1

(出处: 我爱科技论坛)





]]></description><link>https://blog.gaoredu.com/article/6d34e506-a30e-4918-ba27-e9e44c30c0a0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6d34e506-a30e-4918-ba27-e9e44c30c0a0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 18:07:02 GMT</pubDate></item><item><title><![CDATA[Python视频教程Django编程实战爬虫零基础入门到精通视频教程]]></title><description><![CDATA[312
313


下载链接：http://pan.baidu.com/s/1mi6nKV2 密码：lh8e 拿去吧




可以看下这个资料：
玩转Python，学完这套视频你就是领域专家了（104天全）
https://www.52tech.tech/forum.php?mod=viewthread&tid=701&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/4ecee8c2-b74f-4074-8514-162b808f700e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4ecee8c2-b74f-4074-8514-162b808f700e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 03:07:10 GMT</pubDate></item><item><title><![CDATA[标准C语言和C++编程从入门到精通---陈守全系列]]></title><description><![CDATA[
C/c++系列教程目录：
306
307




下载链接: https://pan.baidu.com/s/1bqTAK27 密码: d8dv
]]></description><link>https://blog.gaoredu.com/article/915a4bf6-051f-4984-8d9a-a89dabce69df</link><guid isPermaLink="true">https://blog.gaoredu.com/article/915a4bf6-051f-4984-8d9a-a89dabce69df</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 02:06:26 GMT</pubDate></item><item><title><![CDATA[2020最新4天搞定Unix操作系统就业班视频教程详解]]></title><description><![CDATA[这里主要是传智播客四天的Unix精讲视频教程，


305


是教程下载链接: https://pan.baidu.com/s/1bqaMeuF 密码: 5dr3
]]></description><link>https://blog.gaoredu.com/article/a4144375-ce2d-4241-ab9f-24bfea03022b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a4144375-ce2d-4241-ab9f-24bfea03022b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 00:31:15 GMT</pubDate></item><item><title><![CDATA[易语言编程系统全书PDF打印版]]></title><description><![CDATA[全书目录如下：
目录
前言...............................................................1
第一章 易语言概述..................................................1
1.1 易语言概要介绍..............................................1
1.1.1 易语言简介................................................1
1.1.2 易语言的特点..............................................2
1.2 易语言的安装................................................4
1.3 易语言的基本操作界面........................................6
1.3.1 易语言的界面..............................................6
1.3.2 如何在设计窗口中添加组件..................................8
1.3.3 如何使用易语言帮助系统....................................8
1.3.4 如何配置易语言............................................9
1.4易语言代码输入技巧...........................................10
1.4.1 内置输入法................................................10
1.4.2 系统输入法................................................11
1.4.3 参数分步输入..............................................12
1.4.4 输入备注与代码屏蔽........................................12
1.4.5 四种输入语句分类..........................................13
1.4.6 易语言中的关键字..........................................13
1.5 第一个易程序................................................14
1.5.1 易程序的结构..............................................14
1.5.2 开始写第一个易程序........................................14
1.5.3 分析第一个易程序..........................................16
1.6 易程序进阶..................................................16
1.7 本章小结....................................................18
第二章 数据类型、运算符与表达式.....................................19
2.1易语言的数据类型.............................................19
2.2 基本数据类型................................................19
2.2.1 了解基本数据类型..........................................19
2.2.2 给变量和返回值定义数据类型................................20
2.2.3 给数据正确赋值............................................21
2.2.4 数据的比较................................................22
2.2.5 数据类型的存储字节与溢出..................................23
2.3 特殊数据类型................................................25
2.3.1了解特殊数据类型...........................................25
2.3.2 动态添加组件..............................................25
2.4 自定义数据类型..............................................25
2.5 易语言运算符................................................27
2.6运算符与表达式...............................................28
2.6.1算术运算符和算术表达式.....................................28
2.6.2赋值运算符和赋值表达式.....................................29
2.7本章小结.....................................................29
第三章 变量、常量与资源.............................................31
3.1 变量........................................................31
3.1.1 了解变量..................................................31
3.1.2 变量类型..................................................32
3.1.3 变量的赋值................................................34
3.1.4 变量的初始值..............................................34
3.2 静态局部变量................................................35
3.3 数组变量....................................................36
3.3.1 数组变量的定义及赋值......................................37
3.3.2 动态管理数组变量..........................................39
3.4 易语言常量..................................................43
3.4.1 了解常量..................................................43
3.4.2 ASCII码...................................................43
3.4.3 常量的使用................................................44
3.4.4 枚举常量及使用方法........................................45
3.4.5 自定义常量及使用方法......................................47
3.5 易语言资源表................................................48
3.5.1 向资源表中添加资源........................................48
3.5.2 使用资源表中的资源........................................50
3.5.3 将资源表中的资源导出......................................51
3.5.4 向资源表中导入可执行文件..................................51
3.6 本章小结....................................................52
第四章 常用命令.....................................................53
4.1了解易语言命令...............................................53
4.1.1 命令的格式................................................53
4.1.2 即时帮助和帮助文档........................................53
4.1.3 命令的返回值..............................................55
4.1.4 命令的套用................................................56
4.1.5 数组类型的参数与返回值....................................57
4.2 流程控制命令................................................58
4.2.1 了解流程控制类命令........................................58
4.2.2 分支类流程控制命令........................................59
4.2.3 循环类流程控制命令........................................61
4.2.4 跳转类流程控制命令........................................65
4.3 其他常用命令................................................67
4.3.1 文本操作类命令............................................67
4.3.2 时间操作类命令............................................68
4.3.3 位运算命令................................................69
4.3.4 其他常用命令..............................................72
4.4 本章小结....................................................74
第五章 子程序的编写与调用...........................................75
5.1 子程序的初步应用............................................75
5.1.1 子程序的分类..............................................75
5.1.2 用户自定义子程序的创建....................................75
5.1.3 子程序的调用..............................................77
5.1.4 返回值和参数的定义........................................77
5.1.5 编写一个子程序............................................77
5.1.6 子程序指针................................................79
5.2 子程序的参数属性............................................80
5.2.1 参数的"参考"属性..........................................80
5.2.2 参数的"可空"属性..........................................81
5.2.3 参数的"数组"属性..........................................83
5.3 编写寻找文件子程序..........................................84
5.4 本章小结....................................................87
第六章 窗口组件、菜单和对话框.......................................88
6.1 窗口组件....................................................88
6.1.1 窗口的基本属性............................................88
6.1.2 窗口的基本事件............................................91
6.1.3 增加新窗口和弹出窗口......................................94
6.1.4 窗口的重要方法............................................96
6.2 编辑菜单....................................................100
6.2.1 新建菜单..................................................100
6.2.2 菜单的热键及属性..........................................101
6.2.3 弹出菜单..................................................103
6.3 对话框......................................................105
6.3.1"信息框（）"命令...........................................105
6.3.2"信息框（）"命令的返回值...................................106
6.3.3"输入框（）"命令...........................................107
6.3.4"输入框（）"命令的应用.....................................107
6.4 本章小结....................................................108
第七章 组件介绍.....................................................110
7.1 易语言组件简介..............................................110
7.1.1 易语言内部组件............................................110
7.2 组件的属性..................................................113
7.2.1 组件的共有属性............................................113
7.2.2 组件的专有属性............................................114
7.2.3 动态修改组件属性..........................................121
7.3 组件的专有方法..............................................123
7.4 事件的触发..................................................125
7.4.1 事件子程序................................................125
7.4.2 组件事件的应用............................................126
7.5 本章小结....................................................131
第八章 多媒体.......................................................132
8.1 声音（音频）................................................133
8.1.1 媒体播放命令..............................................133
8.2 图片处理（图形图像）........................................135
8.2.1 图片的合并................................................135
8.2.2 图片框组件................................................136
8.3 动画........................................................140
8.3.1 图片框的GIF动画...........................................140
8.3.2 窗口动画..................................................140
8.4 图片转场....................................................142
8.5 影视........................................................145
8.5.1 影像框组件................................................145
8.5.2 高级影像框组件............................................145
8.5.3 外部影像组件..............................................146
8.6 本章小结....................................................148
第九章 网络与通讯...................................................149
9.1基础知识.....................................................149
9.2网络应用型程序...............................................150
9.2.1 网络组件..................................................150
9.2.2 互联网支持库..............................................159
9.3数据通讯程序.................................................171
9.3.1网络通信命令...............................................172
9.3.2 数据通讯组件..............................................172
9.3.3网络通讯支持库.............................................179
9.4硬件通信型程序...............................................183
9.4.1 硬件通信组件..............................................184
9.4.2 端口访问支持库............................................187
9.5本章小结.....................................................188
第十章 系统控制.....................................................189
10.1 运行命令...................................................189
10.2 系统信息类命令.............................................190
10.3 配置文件和注册表...........................................191
10.3.1 配置文件.................................................191
10.3.2 调用系统配置工具.........................................193
10.3.3 注册表...................................................194
10.4 本章练习...................................................203
第十一章 易数据库...................................................204
11.1 易数据库文件的组成.........................................204
11.2 使用工具创建和维护数据库...................................205
11.3 用命令创建数据库...........................................207
11.3.1 编程前的准备.............................................208
11.3.2 创建数据库...............................................209
11.3.3 打开数据库...............................................209
11.3.4 置当前数据库.............................................210
11.3.5 关闭数据库...............................................211
11.4 用程序维护数据库...........................................211
11.4.1 记录操作.................................................211
11.4.2 当前记录指针.............................................212
11.4.3 读写字段.................................................213
11.4.4 添加记录.................................................213
11.4.5 删除记录.................................................213
11.4.6 查找记录.................................................214
11.5 数据库实例.................................................215
11.6 数据库相关组件.............................................218
11.6.1 通用提供者、数据库提供者.................................219
11.6.2 数据源...................................................220
11.6.3 表格.....................................................227
11.6.4 数据库相关组件的应用.....................................230
11.6.5 制作表格模板.............................................232
11.7 本章小结...................................................234
第十二章 外部数据库调用.............................................235
12.1 外部数据库相关知识.........................................235
12.1.1 易外部数据库组件简介.....................................235
12.1.2 ODBC与ADO简介............................................235
12.1.3 SQL语言简介..............................................237
12.1.4 常用的SQL语句............................................237
12.2 ODBC连接数据库组件.........................................243
12.2.1"外部数据库"组件属性......................................243
12.2.2"外部数据库"组件重要方法..................................243
12.2.3 "外部数据库提供者"组件...................................245
12.3 ADO操作数据库组件..........................................245
12.3.1 "数据库连接"组件.........................................246
12.3.2 "记录集"组件.............................................248
12.4 外部数据库应用.............................................252
12.4.1 外部数据库操作例程.......................................252
12.4.2 用表格组件显示数据库.....................................258
12.5 Access数据库...............................................259
12.5.1 Access数据库简介.........................................259
12.5.2 Access数据库综合例程.....................................259
12.6 SQL Server数据库...........................................266
12.6.1 SQL Server简介...........................................266
12.6.2 SQL Server 2000 安装.....................................268
12.6.3 创建SQL Server 2000 数据库及表...........................270
12.6.4 使用易语言操作SQL SERVER数据库...........................273
12.7 MYSQL数据库................................................278
12.7.1 MYSQL常用命令............................................279
12.7.2 易语言操作MYSQL数据库....................................282
12.8 本章小结...................................................291
第十三章 API的调用..................................................292
13.1 API简介....................................................292
13.2 API的定义..................................................292
13.3 API的应用..................................................294
13.3.1 内部API..................................................295
13.3.2 外部API..................................................301
13.4 本章小结...................................................304
第十四章 易模块.....................................................305
14.1 易模块的作用...............................................305
14.2 易模块的调用方法...........................................305
14.3 易模块的开发与编译.........................................309
14.3.1 易模块的开发.............................................309
14.3.2 易模块的编译.............................................311
14.3.3 易模块的改写实例.........................................313
14.4 本章小结...................................................315
第十五章 DLL的编写与调用............................................317
15.1 DLL与API函数的关系.........................................317
15.2 DLL的开发与编译............................................317
15.3 调用DLL的方法..............................................320
15.4 DLL应用实例................................................321
15.5 本章小结...................................................324
第十六章 OCX组件与类型库............................................325
16.1 OCX组件....................................................325
16.1.1 OCX的安装................................................325
16.1.2 OCX的汉化................................................328
16.1.3 OCX的使用方法............................................330
16.2 类型库的封装和使用.........................................342
16.2.1 类型库的封装.............................................343
16.2.2 类型库的使用.............................................350
16.3 本章小结...................................................353
第十七章 COM对象....................................................354
17.1 基本概念...................................................354
17.1.1 什么是COM................................................354
17.1.2 COM对象..................................................354
17.1.3 COM接口..................................................354
17.2 COM对象的使用..............................................355
17.2.1新的数据类型"对象"........................................355
17.2.2 使用COM对象的一般步骤....................................357
17.2.3 一个完整的例子...........................................358
17.3 本章小结...................................................360
第十八章 易语言面向对象编程.........................................361
18.1 基础知识...................................................361
18.1.1 类的概念.................................................361
18.1.2 类和对象的关系...........................................362
18.1.3 类中私有成员的特性.......................................364
18.1.4 派生类和继承性...........................................365
18.1.5 子类中直接调用父类方法...................................366
18.1.6 类的多态性与虚拟方法.....................................367
18.2 类的实际应用例程...........................................371
18.3 本章小结...................................................378
第十九章 Linux 程序编写.............................................379
19.1 Linux简介..................................................379
19.2 创建Linux程序..............................................379
19.3 Linux程序开发与运行........................................380
19.3.1 了解例程的相关情况.......................................381
19.3.2 例程服务端代码讲解.......................................381
19.3.3 例程客户端代码讲解.......................................385
19.3.4 编译与运行...............................................387
19.4 本章小结...................................................388
第二十章 数据结构支持库.............................................389
20.1 数据结构基础...............................................389
20.1.1 节点.....................................................389
20.1.2 链表.....................................................389
20.1.3 栈.......................................................391
20.1.4 队列.....................................................392
20.1.5 树.......................................................393
20.1.6 二叉树...................................................394
20.2 栈的应用例程...............................................395
第二十一章 数据操作支持库...........................................400
21.1 加密技术...................................................400
21.1.1 数据加密.................................................400
21.1.2 数据认证.................................................401
21.2 数据校验...................................................402
21.2.1 "数字签名()"命令.........................................403
21.2.2 "签名验证()"命令.........................................404
21.2.3 "取数据摘要()"命令.......................................405
第二十二章 数值计算支持库...........................................407
22.1 数值计算支持库简介.........................................407
22.2 数值计算支持库的各数据类型.................................407
22.2.1 复数运算.................................................407
22.2.2 矩阵运算.................................................408
22.2.3 傅立叶变换...............................................409
22.2.4 微积分...................................................410
22.2.5 概要统计.................................................410
22.2.6 联立方程.................................................411
22.2.7 曲线拟和.................................................412
22.2.8 大数.....................................................412
22.2.9 其他计算.................................................413
22.2.10 算式解析................................................413
22.3 大数计算器.................................................413
第二十三章 文本语音转换支持库.......................................417
23.1 文本语音转换简介...........................................417
23.2 机读文本...................................................417
23.3 语音识别...................................................421
23.4 本章小结...................................................425
第二十四章 电话语音支持库...........................................426
24.1 支持库简介.................................................426
24.2 支持库重要方法.............................................426
24.3 支持库相关例程.............................................429
第二十五章 数码设备支持库...........................................436
25.1 支持库简介.................................................436
25.2 支持库属性与方法...........................................436
25.2.1 数码设备的重要属性.......................................436
25.2.2 数码设备的方法...........................................437
25.3 支持库相关例程.............................................438
25.4 视频设备...................................................442
第二十六章 脚本语言支持组件.........................................445
26.1组件简介....................................................445
26.2 属性和方法.................................................445
26.3组件应用实例................................................446
26.3.1 四则表达式计算器.........................................446
26.3.2 外部程序调用.............................................447
第二十七章 Word 2000支持库..........................................449
27.1 Word 2000支持库简介........................................449
27.2 Word 2000支持库组件........................................449
27.2.1 "Word程序"组件...........................................449
27.2.2 "Word文档集"组件.........................................451
27.2.3 "Word图形"组件...........................................455
27.3 Word 2000支持库例程........................................456
第二十八章 Excel 2000支持库.........................................462
28.1 Excel 2000支持库简介.......................................462
28.2 Excel 2000支持库的组件.....................................462
28.2.1 "Excel程序"组件..........................................462
28.2.2 "Excel工作簿"组件........................................463
28.2.3 "Excel图表"组件..........................................463
28.3 Excel 2000支持库例程.......................................464
第二十九章 PowerPoint 2000支持库....................................471
29.1 PowerPoint 2000支持库简介..................................471
29.2 PowerPoint 2000支持库的组件................................471
29.2.1 "PPT程序"组件............................................471
29.2.2 "PPT文稿"组件............................................472
29.2.3 "PPT播放"组件............................................475
29.3 PowerPoint 2000支持库例程..................................476
29.3.1 人工切换.................................................476
29.3.2 自动播放.................................................477
第三十章 办公组件支持库.............................................480
30.1 办公组件简介...............................................480
30.2 办公组件属性...............................................480
30.3 办公组件的方法.............................................481
30.3.1 办公组件的重要方法.......................................481
30.3.2 办公组件中接口对象的重要方法.............................484
30.4 办公组件事件...............................................488
30.5 办公组件例程...............................................488
30.6 本章小结...................................................497
附录一 程序调试.....................................................498
调试工具............................................................498
调试输出命令........................................................503
调试应用总结........................................................506
附录二 易语言编译与发布.............................................507
非独立编译..........................................................507
独立编译............................................................508
程序发布............................................................509
更改图标样式........................................................512
附录三 易语言向导...................................................514
易向导的作用及意义..................................................514
易向导的使用方法....................................................514
易向导的编写........................................................517
1．"写出程序（）"命令...........................................518
2．"删除程序（）"和"删除程序段（）"命令.........................519
3．"修改程序（）"命令...........................................520
4．"置组件属性（）"命令.........................................520
5．"清除修改记录（）"命令.......................................520
6．"定义模板变量（）"命令.......................................520

303


有了这本书，学好易语言就是一件十分轻松的事情！
电子书下载：http://pan.baidu.com/s/1dZpD
随书源码下载：http://pan.baidu.com/s/1c0oZo7A
阅读器下载地址：http://pan.baidu.com/s/1eQcOHNG

]]></description><link>https://blog.gaoredu.com/article/65387063-43e7-4615-8108-bd7c2bf59f67</link><guid isPermaLink="true">https://blog.gaoredu.com/article/65387063-43e7-4615-8108-bd7c2bf59f67</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 00:22:48 GMT</pubDate></item><item><title><![CDATA[2018珠峰JavaScript免费课视频分享]]></title><description><![CDATA[主要是2018年珠峰JavaScript免费课视频，视频框架目录如下：
302


下载链接：https://pan.baidu.com/s/1ht0utnQ 密码：wapj
]]></description><link>https://blog.gaoredu.com/article/60bc2810-be75-4f78-8bfb-2edf9119f488</link><guid isPermaLink="true">https://blog.gaoredu.com/article/60bc2810-be75-4f78-8bfb-2edf9119f488</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 00:15:36 GMT</pubDate></item><item><title><![CDATA[道路驾考视频，带你顺利通过科目二和科目三]]></title><description><![CDATA[
主要包括以下几个部分：
直角转弯.mp4
曲线行驶.mp4
科目三考试系统-考生考试操作要求.mp4
定点停车.mp4
倒车入库.mp4
侧方位停车.mp4


301

下载链接https://pan.baidu.com/s/1htOGQyg 密码：wapj


]]></description><link>https://blog.gaoredu.com/article/fb9ef76a-aedd-471b-819d-cb08655e1a9a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fb9ef76a-aedd-471b-819d-cb08655e1a9a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 03 Feb 2018 00:12:29 GMT</pubDate></item><item><title><![CDATA[XDM宇宙超强下载工具诞生了，最高速度可达10MB/s]]></title><description><![CDATA[众所周知，IDM是Windows下非常强大的下载工具。如果要用到linux要下好多东西，可能这个就不是比的最佳首选了，现在推出XDM宇宙超强下载工具诞生了，最高速度可达10MB/s，解决你在Linux系统下面下载慢的苦恼！
300

下载链接: https://pan.baidu.com/s/1mjsdTOk 密码: fz5k

]]></description><link>https://blog.gaoredu.com/article/2dece659-374d-4038-8836-dbcaf00a8142</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2dece659-374d-4038-8836-dbcaf00a8142</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 02 Feb 2018 02:58:50 GMT</pubDate></item><item><title><![CDATA[未来教育计算机等级考试破解版（会计银行和医师护士等）]]></title><description><![CDATA[计算机等级考试（一级、二级、三级、四级）、财经类（会计从业考试、初级会计考试、中级会计考试、期贷从业考试、注册会计师考试、基金从业者考试等）、职业认证类（企业人力资源管理师、心理咨询师二级、心理咨询师三级）、医学类（医学临床三基、卫生事业考试、全国卫生资格考试、全国护士执业资格考试、医师资格考试）；
298
299

链接: https://pan.baidu.com/s/1cpdU7DByLExrOwqcfxF5-w 提取码: cpn3

这次分享的这个软件基本上涉及到了以上的各个领域，欢迎大家下载！


]]></description><link>https://blog.gaoredu.com/article/419ba03d-cd22-4f42-8c55-8ad4a3a00e96</link><guid isPermaLink="true">https://blog.gaoredu.com/article/419ba03d-cd22-4f42-8c55-8ad4a3a00e96</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Feb 2018 21:10:35 GMT</pubDate></item><item><title><![CDATA[把你的PotPlayer打造成一款可免费观看全球直播的无敌电视机]]></title><description><![CDATA[电脑端使用方法使用方法如下：


第一步：下载potplayer并安装  potplayer安装包:链接：https://pan.baidu.com/s/1d5V9X8 密码：ii4o
第二步：下载我提供的电视源文件，双击打开（优先推荐使用dpl格式）
第三步：点击电视节目，双击即可观看。
297

下面就是这个黑科技的重点了。
1. 去我分享的这个连接里面下载直播源：
Potplayer电视直播源下载链接: https://pan.baidu.com/s/1PZ3I7fTAORsCqrpugiqQmQ 提取码: ciwt


2. 下载之后这个文件后缀是dpl格式的，是可以直接在PotPlayer中打开的，打开之后，就可以自己切换电视列表，然后就可以免费观看了。


]]></description><link>https://blog.gaoredu.com/article/ceeddfa9-18eb-43ac-8cf2-f90bac4c66f7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ceeddfa9-18eb-43ac-8cf2-f90bac4c66f7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Feb 2018 21:04:00 GMT</pubDate></item><item><title><![CDATA[【C#进阶】利用反射制作的一个简易计算器]]></title><description><![CDATA[295
296

核心代码如下：

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProOperation;

//通过反射动态加载
using System.Reflection;
using System.IO;

namespace ProFactory
{
    //通过这个工厂去获得所有子类的
    public class Factory
    {
        //这个工厂的目的是返回父类，创建子类生成后返回该父类
        public static Operation GetOper(string type, int n1, int n2)
        {
            Operation oper = null;

            //动态加载程序集
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plug");


            //【关键点】：这里需要根据我们拿到的程序集文件，去动态地创建子类，然后给父类，并且返回
            //获得Plug路径下面的所有程序集文件的全路径
            string files = Directory.GetFiles(path, "*.dll");  //"E:\\2018C#Learn\\Projects\\ConsoleApp2\\Caculator\\bin\\Debug\\Plug\\ProAdd.dll"
            //遍历文件
            foreach (string item in files)
            {
                //加载文件
                Assembly ass = Assembly.LoadFile(item);
                //获得程序集中所有公开的数据类型
                //Type types = ass.GetExportedTypes();
                Type types = ass.GetTypes();
                foreach (Type tt in types)
                {
                    //判断当前的数据类型是否为我需要的类型(是子类，而且不是抽象的)
                    if (tt.IsSubclassOf(typeof(Operation)) && !tt.IsAbstract)
                    {
                        //创建子类对象赋值给Oper（ 抽象类是不能实例化的）
                        Object o = Activator.CreateInstance(tt, n1, n2);
                        oper = (Operation)o;

                    }

                    if (type == oper.Type)
                    {
                        break;
                    }
                    else
                    {
                        oper = null;
                    }
                }

            }


            return oper;
        }
    }
}


]]></description><link>https://blog.gaoredu.com/article/0bc2b0b7-b44f-41d2-a726-3bd7aa9c3b8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0bc2b0b7-b44f-41d2-a726-3bd7aa9c3b8d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Feb 2018 20:46:45 GMT</pubDate></item><item><title><![CDATA[【C#进阶】事件和委托的区别]]></title><description><![CDATA[委托的特点：不管在哪都可以调用！（委托不安全）
         委托与事件的区别：
         委托可以看做是一种类型，可以在任意位置调用，因此是不安全的；（委托是用来给函数占位的，不知道到底要调用哪一个函数！）
         事件本质上是一种【类型安全】的委托；功能上：1.只能通过+= -=来调用 2.只能在类的内部来调用    
         


实际案例：
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApp1
{
    class Class18
    {
        //委托的特点：不管在哪都可以调用！（委托不安全）
        /*
         委托与事件的区别：
         委托可以看做是一种类型，可以在任意位置调用，因此是不安全的；（委托是用来给函数占位的，不知道到底要调用哪一个函数！）
         事件本质上是一种【类型安全】的委托；功能上：1.只能通过+= -=来调用 2.只能在类的内部来调用    
         */
        static void Main(string args)
        {
            PlayMusic p = new PlayMusic("12121");
            // 注册要执行的事件
            p.DelPlayOver += P_DelPlayOver;  //在类的外部可以注册这个事件，但是我们不能执行这个事件的！
            //p.DelPlayOver(this, new EventArgs());  error:该事件只能通过+=， 或者-= 来调用！


            //然后开始播放
            p.PlaySongs();

            Console.ReadKey();
        }

        //事件需要执行的函数（也就是委托所指向的函数）
        private static void P_DelPlayOver(object sender, EventArgs e)
        {
            //触发的事件源就是PlayMusic
            PlayMusic p = sender as PlayMusic;
            Console.WriteLine(p.Name + "播放完毕！");
        }
    }

    class PlayMusic
    {
        public event EventHandler DelPlayOver;  //注册事件

        public string Name { get; set; }
        public PlayMusic(string name)
        {
            this.Name = name;
        }

        //播放音乐
        public void PlaySongs()
        {
            int i = 1;
            try
            {
                while (i <= 3)
                {
                    Console.WriteLine("正在播放{0}, 已经播放了{1}次", this.Name, i);
                    i++;
                    Thread.Sleep(1000);
                }

                if (DelPlayOver != null)
                {
                    //调用我的事件
                    EventArgs e = new EventArgs();

                    //事件只能在类的内部来调用，更安全些！
                    DelPlayOver(this, e);
                }
            }
            catch (Exception)
            {

                throw;
            }
        }
    }
}





]]></description><link>https://blog.gaoredu.com/article/b1ad3f5e-dc00-4188-a9a3-054ef7b96b7f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b1ad3f5e-dc00-4188-a9a3-054ef7b96b7f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 01 Feb 2018 03:01:52 GMT</pubDate></item><item><title><![CDATA[百度网盘在线源地址解析软件分享]]></title><description><![CDATA[本次下载更新地址如下：


294

（2018-1-31）百度外链下载器V1.3： https://pan.lanzou.com/i0g4vef


]]></description><link>https://blog.gaoredu.com/article/7c242e5c-4250-428a-a9cd-544319385522</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7c242e5c-4250-428a-a9cd-544319385522</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 31 Jan 2018 22:23:09 GMT</pubDate></item><item><title><![CDATA[[黑科技]非常强大的VIP视频网站整站源码免费下载]]></title><description><![CDATA[293+
使用说明：
1.上传到空间

2.（帝国备份王数据恢复）浏览器访问网站目录/database 用户名admin密码123456
点击参数设置,设置你的数据库信息,再点击恢复数据,恢复完成后服务器主机上删除database目录

3.然后打开文件conf/config.php编辑你的数据库用户名，密码，库名(php5.3下面运行帝国备份王可能出错）

4.要修改广告请登陆后台，后台地址http://域名/admin  
  默认用户名：admin  密码：123456

5.如遇提示域名未授权，请打开admin/index.php修改tutule4d.com成自己的域名即可
黑科技软件下载链接:https://pan.baidu.com/s/1i5XR1XF 密码:csns
]]></description><link>https://blog.gaoredu.com/article/9fec3703-c7b4-4bfe-929a-5cdfe59950c9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9fec3703-c7b4-4bfe-929a-5cdfe59950c9</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 31 Jan 2018 22:14:03 GMT</pubDate></item><item><title><![CDATA[天若ocr电脑截图后快速转换为文字识别工具包]]></title><description><![CDATA[关于软件使用：
1、默认快捷键F4，可以自行修改，在托盘图标右键设置里可以修改。
2、截图之后松开左键即可。292
屌丝链接：https://pan.baidu.com/s/1c4exWli 密码：e2pj





]]></description><link>https://blog.gaoredu.com/article/5e9992e4-6440-453b-b6aa-d35b66b701a4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5e9992e4-6440-453b-b6aa-d35b66b701a4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 31 Jan 2018 21:25:22 GMT</pubDate></item><item><title><![CDATA[分享一款可以快速美化定制的Wallpaper桌面动态壁纸软件]]></title><description><![CDATA[Wallpaper是一款非常好用的动态壁纸软件。一共三个压缩包，传的蓝奏云不限速。注意是分卷压缩的，请解压完打开。289
290
291




外链:https://pan.lanzou.com/b160403/ 密码:fk5w
附几款好看的动态壁纸也一并上传了，蓝奏实在传不上。百度云凑合吧。链接: https://pan.baidu.com/s/1mkl8URu密码: pnjj
下图。

]]></description><link>https://blog.gaoredu.com/article/7eb176b3-4b5c-446f-b431-da99763eed9f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7eb176b3-4b5c-446f-b431-da99763eed9f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 31 Jan 2018 02:09:46 GMT</pubDate></item><item><title><![CDATA[【C#进阶】 委托的三种写法和拉姆达表达式的写法总结]]></title><description><![CDATA[下面是笔者总结的委托的三种写法，以供大家参考学习：
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp1
{
    //在这里申明了三个委托
    public delegate void DelProcess1();
    public delegate void DeleProcess2(string str);
    public delegate string DeleProcess3(string str);




    class Class16
    {
        static void Main(string args)
        {
            //在这里来使用委托
            //方法一：
            DelProcess1 del11 = delegate ()
            {
            };
            DelProcess1 del12 = Test1;
            DelProcess1 del13 = () =>
            {
            };

            //方法二
            DeleProcess2 del21 = delegate (string str)
            {

            };
            DeleProcess2 del22 = Test2;
            DeleProcess2 del23 = (name) =>
            {

            };

            //方法三：
            DeleProcess3 del31 = delegate (string str)
            {
                return "";
            };
            DeleProcess3 del32 = Test3;
            DeleProcess3 del33 = (name) =>
            {
                return "";
            };

        }


        static void Test1()
        {

        }

        static void Test2(string str)
        {

        }

        static string Test3(string str)
        {
            return "";
        }
    }
}
委托使用过程中的要点：
namespace ConsoleApp1
{

    //定义一个委托
    public delegate void DelSayHi(string name);


    class 委托
    {
        static void Main(string args)
        {

            //作用：委托可以实现把一个函数当做是参数来传递
            //Thread th = new Thread(Method);  //委托类型

            //List<int> list = new List<int>() { 1, 2, 3, 4 };  //移除list集合中大于2的所有元素

            //list.RemoveAll(number => number > 2);


<b>            //如何通过SayHello，根据不同的name来实现不同的函数调用？
            //【要点】函数可以赋值给一个委托对象，但是委托的签名必须跟函数的签名一致（也就是参数和返回值要一样哈）
            DelSayHi del1 = SayHelloChinese;//new DelSayHi(SayHelloChinese);   //这里我们把函数作为参数来传递
            DelSayHi del2 = SayHelloEnglish; //new DelSayHi(SayHelloEnglish);</b>

            //通过这个委托可以把“战三” 这个字符串作为参数，传递给SayHelloChinese这个函数
            del1("战三");
            del2("王五");

            //函数可以直接赋值给为委托（这里可以看做是多态）------大大提高了程序的扩展性
            SayHello("ABCDEFGH", SayHelloChinese);
            SayHello("ABCDEFGH", SayHelloEnglish);

            /*
             //这实际上就是一个函数， 但是这个函数没有名字， 只有返回值
             delegate (string name)
            {
                Console.WriteLine("Hello haha " + name);
            }
             
             */
            //通过匿名函数来使用委托
            SayHello("乌龟哦", delegate (string name)
            {
                Console.WriteLine("Hello haha " + name);
            });


            //拉姆达表达式
            SayHello("王五", (name) =>
            {
                Console.WriteLine("Hello hahahahahah" + name);
            });
            Console.ReadKey();
        }

        static void Method(string name)
        {

        }



<b>        //通过委托来实现不同函数的调用（委托用于定义函数的类型）
        // 可以把委托看做是-----》函数的父类</b>
        static void SayHello(string name, DelSayHi del)
        {
            //这里的del实际上就是委托类型
            del(name);
        }


<b>        //这里的name形参可以就是通过委托传递过来的参数</b>
        static void SayHelloChinese(string name)
        {
            Console.WriteLine("你好哈" + name);
        }



        static void SayHelloEnglish(string name)
        {
            Console.WriteLine("Hello" + name);
        }
    }
}


]]></description><link>https://blog.gaoredu.com/article/64a9a4ab-7564-44ea-a6a4-3badd425b96a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/64a9a4ab-7564-44ea-a6a4-3badd425b96a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Jan 2018 22:25:17 GMT</pubDate></item><item><title><![CDATA[通过修改系统环境变量Win+R快捷键一键快速启动你系统中常用的应用程序]]></title><description><![CDATA[技能名称：Win+r启动软件。黑科技使用步骤如下：
1.在C盘下创建个文件夹，名称随便起，推荐名称winrun。
2.然后添加环境变量c:\winrun。
288

具体操作我的电脑→属性→高级系统属性设置→高级→环境变量弹框修改用户变量或系统变量均可。
3.点开path新建。输入c:\winrun 就是要指定变量位置（文件夹）确定即可。


4.添加完了之后把你一大堆的快捷方式剪切到winrun文件夹内。每个快捷方式起个对应的名字，然后按win+r键，输入名字然后回车就能启动软件。


比如qq，直接快捷方式名称改成q。win+r然后输入q回车。这里用的时间是要比鼠标选中qq然后双击的速度要快的。


]]></description><link>https://blog.gaoredu.com/article/9e071b4c-701c-4ab2-bd25-f0b32cb1fdb0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9e071b4c-701c-4ab2-bd25-f0b32cb1fdb0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Jan 2018 21:05:57 GMT</pubDate></item><item><title><![CDATA[Windows10 磁贴名称背景颜色修改工具]]></title><description><![CDATA[升级到Win10之后，最大的感受就是它扁平化的界面，一大堆图标乱七八糟的堆在一起，当然不能算优雅了。自己可以使用磁贴名称背景颜色修改工具调整一下，看起来就会好很多！
286

287


工具的使用方法也很简单，上面就是我修改后的效果！


下载链接：https://share.weiyun.com/0f518aed615bd6af4e254f0b7ed516d9]]></description><link>https://blog.gaoredu.com/article/3d563483-bc5b-4bab-ba32-9253d39bcb9f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3d563483-bc5b-4bab-ba32-9253d39bcb9f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Jan 2018 20:59:28 GMT</pubDate></item><item><title><![CDATA[2018最新WEBGL视频教程第四季 WEBGL变换]]></title><description><![CDATA[本次分享的WEBGL视频教程目录如下， 2018最新WEBGL视频教程第四季主要包括如下内容，全集29集，涉及到WEBGL的变换的主要基础知识和应用等！学完本季教程之后，你应该可以制作出如下的效果：
283
285
284
01-Overview.flv
    02-Point_and_Vector_Operations.flv
    03-Coordinate_Values.flv
    04-Point_and_Vector_Sum.flv
    05-Point_and_Vector_Sum.flv
    06-Vector_Operation.flv
    07-Vector_Operation.flv
    08-Translation.flv
    09-Rotation.flv
    10-Rotate_a_Block.flv
    11-Rotate_a_Block.flv
    12-Name_That_Object.flv
    13-Name_That_Object.flv
    14-Euler_Angles.flv
    15-Rigid_Body_Transforms_vs_Scaling.flv
    16-Scale_a_Sphere.flv
    17-Scale_a_Sphere.flv
    18-Scale_Rotate_Translate.flv
    19-Rotate,_then_Scale.flv
    20-Build_a_Snowman.flv
    21-Build_a_Snowman.flv
    22-Rotate,_then_Translate.flv
    23-Object3D.flv
    24-Two_Clock_Hands.flv
    25-Two_Clock_Hands.flv
    26-Hierarchy_of_Objects.flv
    27-Instancing.flv
    28-Reasons_for_Instancing.flv
    29-Robot_Arm.flv下载访问链接：http://url.cn/5gcB85h
访问密码：AFxfDG


]]></description><link>https://blog.gaoredu.com/article/b92ea09c-5606-4c89-b919-9a742fa6ff72</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b92ea09c-5606-4c89-b919-9a742fa6ff72</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 30 Jan 2018 01:00:02 GMT</pubDate></item><item><title><![CDATA[【C#学习】利用C#实现的一个简单的登录用户名密码验证器核心代码分享]]></title><description><![CDATA[直接上代码，核心代码如下：
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;


namespace WindowsFormsApp1
{
    public partial class Login : Form
    {

        public Login()
        {
            InitializeComponent();
        }

        //集合(默认是私有的private)
        List<Student> list = null;

        private void Login_Load(object sender, EventArgs e)
        {
            //准备数据
            //存储Xml文件中读取出来的对象数据
            list = new List<Student>();

            //创建文档
            XmlDocument doc = new XmlDocument();
            doc.Load("Person.xml");

            //遍历节点
            XmlElement person = doc.DocumentElement;
            //获得根节点下面的所有节点
            XmlNodeList xnl = person.ChildNodes;

            //把文档中的对象转换为真正的对象
            foreach (XmlNode item in xnl)
            {
                //读取数据，赋值给list集合
                int id = Convert.ToInt32(item.Attributes.Value);
                string name = item.InnerText;
                int age = Convert.ToInt32(item.InnerText);
                char gender = Convert.ToChar(item.InnerText);

                // 开始创建一个对象
                Student student = new Student();
                student.Id = id;
                student.Name = name;
                student.Age = age;
                student.Gender = gender;

                //开始添加数据到list中
                list.Add(student);
            }


            //Console.WriteLine(xnl);
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            //用户登录
            string s_id = this.txtID.Text.Trim();
            int id = 0, age = 0;
            if (s_id != "")
            {
                id = Convert.ToInt32(s_id);
            }
            string name = this.txtName.Text;
            string s_age = string.Empty;
            if ((s_age = this.txtAge.Text.Trim()) != "")
            {
                age = Convert.ToInt32(s_age);
            }


            //获得单选框中的文本
            char gender = rbMale.Checked ? '男' : '女';
            //新建一个用户登录的对象
            Student loginStudent = new Student();
            loginStudent.Id = id;
            loginStudent.Name = name;
            loginStudent.Age = age;
            loginStudent.Gender = gender;

            //定义一个标记
            bool isLogin = false;

            //开始和集合中的每一个对象进行比较（list中存放的是一个个Student对象）
            for (int i = 0; i < list.Count; i++)
            {
                //Equals默认比较的是引用的地址是否相同
                if (list.Equals(loginStudent))
                {
                    MessageBox.Show("欢迎：" + loginStudent.Name + "登入学生管理系统！", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    isLogin = true;
                }
            }

            if (!isLogin)
            {
                MessageBox.Show("你的用户名或密码错误！", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}


]]></description><link>https://blog.gaoredu.com/article/4253748a-343e-4c7f-bf3d-4b50362ef38c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4253748a-343e-4c7f-bf3d-4b50362ef38c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 29 Jan 2018 22:04:47 GMT</pubDate></item><item><title><![CDATA[【C#进阶】C#实现对XML文件的创建和基本的增删改查操作]]></title><description><![CDATA[1.XML文件的创建
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Xml;

namespace ConsoleApp1
{
    class Xml文件的使用
    {
        static void Main(string args)
        {
            //DOMC操作XML文件【文档对象模型】
            //1.创建一个XML文档对象
            XmlDocument doc = new XmlDocument();
            //2.创建第一行的描述信息
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            //3.将创建的第一行数据添加到文档中
            doc.AppendChild(dec);
            //4.给文档添加根节点
            XmlElement book = doc.CreateElement("Books");
            //5.将根节点添加给文档对象
            doc.AppendChild(book);


            //6.给根节点添加子节点
            XmlElement book1 = doc.CreateElement("Book");
            //将book1添加到根节点book
            book.AppendChild(book1);


            //7.给book1添加子节点
            XmlElement bookName1 =  doc.CreateElement("BookName");
            //8.设置标签中的描述文本信息
            bookName1.InnerText = "水浒传";
            book1.AppendChild(bookName1);

            XmlElement author1 = doc.CreateElement("Author");
            author1.InnerText = "秀秀";
            book1.AppendChild(author1);

            XmlElement price1 = doc.CreateElement("Price");
            price1.InnerText = "100MB";
            book1.AppendChild(price1);

            XmlElement des1 = doc.CreateElement("Des");
            des1.InnerText = "太好看了！！！";
            book1.AppendChild(des1);



            doc.Save("Book.xml");


            Console.WriteLine("保存成功！");
        }
    }
}
2.对XML文件实现基本的增删改查
//对现有的XMl文件实现增删改查
            XmlDocument docc = new XmlDocument();
            //首先判断一个Xml文件是否存在， 如果存在，则追加； 否则就创建一个
            if (File.Exists("Person.xml"))
            {
                //追加操作
                //1.加载文件
                docc.Load("Person.xml");
                //2.获得根节点
                XmlElement root = docc.DocumentElement;

                //3.添加一个新的节点
                XmlElement student = docc.CreateElement("Student");
                root.AppendChild(student);

                XmlElement name = docc.CreateElement("Name");
                name.InnerXml = "马克思主义乖巧";
                XmlElement age = docc.CreateElement("Age");
                age.InnerXml = "22";
                XmlElement gender = docc.CreateElement("Gender");
                gender.InnerXml = "女";

                student.AppendChild(name);
                student.AppendChild(age);
                student.AppendChild(gender);



            }
            else
            {
                //创建一个新的
                XmlDeclaration dec = docc.CreateXmlDeclaration("1.0", "utf-8", null);
                docc.AppendChild(dec);

                //创建根节点
                XmlElement root = docc.CreateElement("Student");
                docc.AppendChild(root);

                //3.添加一个新的节点
                XmlElement student = docc.CreateElement("Student");
                root.AppendChild(student);

                XmlElement name = docc.CreateElement("Name");
                name.InnerXml = "马克思主义乖巧";
                XmlElement age = docc.CreateElement("Age");
                age.InnerXml = "22";
                XmlElement gender = docc.CreateElement("Gender");
                gender.InnerXml = "女";

                student.AppendChild(name);
                student.AppendChild(age);
                student.AppendChild(gender);

            }

            //记得保存
            docc.Save("Person.xml");
            Console.WriteLine("文件保存成功！");



            //查看Xml文件
            //1.获得文档的根
            XmlElement book = docc.DocumentElement;
            //2.获得下面的所有子节点
            XmlNodeList xnl = book.ChildNodes;

            foreach (XmlNode item in xnl)
            {
                Console.WriteLine(item.InnerText);
            }

            //获得Student的节点
            Console.WriteLine("获得Student的节点:");
            XmlElement items = book;
            //获得子节点信息
            XmlNodeList xnl2 = items.ChildNodes;
            foreach (XmlNode item in xnl2)
            {

                Console.WriteLine(item.InnerXml);
                if (item.InnerXml == "22")
                {
                    item.InnerXml = "66";
                }

                docc.Save("Person.xml");
            }


        }
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;


namespace ConsoleApp1
{
    class XML文件的增删改查
    {
        static void Main(string args)
        {
            //创建一个XMl文档
            XmlDocument doc = new XmlDocument();
            //Xml文件的加载
            if (File.Exists("Order.xml"))
            {
                //加载文件
                doc.Load("https://laod.cn/sitemap.xml");
                //开始修改(拿到了根节点)
                XmlElement root = doc.DocumentElement;
                //获得子节点
                XmlNodeList nl = doc.ChildNodes;



                //先获得Items项
                XmlElement items = root;

                foreach (XmlNode item in items)
                {
                    //Console.WriteLine(item.InnerText);
                    Console.Write(item.Attributes.Value+" ");
                    Console.WriteLine(item.Attributes.Value);
                    if (item.Attributes.Value == "马克思")
                    {
                        item.Attributes.Value = "马克思主义乖巧";
                        item.Attributes.Value = "1008611";
                    }

                }

                doc.Save("Order.xml");
            }
            else
            {
                //新建一个
            }
        }
    }
}
3.XPATH方式来实现增删改查
//使用Xpath的方式来读取Xml文件
            XmlDocument doc = new XmlDocument();
            doc.Load("Order.xml");
            //获得根节点
            XmlElement order = doc.DocumentElement;

            //查
            XmlNode xn = order.SelectSingleNode("/Order/OrderNumber");
            XmlNode xnn = order.SelectSingleNode("/Order/Items/OrderItem");

            Console.WriteLine(xn.InnerXml);
            Console.WriteLine(xnn.Attributes.Value);

            //修改（增加）
            xnn.Attributes.Value = "我是一个新的中国人！";
            Console.WriteLine(xnn.Attributes.Value);

            //删除
            Console.WriteLine("删除");
            //doc.RemoveAll(); //error:根节点不能删除

            //移除根节点下面的所有子节点
            XmlElement ord = doc.DocumentElement;
            //删除指定节点
            XmlNode xnnn = order.SelectSingleNode("/Order/Items/OrderItem");
            //获得Items节点
            XmlNode items = order;//order.SelectSingleNode("/Order/Items");
            //移除当前节点的子节点
            items.RemoveChild(xnnn);

            //删除一个指定节点的属性
            //XmlNode orderItem = order.SelectSingleNode("/Order/Items/OrderItem");
            xnnn = order.SelectSingleNode("/Order/Items/OrderItem");
            xnn.Attributes.RemoveNamedItem("Count");  // 删除xnn节点下面的Count属性



            //ord.RemoveAll();  //删除所有的



            doc.Save("Order.xml");


]]></description><link>https://blog.gaoredu.com/article/ffb81e18-337a-4955-afdd-26d3c500cdf0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ffb81e18-337a-4955-afdd-26d3c500cdf0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 29 Jan 2018 20:56:36 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛力推---成为JAVA高级架构师的九个阶段精品视频教程]]></title><description><![CDATA[视频的主要目录如下：
282


06.高级架构师第六阶段-实战开发


05.高级架构师第五阶段-大数据


04.高级架构师第四阶段


03.高级架构师第三阶段


02.高级架构师第二阶段


01.高级架构师第一阶段
10.Tomcat负载均衡、调优核心应用进阶【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
09.Nginx网站架构实战（web）【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
08.淘淘商城实战高并发分布式项目(有源码)【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
07.大数据Hadoop Storm Hive等系列教程【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
06.Redis从入门到精通、集群与应用【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
05.Git分布式版本控制系统权威指南【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
04.基于Netty的RPC架构实战演练【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
03.深入JVM内核—原理、诊断与优化【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
02.实战Java高并发程序设计模式视频【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11
01.Svn版本管理与代码上线架构方案【更多分享关注微信公众号：我爱科技论坛】
-2018-01-27 22:11



下载链接：: https://pan.baidu.com/s/1jJHkR0y 密码: 59gg


]]></description><link>https://blog.gaoredu.com/article/5167e894-7b86-433a-aa73-713083834943</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5167e894-7b86-433a-aa73-713083834943</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 29 Jan 2018 02:03:47 GMT</pubDate></item><item><title><![CDATA[【C#进阶】如何实现一个简单的文件资料管理器源码分享]]></title><description><![CDATA[具体的实现源码如下，复制以下代码到你的项目工程下，并新建相应的Windows窗体模块，就可以跑起来了：
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class FileManager : Form
    {
        public FileManager()
        {
            InitializeComponent();
        }

        private void btnParent_Click(object sender, EventArgs e)
        {
            //添加根节点(TreeNodeCollection):当前树装菜单的集合
            if (this.txtParent.Text != "")
            {
                this.treeView1.Nodes.Add(this.txtParent.Text);
            }
        }

        private void btnChild_Click(object sender, EventArgs e)
        {
            //添加子节点
            //获得要添加子节点的根节点
            TreeNode tn = this.treeView1.SelectedNode;

            //开始对选中的节点添加子节点
            tn.Nodes.Add(this.txtChild.Text);
        }

        private void FileManager_Load(object sender, EventArgs e)
        {
            //开始载入系统的文件
            string systemPath = "F:\\SystemPath";
            //this.LoadDirectoryAndFile(systemPath, this.treeView1.Nodes);
            this.LoadFileAndDirectoryToNodes(systemPath, this.treeView1.Nodes);  //更符合真实的情况

            //加载我的电脑
            //关键点：只需要找到本地磁盘CDEFG的节点
            //this.treeView1.Nodes.
            //this.treeView1.Nodes.Find("");
            foreach (TreeNode item in this.treeView1.Nodes)
            {
                //如果是我的电脑，就再次循环遍历
                if (item.Text == "我的电脑")
                {
                    foreach (TreeNode node in item.Nodes)
                    {
                        //MessageBox.Show(node.Text);
                        /*if (node.Text == "本地磁盘C")
                        {
                            //MessageBox.Show("C Disk"+node.Text);
                            string cDisk = "d:\\";
                            TreeNode tn = node;
                            this.LoadFileAndDirectoryToNodes(cDisk, tn.Nodes);
                        }*/

                        if (node.Text == "本地磁盘D")
                        {
                            string dDisk = "D:\\";
                            TreeNode tn = node;
                            this.LoadFileAndDirectoryToNodes(dDisk, node.Nodes);
                        }
                    }
                }
            }

        }


        //把找到的文件和文件夹加载到节点上面
        //加载文件夹和文件的第一种方法：（默认初始的文件路径就是根路径， 下面没有其他文件）
        private void LoadDirectoryAndFile(string path, TreeNodeCollection tc)
        {
            //this.LoadFileAndDirectoryToNodes(path, tc);


            //获得当前目录下面的所有文件路径（全路径）(这是第一层目录)
            string dics = Directory.GetDirectories(path);
            //得到文件名字
            for (int i = 0; i < dics.Length; i++)
            {
                //从文件夹中的全路径中截取出来文件夹的名字（没有扩展名字）
                string dicName = Path.GetFileNameWithoutExtension(dics);

                //将文件夹的名字加载到节点集合下面
                //tc是上一级的节点
                //tn是当前级别的节点：{Text = "adt-bundle-windows-x86_64-20131030"}
                TreeNode tn = tc.Add(dicName);  //获得节点(这是当前这一级的目录)

                //将这个文件夹下面的文件也加载到这个节点集合下面
                string files = Directory.GetFiles(dics);
                //把文件夹下面的文件加载显示出来
                for (int j = 0; j < files.Length; j++)
                {
                    //根据文件路径获得文件名字的两种方法：
                    //方法一：
                    //tc.Add(files);  //error i不等于j
                    //int index = files.LastIndexOf('\\');
                    //files = files.Substring(index+1);

                    //方法二：
                    //files = Path.GetFileName(files);

                    //然后把当前的文件也添加到我当前的文件节点
                    //tc.Add(files);  //把当前文件添加到父节点
                    //tn.Nodes.Add(files);
                    tn.Nodes.Add(Path.GetFileName(files));


                    //在这里把文件的全路径记录出来(tn是当前文件夹的节点)
                    //tn.Tag = files;
                    tn.Nodes.Tag = files;  //有几个文件，就加上几个节点
                }

                //开始获得第二层的目录
                //newDics = Directory.GetDirectories(dics);
                //开始递归调用
                //this.LoadDirectoryAndFile(Directory.GetDirectories(dics), tn.Nodes);  error

                //这里的dics是我当前的文件夹，tn.Nodes是我刚刚添加的节点
                //只需要把我当前的文件夹添加进去， 就会找到下一级的目录
                LoadDirectoryAndFile(dics, tn.Nodes);
            }


        }


        //加载文件的第二种方法
        private void LoadFileAndDirectoryToNodes(string filePath, TreeNodeCollection tc)
        {
            //1.首先获得文件路径下面的文件夹(全路径的文件夹)
            string dirs = Directory.GetDirectories(filePath);

            for (int i = 0; i < dirs.Length; i++)
            {
                //得到的仅仅是文件夹的名字
                //dirs = Path.GetFileNameWithoutExtension(dirs);
                //把当前得我文件夹添加到节点
                TreeNode tn = tc.Add(Path.GetFileNameWithoutExtension(dirs));  //tn就是当前的文件夹

                //然后开始递归调用
                this.LoadFileAndDirectoryToNodes(dirs, tn.Nodes);
            }


            //然后开始显示目录下面的文件
            string fileNames = Directory.GetFiles(filePath);
            for (int i = 0; i < fileNames.Length; i++)
            {
                TreeNode tn = tc.Add(Path.GetFileName(fileNames));  //tc又变成了子节点了
                tn.Tag = fileNames;  //用于记录打开的所有文件
            }
        }


        //双击打开文件的主要bug:1.在第一层目录中的文件不能打开； 2.只能打开文本类型的文件，其他文件类型不支持
        private void treeView1_DoubleClick(object sender, EventArgs e)
        {
            //鼠标双击后显示文本(如果双击的是文件夹就不管)
            Object tn = this.treeView1.SelectedNode.Tag;
            string filePath = "";
            if (tn != null)
            {
                filePath = tn.ToString();
            }

            //只能支持指定的文件类型打开
            string ext = Path.GetExtension(filePath);
            if (ext == ".txt" || ext == ".xml" || ext == ".html" || ext == ".log" || ext == ".ini")
            {
                //双击之后就开始显示文件（以文本形式读取文件）
                this.txtContent.Text = File.ReadAllText(filePath, Encoding.Default);
            }
            else if (ext == ".exe")
            {
                //来调用进程打开这个文件
                //1.新建一个进程文件信息
                ProcessStartInfo ps = new ProcessStartInfo(filePath);
                //2.创建一个进程实例对象
                Process process = new Process();
                //3.告诉进程要打开的文件信息
                process.StartInfo = ps;
                //4.启动进程
                process.Start();
            }

        }
    }
}


]]></description><link>https://blog.gaoredu.com/article/f489c2c2-e68c-4083-aaa3-4485079d65a2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f489c2c2-e68c-4083-aaa3-4485079d65a2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 28 Jan 2018 23:05:29 GMT</pubDate></item><item><title><![CDATA[【新】WEBGL最新视频教程第三季 WEBGL 颜色和材质]]></title><description><![CDATA[本次分享的WEBGL视频教程目录如下，  本次分享的WEBGL最新视频第三季主要包括如下内容，全集51集，涉及到WEBGL的颜色和材质的主要基础知识和应用等！学完本季教程之后，你应该可以制作出如下的效果：
280
281
279


01-Overview_of_the_Lesson.flv
    02-The_Programmable_Pipeline.flv
    03-RGB_Color_Definition.flv
    04-Color_Definition.flv
    05-Setting__the_Color.flv
    06-What_Color_is_Magenta.flv
    07-What_Color_is_Magenta.flv
    08-What_Color_is_Chartreuse.flv
    09-What_Color_is_Chartreuse.flv
    10-The_Color_Cube.flv
    11-Vertex_Attributes.flv
    12-Vertex_Attributes.flv
    13-Color_Interpolation.flv
    14-The_Color_Gamut.flv
    15-A_Simple_Lighting_Model.flv
    16-Kiss_of_Death.flv
    17-Light_on_a_Diffuse_Sphere.flv
    18-Normalizing_a_Vector.flv
    19-Vector_Length.flv
    20-Vector_Length.flv
    21-The_Dot_Product.flv
    22-The_Dot_Product_in_Detail.flv
    23-Diffuse_Material.flv
    24-Diffuse_Material.flv
    25-Shading_Normal.flv
    26-Enable_Smooth_Shading.flv
    27-Enable_Smooth_Shading.flv
    28-Ka,_Kd,_and_HSL.flv
    29-Baking.flv
    30-Baking.flv
    31-Specular_Material.flv
    32-Gouraud_Shading.flv
    33-Phong_Shading.flv
    34-Material_Calculations.flv
    35-Material_Calculations.flv
    36-Introduction_to_Transparency.flv
    37-Blending.flv
    38-The_Over_Operator.flv
    39-The_Over_Operator_Quiz.flv
    40-The_Over_Operator_Quiz.flv
    41-The_Z_Buffer_and_Transparency.flv
    42-Solving_Transparent_Z_Buffering.flv
    43-Solving_Transparent_Z_Buffering.flv
    44-Solving_Transparent_Z_Buffering_part_II.flv
    45-Solving_Transparent_Z_Buffering_part_II.flv
    46-Transparency_and_three_js.flv
    47-What_Went_Wrong.flv
    48-What_Went_Wrong.flv
    49-Advanced_Transparency_Methods.flv
    50-Future_of_Transparency.flv
    51-Conclusion.flv


下载链接：http://url.cn/5pgfswv
提取密码：rPafJ6

]]></description><link>https://blog.gaoredu.com/article/78bdc66b-3e2a-47b5-b4ff-e2b146573f4c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/78bdc66b-3e2a-47b5-b4ff-e2b146573f4c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 28 Jan 2018 20:54:51 GMT</pubDate></item><item><title><![CDATA[EmEditor专业文本编辑器中文绿色便携专业版软件]]></title><description><![CDATA[EmEditor 世界上最快的文本编辑器，同时支持 32 位和 64 位版本！主要支持的功能如下：

1.编码
语法高亮、配置、多选区编辑、比较文档、使用正则表达式
2.支持大型 CSV 数据
轻松处理 248 GB 大文件、超大文件控制器、分割/合并文件、优化 CSV 和排序功能、多线程性能
3.用户体验
量身定制的界面、标签式设计、快速启动、自动保存工作区内容、标记
4.扩展性
支持插件、强大的可编辑宏、整合外部工具、显示大纲
5.多功能性
兼容 Windows 8、支持 Unicode 、便携性选项、多文件转码、快速 64 位版本
6.编辑
CSV 模式、显示 HTML/XML 字符引用工具提示、二进制编辑、括号/引号自动完成、仅编辑选定模式、拖放、拼写检查、编号、剪切板记录
7.便利性
书签、快速启动、错误处理程序与崩溃修复、即时消息（插件）、支持通配符、固定至列表、保存到保护文件夹、抓取文本
8.高亮
标签高亮匹配功能
9.搜索
查找和替换、批次替换
10.显示
状态窗口、全屏视图


278


该软件的以上10个功能基本上涉及到了我们日常文本编辑过程中的方方面面，值得推荐！
开源软件下载链接  https://pan.baidu.com/s/1nv1fOLz    网盘密码：7mcb
]]></description><link>https://blog.gaoredu.com/article/01a61cd0-f6fd-49f2-873b-b3796d6fc92e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/01a61cd0-f6fd-49f2-873b-b3796d6fc92e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 28 Jan 2018 01:01:58 GMT</pubDate></item><item><title><![CDATA[【C#进阶】如何在C#中使用MD5加密算法]]></title><description><![CDATA[MD5讯息摘要演算法（英语：MD5 Message-Digest Algorithm），一种被广泛使用的密码杂凑函数，可以产生出一个128位元（16位元组）的散列值（hash value），用于确保信息传输完整一致。也是目前市面上应用最广泛的一种加密算法了！线提供C#中的MD5加密算法的使用方法，具体如下：


//GetString（）和ToString（）方法的使用：一般都用getString（）， 对于极其特别的用toString（）方法
        static string GetMd5(string str)
        {
            //1.获得一个MD5对象
            MD5 md5 = MD5.Create();
            //2.开始加密, 返回加密好的字节数组
            byte buffer = Encoding.Default.GetBytes(str);
            byte bufferMd5 = md5.ComputeHash(buffer);

            //3.字节数组转换成字符串（GetString()与toString（）方法）
            //string result = Encoding.Default.GetString(bufferMd5);  //error
            //string res = string.Empty;

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bufferMd5.Length; i++)
            {
                //4.把每一个都转换为字符串存起来（防止乱码）
                //sb.Append(bufferMd5.ToString());  //默认是十进制
                sb.Append(bufferMd5.ToString("x2"));  //转换为十六进制(X转换我十六进制， 2每次都是两位数)
            }
            return sb.ToString();
        }


]]></description><link>https://blog.gaoredu.com/article/f460dea2-f3fd-440f-8ab9-2a1a0090cda6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f460dea2-f3fd-440f-8ab9-2a1a0090cda6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Jan 2018 23:03:16 GMT</pubDate></item><item><title><![CDATA[【C#进阶】C#中常用的字符串函数总结]]></title><description><![CDATA[其他的就不多说了，就直接上代码吧：
static void Main(String args)
        {
            string s1 = "AAA";
            string s2 = "BBB";
            string s3 = "AAA";
            s2 = "DDD";

            //常用字符串函数测试练习
            //1.判断是否为空
            if (!string.IsNullOrEmpty(s1))
            {
                Console.WriteLine("{0} is not null or Empty", s1);
            }

            //2.字符串转换为char数组
            char array = s2.ToCharArray();
            foreach (char arrr in array)
            {
                Console.WriteLine(arrr);
            }

            //3.char数组转换为字符串
            char arr = { '1', '2', '3', '4' };
            string str = new string(arr);
            Console.WriteLine(str);

            //4.字符串可以看做是一个只读数组
            string name = "Chinese";
            for (int i = 0; i < name.Length; i++)
            {
                Console.WriteLine("name is {1}", i, name);
            }

            //5.null与空的区别：null在内存中没有开辟内存，空在内存中开辟了内存，但是为空

            //6.字符串的大小写转换
            string nameUper = name.ToUpper();
            string nameLower = nameUper.ToLower();
            Console.WriteLine("nameUper{0}, nameLower{1}", nameUper, nameLower);

            //7. 字符串的比较是否相等
            string s11 = "aBc";
            string s22 = "Abc";
            //“Equals” 比较的是引用
            if (s11.Equals(s22, StringComparison.OrdinalIgnoreCase))  //进行忽略大小写的比较（Equals没有忽略大小写）
            {
                Console.WriteLine("字符串是相等的！");
            }

            //"==" 比较的是值
            if (s11 == s22)
            {
                Console.WriteLine(s11 == s22);
            }

            //8. == 和equals的区别：对于string类型而言； 不管是等号还是Equals比较的都是值本身
            Student student1 = new Student() { Name = "刘德华", Age = 18 };
            Student student2 = new Student() { Name = "刘德华", Age = 18 };
            if (student1 == student2)
            {
                Console.WriteLine("student1 == student2");
            }
            else if (student1.Equals(student2))  //Equals默认比较的是地址，如果用到Equals， 如果用到该函数，需要对他进行重写（比较对象的值是否相同）
            {
                Console.WriteLine("student1.Equals(student2)");
            }
            else
            {
                Console.WriteLine("不相等");
            }

            //得到对象所在的类的命名空间
            Console.WriteLine("student1:"+student1.ToString());


            //9.lastIndexOf()，indexOf()
            string s = "老毕吃了一次饭，老 活了！";
            int index = s.IndexOf("老", 1); //从第一个位置开始向后查找（包含第一个位置）; 从1开始往后数数字即可
            Console.WriteLine("index now is "+index);
            index = s.LastIndexOf("老");
            Console.WriteLine("lastIndex of的使用："+index);

            //10.SubString()截取字符串
            int ind = s.IndexOf("，");
            //从，以后的位置开始截取
            s = s.Substring(ind+1);
            Console.WriteLine(s);


            //11.Split()函数
            string st = "A, , , , B , , ,C,      , ,DE, ,F";
            string  strNew = st.Split(new char {',', ' ' }, StringSplitOptions.RemoveEmptyEntries);


            //12.Trim函数， TrimEnd(), TrimStart()
            st = "   1212 12  1 -- ? ";
            Console.WriteLine("1122"+st.Trim(' ', '-'));

            //13.Join方法
            string names = {"金秀贤", " 金贤秀", "金正日" , "金正恩"};
            string res = string.Empty;
            foreach(string n in names)
            {
                res += n + "|";
            }
            Console.WriteLine(res);

            //使用join连接数组
            string result = string.Join("|", names);
            Console.WriteLine(result);

            //14.检测输入的文本中是否有铭感词汇
            if (s.Contains("老"))
            {
                s = s.Replace("老", "******");
            }
            Console.WriteLine(s);
        }
这里我就提供了总共14中C#中的字符串函数使用方法实例，基本上和其他语言C++,jva等的用法差不多吧，相信大家应该会很熟悉的了！
]]></description><link>https://blog.gaoredu.com/article/f23043b5-6466-47c3-ab31-794471585439</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f23043b5-6466-47c3-ab31-794471585439</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Jan 2018 21:24:05 GMT</pubDate></item><item><title><![CDATA[【新】WEBGL最新视频教程第二季 WEBGL点 向量 基础网格知识]]></title><description><![CDATA[
本次分享的WEBGL视频教程目录如下，  本次分享的WEBGL最新视频第二季主要包括如下内容，全集28集，涉及到WEBGL的坐标系统，向量，光照，模型知识等！
  272
273
274




  01-Coordinate_System.flv
    02-Cartesian_Coordinates.flv
    03-Point_or_Vector.flv
    04-Point_or_Vector.flv
    05-Left_Handed_vs_Right_Handed.flv
    06-Right_or_Left.flv
    07-Right_or_Left.flv
    08-The_Sun_Also_Rises.flv
    09-The_Sun_Also_Rises.flv
    10-Which_Way_Is_Up.flv
    11-Interview_Which_Way_is_Up.flv
    12-Coordinate_System_Transform.flv
    13-Coordinate_System_Transform.flv
    14-Points_and_Lines.flv
    15-Triangles.flv
    16-Creating_Geometry_in_three.js.flv
    17-Create_a_Square.flv
    18-Create_a_Square.flv
    19-Triangulation_and_Tessellation.flv
    20-Minimum_Triangulation.flv
    21-Minimum_Triangulation.flv
    22-How_Many_Triangulations.flv
    23-How_Many_Triangulations.flv
    24-Vertex_Ordering_and_Culling.flv
    25-Return_of_the_Square.flv
    26-Return_of_the_Square.flv
    27-Model_Creation.flv
    28-Conclusion.flv
    
下载链接：http://url.cn/5PEZsES
访问密码：JIgzMq

]]></description><link>https://blog.gaoredu.com/article/fe252a6b-952a-4124-81b2-758429a12e9c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fe252a6b-952a-4124-81b2-758429a12e9c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 27 Jan 2018 18:02:28 GMT</pubDate></item><item><title><![CDATA[【C#进阶】对C#中的值类型和引用类型的理解和区别]]></title><description><![CDATA[C#中的值类型和引用类型总结如下：
值类型：int , double, char, bool, decimal, struct, enum引用类型：string, 数组，自定义类， 接口， 委托
区别：值类型的值存储在内存的栈上， 引用类型的值存储在堆中。
（栈上存储数据的效率要高于堆）
值传递：把值类型作为参数传递引用传递：把引用类型作为参数传递
直接来看下面的两个案例：int number = 10;
            string s = "战三";

            //值传递
            Test(number);   //实参
            Console.WriteLine(number);

            //引用传递
            Test2(ref number);
            Console.WriteLine(number);

画出内存四区图：
275
案例二：int number = 10;
            string s = "战三";

            //值传递
            Test(number);   //实参
            Console.WriteLine(number);

            //引用传递
            Test2(ref number);
            Console.WriteLine(number);
276
案例三：//实例
            PersonFive p22 = new PersonFive();
            p22.Name = "胡巴基";
            Test3(p22);
            Console.WriteLine("p22.Name is "+p22.Name);

277
通过以上三个案例和相应的内存四区图，相信大家对这两个概念应该有了更深层次的理解！
]]></description><link>https://blog.gaoredu.com/article/037aafae-c8e8-4f49-895a-8ee773336c59</link><guid isPermaLink="true">https://blog.gaoredu.com/article/037aafae-c8e8-4f49-895a-8ee773336c59</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 23:06:36 GMT</pubDate></item><item><title><![CDATA[2019最新考研英语视频全程班资料共享持续更新]]></title><description><![CDATA[我爱科技论坛2019最新考研英语视频全程班资料共享持续更新啦，主要包括各大考研机构的英语全程班，欢迎大家下载！


英语
268


【2019新D方英语】链接：https://pan.baidu.com/s/1oAoS8D8 


 密码：i1vx
【2019启航英语】链接：https://pan.baidu.com/s/1nxab525 


 密码：9r42
【2019商志英语】链接：https://pan.baidu.com/s/1o9Je3SA 


 密码：lpp8
【2019文都英语】链接：https://pan.baidu.com/s/1d6BIXo 


 密码：r47w
【2019考虫英语】链接：https://pan.baidu.com/s/1kW7Ftsz 


 密码：fq89
【2019有道英语】链接：https://pan.baidu.com/s/1brezDBT 


 密码：x7tn
【2019学府英语】链接：https://pan.baidu.com/s/1nwfQVix 


 密码：bpdc


]]></description><link>https://blog.gaoredu.com/article/db519451-9b7d-4693-97ba-7ab71c170c4b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/db519451-9b7d-4693-97ba-7ab71c170c4b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 22:07:27 GMT</pubDate></item><item><title><![CDATA[【新】WEBGL最新视频教程第一季 WEBGL引言]]></title><description><![CDATA[本次分享的WEBGL视频教程目录如下，   
本次分享的WEBGL最新视频第一季主要包括如下内容，全集49集，主要是WEBGL的基础知识，包括基本的几何基础，着色器，渲染等知识，基本上涉及到了WEBGL的基础知识的方方面面！
269
270
271


01-Introduction.flv
    02-Interactive_3D_Rendering.flv
    03-First_Quiz.flv
    04-First_Quiz.flv
    05-WebGL_Setup.flv
    06-Core_Ideas.flv
    07-Interactivity_and_FPS.flv
    08-FPS_and_Refresh_Rate.flv
    09-Math_Refresher.flv
    10-Math_Refresher.flv
    11-CPU_Cycles.flv
    12-The_Eye.flv
    13-The_Pinhole_Camera.flv
    14-Seeing_is_Believing.flv
    15-Seeing_is_Believing.flv
    16-Eye_versus_Camera.flv
    17-Eye_versus_Camera.flv
    18-View_Frustum.flv
    19-Screen_Door.flv
    20-3D_Scene.flv
    21-How_Many_Pixels.flv
    22-How_Many_Pixels.flv
    23-Light_and_Rendering.flv
    24-How_Many_Computers.flv
    25-How_Many_Computers.flv
    26-Reversing_the_Process.flv
    27-History_of_the_Teapot.flv
    28-Simple_Materials.flv
    29-Simple_Materials.flv
    30-A_Jog_Down_the_Pipeline.flv
    31-Pipeline_Parallelism.flv
    32-Advanced_Box_Factory.flv
    33-Advanced_Box_Factory.flv
    34-Parallelism.flv
    35-Bottleneck.flv
    36-Bottleneck.flv
    37-Stalling_and_Starving.flv
    38-Painters_Algorithm.flv
    39-Flawed_Painting.flv
    40-Flawed_Painting.flv
    41-Z-Buffer.flv
    42-How_Z-Buffer_Works.flv
    43-Z-Buffer_Optimization.flv
    44-Z-Buffer_Optimization.flv
    45-WebGL_and_three.js.flv
    46-Tricky_Question.flv
    47-Different_Rendering_Options.flv
    48-Different_Rendering_Options.flv
    49-Conclusion.flv


下载链接：http://url.cn/5LJmxn4
访问密码：dx1Ofk

]]></description><link>https://blog.gaoredu.com/article/22d75430-8160-49bf-9d39-0d5f58d2a305</link><guid isPermaLink="true">https://blog.gaoredu.com/article/22d75430-8160-49bf-9d39-0d5f58d2a305</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 20:57:12 GMT</pubDate></item><item><title><![CDATA[2019最新考研数学视频全程班资料共享开始推送]]></title><description><![CDATA[我爱科技论坛2019最新考研数学视频全程班资料共享开始推送啦，主要包括各大考研机构的数学全程班资料，欢迎大家下载！


267


数学
【2019李林数学】
链接：https://pan.baidu.com/s/1gfVnLYz 


 密码：iaev
【2019新东方数学直通车】链接https://pan.baidu.com/s/1o9ZZ2Pk 


 
密码：ijl8
【2019qi航数学】链接：https://pan.baidu.com/s/1dHk1lUp 


 密码：1e5y
【2019文都数学】链接：https://pan.baidu.com/s/1nxj4V0l 


 密码：08i5
【2019有道数学】链接：https://pan.baidu.com/s/1i5RLVaX 


 密码：5sk1
【2019张伟数学】链接：https://pan.baidu.com/s/1c37T9kc 


 密码：e6iu
【2019韦林文化数学直通车】链接：https://pan.baidu.com/s/1bq3RRe3 


 密码：5zdd

]]></description><link>https://blog.gaoredu.com/article/518e59c1-1c7d-4cdd-aba8-6722ad7521e9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/518e59c1-1c7d-4cdd-aba8-6722ad7521e9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 20:01:21 GMT</pubDate></item><item><title><![CDATA[2019最新考研政治视频全程班资料共享]]></title><description><![CDATA[我爱科技论坛2019最新考研政治视频全程班资料共享开始推送：

政治全程资料共享班持续更新：
266


【2019政治考研规划】链接：https://pan.baidu.com/s/1edfMnO 


 密码：gzw9
【2019腿姐政治】链接：https://pan.baidu.com/s/1qZ2Lzyc 


 密码：bnuu
【2019文都政治】链接：https://pan.baidu.com/s/1pMHG8wb 


 密码：s5sd
【2019新D方政治】链接：https://pan.baidu.com/s/1dGzedWH 


 密码：pvll
【2019启航政治】链接：https://pan.baidu.com/s/1jJfXbT0 


 密码：98iy
【2019有道政治】链接：https://pan.baidu.com/s/1nwXtFQT 


 密码：ctrx
【2019石磊政治】链接：https://pan.baidu.com/s/1jJ4t8Rs 


 密码：63i5

]]></description><link>https://blog.gaoredu.com/article/5018c7c8-42bd-49a9-ba62-59473d8dd978</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5018c7c8-42bd-49a9-ba62-59473d8dd978</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 18:02:34 GMT</pubDate></item><item><title><![CDATA[中医资料共享之中药学解剖学专家临床经验高级视频教程]]></title><description><![CDATA[中医资料共享:
超声心动图检查及测量技术视频 链接: http://pan.baidu.com/s/1mg69AHi 密码: s686
郝万山讲伤寒论视频教程70集 链接: http://pan.baidu.com/s/1jG5XMUa 密码: r32n
人体解剖学视频教程36集 链接: http://pan.baidu.com/s/1hq4FWGk 密码: 2b2d
王洪图讲黄帝内经视频教程80集 链接: http://pan.baidu.com/s/1pJ0xSin 密码: ace7
卫生部医学视频教程87集 链接: http://pan.baidu.com/s/1yM36Y 密码: 4bje
系统解剖学视频教程32集 链接: http://pan.baidu.com/s/1ntqs7MD 密码: 5kr8
中药炮制视频教程8集 链接: http://pan.baidu.com/s/1eQEnzSA 密码: 5dh6
中药学视频教程79集 链接: http://pan.baidu.com/s/1jGlEYJ8 密码: ejey
中医方剂学视频教程82集 链接: http://pan.baidu.com/s/1hqCN2Ag 密码: g6ci
中医基础理论视频教程75集 链接: http://pan.baidu.com/s/1jGKQSw2 密码: ysa4
中医诊断学视频教程75集 链接: http://pan.baidu.com/s/1hqxUtmc 密码: 9x4d
专家临床经验高级视频教程 链接: http://pan.baidu.com/s/1eQIrnoQ 密码: 3bdi

]]></description><link>https://blog.gaoredu.com/article/a60bcd06-c2a4-4ac8-93db-0e688f190f55</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a60bcd06-c2a4-4ac8-93db-0e688f190f55</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 02:05:20 GMT</pubDate></item><item><title><![CDATA[SecureCRT远程连接工具破解绿色版]]></title><description><![CDATA[265


软件介绍：SecureCRT是一款支持SSH（SSH1和SSH2）的终端仿真程序，同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的远程系统的理想工具。该软甲汉化包基本上已经实现了汉化，除了其他的一些文字较多的地方，但是基本上不影响使用！


下载链接：https://share.weiyun.com/1b080cae17c0d66755b100228dce0f31（密码：WV98）
]]></description><link>https://blog.gaoredu.com/article/4ead9b3f-c554-41e0-a2a7-f32ce5efd06f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4ead9b3f-c554-41e0-a2a7-f32ce5efd06f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 26 Jan 2018 00:07:08 GMT</pubDate></item><item><title><![CDATA[【C#进阶】单例模式和简单工厂设计模式的使用]]></title><description><![CDATA[单例模式的实现过程：①   构造函数私有化②   声明一个静态字段， 作为全局唯一的单例对象③   声明一个静态函数， 返回全局唯一的对象
//单例设计模式
    class SqlHelper
    {
        //1.构造函数私有化， 可以防止外部实例化我的对象
        private SqlHelper()
        {

        }

        //2.声明一个静态字段
        public static SqlHelper singleCase = null;

        //3.声明一个静态函数， 返回全局唯一的对象
        public static SqlHelper GetSingleCase()
        {
            if (singleCase != null)
            {
                return singleCase;
            }
            singleCase = new SqlHelper();
            return singleCase;
        }

    }
简单工厂设计模式和类库的使用：//单例设计模式
    class SqlHelper
    {
        //1.构造函数私有化， 可以防止外部实例化我的对象
        private SqlHelper()
        {

        }

        //2.声明一个静态字段
        public static SqlHelper singleCase = null;

        //3.声明一个静态函数， 返回全局唯一的对象
        public static SqlHelper GetSingleCase()
        {
            if (singleCase != null)
            {
                return singleCase;
            }
            singleCase = new SqlHelper();
            return singleCase;
        }

    }





]]></description><link>https://blog.gaoredu.com/article/4542d53a-3ce9-4f1e-b630-6cfc2485ea11</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4542d53a-3ce9-4f1e-b630-6cfc2485ea11</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 25 Jan 2018 22:03:48 GMT</pubDate></item><item><title><![CDATA[【C#进阶】对静态成员和非静态成员的理解]]></title><description><![CDATA[基本定义：
静态成员：被static修饰实例成员：不被static修饰静态成员先于实例成员被加载到内存中只有创建了对象才有实例成员（在静态类中只能存在静态成员）
使用方法：
 静态成员的调用：      类名.静态成员名  实例成员的调用：      实例名.实例成员（实例就是我们创建的对象）
实际案例class Student1
    {
        private string _name;

        //静态成员是最先加载到内存中的， 有这个静态成员的时候还不一定有_name这个字段（对象的属性）
        public static void Test()
        {
           // _name; //error
        }


        //_sex  是最先加载到内存中去的； 在有GetGender(）这个实例成员的时候， 这个静态成员我肯定是可以访问的
        private static string _sex;
        public void GetGender()
        {
            _sex = "Male";  //ok
        }
    }

【static静态类应用场景】：1.      作为工具类（SqlHelper）2.      在整个项目中实现资源共享
3.      弊端：静态成员必须要等到整个项目结束的时候才会被资源释放；因此在我们的项目中应该尽可能少的使用静态成员
]]></description><link>https://blog.gaoredu.com/article/1fe35d6a-8a3a-4183-a274-107fde259ffb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1fe35d6a-8a3a-4183-a274-107fde259ffb</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 25 Jan 2018 20:59:53 GMT</pubDate></item><item><title><![CDATA[【C#进阶】多态实现的三种方式梳理]]></title><description><![CDATA[方式一：多态的实现之Virtual关键字
多态：(封装和继承都是给我打基础呢，哈哈)
-------》虚方法
      Virtual override

//换一种方式来打卡(一个对象表现多种属性)
            Console.WriteLine("Virtual 关键字的实现多态：");
            foreach(Employee e in emps)
            {
                if (e is Manager)
                {
                    ((Manager)e).DaKa();
                }
                else if (e is Programer)
                {
                    ((Programer)e).DaKa();
                }
                else
                {
                    e.DaKa();
                }

                //开始打卡
                e.DaKa();
            }

//员工，经理， 程序猿
    class Employee
    {
        //父类的打卡被子类重写了（virtual的关键字实现多态）
        public virtual void DaKa()
        {
            Console.WriteLine("Employee Daka");
        }
    }


    class Manager : Employee
    {
        public void DaKa()
        {
            Console.WriteLine("Manager Daka");
        }
    }
    
    class Programer : Employee
    {
        public void DaKa()
        {
            Console.WriteLine("Programer Daka");
        }
    }
-------》抽象类
      Abstract override
    abstract class Person
    {
        public abstract void SayHello();
        public abstract void Test();

        public abstract int SayHi();

        //抽象类是有构造函数的， 但是自己并不能实例化； 可以由子类来使用
        public Person()
        {

        }
    }

    abstract class Student : Person
    {
        //子类也声明我抽象类， 可以不用全部实现父类的抽象函数
        public override void SayHello()
        {
            throw new NotImplementedException();
        }

    }
方式二：多态的实现之抽象类



264

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


//抽象类实现多态练习
namespace ConsoleApp1
{
    class Class4
    {
        static void Main(string args)
        {

            //这有三个移动设备
            MobileDisk md = new MobileDisk();
            Mp3 mp3 = new Mp3();
            UDisk uDisk = new UDisk();

            AirPhone airPhone = new AirPhone();


            //方法一：
            Computer cpu = new Computer();
            cpu.MS = airPhone;//mp3;  //把电脑的当前连接设备设置为MP3（set方法）
            cpu.CPUWrite();
            cpu.CPURead();
            mp3.PlayMusic();  //自己来播放音乐


            //方法二：通过电脑来读取数据
            Computer computer = new Computer();
            computer.CPURead(md);
            computer.CPUWrite(md);




        }
    }

    //不同的设备
    abstract class MobileStorage
    {
        abstract public void Read();
        abstract public void Write();
    }

    class MobileDisk : MobileStorage
    {
        public override void Read()
        {
            Console.WriteLine("移动硬盘在读取数据！");
        }

        public override void Write()
        {
            Console.WriteLine("移动硬盘在写入数据！");
        }
    }


    class UDisk : MobileStorage
    {
        public override void Read()
        {
            Console.WriteLine("UDisk在读取数据！");
        }

        public override void Write()
        {
            Console.WriteLine("UDisk在读取数据！");
        }
    }

    class Mp3 : MobileStorage
    {
        public override void Read()
        {
            Console.WriteLine("MP3在读取数据！");
        }

        public override void Write()
        {
            Console.WriteLine("MP3在读取数据！");
        }

        //这个是我的这个子类的特有属性
        public void PlayMusic()
        {
            Console.WriteLine("MP3在播放音乐！");
        }
    }


    //把耳机也接入了电脑
    class AirPhone : MobileStorage
    {
        public override void Read()
        {
            Console.WriteLine("耳机在读数据！"); 
        }

        public override void Write()
        {
            Console.WriteLine("耳机在写数据！") ;
        }
    }



    //我的电脑
    class Computer
    {
        //方法一： 通过自动属性的方法
        public MobileStorage MS
        {
            get;
            set;
        }
        public void CPURead()
        {
            this.MS.Read();
        }
        public void CPUWrite()
        {
            this.MS.Write();
        }



        //方法二：通过传参的方法
        public void CPURead(MobileStorage ms)
        {
            ms.Read();
        }

        public void CPUWrite(MobileStorage ms)
        {
            ms.Write();
        }
    }
}


使用原则：父类可以创建对象，父类的函数有意义，就使用虚方法；父类没有必要创建对象，父类的函数没有意义， 就使用抽象类。（抽象类也是可以有构造函数的）


方式三：多态的实现之接口
对接口的理解：-----》接口是一种能力-----》接口也是一种规范，如果继承了接口，就必须按照接口的要求来实现这个接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp3
{
    class Class5
    {
        static void Main(string args)
        {
            //实现多态(面向父类编程/面向接口编程； 可以写出更为通用的代码，更好适应需求的不断改变【核心作用】)
            IKouLan kouLan = new Teacher();//new NBAPlayer();
            kouLan.KouLan();

            //IKouLan kouLan = new NoLegPerson(); //error


            Console.ReadKey();
        }
    }


    class Person
    {
        public void Activity()
        {
            Console.WriteLine("activity");
        }
    }

    class Player
    {
        public void Play()
        {
            Console.WriteLine("play a basketball !");
        }
    }


    //接口的引出：一个子类只能继承一个父类， 如果想要继承多个父类； 就使用我接口来实现吧！（解决了继承的单根性问题！）
    interface IKouLan
    {
        void KouLan();
    }

    //class NBAPlayer : Person, Player  ///error: 违反了继承的单根性质
    //{

    //}


    //接口的实现(多重继承)： 接口更侧重于一种能力； 并非每一个人都有扣篮的这个能力
    class NBAPlayer : Person, IKouLan
    {
        public void KouLan()
        {
            Console.WriteLine("NBAPlayer play basketball");
        }
    }

    class Teacher : IKouLan
    {
        public void KouLan()
        {
            Console.WriteLine("Teacher is play ***"); ;
        }
    }

    class NoLegPerson
    {
        public void KouLan()
        {
            Console.WriteLine("I could't play basketball!");
        }
    }
}





]]></description><link>https://blog.gaoredu.com/article/9ca9e245-f6fb-402f-b599-354d3d7476cd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9ca9e245-f6fb-402f-b599-354d3d7476cd</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jan 2018 23:05:35 GMT</pubDate></item><item><title><![CDATA[2015实用矩阵理论最新视频课程]]></title><description><![CDATA[矩阵理论这门课程准确的来说应该属于研究生的课程，不过各位考研党们，也可以提前预习一下哈，就把这个2015最新的教程分享给大家：

263

资料应该来说还是比较全的哈，大家自行下载哈！
下载链接: https://pan.baidu.com/s/1dGkkUAl 密码: bbnu
]]></description><link>https://blog.gaoredu.com/article/d0ca8016-f27f-4629-9606-e99b4d6a9c79</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d0ca8016-f27f-4629-9606-e99b4d6a9c79</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jan 2018 20:58:33 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛倾亲奉献之轻松和我学活全国多种语言系列教程资料共享]]></title><description><![CDATA[语言资料共享:
跟我学讲广东话视频教程 链接: http://pan.baidu.com/s/1eQs8L2a 密码: qh4u
轻松学粤语MP3格式 链接: http://pan.baidu.com/s/1sjuopMt 密码: asaw
学讲广东话50课MP3格式 链接: http://pan.baidu.com/s/1ntJyTXv 密码: f1zq
学讲广州话MP3格式 链接: http://pan.baidu.com/s/1qWr8z04 密码: ymfw
粤语300句MP3格式 链接: http://pan.baidu.com/s/1c0ffJkG 密码: zxtu
粤语会话三月通视频教程 链接: http://pan.baidu.com/s/1gdGTwmJ 密码: 4cpe
粤语入门速成教程MP3格式 链接: http://pan.baidu.com/s/1jG3qcKY 密码: phsc
粤语学习礼包 链接: http://pan.baidu.com/s/1hq9zK6w 密码: e4fv
粤语学习软件 链接: http://pan.baidu.com/s/1sj6z9q1 密码: c1hy
粤语一学就会MP3格式 链接: http://pan.baidu.com/s/1dDpSYJn 密码: rerc
林氏闽南语教程 链接: http://pan.baidu.com/s/1hqKpd1U 密码: 7qvk
闽南话800句MP3格式 链接: http://pan.baidu.com/s/1sjvAli9 密码: x5y5
闽南话童谣wma格式 链接: http://pan.baidu.com/s/1eQfHCYm 密码: md3d
闽南语1000句MP3格式 链接: http://pan.baidu.com/s/1kTMQLPd 密码: 9uxd
闽南语费玉清讲笑话 链接: http://pan.baidu.com/s/1pJywgw7 密码: 84zt
闽南语口语MP3格式 链接: http://pan.baidu.com/s/1c0i37XI 密码: dnvk
台湾闽南语MP3格式 链接: http://pan.baidu.com/s/1bne1QW3 密码: r3qg
普通话智能学习软件有声教程 链接: http://pan.baidu.com/s/1wKK9o 密码: my2j
上海话三月通视频教程 链接: http://pan.baidu.com/s/1o6KIMcq 密码: fyhv
吴语上海话900句 链接: http://pan.baidu.com/s/1gd1ur0B 密码: qrst
学说上海话视频教程 链接: http://pan.baidu.com/s/14mtrg 密码: w9zm
百晓教你讲说温州话 链接: http://pan.baidu.com/s/1ntMgLG9 密码: 8dn7

]]></description><link>https://blog.gaoredu.com/article/e2401508-13ae-499d-95df-fe194e9ccc61</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e2401508-13ae-499d-95df-fe194e9ccc61</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jan 2018 18:05:35 GMT</pubDate></item><item><title><![CDATA[带你使用Everything软件在几秒钟内快速定位找到你需要的任意本地文件]]></title><description><![CDATA[先简单介绍下吧，Everything是一款免费的文件搜索工具，可以极速检索到 NTFS 格式硬盘中的文件名，支持高级搜索、正则表达式、网络搜索、离线搜索等等，可以在几百个G的硬盘中快速找到自己需要的文件或者文件夹。

262


应该算是NTFS最快的搜索软件，没有之一，现提供给大家下载，使用方法也很简单，只需要在检索文件地址栏输入你想要查找的文件名字， 就可以快速找到你想过要的文件了。

下载地址：链接: http://pan.baidu.com/s/1kTDnLGV 密码: a8nk
]]></description><link>https://blog.gaoredu.com/article/fcd724b1-1b82-4833-bd84-99892d4995be</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fcd724b1-1b82-4833-bd84-99892d4995be</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jan 2018 04:08:00 GMT</pubDate></item><item><title><![CDATA[【C#进阶】多态实现的主要条件及动物类的实现代码]]></title><description><![CDATA[主要知识点：1.  多态实现的条件：父类引用指向子类对象子类继承父类   子类对父类的方法进行重写2.  抽象类的主要特点抽象成员只能出现在抽象类中子类继承父类之后必须对父类中的抽象方法予以实现using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp1
{
    //动物类的继承实现
    class Class1
    {
        static void Main(string args)
        {
            //开始实现多态：父类引用指向子类对象
            //Animal animal = new Cat();

            Animal a = {new Cat(), new Dog(), new Pig() };
            foreach(Animal animal in a)
            {
                //动物叫这个方法现在已经实现了多态
                animal.Bark();
                animal.Drink();
                animal.Eat();
            }
        }
    }

    //抽象成员只能出现在抽象类中
    abstract class Animal
    {
        //抽象方法
        public abstract void Bark();  //父类没有办法去确定子类如何实现


        //这里提供的是一个普通的函数
        public  void Eat()
        {
            Console.WriteLine("Animal eat");
        }

        public  void Drink()
        {
            Console.WriteLine("Animal drink");
        }
    }

   //子类继承之后，会把父类的普通函数继承过来； 对于继承过来的抽象函数子类必须要予以实现
    //一个子类继承了一个抽象的类， 那么这个子类就必须重写这个抽象父类中的所有抽象成员（重写）class Cat : Animal
    {
        //函数的重写
        public override void Bark()
        {
            Console.WriteLine("cat bark");
        }
    }

    class Dog : Animal
    {
        public override void Bark()
        {
            Console.WriteLine("dog bark");
        }
    }

    class Pig : Animal
    {
        public override void Bark()
        {
            Console.WriteLine("pig bark");
        }
    }


}


]]></description><link>https://blog.gaoredu.com/article/c2a13375-4699-402e-adcc-b0bd5abd976b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c2a13375-4699-402e-adcc-b0bd5abd976b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jan 2018 03:09:23 GMT</pubDate></item><item><title><![CDATA[编程开发英汉词典的必备字典库文件资料]]></title><description><![CDATA[文件的主要格式如下：
abandon      v.抛弃，放弃
abandonment      n.放弃
abbreviation      n.缩写
abeyance      n.缓办，中止
abide      v.遵守
ability      n.能力
able      adj.有能力的，能干的
abnormal      adj.反常的，变态的
aboard      adv.船(车)上
abolish      v.废除，取消
abolition      n.废除，取消
abortion      n.流产
abortive      adj.无效果的，失败的
about      prep.关于，大约
above      prep.在...之上，高于
above-mentioned      adj.上述的
abreast      adv.并肩，并列

…………………………………………
其中第一列为英文单词， 第二列为音译汉之后的效果， 用户可以通过文件读取方式，进行相应的字符截取操作， 实现一个简单的音译汉软件。
核心代码如下：
private void btnTranslateEnglish_Click(object sender, EventArgs e)
        {
            //英文译汉
            string english = this.txtEnglish.Text.Trim();
            if (dic.ContainsKey(english))
            {
                this.txtChinese.Text = dic;
            }
            else
            {
                this.txtChinese.Text = "请下载更高版本的翻译词典";
            }
        }具体实现思路如上， 用户可以自行尝试。

下载链接见附件：

]]></description><link>https://blog.gaoredu.com/article/d41fbf93-9e97-4105-9ec9-b18547ee4ccf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d41fbf93-9e97-4105-9ec9-b18547ee4ccf</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 24 Jan 2018 02:40:03 GMT</pubDate></item><item><title><![CDATA[养殖资料共享，包括蜜蜂养鸡养猪视频教程]]></title><description><![CDATA[养殖资料共享:
蜜蜂养殖技术教程 链接: http://pan.baidu.com/s/1jGtg48Q 密码: pjqq
养鸡技术教程 链接: http://pan.baidu.com/s/1FH518 密码: ftef
养猪资料视频教程 链接: http://pan.baidu.com/s/1eQxYz7c 密码: ei68

]]></description><link>https://blog.gaoredu.com/article/d5faebcd-492b-4b52-b080-02419d00f18e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d5faebcd-492b-4b52-b080-02419d00f18e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 23 Jan 2018 23:04:58 GMT</pubDate></item><item><title><![CDATA[这套烹饪制作视频教程，带你吃遍全国的小吃城]]></title><description><![CDATA[小吃资料共享:
包子做法大全 链接: http://pan.baidu.com/s/1qWICT7Q 密码: arga
各地素包系列技术 链接: http://pan.baidu.com/s/1gd3weUB 密码: gt3s
河南特色小吃灌汤包 链接: http://pan.baidu.com/s/1gdxq4hH 密码: pw9k
黄花白菌鲜肉包技术 链接: http://pan.baidu.com/s/1jGqyRMQ 密码: bjv8
金盘水煎包制作工艺 链接: http://pan.baidu.com/s/1qWuqy3i 密码: 6g4q
靖江蟹黄汤包制作技术 链接: http://pan.baidu.com/s/1o65PJom 密码: eqqe
菌香海参酱肉大包 链接: http://pan.baidu.com/s/1qWyudv2 密码: qmux
南派小笼包系列 链接: http://pan.baidu.com/s/1eQ4Kd8Y 密码: 8v8c
清香猪肉灌汤包制作 链接: http://pan.baidu.com/s/1o6uu046 密码: mdwy
傻妹包子制作方法 链接: http://pan.baidu.com/s/1c0o9hja 密码: edpw
山西独味汤包视频 链接: http://pan.baidu.com/s/1dDpncqt 密码: m1y6
山西独一味汤包 链接: http://pan.baidu.com/s/1hqivxLM 密码: 85dx
上海生煎包子制作 链接: http://pan.baidu.com/s/1gdtSFSn 密码: ew95
四川包子系列做法 链接: http://pan.baidu.com/s/1pJxajLT 密码: gtwd
天津狗不理包子制作 链接: http://pan.baidu.com/s/1hqtkGE4 密码: qp8s
豫西牛肉水煎包制作 链接: http://pan.baidu.com/s/1qWsozm8 密码: ryaj
比萨饼制作教程 链接: http://pan.baidu.com/s/1o67R6WU 密码: 9rr4
饼的制作资料方法 链接: http://pan.baidu.com/s/1sjME7E1 密码: g29s
公婆饼的做法 链接: http://pan.baidu.com/s/1eQ3ymMA 密码: qbtb
红油煎饼黄河夹肉饼 链接: http://pan.baidu.com/s/1i3w611b 密码: 95xd
黄桥烧饼制作工艺 链接: http://pan.baidu.com/s/1i3Cf6yL 密码: yv7y
煎饼甜面酱制作方法 链接: http://pan.baidu.com/s/1hq2Eg2w 密码: 7ecg
金丝肉饼制作技术 链接: http://pan.baidu.com/s/1hqnfcsG 密码: d8us
麦多馅饼详细技术 链接: http://pan.baidu.com/s/1pJiNd4B 密码: hsua
山东杂粮煎饼技术 链接: http://pan.baidu.com/s/1bnFF8Ov 密码: 3js9
台湾手抓饼技术视频 链接: http://pan.baidu.com/s/1i3xSvjf 密码: tfue
土家掉渣烧饼制作 链接: http://pan.baidu.com/s/1jGKQYoQ 密码: 1zju
土家酱香饼的做法 链接: http://pan.baidu.com/s/1mgCFydU 密码: 97z7
土家烧饼做法 链接: http://pan.baidu.com/s/1qWJYNnQ 密码: fnk7
西安宫廷香酥牛 肉饼 链接: http://pan.baidu.com/s/1eQIrsiA 密码: fw2r
小鱼饼机制作方法 链接: http://pan.baidu.com/s/1pJBTtnd 密码: nwc1
印度飞饼制作方法 链接: http://pan.baidu.com/s/1gd4ciyv 密码: dr9x
豆腐脑晶制作 链接: http://pan.baidu.com/s/1gdgv9hL 密码: f3xy
豆腐脑制作新技术 链接: http://pan.baidu.com/s/1kTBv6WB 密码: j3dx
绍兴臭豆腐制作 链接: http://pan.baidu.com/s/1kTBv6WR 密码: 8kvc
香豆腐的制作技术 链接: http://pan.baidu.com/s/1hq4abha 密码: 8szy
煲仔饭制作技术 链接: http://pan.baidu.com/s/1nXoy6 密码: r3vu
各式炒饭大全技术 链接: http://pan.baidu.com/s/1dD0c2qt 密码: 3es7
黄焖鸡米饭做法 链接: http://pan.baidu.com/s/1eQlhqtc 密码: 8isd
广东肠粉制作技术 链接: http://pan.baidu.com/s/1kTMQMVl 密码: 737t
贵州牛肉粉小吃技术 链接: http://pan.baidu.com/s/1pJsq4xd 密码: rxyt
桂林米粉技术教程 链接: http://pan.baidu.com/s/1eQzu2f4 密码: 4bwf
金盈四宝粉技术资料 链接: http://pan.baidu.com/s/1mgxgsuG 密码: mx9z
一品砂锅米线制作方法 链接: http://pan.baidu.com/s/1qWokHbe 密码: wffq
云南过桥米线制作 链接: http://pan.baidu.com/s/1qWuqz3A 密码: 5a5s
重庆酸辣粉做法 链接: http://pan.baidu.com/s/1gdGTxqb 密码: 86cz
八宝玫瑰镜糕制作 链接: http://pan.baidu.com/s/1o6kRaWi 密码: 8qtk
长垣枣发糕视频资料 链接: http://pan.baidu.com/s/1i3GjrUH 密码: vnrj
河南小吃血糕技术 链接: http://pan.baidu.com/s/1qW5fG5I 密码: be3n
金丝枣糕王技术 链接: http://pan.baidu.com/s/1jGs0EQM 密码: yw73
欧式脆皮蛋糕技术 链接: http://pan.baidu.com/s/1bnuGOMV 密码: vuu4
烧麦制作工艺方法 链接: http://pan.baidu.com/s/1i3peWDJ 密码: jg2y
水晶钵仔糕制作工艺 链接: http://pan.baidu.com/s/1gdGnvvP 密码: ntvd
韩国口口香烤馒头 链接: http://pan.baidu.com/s/1eQlNmZg 密码: i2uk
韩国料理制作详解 链接: http://pan.baidu.com/s/1eQm3m6m 密码: 486x
韩式泡菜制作技术 链接: http://pan.baidu.com/s/12kyuE 密码: c8gu
福建千里香馄饨 链接: http://pan.baidu.com/s/1jGjDpfK 密码: 8acd
三鲜大馄饨做法 链接: http://pan.baidu.com/s/1gdu8GGr 密码: 2jpj
川香干锅鸭做法 链接: http://pan.baidu.com/s/1gdixzl5 密码: 1eei
德庄火锅做法 链接: http://pan.baidu.com/s/1bnm9sJH 密码: ri2s
肥牛火锅做法 链接: http://pan.baidu.com/s/1dDexJCP 密码: e7by
干锅油制作视频 链接: http://pan.baidu.com/s/1gdEl5Kn 密码: c4yt
干锅专业技术_文字 链接: http://pan.baidu.com/s/1o6IGX78 密码: sm1k
贵州豆米火锅做法 链接: http://pan.baidu.com/s/1mgkpkla 密码: q78t
贵州花江狗肉火锅 链接: http://pan.baidu.com/s/1eQnjl0A 密码: ic2n
海陆空甲鱼火锅 链接: http://pan.baidu.com/s/1c0DBFOW 密码: xnfw
黑玉米排骨汤锅 链接: http://pan.baidu.com/s/1eQF900i 密码: 3vga
花溪竹荪清汤鹅 链接: http://pan.baidu.com/s/1jGnbaXS 密码: 5dyd
火锅底料制作视频 链接: http://pan.baidu.com/s/1qW3JMBa 密码: utii
火锅老油制作 链接: http://pan.baidu.com/s/1pJ9l5PL 密码: ngf2
火锅专业技术_文字 链接: http://pan.baidu.com/s/1jGCJ23k 密码: gub3
筋头巴脑锅做法 链接: http://pan.baidu.com/s/1kTsyGsv 密码: pt9h
冷锅鱼底料制作 链接: http://pan.baidu.com/s/1bndLSRl 密码: qm5c
冷锅鱼制作教学视频 链接: http://pan.baidu.com/s/1sj3bJat 密码: c9jy
麻辣香锅专业技术_文字 链接: http://pan.baidu.com/s/1jGgpzSU 密码: a661
毛肚火锅做法 链接: http://pan.baidu.com/s/1o6j5d2q 密码: ymrn
内蒙古小肥羊火锅 链接: http://pan.baidu.com/s/1kTu04sf 密码: 6xvu
啤酒鸭火锅做法 链接: http://pan.baidu.com/s/1hqKpeHu 密码: c9sa
奇味涮烫小吃技术 链接: http://pan.baidu.com/s/1eQiz3VW 密码: spbi
清油火锅料制作 链接: http://pan.baidu.com/s/1sjQItNv 密码: qckx
烧鸡公火锅做法 链接: http://pan.baidu.com/s/1dDya8y1 密码: jkxx
生片菊花火锅做法 链接: http://pan.baidu.com/s/1jGlFfJg 密码: apry
双玉马蹄鸡制作 链接: http://pan.baidu.com/s/1bnFF9Or 密码: 5635
四川酸菜鱼火锅 链接: http://pan.baidu.com/s/1eQ2IlcI 密码: 2sa2
四生片火锅做法 链接: http://pan.baidu.com/s/1kT3nZZT 密码: zx52
梭边鱼火锅配方 链接: http://pan.baidu.com/s/1sjJqPUt 密码: sakh
香辣干锅肥肠 链接: http://pan.baidu.com/s/1jGL6UV0 密码: fptf
新派酸菜鱼做法 链接: http://pan.baidu.com/s/1ntDZmR3 密码: gq96
新香辣片片鱼 链接: http://pan.baidu.com/s/1jGxkx6Y 密码: x324
羊蝎子火锅制作方法 链接: http://pan.baidu.com/s/1nttG67n 密码: yu5p
鱼头火锅做法 链接: http://pan.baidu.com/s/1mgEHrr6 密码: f2wa
鱼丸火锅做法 链接: http://pan.baidu.com/s/1dD1ys0p 密码: itnx
鸳鸯火锅做法 链接: http://pan.baidu.com/s/1mgBZ27A 密码: cik8
重庆红汤火锅 链接: http://pan.baidu.com/s/1eQnjlIy 密码: ycwk
重庆江湖火锅配方制法 链接: http://pan.baidu.com/s/1pJsW3JP 密码: 3ghx
重庆酸菜鱼火锅 链接: http://pan.baidu.com/s/1uITpc 密码: 4h3d
重庆无渣红油火锅 链接: http://pan.baidu.com/s/1mg1kgxM 密码: t16e
奥尔良炸鸡翅制作 链接: http://pan.baidu.com/s/1jGAbDJK 密码: egpg
八珍烤鸡制作技术 链接: http://pan.baidu.com/s/1c0ffNAo 密码: stjd
沟帮子熏鸡及熏鸡架 链接: http://pan.baidu.com/s/1ntMMKMd 密码: buvc
桂花坛焖鸡制作技术 链接: http://pan.baidu.com/s/1dDHDxRV 密码: rwwk
河南道口烧鸡技术 链接: http://pan.baidu.com/s/1eQtULNG 密码: pc5f
双玉马蹄鸡制作 链接: http://pan.baidu.com/s/1i7ArW 密码: 5wtw
台湾无骨香鸡柳制作 链接: http://pan.baidu.com/s/1dDIZqFZ 密码: nkpn
温州骨里香鸡乡巴佬熟食 链接: http://pan.baidu.com/s/1bnjR1TH 密码: qv5f
炸鸡秘方教程 链接: http://pan.baidu.com/s/1sj5dFlj 密码: awi9
重庆鸡公煲的做法 链接: http://pan.baidu.com/s/1bnwII2F 密码: z7me
12款北方包子饺子 链接: http://pan.baidu.com/s/1eQk1uKU 密码: citv
开口乐水饺做法 链接: http://pan.baidu.com/s/1eQq6Vse 密码: uhmm
开口露馅水饺技术视频 链接: http://pan.baidu.com/s/1qWuqzXq 密码: b3as
清真回族饺子系列 链接: http://pan.baidu.com/s/1sjNuARj 密码: ih4d
川北风味凉皮米皮 链接: http://pan.baidu.com/s/1kTAF8Rd 密码: ir5n
凉拌系列教程 链接: http://pan.baidu.com/s/1c06QfDY 密码: 4hx3
陕西凉皮制作 链接: http://pan.baidu.com/s/1mggRt2K 密码: iksf
绝味鸭脖两种味型卤水 链接: http://pan.baidu.com/s/1o67R8oy 密码: 2k7h
快乐卤鸡蛋视频教学 链接: http://pan.baidu.com/s/1jG9vHL8 密码: qjtd
卤菜卤水卤料 链接: http://pan.baidu.com/s/1gdD5AeB 密码: 65ix
卤鸭系列技术资料 链接: http://pan.baidu.com/s/1c0hhDZU 密码: dbtc
卤猪头肉配方制作工艺 链接: http://pan.baidu.com/s/1i35ZTIX 密码: 2wp3
卤猪下水配方和制作技术 链接: http://pan.baidu.com/s/1i36FQwl 密码: qeji
御品轩卤味烧腊制作 链接: http://pan.baidu.com/s/1gdIpq63 密码: gifm
八碗香锅面制作方法 链接: http://pan.baidu.com/s/1gdF712V 密码: 4t4n
二十四种面食的制做 链接: http://pan.baidu.com/s/1eQET6wi 密码: mken
贵州鸡汤面制作方法 链接: http://pan.baidu.com/s/1c08lVfa 密码: ex7p
河南烩面制作方法 链接: http://pan.baidu.com/s/1i3gX0wP 密码: 9cpj
河南小吃浆水面 链接: http://pan.baidu.com/s/1sjsmzal 密码: e1du
湖南牛肉面制作方法 链接: http://pan.baidu.com/s/1kTMQNxt 密码: 2cjb
兰州拉面制作方法 链接: http://pan.baidu.com/s/1c0hN9te 密码: 7r2f
陕西擀面皮制作方法 链接: http://pan.baidu.com/s/1o6MeMM2 密码: tn7k
台湾红烧牛肉面制作 链接: http://pan.baidu.com/s/1jGiXur8 密码: m3p9
太和板面王制作方法 链接: http://pan.baidu.com/s/1pJDVnU7 密码: 33w7
西安烤面筋制作技术 链接: http://pan.baidu.com/s/1o6DXpBc 密码: 2cn3
牛骨头加工技术 链接: http://pan.baidu.com/s/1i38bNpF 密码: wu74
奇味牛骨头技术视频 链接: http://pan.baidu.com/s/1mg1kgy8 密码: kcbr
奇香美味牛骨头熬制 链接: http://pan.baidu.com/s/1sjA3wvz 密码: dtc9
水煮牛杂技术做法 链接: http://pan.baidu.com/s/1mgy2ocS 密码: ka5h
KFC肯德基系列技术 链接: http://pan.baidu.com/s/1hq8JN7m 密码: 7vvs
鹌鹑蛋的腌制技术 链接: http://pan.baidu.com/s/1o6xImQe 密码: grap
八大菜系教程 链接: http://pan.baidu.com/s/1kT28ekJ 密码: tnud
冰糖葫芦和糖炒粟子 链接: http://pan.baidu.com/s/1gdCPDa7 密码: isve
长春厚德福酱肉配方 链接: http://pan.baidu.com/s/1sjPw1qd 密码: ybuy
出油咸蛋快速腌制 链接: http://pan.baidu.com/s/1sjG8T8D 密码: sasc
丁大毛不化冰糖葫芦 链接: http://pan.baidu.com/s/1pJ63FR1 密码: 6285
东瀛刺身制作方法 链接: http://pan.baidu.com/s/1o6qqDF8 密码: evgk
风味土豆制作技术 链接: http://pan.baidu.com/s/1eQxY6Wy 密码: ttrd
骨肉相连制作方法 链接: http://pan.baidu.com/s/1141Wi 密码: e45t
怪难吃系列风味小吃 链接: http://pan.baidu.com/s/1ntFvmEd 密码: x7j6
关东煮技术配方视频 链接: http://pan.baidu.com/s/1mglBbfU 密码: imwp
河北牙签肉工艺 链接: http://pan.baidu.com/s/1pJuswyB 密码: 7rma
河南小吃炒三不粘 链接: http://pan.baidu.com/s/1dD0Iw2d 密码: mj4u
河南小吃生煎皮渣 链接: http://pan.baidu.com/s/1dDya8Id 密码: 5pcj
河南小吃油旋技术 链接: http://pan.baidu.com/s/1o6FZhLC 密码: jnj4
姐弟俩土豆粉技术 链接: http://pan.baidu.com/s/1jG4BUp4 密码: s3gz
烤羊肉串做法 链接: http://pan.baidu.com/s/1sj9hwcP 密码: t7c4
刘氏锅贴制作技术 链接: http://pan.baidu.com/s/1sjLYEC1 密码: gxg7
驴肉火烧制作教程 链接: http://pan.baidu.com/s/1dDjNzGH 密码: 471h
麻辣烫制作方法 链接: http://pan.baidu.com/s/1c04OlGW 密码: fxa4
麻辣香锅配方 链接: http://pan.baidu.com/s/1c0g1Emc 密码: 66ut
毛家菜介绍视频 链接: http://pan.baidu.com/s/1eQGp2CU 密码: 652x
孟记奇香辣椒油大全 链接: http://pan.baidu.com/s/1hq8dSfq 密码: xsiq
牛羊肉泡馍制作方法 链接: http://pan.baidu.com/s/1kT1mjbT 密码: 7wyv
浓香蒸菜制作技术 链接: http://pan.baidu.com/s/1o6n8RGY 密码: 79aa
烹饪调味秘方800例 链接: http://pan.baidu.com/s/1eQAPL1S 密码: d3r4
秦镇米皮制作方法 链接: http://pan.baidu.com/s/1o6Bpz2i 密码: if7i
热菜旺菜蒸菜 链接: http://pan.baidu.com/s/1hREQq 密码: kb7n
沙县小吃的制作教程 链接: http://pan.baidu.com/s/1eQCRF4u 密码: 5ece
砂锅土豆粉制作技术 链接: http://pan.baidu.com/s/1pJomMOr 密码: a6bk
上海香嫩里脊炸串 链接: http://pan.baidu.com/s/17Ag0Y 密码: iecw
上瘾香酥辣椒制作 链接: http://pan.baidu.com/s/1eQAPL2y 密码: xpx2
四川小吃制作技术 链接: http://pan.baidu.com/s/1c097Vo8 密码: 8udy
松花蛋制作技术 链接: http://pan.baidu.com/s/1jGBx9Im 密码: a3da
西安腊汁肉夹馍做法 链接: http://pan.baidu.com/s/1bnfhOjP 密码: 983g
蟹酿橙的制作方法 链接: http://pan.baidu.com/s/1c08lVCs 密码: eh4w
新奥尔良烤翅配方 链接: http://pan.baidu.com/s/1dDtqRpn 密码: 1kk6
营养早餐做法 链接: http://pan.baidu.com/s/1mgoYObA 密码: 9r6v
章鱼小丸子制作技术 链接: http://pan.baidu.com/s/1hqKVcBa 密码: j99i
芝麻糖的制作工艺 链接: http://pan.baidu.com/s/1kTsyHkN 密码: pqr9
烧烤资料大全 链接: http://pan.baidu.com/s/1sjxCegX 密码: swcb
水果烧烤技术视频 链接: http://pan.baidu.com/s/1pJFrdSf 密码: mn55
田氏炭烤鸡蛋制作 链接: http://pan.baidu.com/s/1o6EDiLs 密码: gepg
新疆烧烤制作配方 链接: http://pan.baidu.com/s/1ntOiEk5 密码: tg7g
油炸烧烤肉串的制作 链接: http://pan.baidu.com/s/1kTAF9xt 密码: aj9b
台湾红烧牛肉面制作 链接: http://pan.baidu.com/s/1hqnLd9E 密码: ndha
台湾手抓饼技术视频 链接: http://pan.baidu.com/s/1dDdbPip 密码: xr5x
台湾爽脆肉丸技术视频 链接: http://pan.baidu.com/s/1dD2eqMd 密码: hxf6
台湾无骨香鸡柳制作 链接: http://pan.baidu.com/s/1hqvmCAS 密码: ypre
台湾鲜奶麻花王小吃 链接: http://pan.baidu.com/s/1bn4Qq7t 密码: 5rph
台湾珍珠奶茶技术 链接: http://pan.baidu.com/s/1eQIXpuU 密码: snhz
广东老火靓汤的做法 链接: http://pan.baidu.com/s/1gdzsz7P 密码: f7q1
淮南牛肉汤的做法 链接: http://pan.baidu.com/s/1pJ1dWVp 密码: w7m2
江西瓦罐煨汤的做法 链接: http://pan.baidu.com/s/1mg9rABm 密码: zzcs
奇味鲜涮汤制作工艺 链接: http://pan.baidu.com/s/1pJOK7wv 密码: yinq
石锅鱼汤料制作秘方 链接: http://pan.baidu.com/s/1kTgnyS3 密码: etx4
鸭血粉丝汤的做法 链接: http://pan.baidu.com/s/1ntsuFlJ 密码: 4yya
冰拿铁冰粥炒冰刨冰 链接: http://pan.baidu.com/s/1sjsSwix 密码: 6u4i
蛋烘糕艾蒿叶儿粑 链接: http://pan.baidu.com/s/1dDIZrqD 密码: n3xr
满记甜品资料 链接: http://pan.baidu.com/s/1sjwqnST 密码: mep4
沙拉的制作方法 链接: http://pan.baidu.com/s/1sjHUTIX 密码: fywc
水果果冻布丁 链接: http://pan.baidu.com/s/1kTzknqB 密码: xie3
甜品店奶茶资料 链接: http://pan.baidu.com/s/1mgkVgmc 密码: x291
北京烤鸭制作技术 链接: http://pan.baidu.com/s/1gdtSHNX 密码: jfnf
馋嘴鸭的制作方法 链接: http://pan.baidu.com/s/1jGgVxXW 密码: 93s4
川香干锅鸭做法 链接: http://pan.baidu.com/s/1o65jMgM 密码: cdr7
干锅辣鸭头制作方法 链接: http://pan.baidu.com/s/1pJxalAV 密码: 27sh
绝味鸭脖两种味型卤水 链接: http://pan.baidu.com/s/1mg7pLsW 密码: 63qz
卤鸭系列技术资料 链接: http://pan.baidu.com/s/1pJFXeVD 密码: j5fv
啤酒烤鸭关键技术 链接: http://pan.baidu.com/s/1mgmrb5Y 密码: t3j5
啤酒鸭火锅做法 链接: http://pan.baidu.com/s/1qWKEKI4 密码: ab26
全聚德烤鸭技术 链接: http://pan.baidu.com/s/1ntIIZxB 密码: z65t
武汉精武鸭脖技术 链接: http://pan.baidu.com/s/1dDm5rnN 密码: 4v54
武汉鸭颈鸭脖子 链接: http://pan.baidu.com/s/1dDnlssT 密码: 9a4a
盐水鸭制作技术教学 链接: http://pan.baidu.com/s/1sj1FQoP 密码: 1y4d
避风塘珍珠奶茶 链接: http://pan.baidu.com/s/1c032p2K 密码: hsm9
老酸奶制作方法 链接: http://pan.baidu.com/s/1eQHBwaA 密码: tt2a
台湾珍珠奶茶技术 链接: http://pan.baidu.com/s/1bn6mlkV 密码: 5tsy
现磨豆浆做法 链接: http://pan.baidu.com/s/1dDsARAx 密码: nzep
无矾无铝油条 链接: http://pan.baidu.com/s/1kTxixYf 密码: kc9x
油炸冰淇淋制作技术 链接: http://pan.baidu.com/s/1kTouSWv 密码: r4yv
赵大妈油炸系列 链接: http://pan.baidu.com/s/1hqzqxJQ 密码: qk6z
大连铁板鱿鱼 链接: http://pan.baidu.com/s/1pJoSIkb 密码: 3rka
烤鱼配方教程 链接: http://pan.baidu.com/s/1c0AnUu8 密码: 4hqz
圣旨骨酥鱼制作方法 链接: http://pan.baidu.com/s/1i3KneXR 密码: srwi
铁板鱿鱼的制作视频 链接: http://pan.baidu.com/s/1pJEBlur 密码: vj9t
万州烤鱼做法 链接: http://pan.baidu.com/s/1kTh9tfp 密码: wme3
新香辣片片鱼 链接: http://pan.baidu.com/s/1i3ndcI5 密码: au5a
诸葛烤鱼资料 链接: http://pan.baidu.com/s/1kTouSWR 密码: huv2
八宝粥的做法 链接: http://pan.baidu.com/s/1c0ezOIk 密码: 43m4
砂锅粥制作工艺 链接: http://pan.baidu.com/s/1c0CVHx2 密码: xkk3

]]></description><link>https://blog.gaoredu.com/article/cecf63bb-bbcd-48be-97cf-ba7a4c004672</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cecf63bb-bbcd-48be-97cf-ba7a4c004672</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 23 Jan 2018 18:05:09 GMT</pubDate></item><item><title><![CDATA[【C#进阶】C#中面向对象编程三个关键字的复习]]></title><description><![CDATA[1.1 new 关键字的作用-----》在堆中开辟空间-----》在开辟的堆空间中创建对象-----》调用对象的构造函数
①        如何阻止构造函数的初始化？（解决之道：构造函数的私有化）
//构造函数（ 对自动生成属性的保护）
        private Object(char gender)
        {
            if (gender != '男' && gender != '女')
            {
                this.Gender = 's';
            }
            this.Gender = gender;
  }
②        如何隐藏父类的成员？
public class Person
    {
        public void sayHello()
        {
            Console.WriteLine("父类的");
        }
    }
    class Student : Person
    {
        public new void sayHello()  //彻底隐藏了父类的sayHello（）方法
        {
            Console.WriteLine("子类的");
        }
    }
1.2  this关键字
①        this指代的是当前对象
//函数
        public void Test()
        {
            //在函数内部局部变量的优先级要高于成员变量
            string Name = "ABC";
            Console.WriteLine(Name);  //局部变量
            Console.WriteLine(this.Name);  //全局变量
        }
②        显示地调用自己的构造函数
案例一：如果直接创建两个构造函数，相同的代码会产生代码冗余现象
//构造函数
        public Teacher(string name, string age, char gender, int chinses, int math, int english)
        {
            Name = name;
            Age = age;
            Gender = gender;
            Chinses = chinses;
            Math = math;
            English = english;
        }

        //构造函数2(Ctrl+K+D 自动对齐)
        public Teacher(string name, string age, char gender)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
        }
解决之道：
//:this()表示调用子类（也就是调用自己的构造函数）
        //构造函数
        public Teacher(string name, string age, char gender, int chinses, int math, int english)
        {
            Name = name;
            Age = age;
            Gender = gender;
            Chinses = chinses;
            Math = math;
            English = english;
        }

        //构造函数2(Ctrl+K+D 自动对齐)  ---会产生代码的冗余
       /* public Teacher(string name, string age, char gender)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
        }*/



        //:this()表示调用子类（也就是调用自己的构造函数）
        public Teacher(string name, string age, char gender) : this(name, age, gender, 0, 0, 0)
        {

        }

        //只用来显示我的分数情况
        public Teacher(string name, int chinese, int math, int english) : this(name, "0", '0', chinese, math, english)
        {

        }
//实例化一个对象
            //会自动调用我的那个默认的构造函数
            Teacher t = new Teacher("AAA", "Male", '1', 50, 60, 10);
            t.sayHi();
            t.ShowScore();

            //会自动调用第二个构造函数
            Teacher t2 = new Teacher("BBB", "FeMale", '1');
            t2.sayHi();

            //会自动调用第三个构造函数
            Teacher t3 = new Teacher("DDD", 88, 66, 55);
            t3.ShowScore();
1.3 base关键字① 显示调用父类的构造函数
//this和base的使用
        public Student GetStudent()
        {
            return this;
        }
 
①    调用父类的成员
public Person GetPerson()
        {
            //return base; //error:base仅仅是一个纸箱父类的引用罢了
 
            //可以通过base强制调用父类的方法
            base.sayHello();
 
            return new Person();
        }

]]></description><link>https://blog.gaoredu.com/article/6f2d7d88-eaa7-4238-b190-1249167b42a4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6f2d7d88-eaa7-4238-b190-1249167b42a4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 23 Jan 2018 04:04:02 GMT</pubDate></item><item><title><![CDATA[中国社科院|浙江大学|厦门大学历年考研真题资料试卷]]></title><description><![CDATA[-2017-06-01 19:04
中国科学院成都山地灾2005年硕士研究生入学考试植物营养学试卷--httpbt.com--951.html
8KB2017-06-01 19:04
中国科学院成都山地灾2005年硕士研究生入学考试遥感概论试卷--httpbt.com--950.html
6KB2017-06-01 19:04
中国科学院成都山地灾2005年硕士研究生入学考试土力学试卷--httpbt.com--949.html
8KB2017-06-01 19:04
中国科学院成都山地灾2005年硕士研究生入学考试生态学试卷--httpbt.com--948.html
8KB2017-06-01 19:04
中国科学院成都山地灾2005年硕士研究生入学考试经济地理学试卷--httpbt.com--947.html
6KB2017-06-01 19:04
中国科学院成都山地灾2005年硕士研究生入学考试地理信息系统试卷--httpbt.com--944.html
7KB2017-06-01 19:04
中国科学院2005年硕士研究生入学考试西方哲学史试卷--httpbt.com--1092.html
6KB2017-06-01 19:04
中国科学技术信息研究2005年硕士研究生入学考试科学技术史试卷--httpbt.com--1090.html
7KB2017-06-01 19:04
中国科学技术信息研究2005年硕士研究生入学考试科技史写作试卷--httpbt.com--1089.html
7KB2017-06-01 19:04
中国传媒大学2006年硕士研究生入学考试传播学试卷--httpbt.com--633.html
6KB2017-06-01 19:04
中国传媒大学2005年硕士研究生入学考试传播理论与历史试卷--httpbt.com--855.html
6KB2017-06-01 19:04
浙江工商大学2005年硕士研究生入学考试微生物学试卷--httpbt.com--1026.html
8KB2017-06-01 19:04
浙江工商大学2005年硕士研究生入学考试生物化学试卷--httpbt.com--1025.html
6KB2017-06-01 19:04
浙江大学2006年硕士研究生入学考试民法学试卷--httpbt.com--665.html
6KB2017-06-01 19:04
浙江大学2006年硕士研究生入学考试传播学试卷--httpbt.com--532.html
7KB2017-06-01 19:04
浙江大学2005年硕士研究生入学考试心理学试卷--httpbt.com--1142.html
6KB2017-06-01 19:04
浙江大学2005年硕士研究生入学考试普通心理学试卷--httpbt.com--1172.html
6KB2017-06-01 19:04
浙江大学2005年硕士研究生入学考试管理学试卷--httpbt.com--443.html
11KB2017-06-01 19:04
浙江大学2003年硕士研究生入学考试管理学试卷--httpbt.com--437.html
6KB2017-06-01 19:04
浙江大学2002年硕士研究生入学考试植物学试卷--httpbt.com--214.html
6KB2017-06-01 19:04
浙江大学2002年硕士研究生入学考试植物生理学试卷--httpbt.com--215.html
9KB2017-06-01 19:04
浙江大学2002年硕士研究生入学考试遗传学试卷--httpbt.com--216.html
9KB2017-06-01 19:04
浙江大学2002年硕士研究生入学考试管理学试卷--httpbt.com--438.html
8KB2017-06-01 19:04
浙江大学2001年硕士研究生入学考试管理学试卷--httpbt.com--439.html
6KB2017-06-01 19:04
浙江大学2000年硕士研究生入学考试管理学试卷--httpbt.com--440.html
6KB2017-06-01 19:04
浙江大学1999年硕士研究生入学考试管理学试卷--httpbt.com--441.html
6KB2017-06-01 19:04
浙江大学1998年硕士研究生入学考试管理学试卷--httpbt.com--442.html
6KB2017-06-01 19:04
厦门大学2005年硕士研究生入学考试中西文艺基础试卷--httpbt.com--1141.html
6KB2017-06-01 19:04
厦门大学2005年硕士研究生入学考试行政管理试卷--httpbt.com--1015.html
14KB2017-06-01 19:04
厦门大学2005年硕士研究生入学考试新闻传播试卷--httpbt.com--1014.html
6KB2017-06-01 19:04
厦门大学2005年硕士研究生入学考试现当代文学试卷--httpbt.com--1019.html
6KB2017-06-01 19:04

下载链接: https://pan.baidu.com/s/1bqHyRQf 密码: rvy9


]]></description><link>https://blog.gaoredu.com/article/95a1949f-9031-43e1-8e35-f1334aa7d6fd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/95a1949f-9031-43e1-8e35-f1334aa7d6fd</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 23 Jan 2018 02:50:25 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛多种舞蹈资料共享大全集合]]></title><description><![CDATA[舞蹈资料共享:
2011北京国际芭蕾舞暨编舞比赛ok 链接: http://pan.baidu.com/s/1gd2Gb9T 密码: padf
芭蕾舞视频教程 链接: http://pan.baidu.com/s/1gdnMZ8f 密码: 4i4j
10套肚皮舞音乐 链接: http://pan.baidu.com/s/1gd7zOX1 密码: ubra
Rania初级肚皮舞视频教程 链接: http://pan.baidu.com/s/1i3zon3n 密码: eike
肚皮舞减肥视频教程 链接: http://pan.baidu.com/s/1mgBZuYW 密码: spfb
宋扬肚皮舞 链接: http://pan.baidu.com/s/1gdERuW7 密码: xgnc
温可馨肚皮舞视频教程 链接: http://pan.baidu.com/s/1jGiXmFc 密码: a7nx
罗兰塑身钢管舞视频教程 链接: http://pan.baidu.com/s/1bnGv06r 密码: fzcx
广场舞45首视频mp4格式带伴奏 链接: http://pan.baidu.com/s/1i3ncU7j 密码: y384
广场舞正背面分解动作视频教程 链接: http://pan.baidu.com/s/1hqmyZ0w 密码: sp9f
广场舞中高级视频教程 链接: http://pan.baidu.com/s/1mgy2gK4 密码: 9hvu
shuffle鬼步舞中文基础教程 链接: http://pan.baidu.com/s/1gdjJnub 密码: 86dy
精舞门鬼步舞音乐MP3格式 链接: http://pan.baidu.com/s/1pJHsUuB 密码: qbzd
精舞门鬼步舞中级视频教程 链接: http://pan.baidu.com/s/1twNoE 密码: vn7x
墨尔本鬼步舞视频教程 链接: http://pan.baidu.com/s/1hqu64Va 密码: q3e2
交谊舞歌曲精选集合 链接: http://pan.baidu.com/s/1jGzSiBc 密码: txb2
杨艺交谊舞视频教程 链接: http://pan.baidu.com/s/1sjoO5x7 密码: w1pn
北京CK舞团街舞视频教程 链接: http://pan.baidu.com/s/1i3xmrXV 密码: nq6w
迪厅性感街舞视频教程 链接: http://pan.baidu.com/s/1gd8LJ03 密码: 1cvn
韩国街舞视频教程 链接: http://pan.baidu.com/s/1bnlntgF 密码: teec
街舞基础练习视频教程 链接: http://pan.baidu.com/s/1gdF7uhX 密码: ypzs
街舞教学视频教程 链接: http://pan.baidu.com/s/1eQev9x4 密码: ugd4
街舞快速入门视频教程 链接: http://pan.baidu.com/s/1jGtM2gA 密码: i2z7
街舞团队FABEL的基础教学 链接: http://pan.baidu.com/s/1sj4xAyx 密码: gyq9
女子街舞爵士舞视频教程 链接: http://pan.baidu.com/s/1dDhf2b3 密码: kjae
小船街舞视频教程 链接: http://pan.baidu.com/s/1qWvCkFy 密码: nqep
爵士舞快速入门视频教程 链接: http://pan.baidu.com/s/1sjr6vFZ 密码: 3ywp
女子爵士舞视频教程 链接: http://pan.baidu.com/s/1sjmgFX7 密码: qmyv
现代爵士舞Jazz基础视频教程 链接: http://pan.baidu.com/s/1hq1YgCG 密码: rqg6
拉丁舞初级视频教程 链接: http://pan.baidu.com/s/1jGDzugm 密码: 8yyw
拉丁舞中级视频教程 链接: http://pan.baidu.com/s/1bnFF2EV 密码: 3yg2
少儿拉丁舞入门基础教程 链接: http://pan.baidu.com/s/1jGvOvky 密码: bdta
斯拉维克与卡琳娜激情拉丁舞基础 链接: http://pan.baidu.com/s/1eQtoEI2 密码: 55wq
张海燕燃脂减肥拉丁舞 链接: http://pan.baidu.com/s/1dDyG0gx 密码: dg65
朝鲜族舞蹈视频教程 链接: http://pan.baidu.com/s/1c02gqn2 密码: myv7
学跳民族舞视频教程 链接: http://pan.baidu.com/s/1eQcZF2q 密码: 5tjt
MV舞蹈教学视频 链接: http://pan.baidu.com/s/1pJKaHS3 密码: a9df
CK舞团poppin基础视频教程 链接: http://pan.baidu.com/s/1jGnaTUm 密码: 6ixg
迪厅舞蹈视频教程 链接: http://pan.baidu.com/s/1o6Og4ye 密码: pava
桂晶bbox视频教程 链接: http://pan.baidu.com/s/1o6tEtQi 密码: t9ee
滑步机械舞视频教程 链接: http://pan.baidu.com/s/1hqH7ltU 密码: 8spf
交谊舞 狐步、慢四、华尔兹、跳舞教程 链接: http://pan.baidu.com/s/1bnyK5fL 密码: bxuq
慢三舞蹈入门视频教程 链接: http://pan.baidu.com/s/1kTCbwEz 密码: w71s
南贤俊机械舞视频教程 链接: http://pan.baidu.com/s/1lVq4e 密码: v6yk
三步踩舞蹈视频教程 链接: http://pan.baidu.com/s/1gd4HWp9 密码: reft
舞魅 链接: http://pan.baidu.com/s/1sjqk05v 密码: bgij
国标舞教学之牛仔舞组合教程 链接: http://pan.baidu.com/s/1pJsqx5p 密码: 8gc4

]]></description><link>https://blog.gaoredu.com/article/5f5c6bf8-ec66-4739-9356-305272965c41</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5f5c6bf8-ec66-4739-9356-305272965c41</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 23 Jan 2018 02:04:04 GMT</pubDate></item><item><title><![CDATA[XMind7 最新Windows平台思维导图开源软件免费下载]]></title><description><![CDATA[Xmind 7 Pro是由XMind Ltd公司带来的一款优秀思维导图软件，可帮助用户进一步地激发其创造力，提升效率，最终获得稳固的竞争优势，适用于会议管理、项目管理、信息管理、计划和时间管理、企业决策分析等领域。


259
功能特色： 1、本地网络共享 
2、Mind工具箱 
3、下钻 
4、甘特图 
5、使用Offic/PDF 
6、导图合并 
7、演示 
8、主题 
9、导图截图 
10、高级过滤器 
11、强力搜索 
12、录音笔记 
13、密码加密 
14、SVG 
15、在线思维导图库 
16、模板 
17、剪贴画 
18、索引视图 
19、保存到印象笔记 
20、XMind资源包 


软件下载地址：http://www.yxdown.com/soft/273488.html
]]></description><link>https://blog.gaoredu.com/article/db691872-cfd5-48fa-9af0-ef9c8190be40</link><guid isPermaLink="true">https://blog.gaoredu.com/article/db691872-cfd5-48fa-9af0-ef9c8190be40</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 22 Jan 2018 20:34:51 GMT</pubDate></item><item><title><![CDATA[资料共享之武术资料徒手格斗训练系列教程]]></title><description><![CDATA[武术资料共享:
海豹部队徒手格斗训练 链接: http://pan.baidu.com/s/1c075UaG 密码: anf9
截拳道街头格斗完全剖析 链接: http://pan.baidu.com/s/1qWzFRjQ 密码: thcp
经典泰拳教学片 链接: http://pan.baidu.com/s/1dDdHD9R 密码: sxvn
少儿跆拳道基础入门 链接: http://pan.baidu.com/s/1hqvm4N6 密码: 5x1q
咏春拳体系教学7集 链接: http://pan.baidu.com/s/1bnHbwgZ 密码: cwss
自由搏击散打技法 链接: http://pan.baidu.com/s/1ntOi6pz 密码: e4nv

]]></description><link>https://blog.gaoredu.com/article/2c6c6ee1-f84a-4703-9005-4bebcbfb6336</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2c6c6ee1-f84a-4703-9005-4bebcbfb6336</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 22 Jan 2018 18:05:29 GMT</pubDate></item><item><title><![CDATA[【C#进阶】利用面向对象编程和进程控制文件的打开操作]]></title><description><![CDATA[使用进程打开指定文件的实现步骤：
  Console.WriteLine("使用进程打开指定的文件:"+"………………………………");
            //1.封装我们要打开的文件
            string path = "E:\\2018C#Learn\\Projects\\ConsoleApp2\\WindowsFormsApp1\\bin\\Debug\\WindowsFormsApp1.exe";
            ProcessStartInfo startInfo = new ProcessStartInfo(path);
            //2.创建进程对象
            Process pro = new Process();
            //3.告诉进程要打开的文件信息
            pro.StartInfo = startInfo;
            //4.实例函数调用方法
            pro.Start();
案例完整版实现代码：
satic void Main(String args)静态方法：
//静态方法
        static BaseFile GetFile(string filePath, string fileName)
        {
            //把指定的父类文件名字返回出去
            BaseFile bf = null;

            //获取文件的后缀名字(.txt)
            string strExtension = Path.GetExtension(fileName);

            //根据名字来判断(生成不同的实例对象)
            switch (strExtension)
            {
                case ".txt":
                    bf = new TxtFile(filePath, fileName);
                    break;
                case ".mp4":
                    bf = new Mp4File(filePath, fileName);
                    break;
                case ".avi":
                    bf = new AviFile(filePath, fileName);
                    break;
                default:
                    Console.WriteLine("当前系统暂不支持该文件格式！");
                    break;
            }
            return bf;
        }


    }
文件的读写项目：
class BaseFile
    {
        //字段， 属性， 构造函数， 函数， 索引器
        private string _filePath;

        //封装属性的快捷键（Ctrl+R+E）
        public string FilePath
        {
            get => _filePath;
            set => _filePath = value;
        }

        //自动属性的快捷键：prop+两下tab 按键
        public string FileName { get; set; }

        //构造函数（有参）
        public BaseFile(string filePath, string fileName)
        {
            this.FileName = fileName;
            this.FilePath = filePath;
        }

        //无参构造函数
        public BaseFile()
        {

        }


        //设计一个函数，用来打开指定的文件
        public void OpenFile()
        {
            ProcessStartInfo psi = new ProcessStartInfo(this.FilePath+"\\"+this.FileName);
            Process pro = new Process();
            pro.StartInfo = psi;
            pro.Start();
        }
    }

    //子类的设计(继承积累)
    class TxtFile : BaseFile
    {
        //子类默认会调用 父类的无参构造函数； 因此父类必须要有无参构造函数【错误点1】

        //让子类显式的去调用父类的有参构造函数
        public TxtFile(string filePath, string fileName) : base(filePath, fileName)
        {

        }

    }

    //这个类继承父类，也具有父类的方法和属性
    class Mp4File : BaseFile
    {
        public Mp4File(string filePath, string fileName):base(filePath, fileName)
        {

        }
    }

    class AviFile : BaseFile
    {
        //子类的有参构造函数
        public AviFile(string filePath, string fileName):base(filePath, fileName)
        {

        }
    }
}


]]></description><link>https://blog.gaoredu.com/article/0ee8cc77-a40e-4a93-8c3d-0ff41b5410f1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0ee8cc77-a40e-4a93-8c3d-0ff41b5410f1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 22 Jan 2018 02:35:56 GMT</pubDate></item><item><title><![CDATA[撩妹必备-多达4个G的微信黑科技专用表情包免费下载]]></title><description><![CDATA[257
258

具体的表情包看下目录就知道了，撩妹必备，装逼必备的微信专用表情包。

总共文件大小为4个G左右吧，大家可以使用这个大容量的黑科技微信表情包去装逼了。

表情包下载链接：https://pan.baidu.com/s/1i5GF98T
]]></description><link>https://blog.gaoredu.com/article/c695085c-b2ba-419d-8922-ea0f26dfe842</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c695085c-b2ba-419d-8922-ea0f26dfe842</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 22 Jan 2018 01:01:53 GMT</pubDate></item><item><title><![CDATA[黑科技撩妹实用技巧之两千多个可爱表情包免费分享]]></title><description><![CDATA[253
254
255
256

这么多的实用撩妹表情，有了它，撩妹更轻松！给你的撩妹过程增加娱乐！这个黑科技表情包是收集了全网最完善的表情信息，可供大家装逼撩妹的时候使用哈。
撩妹实用表情下载链接：https://pan.baidu.com/s/1pLIw9tD


]]></description><link>https://blog.gaoredu.com/article/2c340087-2261-4069-a2e3-77129efebd3e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2c340087-2261-4069-a2e3-77129efebd3e</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Jan 2018 23:01:55 GMT</pubDate></item><item><title><![CDATA[资料共享之书法资料大全（包括钢笔毛笔欧体等多种字体）]]></title><description><![CDATA[书法资料共享:
钢笔书法视频教程 链接: http://pan.baidu.com/s/1o67l2B4 密码: 9fku
隶书书法视频教程 链接: http://pan.baidu.com/s/1c0DB8cg 密码: b5pj
柳体书法视频教程 链接: http://pan.baidu.com/s/1bnbJQzH 密码: f79n
毛笔书法视频教程 链接: http://pan.baidu.com/s/1pJwuftp 密码: t7pn
欧体书法视频教程 链接: http://pan.baidu.com/s/1c0waBhm 密码: 8nmx
速写训练与技巧视频 链接: http://pan.baidu.com/s/16TWV8 密码: ubcb
田蕴章 每日一题 每日一字 链接: http://pan.baidu.com/s/1bndfLEZ 密码: nmii
行书书法视频教程 链接: http://pan.baidu.com/s/1jGu2zTc 密码: r6id
颜体书法视频教程 链接: http://pan.baidu.com/s/1pJP0vJP 密码: h89a
硬笔书法视频教程 链接: http://pan.baidu.com/s/1sjBPeYL 密码: rgvw

]]></description><link>https://blog.gaoredu.com/article/b6283601-fec0-451d-be63-08535aed575d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b6283601-fec0-451d-be63-08535aed575d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Jan 2018 23:01:55 GMT</pubDate></item><item><title><![CDATA[小小黑科技快速让无广告变色龙制作APK，通吃所有网站]]></title><description><![CDATA[252


主要功能：逐个黑科技的主要功能是可以实现代刷/秒赞/影视站/游戏站等网站的功能，基本上在这个APK里就可以完美运行。基本上去除了变色龙底部广告，并在后期逐渐完善所有的付费功能/插件，通吃所有的网站。


下载链接：https://pan.baidu.com/s/1dG3h99v
]]></description><link>https://blog.gaoredu.com/article/0c1867c3-4b85-4ca9-8ed3-691dd87db013</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0c1867c3-4b85-4ca9-8ed3-691dd87db013</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Jan 2018 21:05:45 GMT</pubDate></item><item><title><![CDATA[苹果数据恢复软件最新免注册破解版资源共享]]></title><description><![CDATA[使用方法：安装原版后，复制此破解文件粘贴到软件的安装目录下替换覆盖掉原文件就可以了


iMyfone D-Back数据恢复软件特色功能简介：
246
     1、可以从iTunes备份恢复;
     2、可恢复被病毒或者其他软件损坏的文件；
     3、可以从iCloud的备份恢复;
     4、可恢复以往删除的各种文件，不限制类型；
     5、不止恢复iPhone的电话短信，还可以恢复第三方软件的内容，比如QQ或者微信；

开源软件下载地址：https://pan.baidu.com/s/1i6dqNjv 密码: 27z8


]]></description><link>https://blog.gaoredu.com/article/35a9db96-80b5-4f44-bf4b-34a777e5244c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/35a9db96-80b5-4f44-bf4b-34a777e5244c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 21 Jan 2018 01:02:35 GMT</pubDate></item><item><title><![CDATA[烹饪和摄影资料共享大全集合]]></title><description><![CDATA[烹饪资料:
烹饪刀工工法视频教程 链接: http://pan.baidu.com/s/1jnyLC 密码: a8n8
-----------------------------------------------------------------------------------------
摄影资料:
黑面的人像摄影攻略 链接: http://pan.baidu.com/s/1c0GZuRe 密码: m71p
婚礼摄像三日通 链接: http://pan.baidu.com/s/1bnfhF6B 密码: uu3n

]]></description><link>https://blog.gaoredu.com/article/e1a4b1b1-4ab7-4db0-8297-39c1cdbd639a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e1a4b1b1-4ab7-4db0-8297-39c1cdbd639a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2018 22:03:45 GMT</pubDate></item><item><title><![CDATA[百度云链接密码暴力破解工具资源共享]]></title><description><![CDATA[主要功能是通过暴力破解方式突破百度云链接的分享密码，从而可以直接绕过链接的密码直接获取分享的资源：

247248
249
250
251





下载链接：:http://url.cn/5u1C15T

]]></description><link>https://blog.gaoredu.com/article/99ebe8bc-a4a0-4510-8e28-a899253b8f5a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/99ebe8bc-a4a0-4510-8e28-a899253b8f5a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2018 21:35:39 GMT</pubDate></item><item><title><![CDATA[百度云盘不限速下载器最新版，让你的下载速度至少提升10倍以上【持续更新】]]></title><description><![CDATA[PanDownload下载无限制版近期表示，由于2018.01.16 近期百度进行了一系列的打击措施，使用第三方下载器有可能导致账号下载功能被禁用。在收到部分用户反映这个问题后已紧急把软件关停了，防止更多人受到影响。导致现在的百度云下载无限制版无法使用。

Na百度云下载无限制版使用方法如下：



240


开源软件下载通道的:
链接：https://pan.baidu.com/s/1ghgsRCZ 密码：jbvf



]]></description><link>https://blog.gaoredu.com/article/a56cee9d-4931-484e-9e88-5e5ef5e22ffe</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a56cee9d-4931-484e-9e88-5e5ef5e22ffe</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2018 21:28:53 GMT</pubDate></item><item><title><![CDATA[魔方多种玩法黑科技，轻松带你从入门到精通精品视频教程打包整理]]></title><description><![CDATA[魔方资料:
魔方入门玩法 链接: http://pan.baidu.com/s/1o6ss0Fw 密码: x5a3
三阶魔方教程 链接: http://pan.baidu.com/s/1pJ5N8xX 密码: wsqm
四阶魔方教程 链接: http://pan.baidu.com/s/1i3ENsaT 密码: hq7x
五阶魔方教程 链接: http://pan.baidu.com/s/1nttaxYh 密码: c8pc

]]></description><link>https://blog.gaoredu.com/article/5589bcbe-c98b-4eea-b10c-f6752dc25f9d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5589bcbe-c98b-4eea-b10c-f6752dc25f9d</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2018 18:03:28 GMT</pubDate></item><item><title><![CDATA[2016传智播客C#就业班15集全集无水印版]]></title><description><![CDATA[全部文件返回上一级|全部文件>2016传智24期资料无密码版

239

文件名大小修改日期
15 Unity 3D
-2017-05-22 16:35
14 win10APP开发
-2017-05-22 16:35
13 7月9号就业培训
-2017-05-22 16:35
12 OA项目九天
-2017-05-22 16:35
11 MVC两天
-2017-05-22 16:35
10 2015-06-17 EF
-2017-05-22 16:35
09 图书商城项目五天
-2017-05-22 16:35
08 ASP.NET十一天
-2017-05-22 16:35
07 .NET就业班-三层项目+SVN五天
-2017-05-22 16:35
06 JQuery
-2017-05-22 16:35
05 DOM
-2017-05-22 16:35
04 JavaScript
-2017-05-22 16:35
03 SQL和ADO三天
-2017-05-22 16:35
02 数据库四天
-2017-05-22 16:35
01 基础加强六天
-2017-05-22 16:35



链接：http://pan.baidu.com/s/1b8946q 密码：hss4   望采纳 24期的
]]></description><link>https://blog.gaoredu.com/article/a7540a2a-7669-4c78-b21f-be7407370532</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a7540a2a-7669-4c78-b21f-be7407370532</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2018 04:42:06 GMT</pubDate></item><item><title><![CDATA[Unity3D和OPenGL的一些学习实用黑科技网站资料共享]]></title><description><![CDATA[Unity中不怎么推荐使用GLSL参考文章：http://en.wikibooks.org/wiki/Cg_Programming/Unity，
Blender教程参考：http://en.wikibooks.org/wiki/GLSL_Programming；
官方shader的相关例子参考：http://wiki.unity3d.com/index.php/Shaders
Surface Shader Examples: http://docs.unity3d.com/Documentation/Components/SL-SurfaceShaderExamples.html
Surface Shader Lighting Examples:http://docs.unity3d.com/Document ... ghtingExamples.html
Vertex and Fragment Shader Examples: http://docs.unity3d.com/Documentation/Components/SL-VertexFragmentShaderExamples.html


----
关于OpenGL的资料：Learning Modern 3D Graphics ProgrammingOpenGL ProgrammingAnton's OpenGL 4 Tutorials一个开发者的博客：One-minute Dungeon: Behind the scenes游戏中法线贴图的技巧：A game of Tricks-Normal mapped Scripts

参考：
http://en.wikibooks.org/wiki/GLSL_Programming/Unity/Minimal_Shader





================
更多高级的Shader知识
=================
GPU Pro 1~5：http://pan.baidu.com/s/1qWLSxAk
GPU Gems：
http://www.slideshare.net/DAMSIGNUP/so4-flexible-shadermanagmentandpostprocessing

其他书籍的索引：http://www.douban.com/doulist/1445745/
http://www.zhihu.com/question/26720808

]]></description><link>https://blog.gaoredu.com/article/82896600-74e4-4e8b-bba7-2758d8d79b1b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/82896600-74e4-4e8b-bba7-2758d8d79b1b</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 20 Jan 2018 03:04:01 GMT</pubDate></item><item><title><![CDATA[非常口才非凡人生等多种口才训练视频教程]]></title><description><![CDATA[讲座资料:
非常口才非凡人生 链接: http://pan.baidu.com/s/1dDo7b7F 密码: 4q8q
胡谢骅PTT亿万赢家好口才 链接: http://pan.baidu.com/s/1mgzictU 密码: gwvc
金克成三天练就金口才 链接: http://pan.baidu.com/s/1sjn2D3J 密码: 3dgm
口才的力量 链接: http://pan.baidu.com/s/1c04ieMc 密码: 38qr
口才与演讲 链接: http://pan.baidu.com/s/1kTzQd75 密码: dnkt
兰彦岭智慧演说与实效口才 链接: http://pan.baidu.com/s/1i3jFh7f 密码: 8myn
李强成功演讲口才 链接: http://pan.baidu.com/s/1lpxIQ 密码: iuei
李强演讲与口才主持人特训 链接: http://pan.baidu.com/s/1dDFByYd 密码: 4er9
李真顺魅力口才公众演说技巧 链接: http://pan.baidu.com/s/1c0zyzle 密码: fy2k
刘景斓口才 链接: http://pan.baidu.com/s/1dhPPs 密码: 8skn
刘氏口才训练演讲 链接: http://pan.baidu.com/s/1sjOGvoh 密码: pkds
魅力口才 链接: http://pan.baidu.com/s/1gdhb0vL 密码: x6r2
魅力口才与沟通艺术 链接: http://pan.baidu.com/s/1c0rWN8c 密码: vwhc
邵守义练就一流口才 链接: http://pan.baidu.com/s/1jG8F9YI 密码: h74d
殷亚敏口才百炼成金 链接: http://pan.baidu.com/s/1gd6JODP 密码: udnt
余世维有效沟通 链接: http://pan.baidu.com/s/1pJkiQ4V 密码: uhfs
张国洪口才生产力 链接: http://pan.baidu.com/s/1pJ6370B 密码: wj3q


]]></description><link>https://blog.gaoredu.com/article/d92fbc3f-7227-407a-b497-60452b0fae4e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d92fbc3f-7227-407a-b497-60452b0fae4e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 19 Jan 2018 21:07:41 GMT</pubDate></item><item><title><![CDATA[10分钟健身锻炼|练出六块腹肌|教你学游泳视频教程]]></title><description><![CDATA[健身资料:
10分钟健身锻炼 链接: http://pan.baidu.com/s/1hqldhy8 密码: wz2d
如何练出六块腹肌 链接: http://pan.baidu.com/s/1nt1hTKd 密码: jper
教你学游泳视频教程6集 链接: http://pan.baidu.com/s/1kTH1a1x 密码: q96y
郑多燕健身操全集 链接: http://pan.baidu.com/s/1bn0guir 密码: k5im

]]></description><link>https://blog.gaoredu.com/article/9f6a6030-ecb2-480d-9398-ed5cc6dbb33b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9f6a6030-ecb2-480d-9398-ed5cc6dbb33b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 19 Jan 2018 18:07:41 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【无问西东】]]></title><description><![CDATA[电影名称：无问西东
片长: 片长: 138分钟主演：章子怡、黄晓明、王力宏

238

网友评价：因为，《无问西东》是我看过，最特别的青春片了。▼说它特别，是因为它时间跨度特别大。绝大多数的青春片，为了引起特定年龄段人的共鸣，都是特定某一个时期的青春。比如，《你好旧时光》，是2004年的高中。《致我们终将逝去的青春》，是1990年代的大学。还有冯小刚的《芳华》，是1970-1980年的文工团。这些片子，有很重的时代痕迹，打的是怀旧牌。 

237

网盘：https://pan.baidu.com/s/1htA2BVA 密码：n4ye磁力：magnet:?xt=urn:btih:DF124F16F78B0ECDB0D90766F20E63F4FF8A000D

下载链接：主演：章子怡、黄晓明、王力宏
磁力链接：magnet:?xt=urn:btih:DF124F16F78B0ECDB0D90766F20E63F4FF8A000D



爱奇艺在线观影地址：爱奇艺在线观看地址：http://www.iqiyi.com/v_19rr7q0u0o.html。
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）


]]></description><link>https://blog.gaoredu.com/article/1411cca0-dfc5-4cd8-bd27-87e954f6ab69</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1411cca0-dfc5-4cd8-bd27-87e954f6ab69</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 19 Jan 2018 03:10:19 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛乐器资料大全]]></title><description><![CDATA[乐器资料:
二胡资料 链接: http://pan.baidu.com/s/1hqAfAle 密码: i99t
吉他自学入门与提高 链接: http://pan.baidu.com/s/1c08RNO0 密码: 4q71
蓝老师吉他教学 链接: http://pan.baidu.com/s/1hqH7kva 密码: bevg
木吉他初级教程 链接: http://pan.baidu.com/s/1i33rUs9 密码: 587m
傻瓜学吉他视频教程 链接: http://pan.baidu.com/s/1hq8JFgw 密码: n6za
左轮吉他初级入门教程 链接: http://pan.baidu.com/s/1gdtmCuB 密码: 7nhn

]]></description><link>https://blog.gaoredu.com/article/738da9ea-4663-4f58-b314-611b4c9c7cc2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/738da9ea-4663-4f58-b314-611b4c9c7cc2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 19 Jan 2018 02:29:02 GMT</pubDate></item><item><title><![CDATA[健康养生之道之男性女性健康宝典]]></title><description><![CDATA[健康资料:
关爱男性健康 链接: http://pan.baidu.com/s/1gdeZ38J 密码: y9u9
黄帝内经：养生真意扶阳祛湿 链接: http://pan.baidu.com/s/1bLRZK 密码: 781b
减压教程秘籍资料 链接: http://pan.baidu.com/s/1gdD51B1 密码: 2fdt
女人的智慧 链接: http://pan.baidu.com/s/1i3zUjRn 密码: x2pc
女性健康宝典 链接: http://pan.baidu.com/s/1qWoQ8DQ 密码: ym2s
手诊-观手察病知健康 链接: http://pan.baidu.com/s/1sj2vDQP 密码: v9uh
四大名医传人话养生 链接: http://pan.baidu.com/s/1qWsUrDU 密码: ymfs

]]></description><link>https://blog.gaoredu.com/article/2266c053-c390-4cc8-bc82-a0a1e31abef9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2266c053-c390-4cc8-bc82-a0a1e31abef9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 19 Jan 2018 01:03:53 GMT</pubDate></item><item><title><![CDATA[剪纸基础|民间剪纸技巧|实用剪纸技法教学视频教程]]></title><description><![CDATA[剪纸资料:
剪纸基础教学视频教程 链接: http://pan.baidu.com/s/1qWwsdNe 密码: gzqz
民间剪纸技巧图文教程 链接: http://pan.baidu.com/s/1o6HuWoa 密码: 962b
实用剪纸技法视频教程 链接: http://pan.baidu.com/s/1pJmQI5X 密码: 5kw4
怎样学剪纸图文教程 链接: http://pan.baidu.com/s/1qW4zBEc 密码: fnhf

]]></description><link>https://blog.gaoredu.com/article/8bbed650-a2b5-4842-b2c9-3ade3dca0876</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8bbed650-a2b5-4842-b2c9-3ade3dca0876</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 18 Jan 2018 21:00:47 GMT</pubDate></item><item><title><![CDATA[K歌软件和唱歌从入门到精通视频教程]]></title><description><![CDATA[唱歌资料:
K歌软件（练歌必备） 链接: http://pan.baidu.com/s/1ntHwYpj 密码: vw1r
唱歌从入门到精通视频教程 链接: http://pan.baidu.com/s/1pJqU0sz 密码: cgmq
唱歌基础新手学习视频教程 链接: http://pan.baidu.com/s/1o6IGPAi 密码: jurk
唱歌速成视频教程 链接: http://pan.baidu.com/s/1bn2ioOn 密码: bm5x
金铁霖教授声乐教学视频教程 链接: http://pan.baidu.com/s/1hqw8vOg 密码: 3byd
卡拉ok唱歌实例视频教程 链接: http://pan.baidu.com/s/1ntqY6rZ 密码: thx2
看谱学歌与基础乐理视频教程 链接: http://pan.baidu.com/s/1i3vkzdV 密码: epw2
流行歌曲演唱视频教程 链接: http://pan.baidu.com/s/1c04ieJm 密码: mqxr
男高音演唱视频教程 链接: http://pan.baidu.com/s/1bnGvz1X 密码: daty
女高音演唱视频教程 链接: http://pan.baidu.com/s/1mg7pCfQ 密码: csbh
欧美流行演唱视频教程 链接: http://pan.baidu.com/s/1gdixrqz 密码: 1psk
嗓音练习视频教程 链接: http://pan.baidu.com/s/1mg1PVkO 密码: nccm
声乐基础视频教程 链接: http://pan.baidu.com/s/1eQo4VWA 密码: 2nxq
通俗民族美声视频教程 链接: http://pan.baidu.com/s/1bnEZ6xT 密码: gt3y

]]></description><link>https://blog.gaoredu.com/article/5e031502-f863-4543-8d8e-91fc05972a19</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5e031502-f863-4543-8d8e-91fc05972a19</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 18 Jan 2018 18:09:09 GMT</pubDate></item><item><title><![CDATA[Linux安全工程师必备完全渗透实战教程从入门到精通视频教程]]></title><description><![CDATA[234


236
文件名大小修改日期
BackTrack & Kali 教程.part11.rar
4.27G2016-11-28 19:47
BackTrack & Kali 教程.part10.rar
4.38G2016-11-28 22:02
BackTrack & Kali 教程.part09.rar
4.38G2016-11-28 21:47
BackTrack & Kali 教程.part08.rar
4.38G2016-11-28 21:46
BackTrack & Kali 教程.part07.rar
4.38G2016-11-28 21:47
BackTrack & Kali 教程.part06.rar
4.38G2016-11-28 21:45
BackTrack & Kali 教程.part05.rar
4.38G2016-11-28 21:43
BackTrack & Kali 教程.part04.rar
4.38G2016-11-28 19:45
BackTrack & Kali 教程.part03.rar
4.38G2016-11-28 19:47
BackTrack & Kali 教程.part02.rar
4.38G2016-11-28 19:46
BackTrack & Kali 教程.part01.rar
4.38G2016-11-28 19:47


这个黑科技视频教程下载链接：https://pan.baidu.com/s/1i48f6pn#list/path=%2F

]]></description><link>https://blog.gaoredu.com/article/79792160-aee1-4b36-8c27-f56bc3d9d460</link><guid isPermaLink="true">https://blog.gaoredu.com/article/79792160-aee1-4b36-8c27-f56bc3d9d460</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 18 Jan 2018 02:52:45 GMT</pubDate></item><item><title><![CDATA[Proe4.0安装软件基础视频教程及实战教程]]></title><description><![CDATA[Proe资料:
Proe4.0安装软件 链接: http://pan.baidu.com/s/1mgN4AaG 密码: p1vt
Proe5.0安装软件 链接: http://pan.baidu.com/s/1yM2wI 密码: udb6
机械模具资料大合集 链接: http://pan.baidu.com/s/1sjqQztr 密码: seh5
Proe3.0板金设计视频教程 链接: http://pan.baidu.com/s/1o6oUDWQ 密码: u6s2
Proe3.0数控加工编程视频教程 链接: http://pan.baidu.com/s/114tBK 密码: 1yxd
Proe3.0燕秀高级分模教程 链接: http://pan.baidu.com/s/1i30Ag1f 密码: pe3x
Proe4.0基础视频教程 链接: http://pan.baidu.com/s/1i30Ag1v 密码: t2ts
Proe4.0曲面实战工业造型 链接: http://pan.baidu.com/s/1gdkzmkr 密码: 7cyw
Proe4.0实例视频教程 链接: http://pan.baidu.com/s/1bnoBb6B 密码: dcbc
Proe4.0无维IceFai高级教程 链接: http://pan.baidu.com/s/1pJOe2Gr 密码: 3bmn
Proe5.0钣金设计从入门到精通 链接: http://pan.baidu.com/s/1dD0cuit 密码: fz9h
Proe5.0机械设计从入门到精通 链接: http://pan.baidu.com/s/1pJkOOCr 密码: 3uep
Proe5.0蓝牙耳机全套产品设计 链接: http://pan.baidu.com/s/1sjmMEy5 密码: y3pu
Proe5.0林清安钣金教程 链接: http://pan.baidu.com/s/1qWDTbSo 密码: aa7h
Proe5.0模具设计从入门到精通 链接: http://pan.baidu.com/s/1gdtmChl 密码: bh4x
Proe5.0模型渲染视频教程 链接: http://pan.baidu.com/s/1mg3lQLa 密码: cmfd
Proe5.0曲面与产品设计 链接: http://pan.baidu.com/s/1c0rWNyK 密码: d359
Proe5.0入门与提高视频教程 链接: http://pan.baidu.com/s/1qWqSz1a 密码: 9a3d
Proe5.0数控加工编程视频教程 链接: http://pan.baidu.com/s/1sjxBVhr 密码: 3k5h
Proe5.0无维IceFai高级视频教程 链接: http://pan.baidu.com/s/1o6BVpBs 密码: g78e
Proe5.0无维TomLee钣金设计 链接: http://pan.baidu.com/s/1o6qq5f0 密码: t44k
Proe5.0无维TomLee布线设计 链接: http://pan.baidu.com/s/1qWDTbS4 密码: qq8y
Proe5.0无维TomLee管道设计视频教程 链接: http://pan.baidu.com/s/1bnCrD2B 密码: md6y
Proe5.0有限元分析视频教程 链接: http://pan.baidu.com/s/1jGGNfpW 密码: dvky
Proe5.0中文版入门与提高 链接: http://pan.baidu.com/s/1hqldhrA 密码: mr8w
proe5.0中文野火版钣金设计完全精通 链接: http://pan.baidu.com/s/1kTL4MoR 密码: 57u4
Proe5.0中文野火版高级应用教程 链接: http://pan.baidu.com/s/1bnlTsHT 密码: tjcg
proe工程图资料大全 链接: http://pan.baidu.com/s/1mgy2fEw 密码: 4tcq
Proe管道设计文字教程 链接: http://pan.baidu.com/s/1kT06cAj 密码: c7ux
proe数控加工基础篇 链接: http://pan.baidu.com/s/1gdpiQYJ 密码: jmu4
Proe野火版逆向工程设计完全解析 链接: http://pan.baidu.com/s/1EvBkU 密码: pa73
proe中文野火版-产品设计篇 链接: http://pan.baidu.com/s/1gd2adUV 密码: 1k9i
EMX4.1安装软件及安装视频教程 链接: http://pan.baidu.com/s/1jG1Ua7W 密码: jryu
EMX4.1入门到精通视频教程 链接: http://pan.baidu.com/s/1o6HuWjg 密码: 4t7i
EMX6.0安装软件及安装方法 链接: http://pan.baidu.com/s/1pJ2zJT5 密码: jzcp
EMX6.0从入门到精通 链接: http://pan.baidu.com/s/1ntDZeNR 密码: 65e4

]]></description><link>https://blog.gaoredu.com/article/38fcae9e-732d-4148-9b4c-3533f250f50c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/38fcae9e-732d-4148-9b4c-3533f250f50c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 18 Jan 2018 02:07:19 GMT</pubDate></item><item><title><![CDATA[FLASH软件及动画实战制作入门系列教程]]></title><description><![CDATA[Flash资料:
Flash CS4安装软件PC版 链接: http://pan.baidu.com/s/1qWsorX6 密码: uagc
Flash CS5安装软件MAC版 链接: http://pan.baidu.com/s/1mgw0nHI 密码: 3jik
Flash CS5安装软件PC版 链接: http://pan.baidu.com/s/1jGgprRw 密码: 4bij
Flash CS6安装软件PC版 链接: http://pan.baidu.com/s/1dDARGjf 密码: 2dcd
Flash设计素材资料集合大全 链接: http://pan.baidu.com/s/1i3KSROD 密码: s2ym
Flash CS5动画实战制作入门教程 链接: http://pan.baidu.com/s/1kTipin1 密码: v5dp
Flash CS6实例高级视频教程 链接: http://pan.baidu.com/s/1i3F3nV3 密码: y1du

]]></description><link>https://blog.gaoredu.com/article/72c8a6ef-187d-4128-94f4-52a321c037a9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/72c8a6ef-187d-4128-94f4-52a321c037a9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 22:04:02 GMT</pubDate></item><item><title><![CDATA[编织包包裤子贸易帽子裙子围巾鞋子资料]]></title><description><![CDATA[编织资料:
棒针包包实例视频教程4例 链接: http://pan.baidu.com/s/1o6655My 密码: 4kvb
棒针裤子实例视频教程6例 链接: http://pan.baidu.com/s/1kT49K15 密码: jy97
棒针毛衣实例视频教程49例 链接: http://pan.baidu.com/s/1bnk7tiJ 密码: cuhd
棒针帽子实例视频教程45例 链接: http://pan.baidu.com/s/1bni51b5 密码: r8n5
棒针其他实例视频教程 链接: http://pan.baidu.com/s/1sjyrSSX 密码: y5av
棒针裙子实例视频教程5例 链接: http://pan.baidu.com/s/1i35ZL33 密码: su6n
棒针入门基础视频教程 链接: http://pan.baidu.com/s/1bn8nSCZ 密码: i7cb
棒针手套实例视频教程18例 链接: http://pan.baidu.com/s/1o6kkT9S 密码: 6ku6
棒针围巾实例视频教程73例 链接: http://pan.baidu.com/s/1bnBBHtt 密码: pr7g
棒针鞋子实例视频教程17例 链接: http://pan.baidu.com/s/1ntnAITF 密码: ihe3
钩针包包编织视频教程24例 链接: http://pan.baidu.com/s/1dDpmV5Z 密码: vwyy
钩针毛衣编织视频教程15例 链接: http://pan.baidu.com/s/1dDHDpEL 密码: m6e3
钩针帽子编织视频教程30例 链接: http://pan.baidu.com/s/1jGhBnim 密码: s4ej
钩针其他编织视频教程 链接: http://pan.baidu.com/s/1bnBBHuv 密码: 93ii
钩针裙子编织视频教程8例 链接: http://pan.baidu.com/s/1c0hN0Ta 密码: ubi8
钩针日常篇视频教程11例 链接: http://pan.baidu.com/s/1gdpORIj 密码: sd4m
钩针入门初级篇视频教程14例 链接: http://pan.baidu.com/s/1kTqwFhd 密码: fh1e
钩针入门中级篇视频教程12例 链接: http://pan.baidu.com/s/1c0cxLpm 密码: yhxh
钩针手套编织视频教程4例 链接: http://pan.baidu.com/s/1bnApNXH 密码: wjzs
钩针围巾编织视频教程10例 链接: http://pan.baidu.com/s/1o6BpqxO 密码: bf4u
钩针鞋子编织视频教程41例 链接: http://pan.baidu.com/s/1qWxDXMG 密码: ebvy
钩针植物篇视频教程11例 链接: http://pan.baidu.com/s/1jGzSh8a 密码: cgw6

]]></description><link>https://blog.gaoredu.com/article/62f18c5e-d276-45b2-bdbc-4bb68fc1d8b5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/62f18c5e-d276-45b2-bdbc-4bb68fc1d8b5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 21:04:03 GMT</pubDate></item><item><title><![CDATA[AE模板及实例学习教程，带你从菜鸟走向高手]]></title><description><![CDATA[AE资料:
AE CS4安装软件 链接: http://pan.baidu.com/s/1dDjhtAT 密码: haym
AE CS5安装软件 链接: http://pan.baidu.com/s/1FH2ea 密码: 43x6
AE CS6安装软件 链接: http://pan.baidu.com/s/1c02gmOC 密码: wgn7
AE CS4从入门到精通课堂版 链接: http://pan.baidu.com/s/1bnbdQP5 密码: mx6q
AE CS4从新手到高手 链接: http://pan.baidu.com/s/1mgh7fS0 密码: q9ji
AE CS4高手之路视频教程 链接: http://pan.baidu.com/s/1qWwsb2O 密码: qwje
AE CS4完全自学攻略 链接: http://pan.baidu.com/s/1sjPwqLZ 密码: tmpu
AE CS4影视包装技术精粹 链接: http://pan.baidu.com/s/1o6mSGMe 密码: u4a1
AE CS4影视特效实用设计技巧 链接: http://pan.baidu.com/s/1qWPyrvQ 密码: a485
AE CS4影视特效制作208例 链接: http://pan.baidu.com/s/1hq5vOhu 密码: eymc
AE CS5 100%彻底掌握 链接: http://pan.baidu.com/s/1mgiTaZm 密码: kywn
AE CS5动漫影视特效后期合成 链接: http://pan.baidu.com/s/1dD6NR7F 密码: 3ixd
AE CS5基础教程赵宝峰讲 链接: http://pan.baidu.com/s/1weCxg 密码: u13n
AE CS5快捷键大全 链接: http://pan.baidu.com/s/1kTH0XXd 密码: vdmu
AE CS5实例操作教程 链接: http://pan.baidu.com/s/1bnxy68v 密码: wcvj
AE CS5完全学习手册 链接: http://pan.baidu.com/s/1ntN28qd 密码: uth6
AE CS6全面应用教程 链接: http://pan.baidu.com/s/1vyHWE 密码: bii4
AE CS6影视后期特效全案剖析 链接: http://pan.baidu.com/s/1hqzqoD2 密码: frv3
AE CS6综合训练视频教程 链接: http://pan.baidu.com/s/1eQ4JWzC 密码: xafm
AE CS影视包装技法深度剖析 链接: http://pan.baidu.com/s/1pJp89fH 密码: ysp8
AE 火星风暴插件影视特效 链接: http://pan.baidu.com/s/1Fb6xw 密码: ejcw
AE 技术30天速成视频教程 链接: http://pan.baidu.com/s/1c0fLAl6 密码: dd72
AE 影视合成与特效火星风暴 链接: http://pan.baidu.com/s/1gdGnnof 密码: t86x
AE超级手册教程 链接: http://pan.baidu.com/s/1eQtUD5S 密码: 43rn
AE合成3D渲染教程 链接: http://pan.baidu.com/s/1bnHHsab 密码: rp6c
AE视频教程李涛主讲 链接: http://pan.baidu.com/s/1nt891S9 密码: md62
AE模板使用修改教程 链接: http://pan.baidu.com/s/1sjLs7et 密码: igiq

]]></description><link>https://blog.gaoredu.com/article/f69eeafd-8bd3-41f4-81d8-214fec98c71a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f69eeafd-8bd3-41f4-81d8-214fec98c71a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 18:03:20 GMT</pubDate></item><item><title><![CDATA[茶学百问系列|品味中国茶道|中国茶经讲解|中国茶艺经典]]></title><description><![CDATA[茶艺资料:
茶学百问系列 链接: http://pan.baidu.com/s/12kqb8 密码: rga8
品味中国茶道 链接: http://pan.baidu.com/s/1pJoS9i7 密码: sa39
中国茶经讲解 链接: http://pan.baidu.com/s/1twMp4 密码: 2vwp
中国茶艺经典 链接: http://pan.baidu.com/s/1kTpGGdD 密码: 3aie

]]></description><link>https://blog.gaoredu.com/article/8d0ae1ae-ebc3-4898-b2b1-ad2beaa500dd</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8d0ae1ae-ebc3-4898-b2b1-ad2beaa500dd</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 02:55:55 GMT</pubDate></item><item><title><![CDATA[premiere cs6基础培训文字及视频教程]]></title><description><![CDATA[Premiere资料:
premiere cs6基础培训文字教程　链接: http://pan.baidu.com/s/1bngtjpt 密码: ddms
Premiere Pr cc基础技能训练视频教程 链接: http://pan.baidu.com/s/1bnpM8l5 密码: hh41
Premiere Pro CS5超级手册视频教程 链接: http://pan.baidu.com/s/1gdpE1B9 密码: qm6t

]]></description><link>https://blog.gaoredu.com/article/07f0a8c8-0f71-4f36-8d10-727632af5641</link><guid isPermaLink="true">https://blog.gaoredu.com/article/07f0a8c8-0f71-4f36-8d10-727632af5641</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 02:51:52 GMT</pubDate></item><item><title><![CDATA[ID安装软件及创意设计系列视频教程]]></title><description><![CDATA[ID资料:
ID CC安装软件MAC版 链接: http://pan.baidu.com/s/1qW0vQFy 密码: vs8t
ID CC安装软件PC版 链接: http://pan.baidu.com/s/1sj0ZLNn 密码: 783j
ID CS5安装软件PC版 链接: http://pan.baidu.com/s/1bndfLuf 密码: 4swn
ID CS6安装软件MAC版 链接: http://pan.baidu.com/s/1c00esCw 密码: ydjm
ID CS6安装软件PC版 链接: http://pan.baidu.com/s/1ntCDoZf 密码: 8pds
InDesign CS4完全自学视频教程 链接: http://pan.baidu.com/s/1i37vGpB 密码: p5dy
InDesign CS5.5完全掌握超级手册 链接: http://pan.baidu.com/s/1ntMMC57 密码: bmwj
InDesign CS5我的设计视频教程 链接: http://pan.baidu.com/s/1ntDZePz 密码: ddyb
InDesign CS5一定要会的创意版式设计 链接: http://pan.baidu.com/s/1i3jFhzR 密码: 5ary
InDesign CS6入门到高级视频教程 链接: http://pan.baidu.com/s/1jGreCuU 密码: xi8u

]]></description><link>https://blog.gaoredu.com/article/5fabed21-88b4-4fee-a570-ee0d2e7d5edf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5fabed21-88b4-4fee-a570-ee0d2e7d5edf</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 02:50:28 GMT</pubDate></item><item><title><![CDATA[汽车维修机修资料教程大全，学完你就可以修理摩托车汽车了]]></title><description><![CDATA[维修资料:
摩托车维修技术 链接: http://pan.baidu.com/s/1FH8vG 密码: driv
奥迪A6电喷系统的原理与检测 链接: http://pan.baidu.com/s/1ntmoRTR 密码: 5cbx
电喷系统结构原理及故障诊断 链接: http://pan.baidu.com/s/1kT7rFIv 密码: mmp5
都市先锋-捷达王-捷达轿车电喷系统检修 链接: http://pan.baidu.com/s/1sjNu6z7 密码: 
x9ft
富康轿车电喷系统检测与维修 链接: http://pan.baidu.com/s/1qWDTfZ2 密码: yg1v
捷达电喷系统检测与维修 链接: http://pan.baidu.com/s/1c0llsmW 密码: rsk6
桑塔纳2000GSI电喷系统检测与维修 链接: http://pan.baidu.com/s/1jGgVsNW 密码: pfr1
雅阁电喷系统检测与维修 链接: http://pan.baidu.com/s/1bnDDATD 密码: trhq
电控发动机波形分析视频教程 链接: http://pan.baidu.com/s/1jG6DKCA 密码: 7c8x
魏俊强电控发动机故障诊断高级讲解 链接: http://pan.baidu.com/s/1qWp68pA 密码: sy4b
朱军电控发动机波形分析 链接: http://pan.baidu.com/s/1qFbmI 密码: zpq6
朱军电控发动机原理与诊断 链接: http://pan.baidu.com/s/1sjLYArN 密码: 1peg
东风牌D6114型柴油机使用技巧 链接: http://pan.baidu.com/s/1gdfF5QV 密码: nsub
丰田普锐斯原厂技术培训视频(英文) 链接: http://pan.baidu.com/s/1c02MnW8 密码: vekr
跟我学汽车养护 链接: http://pan.baidu.com/s/1dDAlLxZ 密码: 5g67
金奔腾汽车电脑解码器使用方法 链接: http://pan.baidu.com/s/1bn99TYR 密码: gjif
汽车必需设施的安装 链接: http://pan.baidu.com/s/1dDvsB9f 密码: a8ej
汽车电器与电子控制技术 链接: http://pan.baidu.com/s/1hqivuMo 密码: 68ji
汽车电子技术与检测仪器的应用 链接: http://pan.baidu.com/s/1bnoBfFh 密码: 5haq
汽车各部件工作原理视频 链接: http://pan.baidu.com/s/1qW3JIt2 密码: jkwf
汽车故障高级诊断技术 链接: http://pan.baidu.com/s/1eQjLvns 密码: e4tr
汽车故障诊断基本思路 链接: http://pan.baidu.com/s/1c0sCR0c 密码: v6g4
汽车驾驶学习技巧 链接: http://pan.baidu.com/s/1i3grxHV 密码: hmda
汽车喷漆涂装技术 链接: http://pan.baidu.com/s/1qWxEbMk 密码: 6tnd
汽车音响防盗 气囊修复 仪表芯片解密 链接: http://pan.baidu.com/s/1sjyXV8h 密码: 
7gej
汽车在途中常见故障应急修理 链接: http://pan.baidu.com/s/1gdjJqp1 密码: rbsc
汽车专业英语视频教程 链接: http://pan.baidu.com/s/1gdjJqpH 密码: mt6e
数据流分析方法视频教程 链接: http://pan.baidu.com/s/1kTEJqUr 密码: zjkq
现代汽车电控系统诊断新理念 链接: http://pan.baidu.com/s/1mgFxmbA 密码: mnkr
蓄电池修理技术视频教程 链接: http://pan.baidu.com/s/1mg04cFQ 密码: 2yn3
玉林YC4110ZQ柴油机装配工艺 链接: http://pan.baidu.com/s/1sjG8P21 密码: 7pct
朱军自动变速器原理与诊断 链接: http://pan.baidu.com/s/1i3grxIH 密码: x95p
自动变速器结构原理与检修 链接: http://pan.baidu.com/s/1ygCV0 密码: 37k4
跟我学汽车美容 链接: http://pan.baidu.com/s/1jGMmNUu 密码: 5efm
汽车美容视频教程 链接: http://pan.baidu.com/s/1dDo7fBN 密码: pjuh
汽车美容与装饰 链接: http://pan.baidu.com/s/1dD1yorn 密码: meg7
汽车内外饰物的安装 链接: http://pan.baidu.com/s/1qWyZY3M 密码: zdeu
本田汽车维修视频 链接: http://pan.baidu.com/s/1dDEp6Xr 密码: 7n9i
大众汽车维修视频 链接: http://pan.baidu.com/s/1hqvm7Ta 密码: 2vz2
大众自动变速器构造原理与维修 链接: http://pan.baidu.com/s/1gdlflBl 密码: hu7c
国产轿车维修跟我学 链接: http://pan.baidu.com/s/1qWxEbMG 密码: faf1
机修技师中高级视频教程 链接: http://pan.baidu.com/s/1eQfHAlO 密码: vg7w
轿车维修文字教程 链接: http://pan.baidu.com/s/1ntwypg1 密码: ehuc
捷达车系维修技术 链接: http://pan.baidu.com/s/1nt3jRjb 密码: 983y
汽车车身修复教程 链接: http://pan.baidu.com/s/1c032kvu 密码: yfnb
汽车电脑工作原理与检修 链接: http://pan.baidu.com/s/1c0cxPrM 密码: 94dt
汽车机修教学视频教程 链接: http://pan.baidu.com/s/1mgosNk0 密码: m3ge
汽车维修高级工培训视频教程 链接: http://pan.baidu.com/s/1pJwujcn 密码: wbj1
汽车维修工中高级视频教程 链接: http://pan.baidu.com/s/1c0pUY0C 密码: un2m
汽车维修技师技能训练教程 链接: http://pan.baidu.com/s/1ntpCDZV 密码: jqyd
汽车维修技术视频教程 链接: http://pan.baidu.com/s/1c00ewNY 密码: tmd4
汽车维修职业技能培训教材 链接: http://pan.baidu.com/s/1pJ1dRMr 密码: 88vs
汽车维修自学通视频教程 链接: http://pan.baidu.com/s/1eQB5FvO 密码: cc2b
汽修电工视频教程 链接: http://pan.baidu.com/s/1pJNy9cv 密码: s1ry
汽修手册文字资料 链接: http://pan.baidu.com/s/1pJmQMBT 密码: 24nq
汽修专家讲汽修视频教程 链接: http://pan.baidu.com/s/1jGELtTc 密码: rqe1
通用五菱汽车维修视频 链接: http://pan.baidu.com/s/1mgMOHks 密码: fxgj
现代伊兰特维修视频 链接: http://pan.baidu.com/s/1gd4HZt5 密码: 82ry
新编电动自行车维修速成 链接: http://pan.baidu.com/s/1o6tEwS6 密码: u354
玉林YC6105柴油机的装拆与维修 链接: http://pan.baidu.com/s/1sjHUOMh 密码: 8wrc
自动变速箱维修视频教程 链接: http://pan.baidu.com/s/1kTKiXrp 密码: tem3
液晶电视维修教程 链接: http://pan.baidu.com/s/1i37vKxv 密码: nms4
电动车维修视频教程 链接: http://pan.baidu.com/s/1mgxMox6 密码: i648


]]></description><link>https://blog.gaoredu.com/article/e0a5917a-068f-4ff3-ae64-fe32221eddea</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e0a5917a-068f-4ff3-ae64-fe32221eddea</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 17 Jan 2018 02:03:51 GMT</pubDate></item><item><title><![CDATA[五笔输入法字根查询手册和视频教程]]></title><description><![CDATA[五笔资料:
常用五笔编码查询手册 链接: http://pan.baidu.com/s/18qaeU 密码: 7fti
五笔输入法视频教程 链接: http://pan.baidu.com/s/1pJuYsLP 密码: ka7n
五笔字根查询手册 链接: http://pan.baidu.com/s/1pJBnrdD 密码: 7uev


]]></description><link>https://blog.gaoredu.com/article/951bd4a1-e390-4403-87c0-b94590dcbd73</link><guid isPermaLink="true">https://blog.gaoredu.com/article/951bd4a1-e390-4403-87c0-b94590dcbd73</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 16 Jan 2018 20:11:10 GMT</pubDate></item><item><title><![CDATA[养生瑜伽大全集（包括初级中级高级和养生篇）]]></title><description><![CDATA[瑜伽资料:
办公室瑜伽 链接: http://pan.baidu.com/s/1kTiVlMB 密码: cf13
茶熏瑜伽 链接: http://pan.baidu.com/s/1ntBXuIl 密码: sa9a
儿童瑜伽 链接: http://pan.baidu.com/s/1c00Ktm4 密码: j4ty
高级国际系列瑜伽 链接: http://pan.baidu.com/s/1kTL4Q1p 密码: vcn4
基础瑜伽 链接: http://pan.baidu.com/s/1dD2elUT 密码: 8j21
减肥瑜伽 链接: http://pan.baidu.com/s/1c08lRaw 密码: syii
简易家庭瑜伽 链接: http://pan.baidu.com/s/1c0jPwac 密码: h3pv
简易瑜伽 链接: http://pan.baidu.com/s/1hqKUXIc 密码: 4zmc
景丽塑身纤体瑜珈 链接: http://pan.baidu.com/s/1ntOi9rr 密码: diym
净化身心瑜伽 链接: http://pan.baidu.com/s/1qWHqTFQ 密码: fabg
旅游瑜伽 链接: http://pan.baidu.com/s/1qWHqTGg 密码: 9q2a
冥想瑜伽教程 链接: http://pan.baidu.com/s/1pJsq06R 密码: sjrd
母其弥雅教你练瑜伽20套 链接: http://pan.baidu.com/s/1sjLYAvF 密码: rsei
排毒纤体瑜伽 链接: http://pan.baidu.com/s/1gdzYtu7 密码: 16ru
漂亮妈妈瑜伽 链接: http://pan.baidu.com/s/1i3vQ3cT 密码: jkg9
普拉提瑜伽入门中级高级 链接: http://pan.baidu.com/s/1ntsuAgh 密码: a76c
其他瑜伽教程 链接: http://pan.baidu.com/s/1o6kQXi6 密码: tv7p
青少年瑜伽 链接: http://pan.baidu.com/s/1gd7zSg7 密码: 8emx
情侣瑜伽 链接: http://pan.baidu.com/s/1qWyZY8k 密码: 6y8y
曲影瑜伽 链接: http://pan.baidu.com/s/1i3lbg7F 密码: zk48
舍宾俏臀 链接: http://pan.baidu.com/s/1i3rMFYl 密码: 5e6u
身体调理瑜伽 链接: http://pan.baidu.com/s/1c075YaW 密码: yaxn
身体瑜伽 链接: http://pan.baidu.com/s/1gdhHzLh 密码: 9ezr
瘦身瑜伽 链接: http://pan.baidu.com/s/1o6zeeEm 密码: ipr9
睡前瑜伽 链接: http://pan.baidu.com/s/1qWuqv3Q 密码: 9edp
四季瑜伽 链接: http://pan.baidu.com/s/1c097QwC 密码: qjy6
孙品瑜伽初级 链接: http://pan.baidu.com/s/1gdpOVTL 密码: dxgx
太极瑜伽 链接: http://pan.baidu.com/s/1hqCN5Dq 密码: nxht
新从零开始学瑜伽 链接: http://pan.baidu.com/s/1eQ2Iheq 密码: fpcm
养生瑜伽 链接: http://pan.baidu.com/s/1dDsAMCL 密码: jswb
阴瑜伽 链接: http://pan.baidu.com/s/1o6pAD1S 密码: 7xxe
瑜伽密码 链接: http://pan.baidu.com/s/1uIOOY 密码: a9d7
瑜伽男人篇 链接: http://pan.baidu.com/s/1hqyAv5M 密码: 8p57
瑜伽轻松入门 链接: http://pan.baidu.com/s/1eQo5abK 密码: s4ym
瑜伽心境界 链接: http://pan.baidu.com/s/1qW1HMX2 密码: reex
玉珠铉瑜伽 链接: http://pan.baidu.com/s/1i3nIUxf 密码: mmgx
孕妇瑜伽 链接: http://pan.baidu.com/s/1sj9hrJn 密码: c1hq
增高瑜伽 链接: http://pan.baidu.com/s/1bnfhJtH 密码: 74dz
张蕙兰瑜珈40集 链接: http://pan.baidu.com/s/1c075Ybm 密码: erxv
中级瑜伽 链接: http://pan.baidu.com/s/1c0dJKAk 密码: 5uy1

]]></description><link>https://blog.gaoredu.com/article/28a27387-0d83-47e4-a11f-8f8af43b564f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/28a27387-0d83-47e4-a11f-8f8af43b564f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 15 Jan 2018 02:34:38 GMT</pubDate></item><item><title><![CDATA[开淘宝，还在找资料吗？这套完整教程够你用了]]></title><description><![CDATA[(176套)宝贝描述模板 链接: http://pan.baidu.com/s/1jGxktzo 密码: dgk6
(2442款)促销水印模板 链接: http://pan.baidu.com/s/1dDtWHQp 密码: 6uxh
(2864款)店铺装修漂亮素材 链接: http://pan.baidu.com/s/1jGowPym 密码: 2tfr
(45套)宝贝团购模板 链接: http://pan.baidu.com/s/1dDrUQjB 密码: wgb6
2000多款网店轮播海报 链接: http://pan.baidu.com/s/1qWmiNqk 密码: 5nij
200多款服装宝贝描述模板 链接: http://pan.baidu.com/s/1jGowPwE 密码: zi3w
200多款首页装修PSD模板 链接: http://pan.baidu.com/s/1eQvW6CM 密码: s63a
600多款宝贝描述模板 链接: http://pan.baidu.com/s/1jGBx4Bc 密码: 9dsn
700多款直通车广告图 链接: http://pan.baidu.com/s/1kTIhd9H 密码: eaaz
淘宝教程 链接: http://pan.baidu.com/s/1ntknbVN 密码: 7t7p

]]></description><link>https://blog.gaoredu.com/article/debdb2f2-7fb3-4408-a932-de8aa31c4d1b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/debdb2f2-7fb3-4408-a932-de8aa31c4d1b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 15 Jan 2018 02:28:06 GMT</pubDate></item><item><title><![CDATA[全网实用外语资料荟萃集（德语法语英语汉语日语等多种语言自学资料）]]></title><description><![CDATA[大学德语高教版本mp3格式 链接: http://pan.baidu.com/s/1kTpaKab 密码: 7cnw
基础德语入门教程mp3格式 链接: http://pan.baidu.com/s/1sj5J6YL 密码: yajk
新东方德语入门一月通 链接: http://pan.baidu.com/s/1pJGCXZH 密码: mcvn
俄语小故事175集MP3格式 链接: http://pan.baidu.com/s/1bnCXGkf 密码: nis4
实用商务俄语口语王全集MP3格式 链接: http://pan.baidu.com/s/1gd6dTC3 密码: enen
法语零基础入门音标语音 链接: http://pan.baidu.com/s/1gdIVj1L 密码: ivtg
法语入门走遍法国第一册上通关班 链接: http://pan.baidu.com/s/1jG5XPuY 密码: 5xje
新东方法语入门一月通 链接: http://pan.baidu.com/s/1bnm9odT 密码: j27n
走遍法国语音教程MP3格式 链接: http://pan.baidu.com/s/1bndfORH 密码: 5jfq
阿里郎电视台韩语视频教学 链接: http://pan.baidu.com/s/1i3nITM1 密码: 941a
标准韩语基础会话 链接: http://pan.baidu.com/s/1hqxowvE 密码: mfs8
标准韩语语音入门 链接: http://pan.baidu.com/s/1o6KcOzS 密码: cmai
崔羲秀初级韩国语 链接: http://pan.baidu.com/s/1c0cxOLq 密码: 4uiu
韩国高手会“踢的革命”教学片 链接: http://pan.baidu.com/s/1hqpgXTU 密码: h6df
韩国会话3月通 链接: http://pan.baidu.com/s/1qW616Pm 密码: zsc6
韩国外国语大学《韩国语教程》 链接: http://pan.baidu.com/s/1mgmWRrE 密码: 2u4y
韩国语课堂旅游基础会话 链接: http://pan.baidu.com/s/1mgtI0Jm 密码: mdpf
韩语口语8000字mp3格式 链接: http://pan.baidu.com/s/1bnApR5P 密码: xwu4
韩语口语900句mp3音频 链接: http://pan.baidu.com/s/1c010qru 密码: cdsu
韩语自学视频教程 链接: http://pan.baidu.com/s/1hqAL6TI 密码: ic27
老版Let’sSpeakKorean视频教学 链接: http://pan.baidu.com/s/1pJ63AUR 密码: pqnk
临时急需要马上说韩语 链接: http://pan.baidu.com/s/1sjJWInF 密码: 8q5p
零起点韩语口语入门 链接: http://pan.baidu.com/s/1pJ9RvHx 密码: gbhk
零起点韩语口语入门王视频 链接: http://pan.baidu.com/s/1gd5xVhD 密码: h7p8
民族出版社韩国语MP3格式 链接: http://pan.baidu.com/s/1i3Gjn9N 密码: w7i7
实用初级韩国语教程 链接: http://pan.baidu.com/s/1mg9r5lY 密码: dx2z
实用韩国语教程 链接: http://pan.baidu.com/s/1mgtI0JI 密码: fi3r
实用韩语单词500个 链接: http://pan.baidu.com/s/1qW9jtDU 密码: 4eyk
我为韩语狂入门篇 链接: http://pan.baidu.com/s/1qWn4Hmk 密码: ty7w
无师自通韩国语视频教程 链接: http://pan.baidu.com/s/1i3H5hhN 密码: 6mhy
新版Let’sSpeakKorean 260集视频 链接: http://pan.baidu.com/s/1mgAD3eC 密码: rd7r
新编中级韩国语MP3格式 链接: http://pan.baidu.com/s/1dD0cxNj 密码: ysxp
新东方韩语入门一月通 链接: http://pan.baidu.com/s/1c06kchE 密码: ng25
新概念韩国语视频 链接: http://pan.baidu.com/s/1kTpaKbd 密码: kpbh
中韩交流标准韩国语 链接: http://pan.baidu.com/s/1qW5fBTq 密码: sxqi
中韩交流实用韩国语 链接: http://pan.baidu.com/s/1pJusrNH 密码: ft8u
Erin挑战！学会日语视频25讲 链接: http://pan.baidu.com/s/1ntIcYnf 密码: m9bn
Go Go Japan第一季8集 链接: http://pan.baidu.com/s/1bnCXGAV 密码: h6p8
北海道漫游记 链接: http://pan.baidu.com/s/1bnrsWl5 密码: 1xa5
标准日本语 链接: http://pan.baidu.com/s/1ntABznz 密码: bsgv
标准日语初级教程 链接: http://pan.baidu.com/s/1bn4kmfl 密码: ckji
别笑！我是日语学习书MP3格式 链接: http://pan.baidu.com/s/1pJOK2uB 密码: 4h5p
超简单-手绘旅游日语MP3格式 链接: http://pan.baidu.com/s/1ntoqMTF 密码: sjrg
从日本中小学课本学日文 链接: http://pan.baidu.com/s/1jG2AaA6 密码: v1db
大家的日本语(1-2册)MP3格式 链接: http://pan.baidu.com/s/1qWoQC8k 密码: 3g8k
大学日语专业四级轻松过级一点通mp3格式 链接: http://pan.baidu.com/s/1kTDxt3L 密码: mppu
蛋蛋动漫日语学堂70讲 链接: http://pan.baidu.com/s/1gd2aibx 密码: jxn9
东京印象 链接: http://pan.baidu.com/s/1o6rC5rc 密码: k98i
读唐诗学日语汉字MP3格式 链接: http://pan.baidu.com/s/1mg3lUNQ 密码: 4a2r
短期掌握日本语能力测试N1级 链接: http://pan.baidu.com/s/1sjFSWwt 密码: b74a
疯狂日语MP3版7讲 链接: http://pan.baidu.com/s/1sjA3rAl 密码: sqvk
跟NHK学简明日语 链接: http://pan.baidu.com/s/1qW9Pw3y 密码: gt9k
沪江日语 链接: http://pan.baidu.com/s/1pJ0xUTP 密码: 9xi3
环游日本学日语 链接: http://pan.baidu.com/s/1fPIZc 密码: fete
叫醒耳朵日语会话通3000句日常日语句型 链接: http://pan.baidu.com/s/1pJiNaqf 密码: 71yd
口语及短句888个4讲MP3格式 链接: http://pan.baidu.com/s/18pZXG 密码: div3
来去日本第二季17集 链接: http://pan.baidu.com/s/1sjn2H1V 密码: 23ve
赖户内海心动之旅5集 链接: http://pan.baidu.com/s/1qWzFUI4 密码: 9feh
老外最想与你聊的100日语话题 链接: http://pan.baidu.com/s/1bfYUU 密码: xu45
日本九州北部之旅5集 链接: http://pan.baidu.com/s/1kTnERVD 密码: 817r
日本语能力测试1234级词汇背诵手册MP3版 链接: http://pan.baidu.com/s/1gdCP8zD 密码: w42w
日英双解辞典 链接: http://pan.baidu.com/s/1ntwyoZJ 密码: 7jnd
日语300句 链接: http://pan.baidu.com/s/1pJ3LK3T 密码: 7vgd
日语初级1-24集MP3格式 链接: http://pan.baidu.com/s/1mgBtz2g 密码: 8x7r
日语基础中央广播电视大学教学视频40集 链接: http://pan.baidu.com/s/1c054gBQ 密码: egjr
日语口译综合能力（二级）mp3格式 链接: http://pan.baidu.com/s/1sjsSriH 密码: uj4r
日语口语900句音频教程 链接: http://pan.baidu.com/s/1jGxQqfs 密码: q83c
日语口语王想说就说mp3格式 链接: http://pan.baidu.com/s/1eQ2cjse 密码: gyk1
日语能力考试2级听力模拟训练DOC文本MP3格式 链接: http://pan.baidu.com/s/1sjt8qC1 密码: ce8h
日语能力考试二级听力模拟训练MP3格式 链接: http://pan.baidu.com/s/1hqhFz1a 密码: gbxm
日语一月通全套教程合集 链接: http://pan.baidu.com/s/1ntl8WpN 密码: 6v1u
商务日语教程 链接: http://pan.baidu.com/s/1i3pKT4D 密码: mn42
上外新编日语答疑解难视频 链接: http://pan.baidu.com/s/1o6zJZN8 密码: n3v4
生活日语半日通 链接: http://pan.baidu.com/s/1c0tsMFA 密码: 8ukk
实用初级日语视频教程32讲 链接: http://pan.baidu.com/s/1fPIZO 密码: ev2w
实用日语口语句典MP3格式 链接: http://pan.baidu.com/s/1sj2vHST 密码: 6bmh
哇!原来这句日语这样说! 链接: http://pan.baidu.com/s/1o67l6no 密码: zmpq
无师自通日本语口语MP3格式 链接: http://pan.baidu.com/s/1ntCDtd3 密码: 5sya
现在就说日语 链接: http://pan.baidu.com/s/1c0lRrfq 密码: tc69
新版标准日本语 链接: http://pan.baidu.com/s/1sj0ZPMX 密码: fmgr
新编日语1-4册MP3格式全套 链接: http://pan.baidu.com/s/1kT3nVIB 密码: eurw
新编日语教程1-5册MP3格式 链接: http://pan.baidu.com/s/1qWOI1Uc 密码: gxs5
新编日语修订本mp3格式4册 链接: http://pan.baidu.com/s/1kTzQh3x 密码: 861q
新编生活日语视频25讲 链接: http://pan.baidu.com/s/1qWFUUq4 密码: 7ipe
新东方日语讲义 链接: http://pan.baidu.com/s/1mgy2jA4 密码: jfjc
新东方日语入门一月通 链接: http://pan.baidu.com/s/1gdvo8bL 密码: 2v9w
新东方日语一级讲座视频教程 链接: http://pan.baidu.com/s/1qWBlnC4 密码: mrtv
新概念日语视频教学15集 链接: http://pan.baidu.com/s/1g5ECe 密码: hn7j
新日本语能力测试N3词汇背诵手册mp3版 链接: http://pan.baidu.com/s/1o6A9vPS 密码: xw5p
学日语高手系列-流行口语及短句888个 链接: http://pan.baidu.com/s/1c0Er5WO 密码: 6xkt
樱花日语多媒体课程12级别 链接: http://pan.baidu.com/s/1o6qq9cu 密码: 2hfg
原来日语这样说MP3格式71讲 链接: http://pan.baidu.com/s/1dDItprb 密码: epxa
张向荣日语教程 链接: http://pan.baidu.com/s/1kTlDbbL 密码: ann5
中日交流标准日本语 链接: http://pan.baidu.com/s/1mgsw65U 密码: 6dav
走遍日本教程 链接: http://pan.baidu.com/s/1o60zW9s 密码: axh3
大学泰语听力教程 链接: http://pan.baidu.com/s/1eQ2cjvk 密码: 43v7
基础泰语MP3格式 链接: http://pan.baidu.com/s/1eQ8NOiu 密码: yhdx
实用初级泰国语视频教学 链接: http://pan.baidu.com/s/1o6zee3g 密码: n33g
泰语入门基础课程文字教程 链接: http://pan.baidu.com/s/1o6j4Znc 密码: kfam
新东方西班牙语入门一月通 链接: http://pan.baidu.com/s/1hqyAvuW 密码: j7kb
新东方新概念英语1-4册 链接: http://pan.baidu.com/s/1o6MKDPC 密码: 3ay4
新概念英语1-4册视频教程 链接: http://pan.baidu.com/s/1jGAH7JC 密码: wrsu
新概念英语精品课堂mp3格式 链接: http://pan.baidu.com/s/1bnbJUe7 密码: 3ara
365天英语口语大全 链接: http://pan.baidu.com/s/1dhTF4 密码: eu3w
9小时快学国际音标 链接: http://pan.baidu.com/s/1gdEl1BX 密码: ba37
海伦从零开始英语音标 链接: http://pan.baidu.com/s/1ntkTbb7 密码: x12k
新东方4+1课堂教程 链接: http://pan.baidu.com/s/1mgxgosg 密码: 69tq
新东方王强口语全集 链接: http://pan.baidu.com/s/1sjC5hmt 密码: au3a
英语口音纠正课程 链接: http://pan.baidu.com/s/1ucP3o 密码: ygcn
英语口语8000句 链接: http://pan.baidu.com/s/1kTCHsI7 密码: 9qqr
英语口语900句系列 链接: http://pan.baidu.com/s/1qWMa9u0 密码: 2t3t

]]></description><link>https://blog.gaoredu.com/article/42170a71-7c59-4cd0-82ca-7643b64aaff2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/42170a71-7c59-4cd0-82ca-7643b64aaff2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 15 Jan 2018 00:38:15 GMT</pubDate></item><item><title><![CDATA[室内设计宝典室内装饰材料室内设计风水等资料大全]]></title><description><![CDATA[室内设计:
家居与室内设计风水视频教程 链接: http://pan.baidu.com/s/1pJ5NBHx 密码: fd7k
室内表现行业视频 链接: http://pan.baidu.com/s/1c1TKy 密码: upst
室内设计CAD常用图库 链接: http://pan.baidu.com/s/1dD0cxLf 密码: ez1j
室内设计《7000个装饰材料价格》 链接: http://pan.baidu.com/s/1i3IRg1J 密码: 54xx
室内设计《工艺工法》 链接: http://pan.baidu.com/s/1o6kQWAI 密码: vd7e
室内设计《家装风水大全》风水知识 链接: http://pan.baidu.com/s/1jGBx4ge 密码: nkm8
室内设计《设计师理论参考资料:》理论设计常识 链接: http://pan.baidu.com/s/1nt7TAFv 密码: 23dn
室内设计《施工工艺宝典》 链接: http://pan.baidu.com/s/1ntKeN9n 密码: dten
室内设计《施工工艺视频》 链接: http://pan.baidu.com/s/1mgy2jkk 密码: xre4
室内设计《室内设计常用尺寸表》人体工程学 链接: http://pan.baidu.com/s/1qWNw8pu 密码: hads
室内设计视频教程 链接: http://pan.baidu.com/s/1c0nTjW0 密码: riif

]]></description><link>https://blog.gaoredu.com/article/ed34759a-941d-4687-abba-39e4c77fcee9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ed34759a-941d-4687-abba-39e4c77fcee9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 14 Jan 2018 04:04:28 GMT</pubDate></item><item><title><![CDATA[全网最完整的各种球类运动视频教程]]></title><description><![CDATA[球类资料:
高尔夫初学视频教程 链接: http://pan.baidu.com/s/1jGf9ymy 密码: a3tt
Better Basketball篮球教学视频教程 链接: http://pan.baidu.com/s/1o6rC4Oy 密码: tu14
NBA篮球教学视频 链接: http://pan.baidu.com/s/1bnfhIEV 密码: qaa5
NBA十大过人高手百大过人 链接: http://pan.baidu.com/s/1kTte5AB 密码: 248x
加农贝克篮球训练视频教程 链接: http://pan.baidu.com/s/16ohjC 密码: 1jrd
街头篮球视频教程 链接: http://pan.baidu.com/s/1sj0ZPpj 密码: n9u1
科比门徒全集 链接: http://pan.baidu.com/s/1nt9p1Mx 密码: egir
篮球基础与实战技巧视频教程 链接: http://pan.baidu.com/s/1fjJie 密码: cw2q
篮球教学视频教程50集 链接: http://pan.baidu.com/s/1sjvAhC5 密码: a4sf
五虎篮球教学视频教程 链接: http://pan.baidu.com/s/1ntL0MSh 密码: ed4n
约翰逊篮球防守训练视频教程 链接: http://pan.baidu.com/s/1mgHzcFY 密码: djb9
张卫平篮球教学视频教程 链接: http://pan.baidu.com/s/1i36FLtF 密码: 6ag7
乒乓球教学视频教程 链接: http://pan.baidu.com/s/1bndLOuF 密码: xdk7
巴尼台球视频教程 链接: http://pan.baidu.com/s/1qW1HMva 密码: ewft
和尚台球系列专题教学 链接: http://pan.baidu.com/s/1qWkgSfM 密码: fr93
经验一枪台球视频教学 链接: http://pan.baidu.com/s/1pJBTpaz 密码: 2xkj
刘新臣斯诺克教程 链接: http://pan.baidu.com/s/1gdeZ6Wr 密码: nur7
罗建宇入门斯诺克台球教程 链接: http://pan.baidu.com/s/1o6JwPgY 密码: kpcp
斯诺克北京刘军台球教学 链接: http://pan.baidu.com/s/1g5Eiy 密码: ra77
唐建军台球视频教程 链接: http://pan.baidu.com/s/1c0AnOAW 密码: hfr4
张东涛斯诺克基础教程 链接: http://pan.baidu.com/s/1kTzkhF5 密码: q21g
陈伟华羽毛球视频教程 链接: http://pan.baidu.com/s/1o65jG98 密码: v83h
惠程俊羽毛球教学视频 链接: http://pan.baidu.com/s/1pJC9oxX 密码: yktp
李玲蔚羽毛球视频教程 链接: http://pan.baidu.com/s/1mgGJgDi 密码: u4ay
李在福羽毛球视频教程 链接: http://pan.baidu.com/s/1kT7rFnD 密码: 8rke
刘瑞豪羽毛球新手教学 链接: http://pan.baidu.com/s/1dDxu6Vf 密码: pvsa
肖杰学打羽毛球视频教程 链接: http://pan.baidu.com/s/1pJGCXYj 密码: jsyk
肖杰赵剑华羽毛球专家把脉 链接: http://pan.baidu.com/s/1i3J7bPb 密码: p5hq
熊国宝羽毛球技术教学 链接: http://pan.baidu.com/s/1qWE9dU0 密码: dwgc
DAY城市运动KE足球教学 链接: http://pan.baidu.com/s/1qWokCJ6 密码: cmmz
TBALLER街头足球教学 链接: http://pan.baidu.com/s/1c0m7r0W 密码: kgn6
贝克汉姆20大绝妙助攻 链接: http://pan.baidu.com/s/1ygCzk 密码: qkvq
贝克汉姆30大经典进球 链接: http://pan.baidu.com/s/1o6IaWRK 密码: qsgq
比利温格罗夫教你玩街头足球 链接: http://pan.baidu.com/s/1ntOi8Il 密码: u6tm
顶级实战足球教程STR足训 链接: http://pan.baidu.com/s/1kTmYWp5 密码: ypii
跟我踢足球教程 链接: http://pan.baidu.com/s/1qWBRlCw 密码: dth4
冠军俱乐部足球教学 链接: http://pan.baidu.com/s/1kTnER3p 密码: n64e
科化足球视频教程 链接: http://pan.baidu.com/s/1eQrmOdO 密码: xtgu
像贝克汉姆一样踢球 链接: http://pan.baidu.com/s/1i3ENvsL 密码: wp6t
学踢足球入门教程 链接: http://pan.baidu.com/s/1gd4HYMn 密码: q9wu
英国足球视频教程 链接: http://pan.baidu.com/s/1bnnpoOR 密码: 4hxw
足球50大技巧 链接: http://pan.baidu.com/s/1bn8TUCB 密码: 5dwx
足球训练技巧教程 链接: http://pan.baidu.com/s/1qW2xJp6 密码: bfr8

]]></description><link>https://blog.gaoredu.com/article/51a5493b-a180-4ffd-92c2-0b2b63e16679</link><guid isPermaLink="true">https://blog.gaoredu.com/article/51a5493b-a180-4ffd-92c2-0b2b63e16679</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 13 Jan 2018 21:24:48 GMT</pubDate></item><item><title><![CDATA[300道面试真题和3000多份精品简历模板资源大放送]]></title><description><![CDATA[内容包括：1、5000份精品简历模板。2、实用简历撰写教程。3、300多份大公司的笔试、面试题真题。231


面试相关的再来推荐几个：【后台进阶】2019最新360大牛带你全面解读PHP面试视频教程https://www.52tech.tech/forum.php?mod=viewthread&tid=925&fromuid=1
(出处: 我爱科技论坛)

2019最新揭秘一线互联网企业 前端JavaScript高级面试---视频教程【不加密版】
https://www.52tech.tech/forum.php?mod=viewthread&tid=944&fromuid=1
(出处: 我爱科技论坛)



【算法面试】2020最新玩转算法面试 C++版本 互联网公司真题【完整版】
https://www.52tech.tech/forum.php?mod=viewthread&tid=953&fromuid=1
(出处: 我爱科技论坛)





下载链接：http://pan.baidu.com/s/1kUUF1pP提取密码：2cke
]]></description><link>https://blog.gaoredu.com/article/11f8b2f5-dd97-4564-b8bf-71d6ae0b556b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/11f8b2f5-dd97-4564-b8bf-71d6ae0b556b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 12 Jan 2018 20:05:24 GMT</pubDate></item><item><title><![CDATA[淘宝店长实用提高销量视频教程]]></title><description><![CDATA[主要目录如下：
全部文件返回上一级|全部文件>英盛网-淘宝系统班
文件名大小修改日期
9.让客服询单转化率翻倍的秘密 （2集）
-2017-11-25 06:09
8.轻松玩转无线淘宝
-2017-11-25 06:09
7.玩转钻展，获取精准流量（3集）
-2017-11-25 06:09
6.揭秘淘宝营销活动策划套路（4集）
-2017-11-25 06:09
5.让宝贝既热卖又带利润的定价规则
-2017-11-25 06:09
4.打造爆款必须掌握四大步骤（4集）
-2017-11-25 06:09
3.找对货源让网店轻松赚钱（2集）
-2017-11-25 06:09
2.一节课读懂在线消费心理（4集）
-2017-11-25 06:09
18.通过标题优化提升宝贝自然搜索排名（3集）
-2017-11-25 06:09
17.零成本的淘宝SEO实战技巧（16集）
-2017-11-25 06:09
16.从木桶理论剖析-如何打造淘宝店铺竞争力（2集）
-2017-11-25 06:09
15.淘宝运营不可不知的十大秘笈（3集）
-2017-11-25 06:09
14.曝光淘宝虚假交易的判定标准（2集）
-2017-11-25 06:09
13.淘宝店综合分析实战（8集）
-2017-11-25 06:09
12.如何做好网店老客户营销
-2017-11-25 06:09
11.制胜双11的客服安排攻略（2集）
-2017-11-25 06:09
10.用赤兔名品数据分析，提升客服绩效
-2017-11-25 06:09
1.淘宝店铺运营规划全攻略（7集）
-2017-11-25 06:09



230


下载链接:http://pan.baidu.com/s/1o7HcETk]]></description><link>https://blog.gaoredu.com/article/83266236-9bb6-4511-9a1b-e8b426464cb5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/83266236-9bb6-4511-9a1b-e8b426464cb5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 12 Jan 2018 18:05:26 GMT</pubDate></item><item><title><![CDATA[易语言POST+JS实战教程]]></title><description><![CDATA[主要是一套易语言实战教程：易语言，JS实战
主要目录如下：


229


下载链接：
http://pan.baidu.com/s/1c9AHfK
提取码：
qbwh
]]></description><link>https://blog.gaoredu.com/article/89c3aa79-61e5-40ea-b016-f891b338c226</link><guid isPermaLink="true">https://blog.gaoredu.com/article/89c3aa79-61e5-40ea-b016-f891b338c226</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 11 Jan 2018 21:00:49 GMT</pubDate></item><item><title><![CDATA[E语言-VB-汇编-JAVA-C+-C-PHP等编程语言全套视频教程]]></title><description><![CDATA[228

视频目录如下：
易语言
蓝鸟中文编

蓝鸟编程

汇编

安卓源码

VB

swift

python

java视频教程

JAVA

C++

C#

C

asp.net


下载链接：

http://pan.baidu.com/s/1miIeMRe



]]></description><link>https://blog.gaoredu.com/article/9e5c4530-0bc2-444f-b28b-031448d028db</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9e5c4530-0bc2-444f-b28b-031448d028db</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 11 Jan 2018 18:05:46 GMT</pubDate></item><item><title><![CDATA[2018动力节点最新Java零基础视频学习教程【113集全】]]></title><description><![CDATA[主要目录如下：

227

文件名大小修改日期
java零基础简介.doc
64KB2018-01-10 22:27
113-Java夜校视频教程--匿名内部类.avi
97.2M2018-01-10 22:27
112-Java夜校视频教程--Object类中常用的方法.avi
285.7M2018-01-10 22:27
111-Java夜校视频教程--访问修饰符.avi
91.9M2018-01-10 22:27
110-Java夜校视频教程--next()与nextLine()区别.avi
77.3M2018-01-10 22:27
109-Java夜校视频教程-接口与抽象类区别.avi
30M2018-01-10 22:27
108-Java夜校视频教程-接口案例2.avi
50.6M2018-01-10 22:27
107-Java夜校视频教程-接口案例.avi
132.3M2018-01-10 22:27
106-Java夜校视频教程-接口.avi
151.7M2018-01-10 22:27
105-Java夜校视频教程-抽象类.avi
183.6M2018-01-10 22:27
104-Java夜校视频教程-final关键字.avi
92.6M2018-01-10 22:27
103-Java夜校视频教程-课后练习题.avi
263.2M2018-01-10 22:27
102-Java夜校视频教程-父类与子类之间的转换.avi
105.8M2018-01-10 22:27
101-Java夜校视频教程-使用父类作为方法的返回值类型.avi
67M2018-01-10 22:27
100-Java夜校视频教程-多态.avi
230.9M2018-01-10 22:27
099-Java夜校视频教程-课后练习题3.avi
63.7M2018-01-10 22:27
098-Java夜校视频教程-课后练习题2.avi
179.9M2018-01-10 22:27
097-Java夜校视频教程-课后练习题.avi
131.5M2018-01-10 22:27
096-Java夜校视频教程-回顾上次课所讲内容.avi
96.6M2018-01-10 22:27
095-Java夜校视频教程-重写.avi
96.5M2018-01-10 22:27
094-Java夜校视频教程-继承案例.avi
92.7M2018-01-10 22:27
093-Java夜校视频教程-当实例化子类时，父类做了什么.avi
117.7M2018-01-10 22:27
092-Java夜校视频教程-继承.avi
138.4M2018-01-10 22:27
091-Java夜校视频教程-引用数据类型作为参数进行传递.avi
187.6M2018-01-10 22:27
090-Java夜校视频教程-基本数据类型作为参数进行传递.avi
90.1M2018-01-10 22:27
089-Java夜校视频教程-课后作业6.avi
128.7M2018-01-10 22:27
088-Java夜校视频教程-课后练习3.avi
176.7M2018-01-10 22:27
087-Java夜校视频教程-单例设计模式.avi
67.3M2018-01-10 22:27
086-Java夜校视频教程-单例设计模式.avi
7.5M2018-01-10 22:27
085-Java夜校视频教程-封装.avi
179.4M2018-01-10 22:27
084-Java夜校视频教程-this关键字.avi
220.6M2018-01-10 22:27
083-Java夜校视频教程-空指针异常.avi
176.7M2018-01-10 22:27
082-Java夜校视频教程-课后练习题1.avi
72.1M2018-01-10 22:27
081-Java夜校视频教程-回顾上次课所讲内容.avi
117M2018-01-10 22:27
080-Java夜校视频教程-构造方法.avi
150.8M2018-01-10 22:27
079-Java夜校视频教程-对象的内存分析图.avi
107.8M2018-01-10 22:27
078-Java夜校视频教程-类的基本操作.avi
148.8M2018-01-10 22:27
077-Java夜校视频教程-类和对象.avi
127.2M2018-01-10 22:27
076-Java夜校视频教程-课后练习题.avi
370.8M2018-01-10 22:27
075-Java夜校视频教程-递归.avi
98.9M2018-01-10 22:27
074-Java夜校视频教程-方法重载.avi
88.2M2018-01-10 22:27
073-Java夜校视频教程-最大公约数和最小公倍数方法完成.avi
58.8M2018-01-10 22:27
072-Java夜校视频教程-方法返回值为boolean类型案例.avi
50.9M2018-01-10 22:27
071-Java夜校视频教程-带参并带返回值的方法.avi
53.6M2018-01-10 22:27
070-Java夜校视频教程-带参无返回值的方法.avi
158.2M2018-01-10 22:27
069-Java夜校视频教程-无参带返回值的方法.avi
74.6M2018-01-10 22:27
068-Java夜校视频教程-无参无返回值的方法.avi
122.7M2018-01-10 22:27
067-Java夜校视频教程-方法的基本操作.avi
103.4M2018-01-10 22:27
066-Java夜校视频教程-回顾上次课所讲内容.avi
85.2M2018-01-10 22:27
065-Java夜校视频教程-import的使用.avi
68.3M2018-01-10 22:27
064-Java夜校视频教程-package的使用.avi
226.8M2018-01-10 22:27
063-Java夜校视频教程-Eclipse的使用.avi
244.5M2018-01-10 22:27
062-Java夜校视频教程-课后练习题.avi
342.8M2018-01-10 22:27
061-Java夜校视频教程-回顾上次课所讲内容.avi
118.4M2018-01-10 22:27
060-Java夜校视频教程-数组2.avi
41.4M2018-01-10 22:27
059-Java夜校视频教程-数组.avi
92.4M2018-01-10 22:27
058-Java夜校视频教程-双重循环中使用continue语句.avi
65.6M2018-01-10 22:27
057-Java夜校视频教程-双重循环中使用break语句.avi
69.4M2018-01-10 22:27
056-Java夜校视频教程-打印等腰三角形.avi
28.2M2018-01-10 22:27
055-Java夜校视频教程-双重循环.avi
67.7M2018-01-10 22:27
054-Java夜校视频教程-三种循环异同点.avi
55.7M2018-01-10 22:27
053-Java夜校视频教程-课后练习题.avi
248.7M2018-01-10 22:27
052-Java夜校视频教程-回顾上次课所讲内容.avi
15.5M2018-01-10 22:27
051-Java夜校视频教程-break与continue区别.avi
8.5M2018-01-10 22:27
050-Java夜校视频教程-循环中使用continue.avi
50.3M2018-01-10 22:27
05-打Java夜校视频教程-印九九乘法表.avi
20.3M2018-01-10 22:27
049-Java夜校视频教程-循环中使用break.avi
91.7M2018-01-10 22:27
048-Java夜校视频教程-do while循环.avi
63.1M2018-01-10 22:27
047-Java夜校视频教程-while循环.avi
33.1M2018-01-10 22:27
046-Java夜校视频教程-for循环总结.avi
77.7M2018-01-10 22:27
045-Java夜校视频教程-for循环.avi
139.3M2018-01-10 22:27
044-Java夜校视频教程-switch case.avi
115.5M2018-01-10 22:27
043-Java夜校视频教程-课后练习题.avi
172.3M2018-01-10 22:27
042-Java夜校视频教程-回顾之前所讲内容.avi
60.5M2018-01-10 22:27
041-Java夜校视频教程-嵌套if例题.avi
56.7M2018-01-10 22:27
040-Java夜校视频教程-if嵌套.avi
38.1M2018-01-10 22:27
039-Java夜校视频教程-多重选择结构.avi
61M2018-01-10 22:27
038-Java夜校视频教程-if else.avi
79.6M2018-01-10 22:27
037-Java夜校视频教程-随机数.avi
90.2M2018-01-10 22:27
036-Java夜校视频教程-if.avi
158.1M2018-01-10 22:27
035-Java夜校视频教程-课后练习题.avi
181.2M2018-01-10 22:27
034-Java夜校视频教程-回顾之前所讲内容.avi
164.3M2018-01-10 22:27
033-Java夜校视频教程-键盘输入.avi
148.6M2018-01-10 22:27
032-Java夜校视频教程-三目运算符.avi
90.7M2018-01-10 22:27
031-Java夜校视频教程-逻辑运算符.avi
135.2M2018-01-10 22:27
030-Java夜校视频教程-关系运算符.avi
47.7M2018-01-10 22:27
029-Java夜校视频教程-赋值运算符.avi
63.8M2018-01-10 22:27
028-Java夜校视频教程-连接运算符.avi
11.1M2018-01-10 22:27
027-Java夜校视频教程-算术运算符.avi
177.6M2018-01-10 22:27
026-Java夜校视频教程-转义序列符.avi
59.6M2018-01-10 22:27
025-Java夜校视频教程-课后练习题.avi
65.7M2018-01-10 22:27
024-Java夜校视频教程-回顾上次课所讲内容.avi
107.4M2018-01-10 22:27
023-Java夜校视频教程-数据类型之间的转换.avi
86.4M2018-01-10 22:27
022-Java夜校视频教程-基本数据类型.avi
134.9M2018-01-10 22:27
021-Java夜校视频教程-变量的分类.avi
84.6M2018-01-10 22:27
020-Java夜校视频教程-变量中常见的错误.avi
23.4M2018-01-10 22:27
019-Java夜校视频教程-变量.avi
242.3M2018-01-10 22:27
018-Java夜校视频教程-进制及进制之间的转换.avi
93.2M2018-01-10 22:27
017-Java夜校视频教程-字面值.avi
35.8M2018-01-10 22:27
016-Java夜校视频教程-关键字和保留字.avi
24.2M2018-01-10 22:27
015-Java夜校视频教程-标识符.avi
69.1M2018-01-10 22:27
014-Java夜校视频教程-回顾上次课所讲内容.avi
167.6M2018-01-10 22:27
013-Java夜校视频教程-public class和class区别.avi
50.2M2018-01-10 22:27
012-Java夜校视频教程-Java程序中注释.avi
17.6M2018-01-10 22:27
011-Java夜校视频教程-Java程序中输出语句.avi
23.3M2018-01-10 22:27
010-Java夜校视频教程-Java程序的组成部分.avi
39.1M2018-01-10 22:27
009-Java夜校视频教程-JDK的安装及环境变量的配置.avi
333.4M2018-01-10 22:27
008-Java夜校视频教程-计算机语言发展史.avi
22.5M2018-01-10 22:27
007-Java夜校视频教程-Java语言特点.avi
108.9M2018-01-10 22:27
006-Java夜校视频教程-Java语言发展史.avi
57.7M2018-01-10 22:27
005-Java夜校视频教程-常见DOS命令.avi
181.8M2018-01-10 22:27
004-Java夜校视频教程-软件的分类.avi
97.6M2018-01-10 22:27
003-Java夜校视频教程-计算机的组成.avi
92.1M2018-01-10 22:27
002-Java夜校视频教程-常用的快捷键.avi
30.7M2018-01-10 22:27
001-Java夜校视频教程-EditPlus安装及基本使用.avi
121.7M2018-01-10 22:27


下载链接：
http://pan.baidu.com/s/1kWG1Tu3


]]></description><link>https://blog.gaoredu.com/article/cf1d4b6a-ea9b-4f98-8b92-cecf53d43a81</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cf1d4b6a-ea9b-4f98-8b92-cecf53d43a81</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 11 Jan 2018 16:46:18 GMT</pubDate></item><item><title><![CDATA[微信跳一跳辅助（无需链接手机）最新突破方法]]></title><description><![CDATA[使用本软件需满足以下条件：


1.使用安卓模拟器（这里测试我用的是BlueStacks）


2.安卓模拟器窗口大小用鼠标调为(Ps:近似的也可以，但误差最好不超过3)


（是调窗口大小，不是改分辨率！）


因为当时制作的时候随便拉了一下模拟器的窗口（测量的数据都和分辨率有关）


225


黑科技软件下载地址：链接：https://pan.baidu.com/s/1jHBNmPC 密码：jjp3




]]></description><link>https://blog.gaoredu.com/article/2e332c1a-2e86-40f2-a858-90042c7dae16</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2e332c1a-2e86-40f2-a858-90042c7dae16</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 10 Jan 2018 20:02:55 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【大话西游之大神娶亲】]]></title><description><![CDATA[电影名称：大话西游之大圣娶亲
片长: 95分钟 / 110分钟(重映版)
又名: 西游记完结篇仙履奇缘 / 齐天大圣西游记 / 大话东游
豆瓣评分：9.1分


大圣娶亲故事的开头，是紫霞对至尊宝说，我包下了这座山，这座山上所有的东西都是我的，你也是我的，至尊宝那时为了要到月光宝盒，学狗叫讨好紫霞，但是，人生总有取舍，不戴金刚圈我不能救你，戴上金刚圈我不能爱你，这就像上天跟他开了个天大的玩笑，当他彻底爱上紫霞时候一切都晚了，失去了最爱的人一切都没了意义，落寞的身影就像条斗败得狗……
226

至于对电影的评价嘛，小编在这里暂且不多说了，据说剧情还是很不错的呢！
爱奇艺在线观影地址：http://www.iqiyi.com/v_19rrkqj66k.html#vfrm=19-9-0-1（需开通VIP会员） 
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。



]]></description><link>https://blog.gaoredu.com/article/2fa1217c-9d98-488c-b02a-c90bacad2882</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2fa1217c-9d98-488c-b02a-c90bacad2882</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 10 Jan 2018 17:18:29 GMT</pubDate></item><item><title><![CDATA[WEBGL常用的的经典学习网站]]></title><description><![CDATA[WebGL（Web图形库）是一个JavaScript API，用于在任何兼容的Web浏览器中呈现交互式3D和2D图形，而不使用插件。WebGL通过引入一个非常符合可用于HTML5 <canvas>元素的OpenGL ES 2.0的API来实现。https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API?redirectlocale=en-US&redirectslug=WebGL

OpenGL&#174; ES 2.0 实用参考手册：http://www.khronos.org/registry/OpenGL-Refpages/es2.0/

十六课的Leaning WEBGL系列教程：http://learningwebgl.com/blog/?page_id=1217

]]></description><link>https://blog.gaoredu.com/article/11e1627b-893a-471f-aa55-6a3a8b5e1c15</link><guid isPermaLink="true">https://blog.gaoredu.com/article/11e1627b-893a-471f-aa55-6a3a8b5e1c15</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 10 Jan 2018 17:09:47 GMT</pubDate></item><item><title><![CDATA[Windows系统下有了这几个工具软件包，以后让你的工作效率至少提升10倍以上]]></title><description><![CDATA[收集了很多很多工具,  还有破解工具!主要包括编程工具，常用工具，系统工具，加壳补丁工具，破解工具等，具体看图。

224

包括编程工具、调试工具、网络工具，动画录制、布丁、密码学工具，简直就是一个小巧十足的黑科技工具包啊。



下载链接：https://pan.baidu.com/s/1pLKaZpT 密码：fygn

]]></description><link>https://blog.gaoredu.com/article/4325461c-15ca-474c-af37-d1e84b585bba</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4325461c-15ca-474c-af37-d1e84b585bba</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Jan 2018 22:02:22 GMT</pubDate></item><item><title><![CDATA[末日崩塌 San AndreasVIP电影在线看]]></title><description><![CDATA[类型: 动作 / 冒险 / 灾难
制片国家/地区: 美国 / 澳大利亚
语言: 英语
上映日期: 2015-06-02(中国大陆) / 2015-05-29(美国)
片长: 114分钟

223
《末日崩塌》作为一部科幻灾难片，该有的元素已经都具备了，震撼的视觉效果、男主角无敌的身材、个人英雄主义的完美展现以及算不得缠绵的爱情，但是由于故事的主线太过单薄，还有大家都能猜到的大团圆结局，都没办法让这部影片成为经典。按照影评标准给分，7.5分吧。



爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr7pymr4.html?fc=b3604d2dd54c307f（需开通VIP会员） 
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。





]]></description><link>https://blog.gaoredu.com/article/aadbdde4-4cf6-43d2-863b-b082eb8232a7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/aadbdde4-4cf6-43d2-863b-b082eb8232a7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Jan 2018 20:02:23 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第十波】，新年资源大放送之中国政法大学和中国sheke专业真题...]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方我爱科技论坛官方微信公众号，获取更多免费资源

-2017-06-01 19:04
中国政法大学2005年硕士研究生入学考试马克思主义理论与思想试卷--httpbt.com--784.html
7KB2017-06-01 19:04
中国政法大学2005年硕士研究生入学考试逻辑学试卷--httpbt.com--783.html
9KB2017-06-01 19:04
中国政法大学2005年硕士研究生入学考试基础心理学试卷--httpbt.com--782.html
6KB2017-06-01 19:04
中国政法大学2005年硕士研究生入学考试国际关系试卷--httpbt.com--781.html
7KB2017-06-01 19:04
中国社会科学院2006年硕士研究生入学考试管理学试卷--httpbt.com--666.html
6KB2017-06-01 19:04
中国社会科学院2005年硕士研究生入学考试宗教学原理试卷--httpbt.com--976.html
6KB2017-06-01 19:04
中国社会科学院2005年硕士研究生入学考试文艺理论试卷--httpbt.com--1093.html
6KB2017-06-01 19:04
中国社会科学院2005年硕士研究生入学考试经济学原理试卷--httpbt.com--975.html
6KB2017-06-01 19:04
中国社会科学院2005年硕士研究生入学考试古代文学试卷--httpbt.com--1094.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试刑事科学技术系刑诉试卷--httpbt.com--615.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试刑事科学技术系刑事侦试卷--httpbt.com--613.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试刑事科学技术系刑法学试卷--httpbt.com--616.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试刑事科学技术系刑法试卷--httpbt.com--614.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试民法学试卷--httpbt.com--619.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试经济刑法试卷--httpbt.com--688.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试国际法试卷--httpbt.com--620.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试犯罪学系犯罪学试卷--httpbt.com--617.html
6KB2017-06-01 19:04
中国人民公安大学2006年硕士研究生入学考试法理学试卷--httpbt.com--618.html
6KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试运动训练学试卷--httpbt.com--865.html
6KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试行政法学试卷--httpbt.com--864.html
7KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试刑事侦查学试卷--httpbt.com--863.html
6KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试信息安全工程系信号与试卷--httpbt.com--874.html
8KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试心理学研究方法试卷--httpbt.com--862.html
6KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试系数据结构试卷--httpbt.com--861.html
10KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试数据结构试卷--httpbt.com--873.html
9KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试试验心理学试卷--httpbt.com--860.html
7KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试事科学技术系病理学试卷--httpbt.com--875.html
6KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试生物化学试卷--httpbt.com--859.html
7KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试涉外警务系警察勤务试卷--httpbt.com--858.html
6KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试交通工程试卷--httpbt.com--857.html
7KB2017-06-01 19:04
中国人民公安大学2005年硕士研究生入学考试管理学试卷--httpbt.com--856.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试政治学原理试卷--httpbt.com--563.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试行政管理试卷--httpbt.com--550.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试新闻传播史论试卷--httpbt.com--686.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试社会研究方法试卷--httpbt.com--565.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试社会学理论试卷--httpbt.com--564.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试人力资源管理试卷--httpbt.com--693.html
7KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试民商法试卷--httpbt.com--557.html
6KB2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试经济法试卷--httpbt.com--551.html
6KB2017-06-01 19:04


下载链接: https://pan.baidu.com/s/1mhYKhLI 密码: 4ajj
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/6e744e5a-0aee-471d-a337-c35c8bf0d83f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6e744e5a-0aee-471d-a337-c35c8bf0d83f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 09 Jan 2018 18:01:21 GMT</pubDate></item><item><title><![CDATA[两个DOS命令快速新增用户及修改Windows指定的用户名和密码]]></title><description><![CDATA[方法很简单哈，具体步骤如下：
1.按快捷键“Windows + R”打开开始快捷菜单，输入命令CMD，找到命令提示符。

2.先来看下Windows下的创建用户net user usename password /add
该命令表示创建一个新的用户，usename表示用户名，password是密码；但如果该用户已经存在，则表示更改密码。

3.如果想删除win8 账户密码的话，可以输入命令：
net user 用户名 /delete


回车即可，该用户名和密码被全部删除。

注意事项：
1.通过命令提示符更改windows8管理员账号密码，所登录进去的账号需要有管理员权利。
2.需要打开命令提示符（管理员）这个高级命令提示符窗口才可以运行修改密码操作，否则操作失败。



]]></description><link>https://blog.gaoredu.com/article/24d557de-9a06-490c-9ea1-06605c794431</link><guid isPermaLink="true">https://blog.gaoredu.com/article/24d557de-9a06-490c-9ea1-06605c794431</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 08 Jan 2018 22:04:19 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第八波】，新年资源大放送之同济大学和天津shangxuey专业真题...]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方我爱科技论坛官方微信公众号，获取更多免费资源


同济大学2005年硕士研究生入学考试中外建筑史试卷--httpbt.com--888.html
6KB2017-06-01 19:04
同济大学2005年硕士研究生入学考试交通工程学试卷--httpbt.com--812.html
6KB2017-06-01 19:04
同济大学2005年硕士研究生入学考试建筑与城市规划学院暖试卷--httpbt.com--887.html
7KB2017-06-01 19:04
同济大学2005年硕士研究生入学考试管理学概论试卷--httpbt.com--811.html
6KB2017-06-01 19:04
同济大学2005年硕士研究生入学考试城市规划原理试卷--httpbt.com--810.html
6KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试西方经济学与管理学试卷--httpbt.com--553.html
7KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试生物化学与微生物学试卷--httpbt.com--632.html
10KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试生物化学及微生物学试卷--httpbt.com--657.html
11KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试民商法试卷--httpbt.com--629.html
8KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试民法试卷--httpbt.com--631.html
6KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试马克思主义哲学原理试卷--httpbt.com--654.html
6KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试马克思主义理论与思想试卷--httpbt.com--628.html
6KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试旅游学概论、饭店管理试卷--httpbt.com--653.html
6KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试旅游管理试卷--httpbt.com--627.html
6KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试经济学试卷--httpbt.com--630.html
7KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试技术经济及管理专业综试卷--httpbt.com--652.html
8KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试技术经济及管理专业综试卷--httpbt.com--552.html
8KB2017-06-01 19:04
天津商学院2006年硕士研究生入学考试技术经济及管理试卷--httpbt.com--681.html
8KB2017-06-01 19:04

下载链接: https://pan.baidu.com/s/1c19sgdM 密码: pmxw
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/f1d895a1-20ed-4649-aa4d-e1cbd5a11cdb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f1d895a1-20ed-4649-aa4d-e1cbd5a11cdb</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 08 Jan 2018 18:01:43 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第九波】，新年资源大放送之中国人民大学专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方我爱科技论坛官方微信公众号，获取更多免费资源



-2017-06-01 19:04
中国人民大学2006年硕士研究生入学考试法学综合试卷--httpbt.com--556.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试中国古代史试卷--httpbt.com--776.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试刑法试卷--httpbt.com--764.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试新闻实务试卷--httpbt.com--775.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试新闻传播史试卷--httpbt.com--774.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试新闻传播史论试卷--httpbt.com--759.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试新闻传播理论试卷--httpbt.com--777.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试宪法行政法试卷--httpbt.com--763.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试诉讼法试卷--httpbt.com--762.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试社会研究方法试卷--httpbt.com--942.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试民商法试卷--httpbt.com--768.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试民商法复试试卷--httpbt.com--765.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试环境资源法试卷--httpbt.com--761.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试环保法试卷--httpbt.com--770.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试国际政治、国际关系试卷--httpbt.com--941.html
7KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试国际法试卷--httpbt.com--767.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试公共管理学试卷--httpbt.com--943.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试法制史试卷--httpbt.com--769.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试法学试卷--httpbt.com--766.html
9KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试法理学试卷--httpbt.com--760.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试传媒经济与管理试卷--httpbt.com--773.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试传播史试卷--httpbt.com--772.html
6KB2017-06-01 19:04
中国人民大学2005年硕士研究生入学考试传播实务试卷--httpbt.com--771.html
7KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试中国现代文学、外国文试卷--httpbt.com--413.html
7KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试现代汉语试卷--httpbt.com--414.html
7KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试文艺学基础与评论写作试卷--httpbt.com--412.html
10KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试文艺学基础与评论写作试卷--httpbt.com--411.html
7KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试文艺理论（含马列文论试卷--httpbt.com--410.html
6KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试欧美文学史（含西方文试卷--httpbt.com--409.html
6KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试民商学试卷--httpbt.com--408.html
6KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试法学综合试卷--httpbt.com--749.html
8KB2017-06-01 19:04
中国人民大学2002年硕士研究生入学考试财政金融学院货币银行试卷--httpbt.com--750.html
8KB2017-06-01 19:04
中国科学院自然科学史2005年硕士研究生入学考试科学技术史试卷--httpbt.com--985.html
7KB2017-06-01 19:04
中国科学院自然科学史2005年硕士研究生入学考试科技史写作试卷--httpbt.com--986.html
7KB2017-06-01 19:04
中国科学院植物所2005年硕士研究生入学考试生物化学与分子生物学试卷--httpbt.com--1091.html
7KB2017-06-01 19:04
中国科学院遗传研究所2002年硕士研究生入学考试普通遗传学试题试卷--httpbt.com--416.html
7KB2017-06-01 19:04
中国科学院遗传研究所2001年硕士研究生入学考试普通遗传学试题试卷--httpbt.com--415.html
7KB2017-06-01 19:04
中国科学院遥感应用研2006年硕士研究生入学考试自然地理试卷--httpbt.com--571.html
6KB2017-06-01 19:04
中国科学院遥感应用研2006年硕士研究生入学考试自然地理试卷--httpbt.com--569.html
6KB2017-06-01 19:04
中国科学院遥感应用研2006年硕士研究生入学考试遥感概论试卷--httpbt.com--572.html
7KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试西方经济学试卷--httpbt.com--86.html
6KB2017-06-01 19:04

下载链接: https://pan.baidu.com/s/1c4SH8y 密码: dr27
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。



]]></description><link>https://blog.gaoredu.com/article/dad5940e-73ca-4746-93de-26c733dff498</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dad5940e-73ca-4746-93de-26c733dff498</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 08 Jan 2018 07:17:44 GMT</pubDate></item><item><title><![CDATA[VS2008数据可视化设计与开发之系统架构搭建]]></title><description><![CDATA[  数据可视化不仅是一门包含各种算法的技术，而且还是一个具有方法论的学科。本实验报告主要基于windows操作系统环境下，在VS2008开发工具中集成了QT的OPENGL库相关模块进行了数据可视化设计与开发实验的相关开发工作，先后完成了基于QT + OPENGL的数据可视化系统开发设计、曲面重建与可视 化、三维体重建与可视化以及网络可视化共计四个实验。旨在通过实验了解数据可视化的基本概念和原理，掌握进行数据可视化设计和实现的方法与步骤，具备在实际科研工作中独立进行数据可视化开发和设计能力。
1 可视化设计框架数据可视化的设计可以简化为四个级联的层级。最外层是刻画真实用户的问题，称为问题刻画层；第二层是抽象层，将特定领域的任务和数据映射到抽象且通用的任务及数据类型；第三层是编码层，设计与数据类型相关的视觉编码及交互方法；最内层的任务是创建正确完成系统设计的算法。1.1 用户目标任务可视化设计人员首先与目标用户群相处大量时间，了解目标受众用户的需求，以及目标用户的需求和数据属于哪一个特定的目标领域，并且需要及时收集与问题相关的信息，建立系统原型，通过观察用户与原型系统的交互过程来判断所提出方案的实际效果。1.2 数据处理和变换将前期确定的任务和数据从特定领域的专有名词的描述转换为更抽象、更通用的信息可视化术语的描述。主要任务包括识别、判断、可视化、比较、推断、配置和定位等。在数据抽象过程中，可视化设计人员需要考虑是否将用户提供的数据集转换为另一种形式，以及使用何种转换方法，以便于选择合适的可视编码，完成分析任务。1.3 设计可视化编码和交互方法
视觉编码和交互这两个层面同城相互依赖，主要任务为创建完成系统设计的算法。第二层确定的抽象任务影被应用于指导视觉编码方法的选取，第四层设计与前三个层次匹配的具体算法，是对前期任务的一个具体描述，主要区别在于第三层确定应当呈现的内容以及如何呈现，而第四层解决的是如何完成前期的数据处理设计等任务。222
]]></description><link>https://blog.gaoredu.com/article/8dcfc83c-0bef-41a3-81eb-f9ee9a4d31aa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8dcfc83c-0bef-41a3-81eb-f9ee9a4d31aa</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 08 Jan 2018 06:55:12 GMT</pubDate></item><item><title><![CDATA[怎样不用下载优酷客户端而快速下载优酷视频]]></title><description><![CDATA[1.只有声音没有视频的原因是你的播放器不能很好支持ts格式的原因（我猜测是用win10自带的播放器），还是推荐QQ影音。
2.是有点的麻烦，一般是在线看的，需要下载的时候一般是有特别的用途。
3.本工具用的很简单，只是我每个步骤截图而显得复杂了。


下载地址：链接：https://pan.baidu.com/s/1kV5pNyJ 密码：qyq3


]]></description><link>https://blog.gaoredu.com/article/51a64443-63be-4bf4-866d-78874c346357</link><guid isPermaLink="true">https://blog.gaoredu.com/article/51a64443-63be-4bf4-866d-78874c346357</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 07 Jan 2018 00:01:05 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第七波】，新年资源大放送之兰州大学专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方我爱科技论坛官方微信公众号，获取更多免费资源


清华大学2005年硕士研究生入学考试中外建筑历史试卷--httpbt.com--802.html
6KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试信号与系统试卷--httpbt.com--963.html
8KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试新闻理论试卷--httpbt.com--801.html
6KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试文化与传播综合知识试卷--httpbt.com--965.html
6KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试民法学试卷--httpbt.com--799.html
6KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试经济学试卷--httpbt.com--800.html
7KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试建筑历史试卷--httpbt.com--797.html
6KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试计算机专业试题试卷--httpbt.com--796.html
12KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试法理学试卷--httpbt.com--798.html
7KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试传播学试卷--httpbt.com--795.html
6KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试传播学理论与方法试卷--httpbt.com--964.html
7KB2017-06-01 19:04
&#59703;
清华大学2005年硕士研究生入学考试比较文学与世界文学试卷--httpbt.com--794.html
7KB2017-06-01 19:04
&#59703;
南开大学2006年硕士研究生入学考试西方经济学试卷--httpbt.com--521.html
7KB2017-06-01 19:04
&#59703;
南开大学2006年硕士研究生入学考试法学综合试卷--httpbt.com--522.html
15KB2017-06-01 19:04
&#59703;
南开大学2005年硕士研究生入学考试微观经济学试卷--httpbt.com--813.html
7KB2017-06-01 19:04
&#59703;
南京师范大学2005年硕士研究生入学考试中国文化史试卷--httpbt.com--924.html
6KB2017-06-01 19:04
&#59703;
南京师范大学2005年硕士研究生入学考试实验心理学试卷--httpbt.com--926.html
6KB2017-06-01 19:04
&#59703;
南京师范大学2005年硕士研究生入学考试教育科学学院心理学试卷--httpbt.com--925.html
6KB2017-06-01 19:04
&#59703;
南京师范大学2005年硕士研究生入学考试基础心理学试卷--httpbt.com--927.html
6KB2017-06-01 19:04
&#59703;
南京师范大学2005年硕士研究生入学考试古代文学史试卷--httpbt.com--928.html
6KB2017-06-01 19:04
&#59703;
南京农业大学2005年硕士研究生入学考试德语二外试卷--httpbt.com--923.html
47KB2017-06-01 19:04
&#59703;
南京大学2006年硕士研究生入学考试新闻传播史试卷--httpbt.com--664.html
6KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试政治学原理试卷--httpbt.com--910.html
6KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试行政管理试卷--httpbt.com--909.html
6KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试新闻转播史论试卷--httpbt.com--907.html
6KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试新闻传播学试卷--httpbt.com--911.html
7KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试新闻采写与文史知识试卷--httpbt.com--906.html
6KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试文学试卷--httpbt.com--905.html
7KB2017-06-01 19:04
&#59703;
南京大学2005年硕士研究生入学考试文学2试卷--httpbt.com--908.html
6KB2017-06-01 19:04
&#59703;
南京大学2001年硕士研究生入学考试操作系统和数据库试卷--httpbt.com--285.html
9KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试政治学原理试卷--httpbt.com--274.html
6KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试政治经济学试卷--httpbt.com--310.html
6KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试行政管理学试卷--httpbt.com--275.html
6KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试行政法试卷--httpbt.com--276.html
6KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试信息技术基础试卷--httpbt.com--314.html
8KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试投资与金融试卷--httpbt.com--306.html
6KB2017-06-01 19:04
&#59703;
南京大学2000年硕士研究生入学考试数据库与操作系统试卷--httpbt.com--287.html
10KB2017-06-01 19:04






下载链接: https://pan.baidu.com/s/1dE7nXVb 密码: 8wfm
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/b4abdd36-3555-4b22-85cd-c5b6835ebdaf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b4abdd36-3555-4b22-85cd-c5b6835ebdaf</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 06 Jan 2018 18:01:12 GMT</pubDate></item><item><title><![CDATA[新思路计算机等级考试考通一级MS破解版]]></title><description><![CDATA[二级MS Office激活码版上机模拟软件

资源名称：二级MS Office激活码版上机模拟软件资源简介：二级MS Office激活码版上机模拟软件，可免费试用资源下载：网盘下载


推荐使用网盘下载，网盘使用教程请点击查看下载地址：http://www.ncre8.net/FindResDown?rclassId=28



]]></description><link>https://blog.gaoredu.com/article/61856a63-95c6-4c06-873b-084a2e9bf561</link><guid isPermaLink="true">https://blog.gaoredu.com/article/61856a63-95c6-4c06-873b-084a2e9bf561</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 05 Jan 2018 23:02:35 GMT</pubDate></item><item><title><![CDATA[2018新浪微博批量删除工具完美破解版]]></title><description><![CDATA[这类工具大部分都收费的，因为新浪对比量删除有限制，所以软件设成7条一次，是比较合理的，反正是全自动的，设成7条一次也不影响什么.延迟也是应对新浪检测。一般3000以上就行了，太快的话，还是不好，当然，你的记录多，设成1000也可以.
其它就没什么了，都是比较简单的功能。


221

现在第三版改成模拟WAP环境操作,解决了这个问题，速度更快。增加了右键全选反选等功能
有需要的下载第三版，基本上不再做更新了，谢谢大家
第三版百度网盘下载地址:链接: https://pan.baidu.com/s/1qY1bQK8 密码: ef5k
]]></description><link>https://blog.gaoredu.com/article/6527e773-e8ba-4f19-be58-d4499bcddaef</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6527e773-e8ba-4f19-be58-d4499bcddaef</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 05 Jan 2018 21:02:23 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第六波】，新年资源大放送之兰州大学专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方我爱科技论坛官方微信公众号，获取更多免费资源

-2017-06-01 19:04
兰州大学2003年硕士研究生入学考试社会学调查试卷--httpbt.com--109.html
6KB2017-06-01 19:04
兰州大学2003年硕士研究生入学考试区域经济学试卷--httpbt.com--425.html
6KB2017-06-01 19:04
兰州大学2003年硕士研究生入学考试普通地质学试卷--httpbt.com--107.html
6KB2017-06-01 19:04
兰州大学2003年硕士研究生入学考试古代文学试卷--httpbt.com--106.html
6KB2017-06-01 19:04
兰州大学2003年硕士研究生入学考试古代文学史试卷--httpbt.com--70.html
7KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试中国古代文学史试卷--httpbt.com--95.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试中国古代文学史试卷--httpbt.com--125.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试政治经济学试卷--httpbt.com--98.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试现代文学史试卷--httpbt.com--69.html
7KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试文学理论试卷--httpbt.com--99.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试社会学概论试卷--httpbt.com--102.html
7KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试社会学调查试卷--httpbt.com--103.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试古代文学试卷--httpbt.com--97.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试古代文学试卷--httpbt.com--68.html
8KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试发展经济学试卷--httpbt.com--96.html
6KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试当代文学史试卷--httpbt.com--101.html
7KB2017-06-01 19:04
兰州大学2002年硕士研究生入学考试比较文学与世界文学试卷--httpbt.com--100.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试自然地理试卷--httpbt.com--93.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试中国文学史试卷--httpbt.com--88.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试中国古代文学史试卷--httpbt.com--124.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试中国古代史试卷--httpbt.com--87.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试政治经济学试卷--httpbt.com--91.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试文学理论试卷--httpbt.com--92.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试古代文学试卷--httpbt.com--90.html
6KB2017-06-01 19:04
兰州大学2001年硕士研究生入学考试发展经济学试卷--httpbt.com--89.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试中国文学史试卷--httpbt.com--76.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试中国古代史试卷--httpbt.com--75.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试政治经济学试卷--httpbt.com--81.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试新闻写作试卷--httpbt.com--84.html
8KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试新闻理论试卷--httpbt.com--85.html
7KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试新闻理论试卷--httpbt.com--74.html
7KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试文学史试卷--httpbt.com--82.html
8KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试文学理论试卷--httpbt.com--83.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试国际贸易理论与政策试卷--httpbt.com--284.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试古代文学试卷--httpbt.com--80.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试古代文学史试卷--httpbt.com--79.html
7KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试发展经济学试卷--httpbt.com--78.html
6KB2017-06-01 19:04
兰州大学2000年硕士研究生入学考试传播学原理试卷--httpbt.com--77.html
6KB2017-06-01 19:04
兰州大学1999年硕士研究生入学考试新闻理论试卷--httpbt.com--73.html
7KB2017-06-01 19:04
兰州大学1999年硕士研究生入学考试传播学原理试卷--httpbt.com--72.html
6KB2017-06-01 19:04

下载链接: https://pan.baidu.com/s/1c6Ul9k 密码: mjft
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。

]]></description><link>https://blog.gaoredu.com/article/c0b3fc71-8eb7-4549-a270-62c381839fd5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c0b3fc71-8eb7-4549-a270-62c381839fd5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 05 Jan 2018 18:02:38 GMT</pubDate></item><item><title><![CDATA[零基础学习Python共计96集教程全]]></title><description><![CDATA[零基础入门学习python    一共96集，具体的目录看下面的介绍：文件名大小修改日期
000愉快的开始.mp4
27.9M2018-01-04 21:02
001我和Python的第一次亲密接触.mp4
29.3M2018-01-04 21:02
002用Python设计第一个游戏.mp4
49.5M2018-01-04 21:02
003小插曲之变量和字符串.mp4
56.3M2018-01-04 21:02
004改进我们的小游戏.mp4
72.8M2018-01-04 21:02
005闲聊之Python的数据类型.mp4
33.9M2018-01-04 21:02
006Pyhon之常用操作符.mp4
29M2018-01-04 21:02
007了不起的分支和循环.mp4
31.6M2018-01-04 21:02
008了不起的分支和循环2.mp4
24.1M2018-01-04 21:02
009了不起的分支和循环3.mp4
26.3M2018-01-04 21:02
010列表：一个打了激素的数组.mp4
24.3M2018-01-04 21:02
011列表：一个打了激素的数组2.mp4
22.9M2018-01-04 21:02
012列表：一个打了激素的数组3.mp4
38.4M2018-01-04 21:02
013元组：戴上了枷锁的列表.mp4
33.8M2018-01-04 21:02
014字符串：各种奇葩的内置方法.mp4
97M2018-01-04 21:02
015字符串：格式化.mp4
77.4M2018-01-04 21:02
016序列！序列！.mp4
53.6M2018-01-04 21:02
017函数：Python的乐高积木.mp4
26M2018-01-04 21:02
018函数：灵活即强大.mp4
33.9M2018-01-04 21:02
019函数：我的地盘听我的.mp4
30.5M2018-01-04 21:02
020函数：内嵌函数和闭包.mp4
35M2018-01-04 21:02
021函数：lambda表达式.mp4
27M2018-01-04 21:02
022函数：递归是神马.mp4
45.1M2018-01-04 21:02
023递归：这帮小兔崽子.mp4
41.2M2018-01-04 21:02
024递归：汉诺塔.mp4
29.6M2018-01-04 21:02
025字典：当索引不好用时.mp4
39.8M2018-01-04 21:02
026字典：当索引不好用时2.mp4
32.3M2018-01-04 21:02
027集合：在我的世界里，你就是唯一.mp4
18.9M2018-01-04 21:02
028文件：因为懂你，所以永恒.mp4
50.7M2018-01-04 21:02
029文件：一个任务.mp4
35.6M2018-01-04 21:02
030文件系统：介绍一个高大上的东西.mp4
77.1M2018-01-04 21:02
031永久存储：腌制一缸美味的泡菜.mp4
32.6M2018-01-04 21:02
032异常处理：你不可能总是对的.mp4
49.5M2018-01-04 21:02
033异常处理：你不可能总是对的2.mp4
33.8M2018-01-04 21:02
034丰富的else语句及简洁的with语句.mp4
22.8M2018-01-04 21:02
035图形用户界面入门：EasyGui.mp4
55.4M2018-01-04 21:02
036类和对象：给大家介绍对象.mp4
28.4M2018-01-04 21:02
037类和对象：面向对象编程.mp4
28.3M2018-01-04 21:02
038类和对象：继承.mp4
40.5M2018-01-04 21:02
039类和对象：拾遗.mp4
38.5M2018-01-04 21:02
040类和对象：一些相关的BIF.mp4
33.2M2018-01-04 21:02
041魔法方法：构造和析构.mp4
27.6M2018-01-04 21:02
042魔法方法：算术运算.mp4
27.9M2018-01-04 21:02


链接: https://pan.baidu.com/s/1eRFZwRo 密码: 257c

]]></description><link>https://blog.gaoredu.com/article/ace1503e-95fd-4ffc-bb10-4ea599b1af0f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ace1503e-95fd-4ffc-bb10-4ea599b1af0f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 05 Jan 2018 01:07:53 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第五波】，新年资源大放送之暨南大学专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方我爱科技论坛官方微信公众号，获取更多免费资源

暨南大学2005年硕士研究生入学考试新闻史论试卷--httpbt.com--934.html
6KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试新闻传播学试卷--httpbt.com--956.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试新闻传播学试卷--httpbt.com--379.html
8KB2017-06-01 19:04
&#59703;
暨南大学2005年硕士研究生入学考试心理统计试卷--httpbt.com--954.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试西方经济学试卷--httpbt.com--374.html
6KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试微观与宏观经济学试卷--httpbt.com--375.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试数量经济学试卷--httpbt.com--376.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试欧美文学史试卷--httpbt.com--380.html
6KB2017-06-01 19:04
&#59703;
暨南大学2005年硕士研究生入学考试民法与商法试卷--httpbt.com--382.html
6KB2017-06-01 19:04
&#59703;
暨南大学2005年硕士研究生入学考试国际政治学试卷--httpbt.com--383.html
6KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试管理学试卷--httpbt.com--381.html
12KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试传播学专业汇编试卷--httpbt.com--935.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试传播学试卷--httpbt.com--961.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试产业经济试卷--httpbt.com--384.html
7KB2017-06-01 19:04

暨南大学2005年硕士研究生入学考试病理学试卷--httpbt.com--385.html
6KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试新闻业务试卷--httpbt.com--386.html
6KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试新闻学试卷--httpbt.com--387.html
6KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试西方经济学试卷--httpbt.com--388.html
7KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试企业管理试卷--httpbt.com--389.html
15KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试民商法试卷--httpbt.com--395.html
7KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试管理学试卷--httpbt.com--390.html
8KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试妇产科学试卷--httpbt.com--391.html
6KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试法学综合试卷--httpbt.com--392.html
6KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试对外汉语试卷--httpbt.com--393.html
8KB2017-06-01 19:04

暨南大学2004年硕士研究生入学考试病理学试卷--httpbt.com--394.html
6KB2017-06-01 19:04

暨南大学2003年硕士研究生入学考试新闻学试卷--httpbt.com--396.html
7KB2017-06-01 19:04

暨南大学2003年硕士研究生入学考试西方经济学试卷--httpbt.com--397.html
7KB2017-06-01 19:04

暨南大学2003年硕士研究生入学考试生物化学试卷--httpbt.com--398.html
6KB2017-06-01 19:04

暨南大学2003年硕士研究生入学考试民商法学试卷--httpbt.com--399.html
6KB2017-06-01 19:04

暨南大学2003年硕士研究生入学考试经济法试卷--httpbt.com--400.html
6KB2017-06-01 19:04

暨南大学1999年硕士研究生入学考试经济法学试卷--httpbt.com--363.html
6KB2017-06-01 19:04

暨南大学1999年硕士研究生入学考试会计学一试卷--httpbt.com--364.html
12KB2017-06-01 19:04

暨南大学1999年硕士研究生入学考试会计学二试卷--httpbt.com--365.html
8KB2017-06-01 19:04


暨南大学1999年硕士研究生入学考试管理学试卷--httpbt.com--366.html
9KB2017-06-01 19:04


暨南大学1998年硕士研究生入学考试会计学一试卷--httpbt.com--367.html
19KB2017-06-01 19:04


下载链接: https://pan.baidu.com/s/1skQ2a1R 密码: uib6
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/67030197-e14b-4be5-b295-82e8c8bdb59a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/67030197-e14b-4be5-b295-82e8c8bdb59a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 04 Jan 2018 22:07:53 GMT</pubDate></item><item><title><![CDATA[一款快速提高你打字速度的软件之打字高手8.3破解版]]></title><description><![CDATA[打字高手是一款非常不错的打字软件，软件包括指法训练、五笔教学、英文测试、中文测试以及成绩查询等功能，打字高手能够帮助用户快速的学习打字，不管您是不是新手，都能够快速的进行学习，从而达到快速学会打字的效果。


打字高手中拥有多种给力的功能，比如说：基准键练习、个字母练习、数字键练习以及小键盘按键练习、五笔练习、拼音练习、中英录入考核、成绩自动查询等等功能，用户只需随便找一项功能在里面进行快速的练习，不需几日您就能练得一手流利的打字技巧了，又快又准确。

打字高手内置漫游迷宫、圣诞礼物、采蘑菇三个指法小游戏，可以快速提高你对键盘的熟悉。五笔教学可以练习字根，键名汉字及成字字根编码练习、末笔交叉识别码练习，一二三四级简码练习，词组及文章录入练习，五笔编码查询、自动录入练习、拼音录入练习。卡证录入练习可以进行表格及卡片的专项录入练习。内置中英文测试系统，可以实时查看你的录入水平。查询功能能查询你的各项成绩记录。
220
注册方法：输入任意用户名和九个数字注册码（比如111111111）即可注册成功。


下载链接: https://pan.baidu.com/s/1nuPojnN 密码: dm6v


]]></description><link>https://blog.gaoredu.com/article/11161c2b-5cfe-4f95-9a50-10e294a5672e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/11161c2b-5cfe-4f95-9a50-10e294a5672e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 04 Jan 2018 20:04:03 GMT</pubDate></item><item><title><![CDATA[未来教育计算机1-3级等级考试必备刷题软件题库完整版下载]]></title><description><![CDATA[考计算机二级人的福利来了，2018未来教育计算机机考真题最新完整版。具体的使用教程就看图吧，软件的破解还未完善，可自行在网上搜索下破解即可。


219


【下载地址】https://pan.baidu.com/s/1geFFKOV



未来教育计算机等级考试破解版（会计银行和医师护士等）
https://www.52tech.tech/forum.php?mod=viewthread&tid=385&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/596d8ab9-4833-4868-8d88-2793238b6cc9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/596d8ab9-4833-4868-8d88-2793238b6cc9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 04 Jan 2018 00:03:06 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第四波】，新年资源大放送之暨南华南理工大学专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方公众号
文件名大小修改日期
-2017-06-01 19:04
暨南大学1998年硕士研究生入学考试会计学二试卷--httpbt.com--368.html
14KB2017-06-01 19:04
暨南大学1998年硕士研究生入学考试管理学试卷--httpbt.com--369.html
6KB2017-06-01 19:04
暨南大学1997年硕士研究生入学考试管理学试卷--httpbt.com--370.html
6KB2017-06-01 19:04
暨南大学1996年硕士研究生入学考试管理学试卷--httpbt.com--371.html
10KB2017-06-01 19:04
华中师范大学2005年硕士研究生入学考试生态学试卷--httpbt.com--960.html
6KB2017-06-01 19:04
华南师范大学2006年硕士研究生入学考试心理研究方法试卷--httpbt.com--692.html
7KB2017-06-01 19:04
华南师范大学2006年硕士研究生入学考试心理学原理试卷--httpbt.com--691.html
6KB2017-06-01 19:04
华南师范大学2003年硕士研究生入学考试心理学试卷--httpbt.com--453.html
6KB2017-06-01 19:04
华南师范大学2002年硕士研究生入学考试心理学试卷--httpbt.com--454.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试自动控制原理试卷--httpbt.com--540.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试中西美学史试卷--httpbt.com--588.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试中外建筑史试卷--httpbt.com--647.html
7KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试园林规划原理试卷--httpbt.com--635.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试园林规划设计试卷--httpbt.com--576.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试语言学和英美文学基础试卷--httpbt.com--591.html
18KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试有机化学试卷--httpbt.com--596.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试业设计快题设计试卷--httpbt.com--545.html
7KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试信息系统基本理论试卷--httpbt.com--586.html
11KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试信号与系统试卷--httpbt.com--534.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试现代物流管理试卷--httpbt.com--604.html
13KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试西方哲学史试卷--httpbt.com--639.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试物理化学(一)试卷--httpbt.com--642.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试物理化学(二)试卷--httpbt.com--602.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试无机化学试卷--httpbt.com--595.html
20KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试无机材料工艺原理试卷--httpbt.com--606.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试微生物学试卷--httpbt.com--645.html
11KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试微生物生化试卷--httpbt.com--601.html
15KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试土力学试卷--httpbt.com--543.html
7KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试生物化学与分子生物学试卷--httpbt.com--585.html
14KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试生物化学试卷--httpbt.com--587.html
15KB2017-06-01 19:04


下载链接: https://pan.baidu.com/s/1nuRqgbf 密码: fd9v
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/6218a2c5-012d-412d-8d85-de303a98761a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6218a2c5-012d-412d-8d85-de303a98761a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 03 Jan 2018 22:02:23 GMT</pubDate></item><item><title><![CDATA[2018电脑截图外加图片文字OCR识别工具便利版]]></title><description><![CDATA[使用说明：请认真看软件自带的使用说明。
导入图片有3个模式：
1.直接点击下方的打开图片按钮，进行选择。
2.直接拖拽保存在你电脑上的图片到软件图片框。
3.利用截图工具直接截图保存到“剪切板”双击图片框会自动黏贴上来（图片框如有其他图片则直接双击那个图片即可。）
4.右侧以识别文本左键双击即可复制。


218

屌丝下载通道：https://pan.baidu.com/s/1c2uELZq 密码：f0o2


]]></description><link>https://blog.gaoredu.com/article/8c92cfbc-07b9-497d-b1a4-c31dc49b193f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8c92cfbc-07b9-497d-b1a4-c31dc49b193f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 03 Jan 2018 03:02:18 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第三波】，新年资源大放送之华南理工大学专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方公众号
-2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试日语试卷--httpbt.com--650.html
18KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试人机工程学试卷--httpbt.com--546.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试曲式分析B试卷--httpbt.com--637.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试桥梁工程试卷--httpbt.com--536.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试汽车理论试卷--httpbt.com--541.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试美学原理试卷--httpbt.com--643.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试毛泽东思想与邓小平理试卷--httpbt.com--590.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试马克思主义政治经济学试卷--httpbt.com--583.html
13KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试马克思主义基本原理试卷--httpbt.com--644.html
15KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试量子力学试卷--httpbt.com--597.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试空间解析几何试卷--httpbt.com--547.html
7KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试科学技术史试卷--httpbt.com--582.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试经济学试卷--httpbt.com--593.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试金属学及热处理试卷--httpbt.com--548.html
16KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试介质物理学试卷--httpbt.com--605.html
10KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试结构力学试卷--httpbt.com--542.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试教育学试卷--httpbt.com--575.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试教育管理学试卷--httpbt.com--580.html
6KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试交通工程试卷--httpbt.com--537.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试建筑物理试卷--httpbt.com--544.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试机械设计基础试卷--httpbt.com--574.html
17KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试环境科学与工程导论试卷--httpbt.com--578.html
11KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试化工原理试卷--httpbt.com--603.html
12KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试光学试卷--httpbt.com--599.html
7KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试管理学试卷--httpbt.com--592.html
16KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试工程热力学与传热学试卷--httpbt.com--651.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试工程热力学试卷--httpbt.com--533.html
9KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试工程流体力学试卷--httpbt.com--600.html
7KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试法学基础二试卷--httpbt.com--589.html
8KB2017-06-01 19:04
华南理工大学2006年硕士研究生入学考试电子技术基础试卷--httpbt.com--598.html
10KB2017-06-01 19:04


下载链接: 链接: https://pan.baidu.com/s/1jIpINbC 密码: 59yr
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。

]]></description><link>https://blog.gaoredu.com/article/0bf9dee6-f2a1-435d-8fb1-99b8462618ac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0bf9dee6-f2a1-435d-8fb1-99b8462618ac</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 02 Jan 2018 22:02:17 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第二波】，新年资源大放送之复旦哈工大专业真题试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方公众号
-2017-06-01 19:04
复旦大学2006年硕士研究生入学考试民商法学试卷--httpbt.com--608.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试运筹学试卷--httpbt.com--827.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试新闻传播试卷--httpbt.com--844.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试生物化学试卷--httpbt.com--817.html
11KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试金融联考试卷--httpbt.com--838.html
9KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试社会统计学试卷--httpbt.com--840.html
6KB2017-06-01 19:04
哈尔滨工业大学2001年硕士研究生入学考试金属学及热处理试卷--httpbt.com--461.html
7KB2017-06-01 19:04
哈尔滨工业大学2000年硕士研究生入学考试社会学概论试卷--httpbt.com--462.html
6KB2017-06-01 19:04
哈尔滨工业大学2005年硕士研究生入学考试社会学基础试卷--httpbt.com--457.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试哲学综合试卷--httpbt.com--823.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试社会学概论试卷--httpbt.com--828.html
6KB2017-06-01 19:04
复旦大学2006年硕士研究生入学考试中外文学与文艺理论试卷--httpbt.com--555.html
6KB2017-06-01 19:04
哈尔滨工业大学2005年硕士研究生入学考试中外建筑史试卷--httpbt.com--456.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试新闻学理论试卷--httpbt.com--809.html
6KB2017-06-01 19:04
哈尔滨工业大学2002年硕士研究生入学考试社会学概论试卷--httpbt.com--459.html
6KB2017-06-01 19:04
哈尔滨工业大学2000年硕士研究生入学考试操作系统试卷--httpbt.com--463.html
7KB2017-06-01 19:04
哈尔滨工业大学2002年硕士研究生入学考试金属学及热处理试卷--httpbt.com--460.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试国际关系试卷--httpbt.com--837.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试国际法试卷--httpbt.com--836.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试新闻实务试卷--httpbt.com--808.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试民商法试卷--httpbt.com--806.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试诉讼法试卷--httpbt.com--842.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试经济基础综合试卷--httpbt.com--839.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试写作试卷--httpbt.com--819.html
6KB2017-06-01 19:04
哈尔滨工业大学2003年硕士研究生入学考试金属学及热处理试卷--httpbt.com--458.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试哲学综合知识试卷--httpbt.com--846.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试语言学基础试卷--httpbt.com--845.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试西方经济学试卷--httpbt.com--841.html
6KB2017-06-01 19:04
复旦大学2006年硕士研究生入学考试法学试卷--httpbt.com--607.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试经济学基础试卷--httpbt.com--815.html
6KB2017-06-01 19:04
广东海洋大学2005年硕士研究生入学考试动物生理学试卷--httpbt.com--1072.html
14KB2017-06-01 19:04
广东海洋大学2005年硕士研究生入学考试传热学试卷--httpbt.com--1063.html
8KB2017-06-01 19:04
复旦大学2006年硕士研究生入学考试经济学基础试卷--httpbt.com--531.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试外国哲学史试卷--httpbt.com--822.html
6KB2017-06-01 19:04
复旦大学2006年硕士研究生入学考试国际法试卷--httpbt.com--609.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试民商法民法部分试卷--httpbt.com--807.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试金融学联考试卷--httpbt.com--824.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试数量经济学试卷--httpbt.com--866.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试人类学试卷--httpbt.com--825.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试文化人类学试卷--httpbt.com--843.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试企业管理试卷--httpbt.com--826.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试中外文学与文艺理论试卷--httpbt.com--820.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试新闻学试卷--httpbt.com--818.html
6KB2017-06-01 19:04


下载链接: https://pan.baidu.com/s/1nuI2LcP 密码: hhgp
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们

]]></description><link>https://blog.gaoredu.com/article/ec6078b6-3843-414d-ae72-adc45efb4aa9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ec6078b6-3843-414d-ae72-adc45efb4aa9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 01 Jan 2018 18:06:29 GMT</pubDate></item><item><title><![CDATA[专业课真题试卷分享【第一波】，新年资源大放送之复旦东南福州等大学专业试卷]]></title><description><![CDATA[更多免费资料请用手机扫码关注右方公众号
-2017-06-01 19:04
复旦大学2005年硕士研究生入学考试法理学试卷--httpbt.com--821.html
6KB2017-06-01 19:04
东南大学2005年硕士研究生入学考试民法学试卷--httpbt.com--920.html
6KB2017-06-01 19:04
长安大学2005年硕士研究生入学考试材料科学基础B试卷--httpbt.com--872.html
6KB2017-06-01 19:04
东南大学2005年硕士研究生入学考试刑法学试卷--httpbt.com--922.html
5KB2017-06-01 19:04
复旦大学1999年硕士研究生入学考试世界经济试卷--httpbt.com--356.html
6KB2017-06-01 19:04
福州大学2005年硕士研究生入学考试社会学概论试卷--httpbt.com--1181.html
6KB2017-06-01 19:04
长安大学2005年硕士研究生入学考试材料科学基础试卷--httpbt.com--889.html
6KB2017-06-01 19:04
复旦大学2001年硕士研究生入学考试细胞生物学试卷--httpbt.com--424.html
6KB2017-06-01 19:04
北京化工大学2005年硕士研究生入学考试电路原理试卷--httpbt.com--902.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试法学概论试卷--httpbt.com--831.html
6KB2017-06-01 19:04
东北师范大学2005年硕士研究生入学考试地理学概论试卷--httpbt.com--1022.html
6KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试心理学试卷--httpbt.com--745.html
6KB2017-06-01 19:04
东南大学2005年硕士研究生入学考试法学试卷--httpbt.com--918.html
5KB2017-06-01 19:04
东南大学2005年硕士研究生入学考试管理原理试卷--httpbt.com--919.html
6KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试现当代文学试卷--httpbt.com--746.html
6KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试教育学试卷--httpbt.com--744.html
7KB2017-06-01 19:04
北京化工大学2005年硕士研究生入学考试材料力学试卷--httpbt.com--901.html
7KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试法学综合试卷--httpbt.com--747.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试传播学试卷--httpbt.com--833.html
7KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试概率论与数理统计试卷--httpbt.com--834.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试法学试卷--httpbt.com--830.html
6KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试金融学试卷--httpbt.com--743.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试古代文学试卷--httpbt.com--835.html
6KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试中国传播史试卷--httpbt.com--748.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试财务管理试卷--httpbt.com--832.html
7KB2017-06-01 19:04
东南大学2005年硕士研究生入学考试西方经济学试卷--httpbt.com--921.html
6KB2017-06-01 19:04
北京师范大学2002年硕士研究生入学考试教育经济与管理试卷--httpbt.com--742.html
6KB2017-06-01 19:04
北京化工大学2005年硕士研究生入学考试组成原理与操作系统试卷--httpbt.com--900.html
8KB2017-06-01 19:04
北京航天航空大学2005年硕士研究生入学考试英语试卷--httpbt.com--938.html
31KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试产业经济学试卷--httpbt.com--814.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试传播学基础试卷--httpbt.com--886.html
15KB2017-06-01 19:04
北京师范大学2005年硕士研究生入学考试心理学理论试卷--httpbt.com--931.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试法制史试卷--httpbt.com--816.html
6KB2017-06-01 19:04
复旦大学2005年硕士研究生入学考试半导体器件原理试卷--httpbt.com--829.html
8KB2017-06-01 19:04
福州大学2005年硕士研究生入学考试社会学调查试卷--httpbt.com--1180.html
6KB2017-06-01 19:04




下载链接: https://pan.baidu.com/s/1geOK9RP 密码: qzjm
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。

]]></description><link>https://blog.gaoredu.com/article/e67c6088-2ab7-4e29-9273-22c3eb8e5e86</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e67c6088-2ab7-4e29-9273-22c3eb8e5e86</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 31 Dec 2017 22:39:24 GMT</pubDate></item><item><title><![CDATA[北京航天航空大学历年考研专业课真题试卷完整版]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：

217

专业试卷内容涉及北京航空航天大学，北京化工大学，北京师范大学，长安大学，东北师范大学，东南大学，福州大学等历年专业课真题资料试卷，具体内容如下链接！


链接: https://pan.baidu.com/s/1geDVl4Z 密码: 2h3w




]]></description><link>https://blog.gaoredu.com/article/b246ac87-ed43-4ecd-949a-5a5fbb9564b4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b246ac87-ed43-4ecd-949a-5a5fbb9564b4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 31 Dec 2017 16:05:56 GMT</pubDate></item><item><title><![CDATA[北京大学历年考试真题试卷完整版荟萃集]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：
216
215

下载链接：链接: https://pan.baidu.com/s/1qYyZY4c 密码: 11dp
更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/25289b7e-f4bf-4ba8-b1d8-4180126be8d0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/25289b7e-f4bf-4ba8-b1d8-4180126be8d0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 31 Dec 2017 03:05:12 GMT</pubDate></item><item><title><![CDATA[极客学院C语言基础和C#教程完整版]]></title><description><![CDATA[极客学院C语言基础教程完整版教程内容如下：
C语言部分
01开发前准备
02C语言基础
03C语言进阶
C#部分
01简介和准备
02基本语法
03面向对象特征
04C#语言进阶特性
链接: http://pan.baidu.com/s/1c2pvPoG 密码: igwn 
]]></description><link>https://blog.gaoredu.com/article/dd2e4458-4f47-4a91-9624-4bec6e27c2e6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dd2e4458-4f47-4a91-9624-4bec6e27c2e6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 30 Dec 2017 22:01:57 GMT</pubDate></item><item><title><![CDATA[私塾在线java架构师148讲视频教程完整版]]></title><description><![CDATA[私塾在线java架构师148讲视频教程完整版的视频教程体系结构如下：
│  │  ├<架构师>
│  │  │  ├第01节：整体课程概览.avi
│  │  │  ├第02节：分模块、分工程管理.avi
│  │  │  ├第03节：多模块多Web应用合并War包.avi
│  │  │  ├第04节：Git基本原理和安装配置使用.avi
│  │  │  ├第05节：TortoiseGit的本地使用.avi
│  │  │  ├第06节：Egit的本地使用.avi
│  │  │  ├第07节：远程使用以及冲突解决.avi
│  │  │  ├第08节：基本业务功能和数据字典.avi
│  │  │  ├第09节：搭建基础的开发环境.avi
│  │  │  └第10节：Spring+Mybatis实现DAO.avi
│  │  │  ├第11节：Mybatis的分页实现.avi
│  │  │  ├第12节：Service的实现以及模块化.avi
│  │  │  ├第13节：Spring MVC实现Web层开发.avi
│  │  │  ├第14节：新增和列表页面和分页tag.avi
│  │  │  ├第15节：带查询的分页、修改和删除页面.avi
│  │  │  ├第16节：Mybatis动态查询和Json自动拼装.avi
│  │  │  ├第17节：X-gen生成所需的DAO部分模板.avi
│  │  │  ├第18节：X-gen所需service、web层模板.avi
│  │  │  ├第19节：X-gen生成相应的Visitor.avi
│  │  │  └第20节：X-gen生成需要的Action.avi
│  │  │  ├第21节：通过X-gen生成商品模块.avi
│  │  │  ├第22节：通过X-gen生成购物车模块.avi
│  │  │  ├第23节：通过X-gen来生成订单和库存模块.avi
│  │  │  ├第24节：加入ehcache，把工程加入到Git.avi
│  │  │  ├第25节：实现前端的业务登录等功能.avi
│  │  │  ├第26节：测试并调整登录的业务功能.avi
│  │  │  ├第27节：实现index功能的开发.avi
│  │  │  ├第28节：Index、商品详细页和购物车.avi
│  │  │  ├第29节：完成下订单和修改库存的功能.avi
│  │  │  └第30节：把应用部署到Linux服务器上.avi
│  │  │  ├第31节：Nginx简介、安装和基本运行.avi
│  │  │  ├第32节：Nginx的进程结构、基本配置.avi
│  │  │  ├第33节：Nginx常用核心模块指令.avi
│  │  │  ├第34节：Nginx的Http模块部分的指令.avi
│  │  │  ├第35节：Nginx的Location区段.avi
│  │  │  ├第36节：Nginx的反向代{过}{滤}理模块.avi
│  │  │  ├第37节：反向代{过}{滤}理和动静分离的实现.avi
│  │  │  ├第38节：Nginx的负载均衡模块.avi
│  │  │  ├第39节：Nginx的Rewrite模块.avi
│  │  │  └第40节：更多模块的基本功能和配置.avi
│  │  │  ├第41节：Nginx的配置优化以及使用建议.avi
│  │  │  ├第42节：应用上Nginx过后的体系结构.avi
│  │  │  ├第43节：Varnish简介、安装和基本使用.avi
│  │  │  ├第44节：VCL基本语法和使用，负载均衡.avi
│  │  │  ├第45节：VCL实现健康检查、ACL访问控制.avi
│  │  │  ├第46节：Grace模式和Saint模式.avi
│  │  │  ├第47节：VCL常用的函数和Http头.avi
│  │  │  ├第48节：VCL的子程序和Request流程.avi
│  │  │  ├第49节：VCL的变量和常见的应用片断.avi
│  │  │  └第50节：使用CLI来管理Varnish.avi
│  │  │  ├第51节：Varnishd命令和运行期参数.avi
│  │  │  ├第52节：Varnish的日志操作.avi
│  │  │  ├第53节：规划缓存大小和提高命中率.avi
│  │  │  ├第54节：性能调优和配置使用建议.avi
│  │  │  ├第55节：Nginx+Varnish组合应用.avi
│  │  │  ├第56节：Varnish对性能的提升和优化.avi
│  │  │  ├第57节：应用上Varnish后的体系结构.avi
│  │  │  ├第58节：Memcached入门和缓存的含义.avi
│  │  │  ├第59节：Memcached基本的工作原理.avi
│  │  │  └第60节：Memcached基本的操作命令.avi
│  │  │  ├第61节：理解Memcached的数据存储方式.avi
│  │  │  ├第62节：内存分配的Chunk、Slab演示.avi
│  │  │  ├第63节：Memcached的Java客户端开发.avi
│  │  │  ├第64节：理解Memcached的分布式方式.avi
│  │  │  ├第65节：Memcached内存调优.avi
│  │  │  ├第66节：Memcached的限制和使用建议.avi
│  │  │  ├第67节：分析如何使用Memcached开发.avi
│  │  │  ├第68节：Memcached结合业务功能开发.avi
│  │  │  ├第69节：Nginx+Varnish+基本业务功能+Memcached.avi
│  │  │  └第70节：应用Memcached后的体系结构.avi
│  │  │  ├第71节：ActiveMQ入门和消息中间件.avi
│  │  │  ├第72节：JMS基本概念和模型.avi
│  │  │  ├第73节：JMS的可靠性机制.avi
│  │  │  ├第74节：JMS的API结构和开发步骤.avi
│  │  │  ├第75节：Broker的启动方式.avi
│  │  │  ├第76节：ActiveMQ结合Spring开发.avi
│  │  │  ├第77节：ActiveMQ支持的传输协议.avi
│  │  │  ├第78节：ActiveMQ消息存储持久化.avi
│  │  │  ├第79节：ActiveMQ的静态网络链接.avi
│  │  │  └第80节：多线程consumer访问集群.avi
│  │  │  ├第81节：集群下的消息回流功能.avi
│  │  │  ├第82节：容错的链接和动态网络连接.avi
│  │  │  ├第83节：ActiveMQ的集群.avi
│  │  │  ├第84节：Destination高级特性一.avi
│  │  │  ├第85节：Destination高级特性二.avi
│  │  │  ├第86节：MessageDispatch高级特性一.avi
│  │  │  ├第87节：MessageDispatch高级特性二.avi
│  │  │  ├第88节：MessageDispatch高级特性三.avi
│  │  │  ├第89节：Message高级特性一.avi
│  │  │  └第90节：Message高级特性二.avi
│  │  │  ├第91节：Consumer高级特性一.avi
│  │  │  ├第92节：Consumer高级特性二.avi
│  │  │  ├第93节：集成ActiveMQ和Tomcat.avi
│  │  │  ├第94节：AMQ优化和使用建议.avi
│  │  │  ├第95节：AMQ结合业务功能的开发一.avi
│  │  │  ├第96节：AMQ结合业务功能的开发二.avi
│  │  │  ├第97节：AMQ结合业务功能的开发三.avi
│  │  │  ├第98节：AMQ和业务功能组合测试.avi
│  │  │  ├第99节：基本的性能测试.avi
│  │  │  └第100节：应用上AMQ后的体系结构.avi
│  │  │  ├第101节：MongoDB简介和NoSQL.avi
│  │  │  ├第102节：MongoDB安装和基本使用.avi
│  │  │  ├第103节：MongoDB基本概念.avi
│  │  │  ├第104节：MongoDB增删改操作一.avi
│  │  │  ├第105节：MongoDB增删改操作二.avi
│  │  │  ├第106节：MongoDB查询操作一.avi
│  │  │  ├第107节：MongoDB查询操作二.avi
│  │  │  ├第108节：聚合框架第一部分.avi
│  │  │  ├第109节：聚合框架第二部分.avi
│  │  │  └第110节：聚合框架第三部分.avi
│  │  │  ├第111节：理解文档存储机制.avi
│  │  │  ├第112节：MongoDB的索引一.avi
│  │  │  ├第113节：MongoDB的索引二.avi
│  │  │  ├第114节：Capped集合和GridFS.avi
│  │  │  ├第115节：MongoDB的副本集一.avi
│  │  │  ├第116节：MongoDB的副本集二.avi
│  │  │  ├第117节：副本集的基本原理.avi
│  │  │  ├第118节：副本集管理和主从复制.avi
│  │  │  ├第119节：MongoDB的分片一.avi
│  │  │  └第120节：MongoDB的分片二.avi
│  │  │  ├第121节：MongoDB的分片三.avi
│  │  │  ├第122节：MongoDB分片的片键选择.avi
│  │  │  ├第123节：MongoDB分片的管理.avi
│  │  │  ├第124节：监控状态和身份验证.avi
│  │  │  ├第125节：备份和恢复.avi
│  │  │  ├第126节：Java操作MongoDB.avi
│  │  │  ├第127节：MongoDB和Spring.avi
│  │  │  ├第128节：应用建议及最佳实践.avi
│  │  │  ├第129节：MongoDB结合应用开发一.avi
│  │  │  └第130节：MongoDB结合应用开发二.avi
│  │  │  ├第131节：应用MongoDB后体系结构.avi
│  │  │  ├第132节：MogileFS简介和入门.avi
│  │  │  ├第133节：MogileFS安装和基本配置.avi
│  │  │  ├第134节：理解MogileFS的基本概念.avi
│  │  │  ├第135节：理解MogileFS的基本原理.avi
│  │  │  ├第136节：MogileFS的Java客户端开发.avi
│  │  │  ├第137节：基于MogileFS的小应用一.avi
│  │  │  ├第138节：基于MogileFS的小应用二.avi
│  │  │  ├第139节：基于MogileFS的小应用三.avi
│  │  │  └第140节：基于MogileFS的小应用四.avi
│  │  │  ├第141节：MogileFS和Nginx的集成.avi
│  │  │  ├第142节：应用MogileFS后体系结构变化.avi
│  │  │  ├第143节：阶段一小结合构建的基本架构.avi
│  │  │  ├第144节：阶段一工程整体打包部署.avi
│  │  │  ├第145节：测试Nginx、Varnish和MogileFS.avi
│  │  │  ├第146节：测试Memcached和MongoDB.avi
│  │  │  ├第147节：测试应用结合ActiveMQ的功能.avi
│  │  │  └第148节：阶段一之后的发展和架构演变.avi
│  │  ├<架构一代码和ppt>
│  │  │  ├ActiveMQ快速上手.pdf
│  │  │  ├Git快速上手.pdf
│  │  │  ├Maven补充.pdf
│  │  │  ├Memcached快速上手.pdf
│  │  │  ├MogileFS快速上手.pdf
│  │  │  ├MongoDB快速上手.pdf
│  │  │  ├Nginx快速上手.pdf
│  │  │  ├Varnish快速上手.pdf
│  │  │  ├基本业务功能.pdf
│  │  │  ├基础业务的建表语句.sql
│  │  │  └最终的project源码.rar
│  │  ├x-gen-ppt.zip
│  │  ├x-gen-projects.zip


下载链接：链接：http://pan.baidu.com/s/1c1QeFU4 密码：wjeh




再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/ff67d759-462e-48a4-a8d5-a1a15aeea755</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ff67d759-462e-48a4-a8d5-a1a15aeea755</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 30 Dec 2017 18:01:56 GMT</pubDate></item><item><title><![CDATA[西南财经大学431金融专项历年考研真题资料荟萃集]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：

1.11-13年真题及解析+《货币金融》、《公司金融》考前重点预测 88链接: https://pan.baidu.com/s/1kUUbPtH 密码: 84jj
2.2014年431金融学综合蓝皮书 186链接: https://pan.baidu.com/s/1c125Qms 密码: 6zv8
3.2014年431金融学综合二蓝皮书 和前者不一样220链接: https://pan.baidu.com/s/1dFAR33b 密码: fbbm
4.431金融学99-12年复试真题链接: https://pan.baidu.com/s/1pLoSyzp 密码: y2w3
5.2002-2010金融联考样题真题150P链接: https://pan.baidu.com/s/1nvQQpQD 密码: ixpy
6.2012年西南财经大学金融专硕考研复试试题链接: https://pan.baidu.com/s/1dFB78Pz 密码: bui2
7.2013年431金融学综合大纲与2012年详细比较3P链接: https://pan.baidu.com/s/1nvnA8lV 密码: v4dk
8.货币金融学习题(殷孟波版)—学习指导90P链接: https://pan.baidu.com/s/1slBjenN 密码: zwtw
9.金融学本科课件10章链接: https://pan.baidu.com/s/1nuQ9ZTZ 密码: ibiv
10.公司财务和金融学笔记链接: https://pan.baidu.com/s/1eSzuhiE 密码: mh41

更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/41144307-8463-4d67-b656-a4bc5d3cc6aa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/41144307-8463-4d67-b656-a4bc5d3cc6aa</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 29 Dec 2017 18:00:06 GMT</pubDate></item><item><title><![CDATA[西南财经大学801经济学一和802经济学二历年考研真题分享]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：

1.政治经济学高分背诵83链接: https://pan.baidu.com/s/1i47fqW9 密码: ivy6
2.经济学辅导班笔记144链接: https://pan.baidu.com/s/1miglcne 密码: tct8
3.经济学高分课件92链接: https://pan.baidu.com/s/1qY3d86K 密码: d6cf
4.02-09真题及参考答案144链接: https://pan.baidu.com/s/1kVpa85p 密码: dhgp
5.西南财经大学政治经济学李宝珠提供126P链接: https://pan.baidu.com/s/1mikUQCC 密码: j446
6.经济学红宝书西方经济学考试大纲分析2014版208P链接: https://pan.baidu.com/s/1jIAHwKQ 密码: qipf
7.经济学红宝书政经考试大纲解析178P链接: https://pan.baidu.com/s/1o8efoqm 密码: i7sc
8.802经济学二02-12年真题及答案。172P链接: https://pan.baidu.com/s/1gfhHpdT 密码: ff14


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。




]]></description><link>https://blog.gaoredu.com/article/54775e4c-da19-4636-a4a5-e16c44930490</link><guid isPermaLink="true">https://blog.gaoredu.com/article/54775e4c-da19-4636-a4a5-e16c44930490</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 29 Dec 2017 01:01:43 GMT</pubDate></item><item><title><![CDATA[西南财经大学805财务与会计历年考研真题荟萃]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：

1.财务与会计红宝书12版142P链接: https://pan.baidu.com/s/1nuDcLUp 密码: s6zy
2.财务与会计红宝书13版70P链接: https://pan.baidu.com/s/1jIhBfDW 密码: wusx
3.期末试题六套46P链接: https://pan.baidu.com/s/1hrV3ToK 密码: nu13
4.99-03年真题集50P链接: https://pan.baidu.com/s/1c1IeMXy 密码: jbt3
5.《财务管理》笔记61P链接: https://pan.baidu.com/s/1kU6vvh1 密码: 3a8x
6.2012年805科目自命题考试大纲11P链接: https://pan.baidu.com/s/1pLyvSIB 密码: cqix


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/8c00d3ec-d97f-457c-ab08-36a974c96af6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8c00d3ec-d97f-457c-ab08-36a974c96af6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 28 Dec 2017 21:01:42 GMT</pubDate></item><item><title><![CDATA[安徽大学832管理学历年考研真题荟萃]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：

1.管理学原理简答题论述题总结38P链接: https://pan.baidu.com/s/1eSgxvRO 密码: p6we
2.2014年管理学 原理考研复习精编53P链接: https://pan.baidu.com/s/1c253OcC 密码: 3myp
3.04-10年管理学考研真题链接: https://pan.baidu.com/s/1kVvgnvL 密码: 64pf
4.11-13年管理学原理真题10P链接: https://pan.baidu.com/s/1nuAva1j 密码: 6gih
5.04-10年、12年管理学考研真题答案37P链接: https://pan.baidu.com/s/1c2hNqfQ 密码: asvv
6.管理学原理复习思考121题36P链接: https://pan.baidu.com/s/1nvDYWdz 密码: cpxt
7.管理案例分析集锦54P链接: https://pan.baidu.com/s/1skU5DDz 密码: iypu
8.管理学内部习题集及答案40P链接: https://pan.baidu.com/s/1slE6O8l 密码: a15y
9.管理学原理笔记手写版49P链接: https://pan.baidu.com/s/1sk96MO9 密码: ugm9
10.管理学原理国庆强化班手写笔记64P链接: https://pan.baidu.com/s/1c1MiFk8 密码: vcuj
11.管理学原理核心知识点汇编64P链接: https://pan.baidu.com/s/1o8mSDRW 密码: k6n2


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。




]]></description><link>https://blog.gaoredu.com/article/30f084ce-9167-4029-aae2-de8396eceb1d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/30f084ce-9167-4029-aae2-de8396eceb1d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 28 Dec 2017 18:04:33 GMT</pubDate></item><item><title><![CDATA[西南政法大学诉讼法学历年考研真题]]></title><description><![CDATA[本次分享的专业课真题资料目录如下：



1.刑事诉讼法学冲刺背诵核心考点172P链接: https://pan.baidu.com/s/1milAHio 密码: nepe
2.证据法学冲刺背诵核心考点104P链接: https://pan.baidu.com/s/1sldsTL7 密码: pumr
3.宪法学冲刺背诵核心考点64P链接: https://pan.baidu.com/s/1bJ4LeI 密码: n1h4
4.法理学进阶冲刺背诵核心考点60P链接: https://pan.baidu.com/s/1dFsA8z3 密码: mh24
5.法理学冲刺背诵核心考点82P链接: https://pan.baidu.com/s/1eS0Gaps 密码: tqsd

更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。


]]></description><link>https://blog.gaoredu.com/article/4affa145-ee43-40df-97d1-f8fdf470963c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4affa145-ee43-40df-97d1-f8fdf470963c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 28 Dec 2017 03:01:37 GMT</pubDate></item><item><title><![CDATA[成都理工大学专业课真题资料荟萃集]]></title><description><![CDATA[本次分享的专业课真题资料目录如下：成都理工大学普通地质学801考研真题链接: https://pan.baidu.com/s/1kVw1ZdP 密码: djgm
成都理工大学地球物理勘察考研真题：链接: https://pan.baidu.com/s/1nvBWVvN 密码: xwhx
成都理工大学沉积岩石学621考研真题：链接: https://pan.baidu.com/s/1qY9OTFQ 密码: 5hi8
成都理工大学人文地理学/旅游地理学考研真题：链接: https://pan.baidu.com/s/1bo9toYz 密码: vh4t
成都理工大学环工院土力学考研真题：链接: https://pan.baidu.com/s/1nvOilIh 密码: tj28
成都理工大学810遥感导论考研真题：链接: https://pan.baidu.com/s/1qXNfSFa 密码: 63vz



更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。







]]></description><link>https://blog.gaoredu.com/article/133ca9c3-f860-4aa5-9b61-6d671b630a16</link><guid isPermaLink="true">https://blog.gaoredu.com/article/133ca9c3-f860-4aa5-9b61-6d671b630a16</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 27 Dec 2017 19:09:12 GMT</pubDate></item><item><title><![CDATA[陕西师范大学专业课真题分享]]></title><description><![CDATA[本次分享的专业课真题资料目录如下：

陕西师范大学教育综合333考研真题：链接: https://pan.baidu.com/s/1dFyGfo1 密码: pc52
陕西师范大学文学类考研真题：链接: https://pan.baidu.com/s/1jIeTfsq 密码: bypg
陕西师范大学英语翻译专硕（MIT）考研真题：链接: https://pan.baidu.com/s/1jIajytS 密码: jcqa
陕西师范大学外应考研真题：链接: https://pan.baidu.com/s/1dFfJtVr 密码: pri7
陕西师范大学金融809考研真题：链接: https://pan.baidu.com/s/1kUMAiur 密码: u7cu


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。

]]></description><link>https://blog.gaoredu.com/article/a14cee77-0ae3-4472-955a-5ab4bb8e0943</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a14cee77-0ae3-4472-955a-5ab4bb8e0943</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 27 Dec 2017 18:07:25 GMT</pubDate></item><item><title><![CDATA[西南交通大学923材料力学专业真题]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：

1.86-11真题140链接: https://pan.baidu.com/s/1i5oy2bz 密码: 8muw
2.96-10真题答案解析130P链接: https://pan.baidu.com/s/1jIxjQeE 密码: u5tt
3.材料力学辅导班笔记(手写精华版)30P链接: https://pan.baidu.com/s/1jIDyVYI 密码: ejn5
4.材料力学公式汇总7p链接: https://pan.baidu.com/s/1pLC8Gp9 密码: nsq6
5.材料力学教学大纲链接: https://pan.baidu.com/s/1eSKY7Lo 密码: 4uku
6.材料力学期末试题20P链接: https://pan.baidu.com/s/1i5oy2bF 密码: bn5w




更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。



]]></description><link>https://blog.gaoredu.com/article/af510e7b-f46e-47cc-9c02-718d2bb697b7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/af510e7b-f46e-47cc-9c02-718d2bb697b7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 27 Dec 2017 01:06:24 GMT</pubDate></item><item><title><![CDATA[华南理工大学历年考研真题荟萃]]></title><description><![CDATA[本次分享的专业课真题资料目录如下：

华南理工大学经济学考研真题与答案：链接: https://pan.baidu.com/s/1hsfDcIK 密码: x7yq
华南理工大学自控基础考研真题：链接: https://pan.baidu.com/s/1cpYMLK 密码: ud9j
华南理工大学新闻与传播专业基础与考研真题：链接: https://pan.baidu.com/s/1geWlLCZ 密码: e8f8
华南理工大学865有机化学考研真题：链接: https://pan.baidu.com/s/1qYRzUig 密码: p3er
华南理工大学金属学考研真题：链接: https://pan.baidu.com/s/1qYNwo3a 密码: j7ub
华南理工大学视听与品牌传播考研真题：链接: https://pan.baidu.com/s/1boSWbvT 密码: pqq3
华南理工大学物理化学二考研真题：链接: https://pan.baidu.com/s/1c57SKm 密码: t3x6
华南理工大学金属学与热处理考研真题：链接: https://pan.baidu.com/s/1jIIOEk2 密码: kn93
华南理工大学生物化学考研真题：链接: https://pan.baidu.com/s/1eSniLfs 密码: vsv8
华南理工大学自动控制原理考研真题：链接: https://pan.baidu.com/s/1skS3GRF 密码: ae2p
华南理工大学电路原理考研真题：链接: https://pan.baidu.com/s/1pLl47CB 密码: eww3
华南理工大学化工原理考研真题：链接: https://pan.baidu.com/s/1pLtBZ1h 密码: 9m49
华南理工大学管理学考研真题：链接: https://pan.baidu.com/s/1boCblpH 密码: 5xgp


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。



]]></description><link>https://blog.gaoredu.com/article/f6ee1fdc-0a8e-4520-81db-0db3f778eb10</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f6ee1fdc-0a8e-4520-81db-0db3f778eb10</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 27 Dec 2017 00:03:53 GMT</pubDate></item><item><title><![CDATA[河海大学813材料力学专业课真题]]></title><description><![CDATA[本次分享的专业课真题目录如下：
1、材料力学真题2000-2009年共10套。复印版链接: https://pan.baidu.com/s/1jIb5uUM 密码: 4a6n
2、真题答案2003-2007年共5套。为高分考研生整理的   参考答案,复印版链接: https://pan.baidu.com/s/1hr7Nl1U 密码: vmm8
3、材料力学考研辅导班笔记一本，为高分考研生在上  辅导班时所作的笔记。手写复印版，字有点潦草18页.链接: 
链接: https://pan.baidu.com/s/1nvoWtPv 密码: c3q2
4、材料力学本科生课堂习题集，只有答案没有题，标了页码。为本校本专业本科生所作的课后习题,手写复印版，35页链接: https://pan.baidu.com/s/1jHFkBzC 密码: 45kq
5、材料力学课后习题解答一本，只有答案没有题，标了页码。为本校本专业优秀本科生的习题本，手写复印版，61页https://pan.baidu.com/s/1kV5Vsxx 密码: 4nhe
6、2010年材料力学模拟试题及答案各五套。第5套答案少一页，复印版.链接: https://pan.baidu.com/s/1bGMK6U 密码: d29c

]]></description><link>https://blog.gaoredu.com/article/dcbca66a-9844-4431-90d8-96f51b81ea8b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dcbca66a-9844-4431-90d8-96f51b81ea8b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Dec 2017 21:03:53 GMT</pubDate></item><item><title><![CDATA[湖南师范大学专业课真题荟萃]]></title><description><![CDATA[本次分享的专业课真题资料目录如下：
湖南师范大学会计学考研真题：链接: https://pan.baidu.com/s/1o80zHiU 密码: x9em
湖南师范大学951语文教学论考研真题：链接: https://pan.baidu.com/s/1c2EXhzq 密码: uq4t
湖南师大行政管理真题：链接: https://pan.baidu.com/s/1eSzuapc 密码: w4c6
湖南师范大学人文地理学考研真题：链接: https://pan.baidu.com/s/1eRDWW5W 密码: ncee



更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。






]]></description><link>https://blog.gaoredu.com/article/9c918512-7fcb-4152-bbfc-3f2c8fb92b63</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9c918512-7fcb-4152-bbfc-3f2c8fb92b63</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Dec 2017 19:05:59 GMT</pubDate></item><item><title><![CDATA[暨南大学专业课真题全套荟萃集合]]></title><description><![CDATA[本次分享的专业课真题目录如下：
暨南大学金融专硕考研真题：链接: https://pan.baidu.com/s/1mi7pnk8 密码: 3kvj
暨南大学英语翻硕真题回忆：链接: https://pan.baidu.com/s/1mh9GSqO 密码: 3iwv
暨南大学西方经济学考研真题：链接: https://pan.baidu.com/s/1jHSHNtO 密码: h79y
暨南大学汉语国际教育考研真题：链接: https://pan.baidu.com/s/1i4BiPoh 密码: uwms
暨南大学国际商务考研真题：链接: https://pan.baidu.com/s/1skCo0KP 密码: 52k9
暨南大学文学考研真题回忆版：链接: https://pan.baidu.com/s/1jIresTK 密码: 3iui
暨南大学生物化学考研真题：链接: https://pan.baidu.com/s/1jI5rxpc 密码: eiui
暨南大学新闻传播史考研真题1：链接: https://pan.baidu.com/s/1o8f0M8q 密码: 2tg7
暨南大学新闻传播史考研真题2：链接: https://pan.baidu.com/s/1cbLzMA 密码: ke5w





更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。









]]></description><link>https://blog.gaoredu.com/article/f57d7790-98b7-42a4-9f6e-09841b205878</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f57d7790-98b7-42a4-9f6e-09841b205878</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Dec 2017 18:06:12 GMT</pubDate></item><item><title><![CDATA[2018星愿浏览器绿色破解版]]></title><description><![CDATA[星愿浏览器， 基于Chromium开源浏览器内核，主要特色：“看漫画漫画搜索+漫画阅读模式、看视频过滤网页视频广告、百度网盘高速下载”。

214


主要特色：
1.支持百度网盘直接高速下载（无需第三方扩展或脚本）
2.强大的漫画搜索+漫画阅读模式，为漫画迷量身打造！
3.去视频广告





]]></description><link>https://blog.gaoredu.com/article/fde6a756-782e-4410-aebb-3f438bbb7b36</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fde6a756-782e-4410-aebb-3f438bbb7b36</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Dec 2017 06:49:41 GMT</pubDate></item><item><title><![CDATA[那一年，我考研的点滴]]></title><description><![CDATA[最近比较郁闷，导师一直没找好，被拒了很多次，情绪down到底，想放弃一切，顺其自然，但又有点不甘心，这或许就是标准的“患得患失”吧。想起曾答应若干个08级的要写点考研经验，以及去年这个时候自己也曾彷徨过，受到“想念未知”师姐的无私帮助解惑，再加上五一实在憋地慌，就写点经验吧。（提示：纯属个人经验，仅供参考，记住，条条大道通罗马）
一、首先要想的是为什么要考研。大四的时候你有三个选择，考研、工作、出国，这三条路没有熟优熟劣的问题，只要努力都能取得成功，毕竟都是为了为以后的工作做准备。之前在论坛上我也提到过，考完研后，在工行省分行里找了份不错的工作，差点就放弃读研了。当时想了很久，发现其实选哪个都可以，最后我选择了读研，最后结果如何怎样谁都说不准，这是个风险问题。（提示：不过千万不要以没有做好工作的心理准备这样的理由而选择读研，再过两年的大学生活有什么意思呢？）
二、之后是选专业选学校。考虑的时候必须要结合以后你希望在哪个领域里发展，也要考虑到你在哪里工作，以及自己各方面的条件，因为很可能研究生毕业后就留在那个城市了。想清楚再选啊！！！我当时选贸大，因为我本科在广州读，但又不想留在广州，学的是国贸，但对国贸又不感兴趣，想在金融领域发展，所以选了经贸学院的金融学，因为这个考试的内容和国贸的内容一样，专业课也都是学过的，本人英语也不错，六级626，考上的概率比较大吧，再加上贸大多少有点名气，而且听说很公平，保送少，就选了。（提示：现在想想那时的决定，可能过于保守了吧，对自己的能力没信心，原本还可以选更好点的大学，唉；而且当时也没考虑到以后毕业就业的事，其实我并不想留在北京，回家长三角发展机会也很多。毕竟横竖你都要努力一年，再努力一把说不定……不过现在想这个也没用了，总之是个风险问题，看你是怎样的一类人，所以大家选学校选专业的时候一定要结合自己的能力和志向，想明白了再决定啊!）——顺便提一句，我这次初试总分是390多
三、如果上面两点想好了话，可能现在大家最为关心的就是4门课的复习吧，我按考试顺序讲讲：1、政治。政治我是最弱的一项，平常本科开卷考也过不了80，结果这次考研也只考了55，差点没过国家线（不过就去工作啦）。我的经历大家可以当做反面教材来看待。我是从暑假的时候开始复习的，之前一点都没看过，看了就头大。后来暑假的时候报了一个领航的暑期强化班，跟着上了10多天，感觉的确是多多少少入门了。然后就是看那里发的内部讲义，粗粗地看过了一遍，认为大概已经掌握了，这样就到9月开学了。之后我看了红宝书和张俊芳的《应试宝典》（两个穿插看，其实后者绝对不推荐，太厚了！头都大了），之后是每看一门课的内部讲义，做相关的任如封的《序列二》，这样陆陆续续做了一遍。当时因为《二》的答案没有解析，所以做的也比较随便。做完后买了本《考点狂背》，想背点东西，可惜没怎么用，再看了一遍内部讲义。之后就是快到考试了。这时候会有冲刺班点题班什么的，周边很多同学去上了，我就拿来复印了下背背，好像有博文的领航的什么的。再就是看了陈先奎的《形式政策》和博文的《形式政策》，这些都是我零碎的时候看得，似乎没什么用。之后在一月的时候有《20天20题》，没来得及看，看了又头大。就去考了，结果就是第一门考了55….(提示：政治要做题，感觉《序列二》还是不错的，和真题接近，那时候应该做完一遍后再认真看一遍，这样考试的时候做选择题也不会很陌生了（我选择做的太糟糕了！），至少有点感觉，不过没有答案解析真是比较麻烦，我周围的同学有的是做陈的《2000题》，那本有解析，具体内容质量怎样不清楚；如果政治基础不好，报个暑期班还是值得的，就是上课的时候要猛记东西，至于点题班什么的有没有用我也不清楚，我没上，考得也烂，去上了，说不定也考得烂。。。不过可以在最后一个月里给你得知识体系理一下是真的；《形式政策》这东西感觉不是很有用，做了也白做，背了也忘记，看一下就好；最后做大题我靠的还是复印来的博文的一份点题讲义，十个大题论述背了下，感觉不错，很多猜中，；《20天20题》听说很强，但没时间看了；模拟题我没做，可能做下比较好吧，毕竟是第一门考试，熟悉一点比较好——总结就是，对于我而言，真的只有喜欢一门课才能把这门课学好，面对政治这么海量的内容，我基本是背了就忘，幸好背了大题才救了一命，深刻反省ing….)
2、英语。前面提到过了，我英语基础还好，大学对英语也比较重视，所以在英语上花的时间并不是很多。以下经验只适用于英语比较好的同学。（考了76，相对投入时间来说，已经满足了）我在4月的时候买了本单词书开始翻翻单词，书名忘了，好像封面是一只青蛙在举重的那个，其实很多同学买的是星火的单词书。不过个人觉得无所谓，背单词的目的也只是把“黑色”单词变“灰色”，把“灰色”单词变“白色”，知道意思就够了，我从没指望过背单词能写出什么好文章或者好口语，反正是应试教育，就应试复习吧。同时，买了本星火《精读120篇》，感觉不错，推荐一下，每日做几片阅读，不多但找下考研阅读长句理解和选择的感觉很重要，里面还有20篇新题型，可以留着以后做。这里不推荐石的《200篇》，我同学说是垃圾，我没错过，不过做过的好像评价也不怎样，还有清华大学那个已经去世的老师编的精读《100篇》，不推荐，题目出得很没水平。然后就是在图书馆借了朱泰祺的复习全书（名字具体忘了，厚厚一本），只做了阅读，还行。暑假开始前，单词一遍看完，阅读大概做了70篇左右。暑假里，我又借了考试虫的复习全书（名字具体什么忘了，也厚厚一本，王若平主编），这本不错，特别是阅读部分，分析地很到位，翻译也讲的还行，推荐。之外我还下载了新东方的翻译讲解flash，很不错，听了一遍后加点练习，感觉翻译这部分就没什么大问题了，推荐。开学后，我买了考试虫的历年真题，后来仔细一看不是王若平主编的，里面的内容也一般，厚厚一本，是所有真题中卖的最贵的一本。我每周做两份真题练手，做完后仔细看解析，然后就是平时做做《120》里的阅读。最后两个月的时候，看了下考试虫的作文中的小作文，以及真题讲解中大论文范文的好词好句和承上启下句，虽然看了新东方的flash，感觉没用，作文还是得多动手联系。然后又买了套张剑的模拟题，其实内容出得很一般，阅读更是不行，完全只能拿来熟手，练练完型填空、新题型和作文。市面上的模拟题都很一般的，请务必以真题为准，特别是阅读，模拟题做多了可能让你做真题的阅读水平下降，我就是这样。之后就上考场了。
3、数学。数学是我花时间最多的一门，谁让它有150分呢，自己也有兴趣，最后成绩也不错，考了133，我们一圈人中我最高，哈哈。数学我从3月底开始复习，车轮战，到最后都没有停止复习过。我是这样复习的：第一轮和第二轮在一起：看课本看原来的笔记＋做李永乐的《复习全书》，顺序：微积分、概率、线代。微积分线代的课本没什么要求，概率的推荐浙大第三版的，不要看别的浪费时间。看完一章做李永乐上面相应的题目，注意先自己动手做，再看后面的解答，要培养自己的思考逻辑。时间进度是，微积分4月20多完成，概率5月中旬完成，线代6月中旬完成。然后就可以丢开课本了。留下20多天奉献给了世界杯！哈哈，意大利夺冠，爽啊！！！！第三轮，暑假两个月，这期间由于政治专业课都要陆续开展，所以两个月里把《复习全书》又做了一遍，（这里插入看《全书》的方法，看得过程中，对自己不是很懂的，需要技巧的，需要特别注意的，典型思路方法的都用不同颜色或不同符号标出来，还可以在旁边记录自己的感想或是整理，数学题型真的很重要），并把上面的习题做完。（这里有人推荐用李永乐的《线性代数辅导讲义》复习线代，那本书的确不错，很强的，不过如果你已经看了《全书》中的线代，那么不看那本书也是完全可以的。）第四轮，我回到学校后，又看了遍《全书》，这次看得比较快，看得时候因为有你之前的注释，所以觉得这些题目很“亲切”了。我打印了数学公式，拿了本小本记录些典型题型的解法和公式以及错题的错点，这很重要，注意不要记太多，记要点。同时也买了本做了李永乐的《660》，联系填空和选择，这其中有些题目还是很不错的。可惜由于时间关系我只看了一遍。这样就基本把《全书》消化了，数学底子也打实了。第五轮大概是10月中旬开始的，做模拟题和真题的时间到了！李永乐的《400题》是“居家旅行”必备良药，值得做几遍，然后图书馆又借了本历年真题（黑博士），对于真题的错题值得做两遍。我是这样进行的，先做了4、5套《400题》，然后又做了4、5套真题，相互错开。一开始做《400题》会觉得有点难，这也是正常的，因为模拟题的前几套比较难，综合知识点比较多，而且思路来的不是很快，不像《全书》上一章一章给你分好的。前三套只有110多分，后两套好些，选择填空很重要，决定了你数学考分得档次，注意运用一些技巧。《400题》后再作真题，觉得太容易了，因为这些体型在《全书》上都出现过，计算也容易，有135＋的分数。做到这里的时候，可以停一下，你会发现有几类题型你总不太会做，这时候你就需要专项训练了。例如，我当时就觉得自己中值定理这块特弱，就找了相关的习题大量做了下，（《全书》上中值定理讲的不是很好，陈文灯上面这块好，很受用），总之是缺什么补什么。之后就是《400题》和真题轮流做，《400题》后5套难度下降，真题用来练手练思路。当然，每做完一套必须认真总结，题型思路公式这些记在你的小本本上，以后会有用的。有时候，总结的时间甚至比做题还多。做完这些后，心里比较有底了，自己感觉可以考140左右。之后又从同学那里复印了陈文登的15套（这个没做，绝对不推荐，出题有点偏）和考试虫的8套，这个还不错，推荐，计算量有点大。这样就上考场了。在考试前几天，再把小本本上的记录看几遍，很有用（这时候你是不可能翻其它书的）。这次考试中，数学计算量出奇的大，搞得我很紧张，影响了发挥。幸好最后几个大题都是典型体型，一些典型解法在前天晚上看过的，就很顺利地解出了。（提示：关于陈文登和李永乐的书选哪个很多人一直问，我个人觉得其实选哪本都可以，只要一本多看几遍吃透就行了，我看了三遍李的。需不需要两本都看？不需要，至多在中值定理这里参考下陈的。许多人说陈的重基础，确实是一步一步扎实地讲解地，但这并不是说这本书简单，上面的题目很多比考研的要难，搞定李的就够用了。同样陈的也一样。要不要上课？我个人觉得不需要，不过我毕竟花了很多时间自己琢磨，这个看个人的安排。）
4、专业课。我考得是经贸学院的金融学，但题目和国贸的一样，所以考经贸学院的可以看下，其它的同学就不用了。专业课比较感兴趣，花的时间也较多，考了129，第二。我觉得专业课越早看越好，4月底就可以看起来了。专业课我第一遍看的是课本，任务是过一遍，划出重点，脑中留个框架。我首先看的是微观，很厚的一本，不过平狄克的书不错，但内容太丰富以至于重点不突出，所以边看边划，在边上做下小结之类的。我断断续续看的，看完已经7月末了。之后看了国金，也是同样操作，8月看了15天看完。开学9月看宏观，多恩布什的书是好书，里面的内容也很丰富，但是翻译太差了，边看边划，得把要说的意思给整理理解一下，看完已经9月20日多了，之后看国贸，很快地过，国贸书上内容太“丰富”了，不适合应试，十一后看完。（在暑假的时候，托北京的同学买了套笔记，历年试题，国贸题库，英语阅读什么的，划了130大米。）十月中旬开始看第二遍，先看微观，这时候只看上次划的重点和小结，我把平狄克书上的所有内容进行了精炼，厚厚一本书写成了20多张的笔记，按照前提、图形、推导、结论、注意、比较、名词解释这5块写了每部分知识点，逻辑严密吧:)虽然觉得这样写有过于仔细，但这样学习的目的不仅为了考研，也是为了更好地掌握微观经济学。之后，我看的是宏观，我个人觉得宏观必须要理一下，因为多恩布什的书在讲解一个知识点时把很多学派的观点都融杂在一起了，讲的顺序又和我本科学的高鸿业有很大区别，再加上那拙劣的翻译，不整理成笔记是不行的，不然很难形成一个宏观体系框架。同样，这也是按照微观的方法分知识点记录了26张笔记，并加入了推导过程。宏微观是我原意花时间好好学习的，所以我复习的比较详细，当然这样的好处是学好宏微观的同时也把所有的考点都覆盖进去了。之后我看的是国贸和国金，这时候买的笔记就起作用了。看过书的都知道这两门课书上讲的很琐碎，我就按照笔记上的知识点复习下来，笔记不错，比较全，我只需再在上面加点名词解释就行了。其中复习国金的时候，注意重点在前5章，最后几章也可能考名词解释，不过我把其它几章的名词解释也摘录出来了复习了下。国贸的话我把理论部分做了进一步总结，感觉很重要，不过也可能考其它知识点，今年考了RCA。第三遍的时候我只看自己整理的笔记了，省时间也容易记住知识框架，同时背知识点和名词解释，这样的效率比较高第四遍还是看笔记，背笔记。这时候应该说已经很熟悉专业课内容了，一天到两天（我都是下午或晚上看专业课的）可以复习完一门课，效果不错。关于翻译。个人感觉翻译不是很难，最主要是速度，三篇文章两篇非经济类，一篇经济类，我平常翻一下经济类书刊，然后笔记整理了下经济类的常用的名词（这个感觉没有什么大用，心理安慰一下吧），然后就是在考前一段时间练手，我是拿《新概念三》最后10篇长文章和十年专业课真题翻译进行练习的，要一气呵成注意速度掌握！！！关于真题和练习题。个人觉得真题还是应该买来做一下的，但不需要太多。（我买了10多年的，结果只做了两套，汗！不过其它的还可以拿来分析下出题的类型和思路什么的，以及出题的重点）我还买了套国贸题库，结果没做。买了本微观的练习书，绿皮的那个，也没时间做。关于时事。这个需要关注下本年经济学界发生的大事。我今年和同学讨论了下，那个提出黄金律的人拿了诺贝尔奖，所以增长理论肯定会考。弗里德曼去世了，货币理论也会考，结果考的是凯恩斯货币交易需求那个模型。所以两个都基本猜中了，另外的考点也都在买来的和自己整理的笔记中复习到了，所以比较幸运，考得也比较高。（提示，专业课确实不需要做什么习题，在理解的基础上，把基础理论基本考点覆盖到就行了，不难。当然在复习过程中，有时间的请自己做好笔记，时间不够的又想省力的就买别人的笔记，不过最好自己先看下，我托人买的那份还不错，算比较幸运。因为你不可能把这么厚实的死本书看上三四遍，对吧:)
5、其它注意事项1）考研最好组队，和其它一起考的人一起复习，既能勉励自己，也能共享一些信息和资料，还能省点钱，呵呵。我们宿舍4个都考研，今年全部考上了！两个中大第一，一个南开，再加上我。2）我每周5晚上是不复习的，“HappyFriday”中和同学打打魔兽星际什么的，看下日剧电影，锻炼什么的都可以，一张一弛才能为下周做好足够准备。3）作息一定要有规律，几点起床几点吃饭什么的都要规定自己，我最后几个月是8点起床，8点半开始在图书馆自习到12点吃饭睡觉，2点起床图书馆自习到6点吃饭洗澡，7点自习到12点半。各地习惯可能不一样，但一定要有个计划。4）每天各个时段复习不同的课目，最后一个月按照考试时间安排复习课目。5）复习过程中给自己找点乐子，不要对自己太“残忍”了。我看了世界杯，看了《高达Z》和很多电影，也看了《太阳之歌》，这是部勉励自己的日剧，不错推荐一下。想想女主角都快死了还这么执着音乐，我这个大活人还有什么不能咬牙坚持下的呢？下了不错的OST和一些不错的歌，每天去图书馆的路上听听，吃饭的时候听听广播了解下新闻也是很好的选择。晚上偶尔在床上和舍友们侃侃聊到大半夜，嗯，都是美好回忆。6）大四上半学期，能逃课还是逃吧，毕竟考研比较要紧，实在逃不了就拿点书去课堂看看7）保证睡眠，吃的好些，身体是保障啊，千万不要和我一样在一月初的时候突然感冒，这里推荐一下“新康泰克”，我吃了“泰诺”一点用都没有，“新康泰克”效果很快，不过每个人都不一样吧，仅供参考。8）考完初试后考研并没有结束，还有很多事要做，在贸大也有一些潜规则，我当时就是不知道，行动太慢，现在弄得很被动了…希望一切都能向好的方向发展吧。9）每个人的复习方法都不一样，找到适合自己的就好了。10）写了几个小时，没想到写这东西这么费时间，真是前人载树，后人乘凉的活，希望能星火传递吧。最后祝大家考研顺利。
]]></description><link>https://blog.gaoredu.com/article/6213cd79-4e3b-49ad-b0f5-1d6a12730375</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6213cd79-4e3b-49ad-b0f5-1d6a12730375</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 26 Dec 2017 03:05:35 GMT</pubDate></item><item><title><![CDATA[华南理工大学812汽车理论考研真题]]></title><description><![CDATA[专业课资料主要是包括如下几部分：
1.02-13年结构力学真题28P链接: https://pan.baidu.com/s/1qXW9rbA 密码: 4j41
2.汽车理论笔记80P链接: https://pan.baidu.com/s/1c1EGPBq 密码: 93bs
3.汽车理论讲义96P链接: https://pan.baidu.com/s/1jIRCa2q 密码: mvaw
4.汽车理论期末试题11P链接: https://pan.baidu.com/s/1o81f3ei 密码: atkh
5.汽车理论模拟题2套及答案9P链接: https://pan.baidu.com/s/1skCoxvZ 密码: hhny
6.汽车理论复习题44P链接: https://pan.baidu.com/s/1cAXvYI 密码: kg6w
7.考试大纲1P链接: https://pan.baidu.com/s/1jHODYRG 密码: 18fh



更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。







]]></description><link>https://blog.gaoredu.com/article/6d01f3fc-d4d0-43ff-baa5-528219ae1e9c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6d01f3fc-d4d0-43ff-baa5-528219ae1e9c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Dec 2017 22:01:04 GMT</pubDate></item><item><title><![CDATA[河北联合大学308护理综合考研真题]]></title><description><![CDATA[本次分享的专业课资料目录如下：
1.基础护理学讲义208P链接: https://pan.baidu.com/s/1cpsIui 密码: uc46
2.308护理综合模拟题3套30P链接: https://pan.baidu.com/s/1qYupO7M 密码: fc3q
3.308护理综合复习重点讲义316P链接: https://pan.baidu.com/s/1dFEpeBf 密码: 9cr1


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。







]]></description><link>https://blog.gaoredu.com/article/521709e4-6d6b-49f8-b30b-977299b5e3a2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/521709e4-6d6b-49f8-b30b-977299b5e3a2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Dec 2017 16:00:49 GMT</pubDate></item><item><title><![CDATA[【java进阶】如何实现类似于Spring的可配置框架]]></title><description><![CDATA[首先，我们来定义一个Bean工厂【BeanFactory.java】
package com.java.aopframework;
import java.io.*;
import java.util.Properties;

import com.java.day3.Advice;

//这个类是纯粹地去创建一个JavaBean
public class BeanFactory {
	
	Properties properties = new Properties();
	
	//利用配置文件构造
	public BeanFactory(InputStream ips)
	{
		try {
			properties.load(ips);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} 
	}
	
	public Object getBean(String name)
	{
		//System.out.println(""+name);
		//c从配置文件中获取类名称
		String className = properties.getProperty(name); //com.java.aopframework.ProxyFactoryBean
		Class clazz = null;
		Object bean = null;
		System.out.println(""+className);
		try {
			//获取类名称
			clazz = Class.forName(className);
			System.out.println(""+clazz);
			//获取javaBean，【注意】JavaBean必须要有一个不带参数的构造函数
			bean = clazz.newInstance();
			//如果是这种类型的JavaBean
			if (bean instanceof ProxyFactoryBean)
			{
				//如果已经存在这个类， 就去获取代理
				ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
				
				//Advice advice = ((Advice) properties.get(name+".advice")).getClass().newInstance();
				//Object target = ((Object) properties.get(name+".target")).getClass().newInstance();
				System.out.println(properties.getProperty(name+".advice"));  //com.java.day3.MyAdvice
				System.out.println(properties.getProperty(name+".target"));  //java.util.ArrayList
				
				String s_advice = properties.getProperty(name+".advice");
				String s_target = properties.getProperty(name+".target");
				Advice advice = (Advice) Class.forName(s_advice).newInstance();
				Object target = (Object)Class.forName(s_target).newInstance();
				proxyFactoryBean.setAdvice(advice);
				proxyFactoryBean.setTarget(target);
				
				Object proxy = proxyFactoryBean.getProxy();
				//System.out.println(properties.getProperty(name+".advice")+"\t"+properties.get(name+".target")+"\t"+proxy);
				return proxy;
			}			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//返回目标
		return bean;
	}
}



然后，再来一个代理Bean工厂

【ProxyFactoryBean.java】
package com.java.aopframework;

import java.lang.reflect.*;
import com.java.day3.Advice;

public class ProxyFactoryBean {

// 定义两个私有变量
private Object target;
private Advice advice;


public Object getTarget() {
return target;
}


public void setTarget(Object target) {
this.target = target;
}


public Advice getAdvice() {
return advice;
}


public void setAdvice(Advice advice) {
this.advice = advice;
}


public Object getProxy() {
// TODO Auto-generated method stub
// 直接创建动态类及其实例对象
Object proxy = Proxy.newProxyInstance(target.getClass()
.getClassLoader(),
/* new Class { Collection.class }, */
target.getClass().getInterfaces(), new InvocationHandler() {

// 这也是匿名内部类
@Override
public Object invoke(Object proxy, Method method, Object args)
throws Throwable {

// 使用一个新对象来实现方法
advice.beforeMethod(method);
Object retVal = method.invoke(target, args);
advice.afterMethod(method);
return retVal;
}
});
return proxy;
}

}
再来一个测试类

【AopFrameWorkTest.java】
package com.java.aopframework;

import java.io.*;
import java.util.ArrayList;
import java.util.Collection;


public class AopFrameWorkTest {
	public static void main(String args) {
		InputStream ips = AopFrameWorkTest.class.getResourceAsStream("configure.properties");
		Object bean = new BeanFactory(ips).getBean("XXX");
		//class com.sun.proxy.$Proxy0	com.sun.proxy.$Proxy0
		System.out.println(bean.getClass()+"\t"+bean.getClass().getName());
		
		ArrayList arrlist = (ArrayList)bean;
		arrlist.add(10);
		arrlist.add(50);
		System.out.println(arrlist.size());
		
		
	}
}

定义我的配置文件
【configure.properties】
XXX=java.util.ArrayList
#XXX= com.java.aopframework.ProxyFactoryBean
XXX.advice= com.java.day3.MyAdvice
XXX.target=java.util.ArrayList


总结
一个典型的动态代理创建对象过程可分为以下四个步骤：
1、通过实现InvocationHandler接口创建自己的调用处理器 IvocationHandler handler = new InvocationHandlerImpl(...);
2、通过为Proxy类指定ClassLoader对象和一组interface创建动态代理类
Class clazz = Proxy.getProxyClass(classLoader,new Class{...});
3、通过反射机制获取动态代理类的构造函数，其参数类型是调用处理器接口类型
Constructor constructor = clazz.getConstructor(new Class{InvocationHandler.class});
4、通过构造函数创建代理类实例，此时需将调用处理器对象作为参数被传入
Interface Proxy = (Interface)constructor.newInstance(new Object (handler));
为了简化对象创建过程，Proxy类中的newInstance方法封装了2~4，只需两步即可完成代理对象的创建。
生成的ProxySubject继承Proxy类实现Subject接口，实现的Subject的方法实际调用处理器的invoke方法，而invoke方法利用反射调用的是被代理对象的的方法（Object result=method.invoke(proxied,args)）





















]]></description><link>https://blog.gaoredu.com/article/d7c207cd-8e33-4eb7-8fda-a927a5557474</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d7c207cd-8e33-4eb7-8fda-a927a5557474</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Dec 2017 03:03:21 GMT</pubDate></item><item><title><![CDATA[跨专业394分考研经验分享]]></title><description><![CDATA[想想这一年来从考研网贸大论坛收益良多，却一直潜水，而金金的考研经验很少，在此把自己的考研经验写下来，算是这一年时间的总结，也给后来者一点参考吧。我初试成绩394，政治81，外语69，数学134，专业课110；复试83。
我来自武汉一所211重点高校，工科偏理方向专业，对本专业没什么兴趣，就业也不怎样，对经济学感兴趣再加上金融火就决定考金融。原准备考金融联考的，因为题型对跨专业考生来说很简单，但考虑到上财分数线太高，就和本班一同学一起考贸大。由于跨专业，所以我准备时间很早，大三下学期期末考试完后我就借了本金融联考的大纲解析，回家那半个月就当课外书看了大半个月，看了一遍。看完觉得有意思就选定金融了。
大三下课程很多，再加上自己六级没过，就一直准备六级和专业课。只到五月七号才选定对外经贸，买了本微观书。暑假回家还玩了一个多月。8月25号老妈生日一过完就来学校正式准备复习，买了本宏观。呵呵，啰嗦了这么多，还是先谈谈我的复习方法吧！

政治
我政治准备得比较晚，大纲出来后买了本大纲，随便翻了一遍，什么也不懂，没重点也就没再翻过，直到序列一出来后才买了本认真看起，当时应该是十月份了。我政治一边看序列一一边做陈先奎的2000题，一天一章，一个多月就看完第一遍了（我看书速度特快，如果不懂会更快），看完就反复做错题，看序列一。直到考前一个月买了序列三序列四再加六套题，压题我靠的是20天20题。估计我政治选择题是45-47分，主观题34-36分。其实想想，选择题主要还是靠2000题，虽然2000题题目很多很偏，但能让你对政治又全面了解，这点很重要。主观题我背了20天20题再加十七大原文（背了一小部分，没背中，但训练了语言组织能力吧），就压中两道，其他三道题都是自己写的，没想到老师给的分数还可以，原以为自己字写得差还要扣分，看来还不至于的。
我的政治经验是千万别相信辅导班，浪费时间与金钱。我一个班也没报，听了**一天课，我们班考研报班的很少有上70的。记得考前一星期做了下**最后三套题，选择题都没超过20分，我当时都快怀疑自己的能力了。现在看来是**的能力太差了，还说自己的是考研培训第一品牌呢！考完就说自己六道大题全压中，还说在网上留下永久性证据，呵呵，后来我看了下，它在最后一天压了70多个题，每个就一句话，居然说自己全扯上了，我服了他们了，发现考研辅导老师是天地下脸皮最厚的了！

英语
我英语基础不好，六级考了三次才过，还是考研前一次。花的时间和专业课一样是最多的。总算黄天不负有心人啊，69分我心满意足了。我看了下金金复试上线人外语平均分，好像要比平均分高一点点。我的方法就是研究真题，我把十一年真题都做了两遍，尤其是阅读，我把它当教材来学。再就做了近百篇的石春帧的220题。觉得还不错，难度比真题稍难，我的平均分大概在26-28之间，好像考试时考了32-34分吧！作文是我另一大难点，考前一个月我背了近20篇作文，考试时就把三篇文章融合到一起就成了一篇自己的文章。小作文也是融合了两篇。

数学
数学是我的强项，想当初还是湖南省数学竞赛一等奖呢。只是后来大学就没怎么认真学了，说实话，134我不是很满意，主要是我复习方法出现偏差所致。我主要研究真题，从中寻找规律，没想到今年题型大变，好几道题没见过。当时就紧张了，又怕前面做错，花了半个小时去检查居然一道也没检查出来，害得时间不够，有两个题的两小问没做，再加一个大题中粗心的错误，扣了十六分。希望大家从中吸取下教训吧。数学最重要的是基础，万变不离其宗，我室友考数二，专心研究书本，结果考了148！哎，害得我抬不起头啊，再也不敢说自己数学好了。

专业课
从寒假开始看书，到5.7决定对外，这段时间就乱看了一些书。其实还是大有用处的。至少对金融有了比较全面的认识。贸大的专业课比较难，尤其是专业英语，还好我对经济类新闻比较感兴趣，一直比较关注，所以第一篇翻译翻得还可以，至少人名和几个关键专业名词翻译出来了，但由于时间不过，翻到日本那就没时间了，还好先翻了后面两篇比较简单的。名词解释判断选择计算都比较简单，也没怎么失分，但简答就答得不怎样了，尤其是论述，第一题物业税乱写，但还是写了长期短期，没想到居然让我碰中了。第二题才叫惨，很简单的一道题，但一兴奋就只写了固定汇率制了。
专业课的复习我就看书，再加和同学一起买了套宏微观笔记和真题。研究真题很重要，有时间再做点其它题目，我做了些尹伯成的习题。




复试
贸大复试成绩出来比较晚，当时别的学校成绩都出来了，看见一起复习的同学都考得很高，我都快对自己完全没信心了。估分由360一直下降到340。成绩一出来我都不敢相信是自己的成绩，知道回寝室确认了自己的准考证才敢相信。
金金复试书很多，虽然考得还可以但我也没感放松，马上买了本国际经济学，一看头就大了，看不懂！没办法，我4天时间就翻了一遍，把重点标记下来，以后每次只看重点。金融学的书一直没买到，3月25才开始看起，和国际经济学一样，翻了一遍后就只看重点。不过我对金融学比较感兴趣就多认真看了点，没想到今年复试中的笔试题居然大半是上面的，呵呵，也算自己走运了。原以为货币银行学是重点就一直翻，没想到就考了一两道而已。
复试方案出来后我就傻眼了，居然面试全英文，我外语差口语更差。没办法，让李晨帮我写了篇自我介绍，找她一起练了好几天口语！再次感谢，没有你，我估计是没这么幸运的！
复试当天，金金分成七个组，是按成绩排的，我是专业并列第七，按学号是第九，所以是第二组第二个。前四组在东边，我发现第一次进去的四个三个是女生，第二次和我一起进去的没怎么注意，好像只有我一个男生吧。没想到连金融还是女生考得好啊。面试我的是副院长邹亚生，边上有一女生还是女老师做记录，刚开始有点紧张，进去后说了生GOOD MORNING!邹老师回应了一声，然后他就让我做自我介绍，这个我准备得充分，不过控制不了自己的速度，原来准备说两分钟的，估计一分半就说完了。他第一个问题问我来自哪，我以为说哪个学校结果问的是家乡，我晕！这个问题没怎么准备也就随便昏过去了。接着他问我为什么跨专业，我以前的专业情况，这些我都准备过，回答也还可以。中间还有两个问题忘了。最后问我喜欢哪个方向，我说金融工程，结果我工程发音错误，还被老师纠正过来了，接着问金融工程研究什么，我就大概按照定义说了下。最后他问我研究生期间的计划，作后一个单词我们听懂，我估计大概是问这个，就问了下老师，居然被我猜中了，这个我准备了。也就过了。其实面试不是很难，老师也很好，今天出录取结果，我被拟录取，复试83分，这么一算，估计面试也在80分左右吧。
下午笔试，原以为和国金一样全是选择题，就记了很多个小的知识点，后来快考试了，问了一个金融学院保研的才知道全是问答题，当时就傻眼了，还好试卷发下来后一看，不是很难。答得还不错，就抛补利率平价和金融学定义不太清楚，估计也在80分以上吧。
简答五道，
1 现阶段货币政策有哪些
2 远期期货的区别
3 内涵回报率之类（记不太清楚了）就是回收期最短
4 抛补利率平价
5 比较优势定义
计算两道
1 流动性缺口
2 股票价格计算（有点难）
论述两道
1 中国的融资方式 
2 金融学定义的理解（不知所云）还好我对金融学那本书感兴趣，多看了点，基本上大半是考那上面的，国际经济学没怎么看，。也就考了个比较优势。算是比较走运了。


今天结果出来了，想想自己这一年来、这一路走来，吃过的苦、承受的压力只有自己知道。今天的结果算是给我最后的回报了。感谢我的父母感谢李晨感谢帮助过我的每一个人，是你们给了我动力，让我坚持到最后。


文章出自我爱科技论坛，转载请注明出处。
]]></description><link>https://blog.gaoredu.com/article/858b55b2-e2df-4332-b7c4-4e6d0a13d658</link><guid isPermaLink="true">https://blog.gaoredu.com/article/858b55b2-e2df-4332-b7c4-4e6d0a13d658</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 24 Dec 2017 00:04:20 GMT</pubDate></item><item><title><![CDATA[高联815经济学综合考研资料]]></title><description><![CDATA[专业课资料主要是包括如下几部分：专业英语815综合：链接: https://pan.baidu.com/s/1pLqTZFP 密码: ibrn
名称解释：链接: https://pan.baidu.com/s/1jIemXJC 密码: xkje
贸大就业及各校金融就业合集：链接: https://pan.baidu.com/s/1bpCrosB 密码: r4kj
宏观经济学:链接: https://pan.baidu.com/s/1nvKKqpV 密码: brc6
西方经济学:链接: https://pan.baidu.com/s/1dEV9Heh 密码: 9tbd
平狄克微观经济学：链接: https://pan.baidu.com/s/1eSo49qy 密码: bteg
815专业课真题荟萃：链接: https://pan.baidu.com/s/1jIOorUA 密码: x2wy



更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。










]]></description><link>https://blog.gaoredu.com/article/55b87c2b-aa32-4f3c-9914-11c761cab72d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/55b87c2b-aa32-4f3c-9914-11c761cab72d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Dec 2017 20:04:50 GMT</pubDate></item><item><title><![CDATA[长安大学803道路工程专业课资料大全]]></title><description><![CDATA[主要专业课资料主要是包括如下几部分：
道路测试手写版笔记：链接: https://pan.baidu.com/s/1miQRUPy 密码: vm6c
路基知识点总结手写版：链接: https://pan.baidu.com/s/1gfo22UR 密码: gdag
交通工程真题1：链接: https://pan.baidu.com/s/1c0hWRG 密码: 68ms
交通工程真题2：链接: https://pan.baidu.com/s/1b2986a 密码: r6yc
道路勘测期末试题：链接: https://pan.baidu.com/s/1i5OWj45 密码: 5cp5
章节课后题：链接: https://pan.baidu.com/s/1pKIyjIr 密码: pmqn
道路勘测课件PPT：链接: https://pan.baidu.com/s/1hrZ7uDY 密码: 71a6
相关课件未压缩版：链接: https://pan.baidu.com/s/1qYA4SLQ 密码: yf25


更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。
]]></description><link>https://blog.gaoredu.com/article/73a82f64-e88a-427e-8df0-852b55830320</link><guid isPermaLink="true">https://blog.gaoredu.com/article/73a82f64-e88a-427e-8df0-852b55830320</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Dec 2017 03:00:44 GMT</pubDate></item><item><title><![CDATA[万能百度文库豆丁道客巴巴文档资源下载器，全部免费下载]]></title><description><![CDATA[经测试，该便捷软件目前可以下载拜读文库和道客巴巴上几乎所有的资源，最重要的一点是不需要百度下载劵，不需要登录会员，直接一键复制文件的地址URL到软件的下载框，就可下载任何付费的资源。赶快下载体验下吧！


百度文库下载测试截图：
212
213

链接: https://pan.baidu.com/s/1qYbsS3q 密码: 42gk
]]></description><link>https://blog.gaoredu.com/article/af61afeb-e7c8-4df7-ad99-f0177b9a5352</link><guid isPermaLink="true">https://blog.gaoredu.com/article/af61afeb-e7c8-4df7-ad99-f0177b9a5352</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 23 Dec 2017 03:00:39 GMT</pubDate></item><item><title><![CDATA[四川大学新闻传播学艺术理论和英语专业考研真题]]></title><description><![CDATA[四川大学主要专业课资料包括如下几部分：
01四川大学新闻传播学考研真题：链接: https://pan.baidu.com/s/1nviQ5a5 密码: 49gs
02四川大学艺术理论考研真题：链接: https://pan.baidu.com/s/1o8MeoWU 密码: hvjh
03四川大学英语专业考研真题：链接: https://pan.baidu.com/s/1jHMCeqU 密码: i9x4




更多资料请关注我爱科技论坛群分享78925824或扫描屏幕右侧二维码关注我们。
]]></description><link>https://blog.gaoredu.com/article/13c37381-c065-4386-8620-a8397003a587</link><guid isPermaLink="true">https://blog.gaoredu.com/article/13c37381-c065-4386-8620-a8397003a587</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Dec 2017 23:08:01 GMT</pubDate></item><item><title><![CDATA[冯小刚芳华电影迅雷种子极速下载]]></title><description><![CDATA[最近，冯小刚的电影也在热映，这里也整理到了电影迅雷种子，供大家下载。
210

本站下载链接：【参见附件】


]]></description><link>https://blog.gaoredu.com/article/8a430aab-2ad6-4b7a-aba9-fddaf55bea31</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8a430aab-2ad6-4b7a-aba9-fddaf55bea31</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Dec 2017 18:03:53 GMT</pubDate></item><item><title><![CDATA[【java工具类】SQLHelper超强工具类封装]]></title><description><![CDATA[经过小编的又一番努力，实现了java直接访问数据库的操作，并进行了SQLHelper超强工具类的封装操作，可以实现对数据库的增删改查等操作，此外部分还考虑到了事务、并发查询的影响！
SQLHelper超强工具类封装代码如下:
package com.news.dao;

import java.io.*;
import java.sql.*;
import java.util.*;



/**
 * @
 **/
public class SqlHelper {

	// 定义需要的变量
	private static Connection ct = null;
	private static Statement sm = null;
	private static ResultSet rs = null;
	private static PreparedStatement ps = null; // 解决了SQL注入漏洞

	// ；连接数据库的参数
	private static String url = "";
	private static String username = "";
	private static String driver = "";
	private static String password = "";

	// 读取配置文件需要的参数
	private static Properties pp = null;
	private static FileInputStream fis = null;

	// 定义JAVAweb项目中读取配置文件需要的InputStream
	private static InputStream is = null;

	// 调用存储过程(不考虑存储过程)
	private static CallableStatement cs = null;

	public static void main(String args) {
		ct = getConn();
		String sql = "select * from students";
		try {
			ps = ct.prepareStatement(sql);
			rs = ps.executeQuery();

			while (rs.next()) {
				System.out.println(rs.getInt(1) + " " + rs.getString(2) + " "
						+ rs.getFloat(3) + " " + rs.getFloat(4) + " "
						+ rs.getFloat(5));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// 预编译SQL对象

	}

	// 把数据库查询封装成一个函数
	public static ArrayList<Object> executeQueryFour(String sql, String paras) {
		ArrayList<Object> arrlist = new ArrayList<Object>();
		for (int i = 0; i < paras.length; i++) {
			System.out.println("paras =" + paras); // okay!!!
		}
		System.out.println("本次要执行的SQL语句为：" + sql);
		try {
			// 加载驱动， 得到连接
			ct = getConn();
			ps = ct.prepareStatement(sql);

			System.out.println("ps = ct.prepareStatement(sql) ok");

			// 给SQL语句的问号赋值
			for (int i = 0; i < paras.length; i++) {
				System.out
						.println("------------本次赋值问号的SQL执行语句----------------------------------"
								+ sql
								+ "paras"
								+ paras
								+ "  paras.length" + paras.length);
				// paras=100 paras=123456
				// System.out.println("ps.setString(i) error");
				ps.setString(i + 1, paras); // okay
				// System.out.println("本次要执行的参数"+paras+"sql"+sql+"paras.length= "+paras.length);
			}

			// ps.setString(1, paras); bug1 .error
			// ps.setString(2, paras); bug2 .error
			// java.lang.ArrayIndexOutOfBoundsException: 1

			System.out.println("给问号赋值过后需要执行的SQL语句" + sql);
			rs = ps.executeQuery();

			// 求出查询结果的列数目
			ResultSetMetaData rsmd = rs.getMetaData();
			int columnNum = rsmd.getColumnCount();

			// 循环的从rs中取出数据， 并且放入到arraylist中去
			while (rs.next()) {
				// 新建一个对象数组(对象数组的大小即列的大小)-----数组中存放了返回的所有结果
				Object object = new Object;
				for (int i = 0; i < object.length; i++) {
					// 把查询到的所有结果放入到object中去【每一列的结果放入到一个对象中的一个元素】
					object = rs.getObject(i + 1); // okay
				}

				// 把object放入到arrlist中去
				arrlist.add(object);
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("本次查询操作失败！！！");
		} finally {
			System.out.println("本次最终执行啥情况查询语句为： " + sql);
		}
		return arrlist;
	}

	public static CallableStatement getCs() {
		return cs;
	}

	public static Connection getCt() {
		return ct;
	}

	public static ResultSet getRs() {
		return rs;
	}

	public static PreparedStatement getPs() {
		return ps;
	}

	// 加载驱动， 只需要加载一次即可
	static {
		try {
			// 从dbinfo.propertities中读取配置信息
			pp = new Properties();
			// fis = new FileInputStream("dbinfo.properties");

			// 注意：当我们使用Javaweb的时候， 读取文件要使用类加载器
			is = SqlHelper.class.getClassLoader().getResourceAsStream(
					"dbinfo.properties");
			pp.load(is);
			url = pp.getProperty("url");
			username = pp.getProperty("username");
			driver = pp.getProperty("driver");
			password = pp.getProperty("password");
			System.out.println(url + " " + username + " " + driver + " "
					+ password);
			Class.forName(driver);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (fis != null) {
					fis.close();
				}
			} catch (Exception e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
			fis = null;
		}
	}

	// 得到连接
	public static Connection getConn() {
		try {
			ct = DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ct;
	}

	// 分页问题
	public static ResultSet executeQueryTwo(String sql, String paras) {
		return null;
	}

	// 调用存储过程， 有返回值
	// sql call procedure()
	public static CallableStatement callProlTwo(String sql, String inParas,
			Integer outParas) {
		try {
			ct = getConn();
			cs = ct.prepareCall(sql);
			if (inParas != null) {
				for (int i = 0; i < inParas.length; i++) {
					cs.setObject(i + 1, inParas);
				}
			}
			// 给outParas参数赋值
			if (outParas != null) {
				for (int i = 0; i < outParas.length; i++) {
					cs.registerOutParameter(inParas.length + 1 + i, outParas);
				}
			}

			// 执行存储过程
			cs.execute();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			// 资源无需关闭
		}
		return cs;
	}

	// 调用存储过程
	// sql {call 过程(?, ?, ?)}

	/*
	 * create or replace procedure pro1(v_in_empno, number, v_in_ename varchar2)
	 * is --定义变量 begin --执行语句 insert into emp (empno, ename) values
	 * (v_in_empno,v_in_ename); end;
	 */
	public static void callProl(String sql, String paras) {
		try {
			ct = getConn();
			cs = ct.prepareCall(sql);

			// 给问号赋值
			if (paras != null) {
				for (int i = 0; i < paras.length; i++) {
					cs.setObject(i + 1, paras);
				}
			}
			cs.execute();
			System.out.println("存储过程调用成功！！！");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			close(rs, cs, ct);
		}
	}

	// 执行一个统一的select(查询操作， 需要手动关闭资源)
	public static ResultSet executeQuery(String sql, String paras) {
		// System.out.println("当前SQL执行语句 "+sql);
		try {
			ct = getConn();
			ps = ct.prepareStatement(sql);
			// ps.setString(1, paras);
			// ps.setString(2, paras);
			if (paras != null) {
				for (int i = 0; i < paras.length; i++) {
					// ps.setObject(i+1, paras);
					ps.setString(i + 1, paras);
					// System.out.println("paras"+paras);
				}
			}
			rs = ps.executeQuery();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		}
		return rs;
	}

	// 事务可以解决SQL语句同时执行成功， 要么同时执行失败， 避免出现单提交
	// 如果有多个update /insert /delete,需要考虑事务
	public static void executeUpdateTwo(String sql, String paras) {
		try {
			// 获取链接
			ct = getConn();
			// 此时用户传入的是多个SQL语句
			ct.setAutoCommit(false);
			/*
			 * SQL语句执行格式：(一条SQL语句对应多个参数) sql1 aaa1, bbb1 sql2 aaa2, bbb2 sql3
			 * aaa3, bbb3 sql4 aaa4, bbb4
			 */
			// 先取出sql语句
			for (int i = 0; i < sql.length; i++) {
				ps = ct.prepareStatement(sql);
				// paras是对应的第i条SQL语句对应的参数 数组
				if (paras != null) {
					// 开始取出第i条SQL语句对应的参数
					for (int j = 0; j < paras.length; j++) {
						// 取出第i条SQL语句， 把i条SQL语句对应的第j个参数赋值给第j+1个参数
						ps.setString(j + 1, paras);
					}
				}
				ps.executeUpdate();
			}
			// int i = 9/0; //系统出现异常， 数据库中的表也不会出现异常
			ct.commit();
			System.out.println("事务提交成功！！！");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			// 事务如果提交失败就回滚
			try {
				// 系统出现异常， 回滚
				ct.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				System.out.println("回滚失败！！！");
			}
			throw new RuntimeException(e.getMessage());
		} finally {
			close(rs, ps, ct);
		}
	}

	// 数据库的修改 update / delete / insert
	// sql : update emp set ename = ? where id = ?
	// paras: {"abc", 23}
	public static void executeUpdate(String sql, String paras) {
		// 把参数给？赋值
		try {
			ct = getConn();
			ps = ct.prepareStatement(sql);
			if (paras != null) {
				// 如果使用for循环增强， 不太好(不知道是第几个问号)
				for (int i = 0; i < paras.length; i++) {
					ps.setString(i + 1, paras);
				}
			}
			// 执行SQL语句
			// int num = ps.executeUpdate(); 去过用update()更新， 那么执行成功的就不仅是一行数据
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace(); // 开发阶段需要打印出异常

			// 抛出运行异常(可以给调用该函数的一个选择， 调用者可以处理， 也可以放弃处理)
			throw new RuntimeException(e.getMessage());
		} finally {
			close(rs, ps, ct);
		}
	}

	// 关闭资源的函数
	// 由于prepareStatement是Statement的子接口， 因此在这里我们选择关闭Statement
	public static void close(ResultSet rs, Statement ps, Connection ct) {
		try {
			if (rs != null) {
				rs.close();
				rs = null;
			}
			if (ps != null) {
				ps.close();
				ps = null;
			}
			if (ct != null) {
				ct.close();
				ct = null;
			}
			System.out.println("资源关闭成功");
		} catch (Exception e2) {
			// TODO: handle exception
			e2.printStackTrace();
		}

	}

}
以上就是小编本期提供的Java访问数据库实现的基本操作的封装，读者可以直接复制代码调用即可！注意，转载请注明出处，我爱科技论坛！
]]></description><link>https://blog.gaoredu.com/article/d90e50c7-efff-440d-9c97-bc9bf18c9e42</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d90e50c7-efff-440d-9c97-bc9bf18c9e42</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 22 Dec 2017 02:00:28 GMT</pubDate></item><item><title><![CDATA[【java工具类】java文件读写操作工具类]]></title><description><![CDATA[主要是利用java中的输入输出流实现了文件读出和写入的操作，只需要传入文件路径，即可读出文件内容，同时也可以直接向文件中写入数据内容。java文件读写工具类相关代码如下：

package com.tank.javatest;

import java.io.*;

//文件读写测试
public class FileReadAndWriteTest {

	// 向文件中写入数据
	private static FileWriter fileWriter = null;
	private static BufferedWriter bufferedWriter = null;

	// 从文件中读取数据
	private static FileReader fileReader = null;
	private static BufferedReader bufferedReader = null;

	// 写数据
	private static FileInputStream fis = null;
	// 读数据
	private static FileOutputStream fos = null;
	
	private static double sumL = 0;

	public static void main(String args) {
		// TODO Auto-generated method stub
		System.out.println("二进制方式读写数据测试开始………………………………");
		// 开始写数据
		WriteToFile();
		// 开始读数据
		ReadFromFile();
		System.out.println("二进制方式读写数据测试结束………………………………");

		// 普通方式读写数据测试
		System.out.println("普通方式读写数据测试开始………………………………");
		// 开始写数据

		// 磁盘拷贝文件测试
		try {
			File file = new File("c:\\a.sql");
			FileInputStream fileInputStream = new FileInputStream(file);
			
			WriteToFileTwo(fileInputStream, file.length());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 开始读数据
		ReadFromFileTwo();
		System.out.println("普通方式读写数据测试结束………………………………");
	}

	// 二进制方式 写数据
	public static void WriteToFile() {

		try {
			// 创建文件对象
			fileWriter = new FileWriter("d://reaAndWrite.log");
			bufferedWriter = new BufferedWriter(fileWriter);

			// 直接存取String类型数据
			String con = "WWW.XIUXIUBA";
			bufferedWriter.write(con + "\r\n");
			System.out.println(con);
			/*
			 * FileWrite的Write(int)方法 无法写入纯int文件的
			 * 因为这里的int实际上是char字符，当你的int数据在unicode码表里找不到对应的char值时就会出现乱码的。
			 * 你可以提供一个toString方法转成字符串 想写入真正的int数据
			 * 
			 * File file = new File("b.txt"); FileWriter fw = new
			 * FileWriter(file); fw.write((Integer.toString(87)));
			 */
			// 保存当前或者的敌人坦克的坐标
			// 我自己创建一个数组， 然后把数据写进去

			for (int i = 0; i < 10; i++) {
				con = i + "";
				bufferedWriter.write(con + "\r\n");

			}

			// 如果在这里直接写入int数据
			for (int i = 10; i < 20; i++) {
				bufferedWriter.write(i); // error
				bufferedWriter.write("\r\n");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			// 后开启的先关闭
			try {
				// 关闭文件流
				bufferedWriter.close();
				fileWriter.close();
				System.out.println("reaAndWrite.log have been saved to disc:d://reaAndWrite.log");

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

	// 二进制方式读数据
	public static void ReadFromFile() {
		try {
			// 创建文件对象
			fileReader = new FileReader("d://reaAndWrite.log");
			bufferedReader = new BufferedReader(fileReader);

			// 读一行数据
			String str = bufferedReader.readLine();
			while ((str = bufferedReader.readLine()) != null) {
				System.out.println(str);
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			// 后开启的先关闭
			try {
				// 关闭文件流
				bufferedWriter.close();
				fileWriter.close();
				System.out.println("TankGame.log have been saved to disc:d://Demo11_1//Game.cfg");

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}


	// 普通方式写数据(保存数据)
	public static void WriteToFileTwo(FileInputStream fis, long len) {
		try {
			// 1.把文件加载到内存
			// fis = new FileInputStream("d://Demo11_1//test.zip");
			fos = new FileOutputStream("d://reaAndWrite.sql");
			//System.out.println("文件长度为： "+len);
			// 2.读文件(缓存)
			byte buf = new byte;
			int n = 0;// 实际读取字节数
			
			
			// 循环读取数据 把数据读到缓存区域
			try {
				while ((n = fis.read(buf)) != -1) {
					//System.out.println("Copy file …… …… ……");
					// 把缓冲区的数据输出到指定文件(从buf缓存区中写数据到 输出流文件中去)
					System.out.println(fis.read(buf));  //1024
					fos.write(buf);
					//System.out.println("Copy file …… …… ……"+n+"%");
					sumL += n;
					System.out.println(n+"   "+sumL+"   "+len);
					System.out.println("已传输：" + ((sumL / len) * 100)*1.94 + "%");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {

				// 关闭 打开的文件流
				fis.close();
				fos.close();
				System.out.println("Copy file finished!");

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("文件拷贝完成！！！");
		}

	}

	// 普通方式读数据
	public static void ReadFromFileTwo() {
		try {
			int len = 0;
			byte buf = new byte;
			fis = new FileInputStream("d://reaAndWrite.log");
			try {
				while ((len = fis.read(buf)) != -1) {
					System.out.println(new String(buf, 0, len));
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}
以上就是java中文件读写工具类的封装，小编只是对此工具类进行了简单的封装，如果读者想实现更复杂的封装，请自行进行二次封装！

]]></description><link>https://blog.gaoredu.com/article/53b65a56-cc70-4c8b-ad9c-2918f9a2baff</link><guid isPermaLink="true">https://blog.gaoredu.com/article/53b65a56-cc70-4c8b-ad9c-2918f9a2baff</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Dec 2017 23:00:57 GMT</pubDate></item><item><title><![CDATA[Python网络数据采集教程]]></title><description><![CDATA[Python数据采集有图灵程序设计出版，主要内容设计Python基础部分，Python高级部分，从菜鸟到精通的书籍！
206


下面是百度云链接：http://pan.baidu.com/s/1pLuKTuF密码：yeqn
]]></description><link>https://blog.gaoredu.com/article/7cac5a32-c88c-45f7-9412-320845b3d76d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7cac5a32-c88c-45f7-9412-320845b3d76d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Dec 2017 18:02:52 GMT</pubDate></item><item><title><![CDATA[还在做视频找AE模板的福利到了，最全AE插件资料大放送]]></title><description><![CDATA[此次分享的AE模板如下，欢迎大家下载，
001-004：红巨星经典插件
005：蓝宝石插件
006-016：美容，慢动作变速插件，2D/3D插件，粒子效果
017-029：调色，滤镜，三维标题和照相机插件
具体内容可参见下图：


208
209


AE模板插件下载链接：http://pan.baidu.com/s/1o8ibaVg 密码：gaek
]]></description><link>https://blog.gaoredu.com/article/1e018df6-f998-4d2e-85ae-f057a0dca76d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1e018df6-f998-4d2e-85ae-f057a0dca76d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Dec 2017 03:01:25 GMT</pubDate></item><item><title><![CDATA[【java进阶】线程创建的两种方式]]></title><description><![CDATA[两种线程创建方式的比较第一种方式：继承Thread类实现步骤：
1.自定义类继承Thread
2.覆盖Thread中的run()方法
3.创建该类的对象，调用start()方法，开启线程并调用run方法class MyThread extends Thread{  
    public void run(){  
        for (int i = 0; i < 100; i++){  
            System.out.println("MyThread.run()..."+i);  
        }   /*单条线程运行一百次*/
    }  
}  
public class test1{  
    public static void main (String args){  
        MyThread a = new MyThread();  
        a.start();  
        for (int j = 0; j < 100; j++){  
            System.out.println("test1.main()----"+j);  
        }  
    }  
}第二种方式：实现Runnable接口
实现步骤:
1.定义一个实现Runnable接口的类
2.覆盖run方法
3.创建该类对象，并以该类对象为参数创建Thread类的对象，从而创建了一个线程
4.调用start方法，开启线程并调用run方法。class MyThread implements Runnable{  
    public void run (){  
        for (int i = 0; i < 50; i++){  
            System.out.println("MyThread.run()..."+i);  
        }                       /*每条线程运行50次，共200次*/
    }  
}  
public class test1{  
    public static void main (String args){  
        MyThread a = new MyThread();  
        Thread a1 = new Thread(a);  
        Thread a2 = new Thread(a);  
        Thread a3 = new Thread(a);  
        Thread a4 = new Thread(a);  
  
        a1.start();  
        a2.start();  
        a3.start();  
        a4.start();  
    }  
}public class test1{
    public static void main(String  args){
        MyThread m=new MyThread();
        Thread t1=new Thread(m,"Thread 1");
        Thread t2=new Thread(m,"Thread 2");
        Thread t3=new Thread(m,"Thread 3");
        t1.start();         /*共运行一百次，  三条线程哪条抢到资源就运行哪条  */
        t2.start();
        t3.start();
    }
}
class MyThread implements Runnable{
    private int i=0;
    public void run(){
        while(i<100){
            i++;
        	System.out.println(i+"  MyThread.run "+Thread.currentThread().getName());
        }
    }
}如果现实问题中要求必须创建多个线程来执行同一任务，而且这多个线程之间还将共享同一个资源，那么就可以使用实现Runnable接口的方式来创建多线程程序。而这一功能通过扩展Thread类是无法实现的。
实现Runnable接口相对于扩展Thread类来说，具有无可比拟的优势。这种方式不仅有利于程序的健壮性，使代码能够被多个线程共享，而且代码和数据资源相对独立，从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来，线程、代码和数据资源三者有效分离，很好地体现了面向对象程序设计的思想。因此，几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。总结：
采用继承Thread类方式：
（1）优点：编写简单，如果需要访问当前线程，无需使用Thread.currentThread()方法，直接使用this，即可获得当前线程。
（2）缺点：因为线程类已经继承了Thread类，所以不能再继承其他的父类。采用实现Runnable接口方式：
（1）优点：线程类只是实现了Runable接口，还可以继承其他的类。在这种方式下，可以多个线程共享同一个目标对象，所以非常适合多个相同线程来处理同一份资源的情况，从而可以将CPU代码和数据分开，形成清晰的模型，较好地体现了面向对象的思想。
（2）缺点：编程稍微复杂，如果需要访问当前线程，必须使用Thread.currentThread()方法。

]]></description><link>https://blog.gaoredu.com/article/103351f4-4a98-4c7a-ad5f-c0b652525a7a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/103351f4-4a98-4c7a-ad5f-c0b652525a7a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Dec 2017 03:01:10 GMT</pubDate></item><item><title><![CDATA[计算机等级考试二级公共基础视频教程详解]]></title><description><![CDATA[什么，大学都过完了二级还没过？别着急，快来看下计算机等级考试二级公共基础视频教程吧，总内容大概有四十讲吧，从计算机基础到解析，让你顺利通过计算机二级考试！
204


链接:http://yun.baidu.com/s/1dFMGOoh密码:r7kx


]]></description><link>https://blog.gaoredu.com/article/a40b5cbc-e5b7-40ba-adb0-089555cd4960</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a40b5cbc-e5b7-40ba-adb0-089555cd4960</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Dec 2017 03:01:10 GMT</pubDate></item><item><title><![CDATA[ADSafe去广告软件，打造无广告的上网环境]]></title><description><![CDATA[ADSafe广告管家是一个无插件、一键设置的广告过滤软件，对广大用户来说最大的优势就是一键优化设置即可使用。同时可以自己编写过滤规则，也可以订阅官方的过滤规则，更新也很迅速。通过使用ADSafe广告管家，由于把广告加载都去掉了，所以网页打开速度也相应变快，也能防止个人隐私的泄漏。应该是说当前网上最管用的一款广告拦截插件了。

207

本版主要功能介绍
1. 硬改去首次启动赞助弹窗
2.去主界面“主面板、公告、应用、分享、点击更新、举报广告”按钮
3.去菜单“日志、使用手册、感谢名单”选项
4.去设置“我要参与ADSafe3用户体验计划、保持最新版本”选项
5.去急救箱“开机不能自启动、常见问题解答”选项
6.禁止主目录下载APP应用推广数据及目录
7.禁止主目录下载更新文件及目录

目前支持的广告拦截内容
1. 视频广告：常见视频网站、视频软件的片头广告
2. 网盟广告：常见网盟弹窗、富媒体升窗、网站统计脚本
3. 网吧广告：常见网吧增值软件弹窗广告、升窗广告
4. 软件广告：常见视频、下载、音乐、游戏客户端软件弹窗广告、升窗广告
5. 挂马网站：常见挂马网站脚本下载、挂马网站可执行文件下载
6. 低俗网站：常见低速不良网站的拦截，保护未成年人健康上网


【精简优化版下载地址】：链接: http://pan.baidu.com/s/1gfAFDNd 密码: a42v


]]></description><link>https://blog.gaoredu.com/article/e9a0fe85-6ad9-48a2-b5fb-7b16bf51ffeb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e9a0fe85-6ad9-48a2-b5fb-7b16bf51ffeb</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 20 Dec 2017 02:48:20 GMT</pubDate></item><item><title><![CDATA[【java进阶】java5的新特性总结]]></title><description><![CDATA[经过笔者的总结，java5主要增加了以下几个特性：
1.java5的静态导入与编译器语法设置package com.java.thread;
//import static java.lang.Math.max;
//import static java.lang.Math.random;
 
//导入Math类下面的所有方法
import static java.lang.Math.*;
public class StaticImport {
        public static void main(String args)
        {
                //直接引入Math函数下面的方法
                //System.out.println(Math.max(12, 23));
                //System.out.println(Math.random());
                
                //通过静态导入的方法可以省略类名称
                System.out.println(max(12, 23));
                System.out.println(random());
        }
}


2.java5可变参数与重载
//可变参数与overLoad的区分
public class VariableParameter {
        public static void main(String args)
        {
                add(1, 2, 3, 4);
        }
        
        //可变参数
        public static int add(int x, int ...args)
        {
                int sum = x;
                for (int i=0; i<args.length; i++)
                {
                        sum += args;
                }
                System.out.println(sum);
                return sum;
        }
}
3.java5的增加for循环
public static int add(int x, int ...args)
        {
                int sum = x;
                /*for (int i=0; i<args.length; i++)
                {
                        sum += args;
                }*/
                for (int arg : args)
                {
                        sum += arg;
                }
                System.out.println(sum);
                return sum;
        }

4.基本数据类型的自动拆装箱及享元设计模式
package com.java.thread;

public class AutoBox {

        public static void main(String args) {
                // TODO Auto-generated method stub
                // 自动装箱， 会把基本数据类型转换为Integer的数据类型
                Integer i = 5;
                // 自动拆箱， 只有基本数据类型才可以进行基本的数学运算， 此时会自动把Integer数据类型转为int数据类型
                // System.out.println(i + 12);

                String str1 = new String("123");
                String str2 = new String("123");
                // 会生成两个不同的对象
                System.out.println("Str1==str2:" + (str1 == str2));

                // 对于-128~127之间的数， 装箱以后会放在一个缓冲池中， 下次如果还需要使用， 会从池子中取出
                //【享元模式 ---flyweight】总结：当一个对象很小的时候， 把基本的数值缓存起来， 使用的时候把对象拿出来用就可以了
                //【享元设计模式】如果有很多很小的对象， 他们有很多相同类似的特征（内部状态）， 那么我们就可以把它变成一个对象， 把不同的东西变成外部的属性特征（外部状态）， 作为方法的参数传入即可
                
                //小数值会装箱成为相同的对象， 使用的频率相对较高
                Integer i1 = 13;
                Integer i2 = 13;
                // 会指向同一块内存空间
                System.out.println("i1==i2:" + (i1 == i2));

                //大数字会装箱成为不同的对象， 使用的频率相对较低
                Integer i3 = 137;
                Integer i4 = 137;
                System.out.println("i3==i4"+(i3 == i4)); 

                //i5和i6也是同一块内存空间
                Integer i5 = Integer.valueOf(12);
                Integer i6 = Integer.valueOf(12);
                System.out.println("i5==i6"+(i5==i6));

                //i7和i8不是同一块内存空间
                Integer i7 = Integer.valueOf(312);
                Integer i8 = Integer.valueOf(312);
                System.out.println("i7==i8"+(i7==i8));
        }

}

输出结果：
Str1==str2:false
i1==i2:true
i3==i4false
i5==i6true
i7==i8false



]]></description><link>https://blog.gaoredu.com/article/b4a7a85e-7791-46e7-96fe-69234718c521</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b4a7a85e-7791-46e7-96fe-69234718c521</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 19 Dec 2017 04:03:56 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【长城】]]></title><description><![CDATA[导演: 张艺谋
编剧: 马克斯·布鲁克斯 / 爱德华·兹威克 / 马歇尔·赫斯科维兹 / 托尼·吉尔罗伊 / 托马斯·图尔
主演: 马特·达蒙 / 景甜 / 佩德罗·帕斯卡 / 刘德华 / 威廉·达福 / 更多...
类型: 剧情 / 动作 / 奇幻 / 冒险
制片国家/地区: 中国大陆 / 美国
语言: 英语 / 汉语普通话
上映日期: 2016-12-16(中国大陆) / 2017-02-17(美国)
片长: 104分钟
又名: 万里长城


205

电影简介：
电影《长城》讲述了在古代，一支中国精英部队为保卫人类，在举世闻名的长城上与怪兽饕餮进行生死决战的故事。欧洲雇佣军威廉（马特·达蒙 Matt Damon 饰）与同伴佩罗·托瓦尔（佩德罗·帕斯卡 Pedro Pascal 饰）不远万里来到中国盗取火药配方，意外发现了长城是为抵御60年降临人间一次的饕餮所建。长城内部机关重重，宛如“陆上航母”，由无影禁军世代镇守。在这里，威廉见识了饕餮的凶残，也见证了无影禁军的精锐和勇敢，并被这群战士之间的信任和牺牲所感动，义无反顾地加入到了共同守护人类的战斗当中。


爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr7d6p3s.html#vfrm=2-4-0-1（需开通VIP会员） 
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。



]]></description><link>https://blog.gaoredu.com/article/f6bc2cba-8a7c-421a-a4f8-c20c367314b4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f6bc2cba-8a7c-421a-a4f8-c20c367314b4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 19 Dec 2017 02:02:54 GMT</pubDate></item><item><title><![CDATA[2018全面时政热点归纳总结，从1月到11月]]></title><description><![CDATA[&#8203;考研政治全年时政热点汇总

（1 月-11 月国内外大事）

温馨提示：本次整理的时政热点，大家大致浏览下，有印象，作为选择题考点掌握即可。

2017 年 1 月国内外时政热点汇总
一、国内部分：

1 、习近平近日对上海自贸试验区建设作出重要指示强调，建设上海自贸试验区是党中

央、国务院在新形势下全面深化改革和扩大开放的一项战略举措。3 年来，上海市、商务部

等不负重托和厚望，密切配合、攻坚克难，紧抓制度创新这个核心，主动服务国家战略，工

作取得多方面重大进展，一批重要成果复制推广到全国，总体上实现了初衷。望在深入总结

评估的基础上，坚持五大发展理念引领，把握基本定位，强化使命担当，继续解放思想、勇

于突破、当好标杆，对照最高标准、查找短板弱项，研究明确下一阶段的重点目标任务，大

胆试、大胆闯、自主改，力争取得更多可复制推广的制度创新成果，进一步彰显全面深化改

革和扩大开放的试验田作用。



2 、我国最大的单体投资项目——国家存储器基地项目，近日在武汉东湖新技术开发区

正式动工建设。该项目总投资约 1600 亿元，主要生产存储器芯片，总占地面积达 1968 亩。



3 、日前，全国人大常委会表决通过了《中华人民共和国环境保护税法》，并将于 2018

年 1 月 1 日开始实施。环保税，由此成为我国的第十八个税种。



4 、1 月 9 日， 2016 年度国家科学技术奖励大会在北京人民大会堂隆重举行。中共中央

总书记、国家主席、中央军委主席习近平向获得 2016 年度国家最高科学技术奖的中国科学

院物理研究所赵忠贤院士和中国中医科学院屠呦呦研究员颁奖。



5 、中共中央政治局常务委员会 1 月 10 日全天召开会议，听取全国人大常委会、国务院、

全国政协、最高人民法院、最高人民检察院党组工作汇报，听取中央书记处工作报告。中共

中央总书记习近平主持会议并发表重要讲话。会议强调，办好中国的事情，关键在党。中

国特色社会主义最本质的特征是中国共产党领导，中国特色社会主义制度的最大优势是中

国共产党领导。坚持党的领导首先是坚持党中央集中统一领导。坚持党中央集中统一领导，

是全面从严治党、严肃党内政治生活、加强党内监督的重要目的，也是一条根本的政治规
矩。要深入学习贯彻党的十八届六中全会精神，严格执行《关于新形势下党内政治生

活的若干准则》、《中国共产党党内监督条例》，牢固树立政治意识、大局意识、核心意

识、看齐意识，坚持以党的旗帜为旗帜、以党的方向为方向、以党的意志为意志，切实把

党中央重大决策部署落实到各项工作中去。



6 、国务院新闻办公室 1 月 11 日发表《中国的亚太安全合作政策》白皮书。白皮书指出，

中国倡导共同、综合、合作、可持续的安全观，努力走共建、共享、共赢的亚太安全之路。

未来的地区安全架构应是多层次、复合型和多样化的，其建设应是地区国家的共同事业，

建立在共识基础之上，与地区经济架构建设协调推进。



7 、1 月 17 日，国家主席习近平在达沃斯国际会议中心出席世界经济论坛 2017 年年会

开幕式，并发表题为《共担时代责任 共促全球发展》的主旨演讲，强调要坚定不移推进经

济全球化，引导好经济全球化走向，打造富有活力的增长模式、开放共赢的合作模式、公正

合理的治理模式、平衡普惠的发展模式，牢固树立人类命运共同体意识，共同担当，同舟共

济，共促全球发展。





8 、中共中央政治局 1 月 22 日下午就深入推进供给侧结构性改革进行第三十八次集体学

习。中共中央总书记习近平在主持学习时强调，推进供给侧结构性改革是我国经济发展进

入新常态的必然选择，是经济发展新常态下我国宏观经济管理必须确立的战略思路。必须

把改善供给侧结构作为主攻方向，从生产端入手，提高供给体系质量和效率，扩大有效和

中高端供给，增强供给侧结构对需求变化的适应性，推动我国经济朝着更高质量、更有效

率、更加公平、更可持续的方向发展。



9 、中共中央政治局 1 月 22 日召开会议，决定设立中央军民融合发展委员会；审议《中

央政治局常委会听取和研究全国人大常委会、国务院、全国政协、最高人民法院、最高人民

检察院党组工作汇报和中央书记处工作报告的综合情况报告》。中共中央总书记习近平主持

会议。会议决定，设立中央军民融合发展委员会，由习近平任主任。中央军民融合发展委

员会是中央层面军民融合发展重大问题的决策和议事协调机构，统一领导军民融合深度发

展，向中央政治局、中央政治局常务委员会负责。



二、国际部分：
1 、美国总统特朗普 1 月 23 日签署行政命令，正式宣布美国退出跨太平洋伙伴关系协

定（TPP ）。



2017 年 2 月国内外时政热点汇总



一、国内部分：



1 、2 月 4 日电，经李克强总理签批，国务院日前印发《全国国土规划纲要（ 2016—2030

年）》（以下简称《纲要》）。这是我国首个国土空间开发与保护的战略性、综合性、基

础性规划，对涉及国土空间开发、保护、整治的各类活动具有指导和管控作用。



2 、新华社 2 月 5 日播发《中共中央、国务院关于深入推进农业供给侧结构性改革加快

培育农业农村发展新动能的若干意见》。这份 2017 年的中央一号文件继续锁定“三农”工

作，把深入推进农业供给侧结构性改革作为新的历史阶段农业农村工作主线。



3 、2 月 8 日，来自中国、美国、法国、意大利、挪威、日本、印度等国家的 33 名科学

家在香港的招商局码头登上美国“决心”号大洋钻探船，即将奔赴南海执行国际大洋发现计

划（IODP）第 367 航次任务，探寻地球海陆变迁之谜。这也标志着我国科学家主导的第三

次南海大洋钻探正式拉开序幕。



4 、近日，国务院正式批复《北部湾城市群发展规划》。《规划》强调，优良的生态环

境是北部湾城市群发展的核心竞争力，必须把保住一泓清水作为不可突破的底线和红线，

坚持陆海联动、生态共建、环境共治，建设好蓝色生态湾区。



5 、习近平 2 月 17 日在京主持召开国家安全工作座谈会并发表重要讲话，强调要准确把

握国家安全形势，牢固树立和认真贯彻总体国家安全观，以人民安全为宗旨，走中国特色

国家安全道路，努力开创国家安全工作新局面，为中华民族伟大复兴中国梦提供坚实安全

保障。习近平强调要突出抓好政治安全、经济安全、国土安全、社会安全、网络安全等各

方面安全工作。要完善立体化社会治安防控体系，提高社会治理整体水平，注意从源头上

排查化解矛盾纠纷。



6 、中共中央政治局 2 月 21 日就我国脱贫攻坚形势和更好实施精准扶贫进行第三十九次

集体学习。习近平强调，言必信，行必果。农村贫困人口如期脱贫、贫困县全部摘帽、解

决区域性整体贫困，是全面建成小康社会的底线任务，是我们作出的庄严承诺。要强化领

导责任、强化资金投入、强化部门协同、强化东西协作、强化社会合力、强化基层活力、

强化任务落实，集中力量攻坚克难，更好推进精准扶贫、精准脱贫，确保如期实现脱贫攻

坚目标。



二、国际部分：



1 、2 月 27 日，韩国部署“萨德”反导系统的进程再向前迈出危险一步——韩国国防部

确认，乐天集团当天召开董事会会议批准同韩军方“萨德”系统部署土地置换协议。对此，









中国外交部第一时间表示坚决反对和强烈不满，强调中方反对在韩部署“萨德”系统

的意志是坚定的，将坚决采取必要措施维护自身安全利益，由此产生的一切后果由美韩承担。



2017 年 3 月国内外时政热点汇总



一、国内部分：



1 、习近平 2 月 28 日主持召开中央财经领导小组第十五次会议强调，做好经济工作是我

们党治国理政的重大任务，要坚持宏观和微观、国内和国外、战略和战术紧密结合，坚持

问题导向，及时研究重大战略问题，及早部署关系全局、事关长远的问题，对经济社会发

展进行指导，把谋划大事和制定具体政策紧密结合起来，加强责任分工，一锤一锤钉钉子，

直到产生实际效果。



2 、2 月 28 日，国家认监委、工信部电子司指导下的汽车联网产品认证联盟，推出我国

自主研制的“米级快速定位北斗芯片”，导航精度从原来的 10 米提升到 1—2 米，标志着我

国自主可控的北斗卫星导航即将进入米级定位时代。



3 、一年之计在于春。在迎春花绽放的三月，中国迎来了一年一度的“两会时间”。人

民代表大会制度是中国的根本政治制度，中国共产党领导的多党合作和政治协商制度是中

国的基本政治制度。中国特色社会主义政治制度，既根植于中国社会土壤，又坚持与时俱

进，具有强大生命力，中国特色社会主义政治发展道路是符合中国国情、保证人民当家作

主的正确道路。



4 、国家主席习近平 3 月 19 日在人民大会堂会见美国国务卿蒂勒森。习近平强调，中美

关系对两国、对世界都很重要。双方要本着对历史、对子孙负责的精神把握好中美关系的

发展方向。要加强战略互信，增进对彼此的认知。中美共同利益远大于分歧，合作是双方

唯一正确选择。要从长远和战略角度看待中美关系，拓展合作领域，实现互利共赢。要加

强地区热点问题上的沟通和协调。要尊重彼此核心利益和重大关切，维护中美关系大局稳

定。要鼓励和扩大两国人民友好往来，不断夯实中美关系的社会基础。



5 、2017 年 3 月 28 日是西藏百万农奴解放 58 周年的纪念日。连日来，西藏各地举行了

丰富多彩的庆祝活动。与往年不同的是，西藏还在全区启动了“四讲四爱”喜迎党的十九大

主题教育实践活动，为纪念日注入了新的内涵。



6 、3 月 30 日电，中央宣传部 30 日向全社会公开宣传发布“以国为重的大国工匠”徐

立平的先进事迹，授予徐立平“时代楷模”荣誉称号。



二、国际部分：







1 、联合国安理会一致通过第 2344 号决议，首次载入“构建人类命运共同体”重

要理念，反映了国际社会的共识。呼吁国际社会凝聚援助阿富汗共识，通过“一带一路”建

设等加强区域经济合作。

【老师提示】人类命运共同点容易作为当代材料分析题考查知识点，而且容易与今

年“一带一路”、“金砖国家会晤”这些热点相结合。



2017 年 4 月国内外时政热点汇总



一、国内部分：



1 、中共中央政治局 3 月 31 日召开会议，听取 2016 年省级党委和政府脱贫攻坚工作成

效考核情况汇报，对推进脱贫攻坚工作提出要求。中共中央总书记习近平主持会议。党的十

八大确定了到 2020 年全面建成小康社会的目标，其中最难实现的就是农村贫困人口脱贫、

贫困县摘帽、消除区域性整体贫困。实现这个目标是我们党对人民的庄严承诺。必须把从

严要求贯穿脱贫攻坚工作全过程、各方面，严格落实脱贫攻坚工作报告制度、责任制度、

考核制度、督查巡查制度，确保实现脱贫攻坚工作目标任务。



2 、日前，中共中央、国务院印发通知，决定设立河北雄安新区。这是以习近平同志为

核心的党中央作出的一项重大的历史性战略选择，是继深圳经济特区和上海浦东新区之后又

一具有全国意义的新区，是千年大计、国家大事。雄安新区规划范围涉及河北省雄县、容城、

安新 3 县及周边部分区域，地处北京、天津、保定腹地，区位优势明显、交通便捷通畅、生

态环境优良、资源环境承载能力较强，现有开发程度较低，发展空间充裕，具备高起点高标

准开发建设的基本条件。雄安新区规划建设以特定区域为起步区先行开发，起步区面积约

100 平方公里，中期发展区面积约 200 平方公里，远期控制区面积约 2000 平方公里。设立

雄安新区，是以习近平同志为核心的党中央深入推进京津冀协同发展作出的一项重大决策部

署，对于集中疏解北京非首都功能，探索人口经济密集地区优化开发新模式，调整优化京

津冀城市布局和空间结构，培育创新驱动发展新引擎，具有重大现实意义和深远历史意义。





3 、4 月 12 日 19 时 04 分，我国在西昌卫星发射中心用长征三号乙运载火箭成功发射实

践十三号卫星。这是我国首颗高通量通信卫星，也是我国技术试验和示范应用成功结合的

典范，对于促进我国通信卫星技术及产业的跨越发展具有重要里程碑意义。



4 、习近平近日对廖俊波同志先进事迹作出重要指示强调，廖俊波同志任职期间，牢记

党的嘱托，尽心尽责，带领当地干部群众扑下身子、苦干实干，以实际行动体现了对党忠

诚、心系群众、忘我工作、无私奉献的优秀品质，无愧于“全国优秀县委书记”的称号。

广大党员、干部要向廖俊波同志学习，不忘初心、扎实工作、廉洁奉公，身体力行把

党的方针政策落实到基层和群众中去，真心实意为人民造福。



5 、4 月 18 日，C919 大型客机首飞放飞评审会在中国商飞公司试飞中心召开。经过严格

评审，评审委员会一致同意， C919 大型客机首架机通过首飞放飞评审，待完成全部高速滑

行测试后，可择机开展首飞。这标志着 C919 大型客机首架机的首飞又迈出了重要一步。这

也是继 3 月 20 日通过了首飞技术评审后， C919 大型客机完成的首飞前最后一项评审任务。



6 、中共中央政治局 4 月 25 日召开会议，分析研究当前经济形势和经济工作，审议《关

于巡视中央政法单位情况的专题报告》。中共中央总书记习近平主持会议。会议要求，各地

区各部门要提高执行党中央方针政策的能力和水平。要保持宏观政策连续性和稳定性，继

续实施积极的财政政策和稳健的货币政策，深化供给侧结构性改革，坚定不移推进“三去

一降一补”，改造提升传统动能，大力培育发展新动能，振兴实体经济，实现转型升级。

要创造性开展工作，加强调查研究，充分发挥和调动基层干部群众积极性、主动性、创造

性，扩大改革受益面，扎实做好重点民生工作，让人民群众有更多获得感。要营造良好市

场环境，加强制度建设，扩大开放领域，改善投资者预期。要加快形成促进房地产市场稳

定发展的长效机制。要高度重视防控金融风险，加强监管协调，加强金融服务实体经济，

加大惩处违规违法行为工作力度。会议强调，政法工作是党和国家工作的重要组成部分，

政法机关是人民民主专政。



7 、中央宣传部 4 月 25 日向全社会公开宣传发布“当代愚公”黄大发的先进事迹，授

予黄大发“时代楷模”荣誉称号。他带领群众树立主体意识，发扬自力更生精神，修村路、

架电线、“坡改梯”、建学校，改变了当地贫穷落后的面貌，用实际行动践行了新时期愚公

移山精神。



8 、中共中央政治局 4 月 25 日下午就维护国家金融安全进行第四十次集体学习。习近平

在主持学习时强调，金融安全是国家安全的重要组成部分，是经济平稳健康发展的重要基

础。维护金融安全，是关系我国经济社会发展全局的一件带有战略性、根本性的大事。金

融活，经济活；金融稳，经济稳。必须充分认识金融在经济发展和社会生活中的重要地位

和作用，切实把维护金融安全作为治国理政的一件大事，扎扎实实把金融工作做好。



9 、4 月 27 日 19 时 07 分，天舟一号货运飞船与天宫二号空间实验室成功完成首次推进

剂在轨补加试验，标志天舟一号飞行任务取得圆满成功。突破和掌握推进剂在轨补加技术，

填补了我国航天领域的空白，实现了空间推进领域的一次重大技术跨越，为我国空间站组装

建造和长期运营扫清了能源供给上的障碍，使我国成为世界上第三个独立掌握这一关键技

术的国家。中共中央、国务院、中央军委对天舟一号飞行任务圆满成功发布贺电。



10 、李克强考察中国航天科工集团并主持召开现场会。李克强指出，振兴实体经济必须

加快新旧动能转换、走转型升级之路，央企要当好排头兵。要发挥央企引领辐射作用，通

过“双创”走出大中小企业融合发展的新路子。互联网时代为企业间广泛深度合作创

造了条件。央企开展创新不能再走关起门来“单打独斗”的老路，而要通过搭建“双创”平

台，创新机制，吸引众多中小微企业成为创新共同体，聚众智汇众力提高创新效率。这种新

模式使央企与中小微企业不再是简单的上下游配套关系，而是形成优势互补、相互服务、利

益共享的产业生态，不仅会对推动企业发展产生乘数效应，也会带动大量社会就业，给各类

人才实现价值提供更大空间，促进社会公平正义，其激发的巨大社会创新创造潜力前景难以

估量。



二、国际部分：



1 、国际货币基金组织、世界银行和世界贸易组织 4 月 10 日联合发布报告，呼吁各经济

体采取措施降低贸易带来的负面影响，继续推动全球贸易一体化。



2 、世界知识产权组织总干事弗朗西斯·高锐表示，中国已成为世界上最大的专利、商

标和工业品外观设计申请国，知识产权正在成为中国科技创新发展的新动力和有力的制度

保障。



2017 年 5 月国内外时政热点汇总



一、国内部分：



1 、5 月 3 日，中国科学技术大学潘建伟教授宣布，研究团队构建了世界首台超越早期

经典计算机的单光子量子计算机。



2 、5 月 5 日下午，我国首款按照最新国际适航标准研制的干线民用飞机 C919 在上海浦

东国际机场成功实现首飞。我国 C919 大型客机项目全面进入研发试飞和验证试飞阶段，成

功首飞意味着我国实现了民用飞机技术集群式突破，我国成为世界上少数几个拥有研制大

型客机能力的国家。中共中央、国务院向参加大型客机研制任务的全体参研参试单位和人

员，表示热烈的祝贺和亲切的慰问！



3 、国家主席习近平 5 月 14 日出席“一带一路”国际合作高峰论坛开幕式，并发表题为

《携手推进“一带一路”建设》的主旨演讲，强调坚持以和平合作、开放包容、互学互鉴、

互利共赢为核心的丝路精神，携手推动“一带一路”建设行稳致远，将“一带一路”建成

和平、繁荣、开放、创新、文明之路，迈向更加美好的明天。



【提示】一带一路高峰论坛作为今年的重大时政热点，必将进入考卷，大家需

要将此知识点作为分析题点掌握。









4 、中国与东盟国家 5 月 17 日至 18 日在贵州省贵阳市举行落实《南海各方行为宣

言》第十四次高官会和第二十一次联合工作组会，中国与东盟十国外交部高官出席了会议。



5 、5 月 18 日消息，国土资源部中国地质调查局今天在南海宣布，我国正在南海北部神

狐海域进行的可燃冰试采获得成功，这也标志着我国成为全球第一个实现了在海域可燃冰

试开采中获得连续稳定产气的国家。



6、习近平近日对黄大年同志先进事迹作出重要指示指出，黄大年同志秉持科技报国理

想，把为祖国富强、民族振兴、人民幸福贡献力量作为毕生追求，为我国教育科研事业作

出了突出贡献，他的先进事迹感人肺腑。黄大年同志是著名地球物理学家，生前担任吉林

大学地球探测科学与技术学院教授、博士生导师。2009 年，黄大年同志毅然放弃国外优越

条件回到祖国，刻苦钻研、勇于创新，取得了一系列重大科技成果，填补了多项国内技术空

白，今年 1 月 8 日不幸因病去世，年仅 58 岁。



【提示】黄大年的知识点可以作为材料在思修当中命题，大家结合“爱国主义”、

“人生价值”知识点作为思修的分析题掌握。



二、国际部分：



1 、综合报道，法国新任总统马克龙于 5 月 14 日宣誓就职。他承诺，会竭尽所能克服社

会分裂和修补国家裂缝，重拾国家自信，建立强大的法国，以恢复法国在国际上的地位。

报道称，现年 39 岁的马克龙在当地时间 14 日上午 11 时 30 分宣誓就职，接替卸任的奥朗

德成为法兰西第五共和国的第八任总统。他也是法国历史上最年轻的总统。



2017 年 6 月国内外时政热点汇总

一、国内部分：



1 、6 月 9 日，上海合作组织成员国元首理事会第十七次会议在哈萨克斯坦首都阿斯塔

纳举行。国家主席习近平同哈萨克斯坦总统纳扎尔巴耶夫、吉尔吉斯斯坦总统阿坦巴耶夫、

俄罗斯总统普京、塔吉克斯坦总统拉赫蒙、乌兹别克斯坦总统米尔济约耶夫出席会议。习近

平在会上发表重要讲话，强调上海合作组织成员国要强化命运共同体意识，巩固团结协作，

携手应对挑战，深化务实合作，拉紧人文纽带，坚持开放包容，携手创造本组织更加光明

的未来。





2 、推动长江经济带发展工作会议 6 月 9 日在北京召开。张高丽表示，实施长江经济带

发展战略，是以习近平同志为核心的党中央作出的重大决策部署。习近平总书记强调，推动

长江经济带发展必须从中华民族长远利益考虑，走生态优先、绿色发展之路，把修复

长江生态环境摆在压倒性位置，共抓大保护，不搞大开发。我们要从经济社会发展全局出

发，把保护和修复长江生态环境摆在首要位置，努力把长江经济带建设成为我国生态文明

建设的先行示范带、创新驱动带、协调发展带。



3 、俞正声 6 月 17 日下午在厦门会见了出席第九届海峡论坛的部分两岸嘉宾和主办单位

代表。俞正声指出，两岸关系和平发展符合两岸同胞共同心愿和利益，是一条正确道路。坚

持两岸关系和平发展正确方向，关键是要坚持“九二共识”政治基础和反对“台独”。民

进党当局始终不承认“九二共识”，不认同两岸同属一中，破坏了两岸关系和平发展的政

治基础。把两岸关系性质说清楚，以实际行动接受两岸同胞的检验，是一个绕不开的问题。



4 、中共中央总书记、国家主席、中央军委主席、中央军民融合发展委员会主任习近平

于 6 月 20 日下午主持召开中央军民融合发展委员会第一次全体会议并发表重要讲话。习近

平强调，把军民融合发展上升为国家战略，是我们长期探索经济建设和国防建设协调发展

规律的重大成果，是从国家发展和安全全局出发作出的重大决策，是应对复杂安全威胁、

赢得国家战略优势的重大举措。要加强集中统一领导，贯彻落实总体国家安全观和新形势

下军事战略方针，突出问题导向，强化顶层设计，加强需求统合，统筹增量存量，同步推

进体制和机制改革、体系和要素融合、制度和标准建设，加快形成全要素、多领域、高效

益的军民融合深度发展格局，逐步构建军民一体化的国家战略体系和能力。



二、国际部分：


1 、当地时间 6 月 1 日下午，美国总统特朗普在白宫宣布，美国将退出《巴黎协定》。

一石激起千层浪，引发全球关注。



2017 年 7 月国内外时政热点汇总


一、国内部分：



1 、庆祝香港回归祖国 20 周年大会暨香港特别行政区第五届政府就职典礼 7 月 1 日上午

在香港会展中心隆重举行。中共中央总书记、国家主席、中央军委主席习近平出席并发表重

要讲话。他强调，“一国两制”是中国的一个伟大创举，是中国为国际社会解决类似问题

提供的一个新思路新方案，是中华民族为世界和平与发展作出的新贡献，凝结了海纳百川、

有容乃大的中国智慧。坚持“一国两制”方针，深入推进“一国两制”实践，符合香港居

民利益，符合香港繁荣稳定实际需要，符合国家根本利益，符合全国人民共同意愿。中央

贯彻“一国两制”方针坚持两点，一是坚定不移，不会变、不动摇；二是全面准确，确保

“一国两制”在香港的实践不走样、不变形，始终沿着正确方向前进。









2 、《深化粤港澳合作 推进大湾区建设框架协议》7 月 1 日上午在香港签署，国家主

席习近平出席签署仪式。推进建设粤港澳大湾区，有利于深化内地和港澳交流合作，对港

澳参与国家发展战略，提升竞争力，保持长期繁荣稳定具有重要意义。



3 、7 月 7 日，世界最长的海底隧道港珠澳大桥海底隧道贯通，标志着先后经历 13 年论

证、设计、施工的“世纪工程”港珠澳大桥主体工程全线贯通。



4 、习近平近日对司法体制改革作出重要指示强调，司法体制改革在全面深化改革、全

面依法治国中居于重要地位，对推进国家治理体系和治理能力现代化意义重大。全国政法

机关要按照党中央要求，坚定不移推进司法体制改革，坚定不移走中国特色社会主义法治道

路。



5 、近日，由中国社会科学院新闻与传播研究所主持编纂的《中国新媒体发展报告（ 2017）》

（新媒体蓝皮书）（以下简称“蓝皮书”）在京发布。值得注意的是，共享经济作为新名词

首次出现在蓝皮书中。同时，人工智能也成为去年新媒体发展的一大亮点。



6 、中共中央政治局 7 月 24 日召开会议，分析研究当前经济形势，部署下半年经济工作。

中共中央总书记习近平主持会议强调要坚定不移深化供给侧结构性改革，深入推进“三去

一降一补”，有效规范地方政府举债融资，坚决遏制隐性债务增量。要深入扎实整治金融

乱象，加强金融监管协调，提高金融服务实体经济的效率和水平。要稳定房地产市场，坚

持政策连续性稳定性，加快建立长效机制。要稳定外资和民间投资，稳定信心，加强产权

保护，扩大外资市场准入，增强营商环境对投资者的吸引力。要高度重视民生工作，积极

促进就业，切实帮助困难群众解决生产生活中遇到的困难和问题。



7 、习近平总书记日前在省部级主要领导干部专题研讨班上发表的重要讲话，深刻阐述

了新的历史条件下坚持和发展中国特色社会主义的一系列重大理论和实践问题，在省区市

各级党组织中引起强烈反响。大家表示，习近平总书记的重要讲话高屋建瓴、总揽全局，深

刻阐释了推进党的建设新的伟大工程，与进行伟大斗争、推进伟大事业、实现伟大梦想的关

系，各级党员干部要深入学习贯彻讲话精神，切实增强“四个意识”，牢固树立“四个自信”，

坚定不移推进全面从严治党，抓好党中央各项决策部署贯彻落实，以优异成绩迎接党的十九

大胜利召开。

2017 年 8 月国内外时政热点汇总



一、国内部分：



1 、庆祝中国人民解放军建军 90 周年大会 8 月 1 日上午在北京人民大会堂隆重举

行。中共中央总书记、国家主席、中央军委主席习近平在会上发表重要讲话强调，人民军队

的历史辉煌，是鲜血生命铸就的，永远值得我们铭记。人民军队的历史经验，是艰辛探索

得来的，永远需要我们弘扬。人民军队的历史发展，是忠诚担当推动的，永远激励我们向

前。中华民族实现伟大复兴，中国人民实现更加美好生活，必须加快把人民军队建设成为

世界一流军队。我们要不忘初心、继续前进，坚定不移走中国特色强军之路，把强军事业

不断推向前进，努力实现党在新形势下的强军目标。习近平就新形势下推进强军事业提出 6

点要求。一是必须毫不动摇坚持党对军队的绝对领导，确保人民军队永远跟党走，强化政治

意识、大局意识、核心意识、看齐意识，坚决维护党中央权威，坚决听从党中央和中央军委

指挥。二是必须坚持和发展党的军事指导理论，不断开拓马克思主义军事理论和当代中国军

事实践发展新境界，全军要坚持用党在新时期的强军思想武装官兵，让马克思主义军事理论

在强军伟大实践中放射出更加灿烂的真理光芒。三是必须始终聚焦备战打仗，锻造召之即来、

来之能战、战之必胜的精兵劲旅，确保在党和人民需要的时候拉得出、上得去、打得赢，坚

决维护中国共产党领导和我国社会主义制度，坚决维护国家主权、安全、发展利益，坚决维

护地区和世界和平。四是必须坚持政治建军、改革强军、科技兴军、依法治军，全面提高国

防和军队现代化水平，发挥政治工作生命线作用，深入解决制约国防和军队建设的体制性障

碍、结构性矛盾、政策性问题，不断提高科技创新对人民军队建设和战斗力发展的贡献率，

加快构建中国特色军事法治体系。五是必须深入推进军民融合发展，构建军民一体化的国家

战略体系和能力，加快形成全要素、多领域、高效益的军民融合深度发展格局。六是必须坚

持全心全意为人民服务的根本宗旨，始终做人民信赖、人民拥护、人民热爱的子弟兵，牢记

为人民扛枪、为人民打仗的神圣职责，发扬密切联系群众的优良传统，永远做人民利益的捍

卫者。全党全军全国各族人民要大力弘扬军爱民、民拥军的光荣传统，不断发展坚如磐石的

军政军民关系。

【  温 馨 提 示】 周年 纪 念 事 件 是 史 纲 当中 最爱 结 合 考 查 的 知 识 点。 大家 需 要 将

1927 年史纲当中的相关知识点掌握，作为分析题记忆的。



2、春华秋实七十载，守望相助谱新篇。 8 月 8 日下午，内蒙古自治区成立 70 周年庆祝

大会在内蒙古少数民族群众文化体育运动中心隆重举行。中共中央、全国人大常委会、国

务院、全国政协、中央军委发来贺电。中共中央政治局常委、全国政协主席、中央代表团团

长俞正声出席庆祝大会并讲话。



3 、8 月 9 日电，日前，中国科学院在京召开新闻发布会，宣布“墨子号”量子科学实

验卫星提前并圆满实现全部三大既定科学目标，为我国在未来继续引领世界量子通信技术

发展和空间尺度量子物理基本问题检验前沿研究奠定了坚实的科学与技术基础。




4 、我国深入推进“放管服”改革，逐步厘清政府和市场的边界，着力改善营商环

境，给企业带来看得见、摸得着的红利。世界银行发布的《 2017 年全球营商环境报告》显

示，中国营商便利度近 3 年来在全球跃升了 18 位，平均每年向前跨升 6 位。瑞士洛桑国际

管理学院发布的《 2017 年度世界竞争力报告》也表明，中国在经济表现和政府效率、营商

效率方面，得分均有明显提升。



5 、近日，农业部、国家发改委、财政部提出大力发展多元化、多层次、多类型的农业

生产性服务，这标志着我国“三多型”农业服务业正在形成。



6 、习近平近日对河北塞罕坝林场建设者感人事迹作出重要指示指出，55 年来，河北塞

罕坝林场的建设者们听从党的召唤，在“黄沙遮天日，飞鸟无栖树”的荒漠沙地上艰苦奋

斗、甘于奉献，创造了荒原变林海的人间奇迹，用实际行动诠释了绿水青山就是金山银山

的理念，铸就了牢记使命、艰苦创业、绿色发展的塞罕坝精神。他们的事迹感人至深，是

推进生态文明建设的一个生动范例。习近平强调，全党全社会要坚持绿色发展理念，弘扬塞

罕坝精神，持之以恒推进生态文明建设，一代接着一代干，驰而不息，久久为功，努力形成

人与自然和谐发展新格局，把我们伟大的祖国建设得更加美丽，为子孙后代留下天更蓝、山

更绿、水更清的优美环境。塞罕坝位于河北省北部，曾经是茫茫荒原。半个多世纪以来，三

代塞罕坝林场人以坚韧不拔的斗志和永不言败的担当，坚持植树造林，建设了百万亩人工林

海。如今，塞罕坝每年为京津地区输送净水 1.37 亿立方米、释放氧气 55 万吨，成为守卫京

津的重要生态屏障。



二、国际部分：



1 、2002 年，中国和东盟国家达成《南海各方行为宣言》，推动了地区局势朝着和平与

稳定的方向发展。中国与东盟国家在 2017 年 5 月审议通过了“准则”框架，8 月 2 日至 8

日的东盟外长会是对达成“准则”框架的再认可和再确认。



2 、据外交部消息，8 月 28 日下午，在中印边界锡金段越界的印度边防人员及装备已经

全部撤回边界印方一侧。印军越界事件已得到解决。华春莹表示，28 日下午 2 时 30 分许，

印方将越界人员和设备全部撤回边界印方一侧，中方现场人员对此进行了确认。中方将继续

按照历史界约规定行使主权权利，维护领土主权。华春莹说，中国政府重视发展同印度的睦

邻友好关系。希望印方切实遵守历史界约和国际法基本原则，与中方一道，在互相尊重领土

主权的基础上，维护边境地区和平安宁，促进两国关系健康发展。



2017 年 9 月国内外时政热点汇总



一、国内部分：









1.9 月 1 日，十二届全国人大常委会第二十九次会议闭幕。会议经表决，通过了核

安全法、新修订的中小企业促进法、国歌法、关于修改法官法等八部法律的决定。国歌法

以国家立法的形式，落实了宪法规定的国家标志制度，明确了应当和不得奏唱国歌的场合、

奏唱国歌时的礼仪；为保证国歌的奏唱效果，规定国家要组织审定国歌标准演奏曲谱、录制

官方录音版本；明确了对侮辱国歌行为的处罚。



2. 国家主席习近平 9 月 3 日在厦门国际会展中心出席金砖国家工商论坛开幕式，并发表

题为《共同开创金砖合作第二个“金色十年”》的主旨演讲，强调金砖国家要共同开创金

砖合作第二个“金色十年”，让合作成果惠及五国人民，让世界和平与发展的福祉惠及各国

民众。今后，中国将深入贯彻创新、协调、绿色、开放、共享的发展理念，不断适应、把

握、引领经济发展新常态，推进供给侧结构性改革，加快构建开放型经济新体制，以创新

引领经济发展，实现可持续发展。“一箭易断，十箭难折”，在金砖国家工商论坛开幕式主

旨演讲中，习近平主席引用的这句古语，成为描述金砖国家合作的“金句”。





3. 国家主席习近平 9 月 5 日在厦门国际会议中心主持新兴市场国家与发展中国家对话会

并发表重要讲话，强调各方要加强团结协作，共同构建开放型世界经济，共同落实 2030 年

可持续发展议程，共同把握世界经济结构调整的历史机遇，共同建设广泛的发展伙伴关系，

携手开辟公平、开放、全面、创新的发展之路，为世界经济增长作出更大贡献。



4..全国易地扶贫搬迁现场会 9 月 16 日至 17 日在四川省达州市召开。中共中央政治局

常委、国务院总理李克强作出重要批示指出：易地扶贫搬迁是推进供给侧结构性改革、补齐

贫困地区发展短板、打赢脱贫攻坚战的重要抓手。要深入贯彻习近平总书记系列重要讲话精

神和治国理政新理念新思想新战略，实现精准搬迁、安全搬迁、阳光搬迁。



5. 由中央宣传部、中央电视台联合制作的六集电视纪录片《辉煌中国》，于 9 月 19 日

至 24 日每晚 8 点在中央电视台综合频道播出。全片以创新、协调、绿色、开放、共享的新

发展理念为脉络，全面反映党的十八大以来，在以习近平同志为核心的党中央带领下，全国

各族人民砥砺奋进、真抓实干，中国经济社会发展取得的历史性成就，充分展示五年来中国

人民更多的获得感、安全感、幸福感、自豪感，真实记录中华民族实现从站起来、富起来到

强起来的历史性飞跃。



6. 由中国国际经济贸易仲裁委员会制定的国际投资争端仲裁规则将于 10 月 1 日起施行。

该规则是我国仲裁机构第一个国际投资争端仲裁规则。



二、国际部分：







1. 第一届亚洲及太平洋环境问题部长级会议 9 月 7 日在泰国首都曼谷开幕。会

议由联合国亚洲及太平洋经济社会委员会(亚太经社会)和联合国环境规划署共同举办，旨在

推动环境治理和自然资源可持续利用，建设资源节约型和无污染的亚太地区。



2017 年 10 月国内外时政热点汇总



一、国内部分：



1、中国科学院国家天文台 10 月 10 日召开新闻发布会宣布，被誉为“中国天眼”的 500

米口径球面射电望远镜（FAST）经过一年紧张调试，已实现指向、跟踪、漂移扫描等多种观

测模式的顺利运行，并确认了多颗新发现的脉冲星。这是我国天文望远镜首次发现脉冲星。

2、10 月 15 日，从国家杂交水稻工程技术研究中心获悉，中国工程院院士袁隆平团队

选育的超级杂交稻品种“湘两优 900(超优千号 )”，15 日在河北省硅谷农科院超级杂交稻

示范基地，通过了该省科技厅组织的测产验收。平均亩产 1149.02 公斤，即每公顷 17.2 吨。

创造了世界水稻单产的最新、最高纪录。

3、10 月 18 日，中国共产党第十九次全国代表大会在北京人民大会堂开幕。习近平代

表第十八届中央委员会向大会作报告。习近平指出，经过长期努力，中国特色社会主义进

入了新时代，这是我国发展新的历史方位。这标志着我国社会主要矛盾已经转化为人民日

益增长的美好生活需要和不平衡不充分的发展之间的矛盾。新时代中国特色社会主义思想

明确坚持和发展中国特色社会主义，总任务是实现社会主义现代化和中华民族伟大复兴，

在全面建成小康社会的基础上，分两步走在本世纪中叶建成富强民主文明和谐美丽的社会

主义现代化强国。

【提示】 19 大作为今年最大的时政热点，大家必须重点掌握。尤其是当中提

出的一些新词。最容易与毛中特紧密结合，无论是选择题还是分析题都是考查的重点。

4、10 月 24 日，中国共产党第十九次全国代表大会在北京人民大会堂胜利闭幕。选举

产生新一届中央委员会和中央纪律检查委员会。通过关于十八届中央委员会报告的决议、

关于中央纪律检查委员会工作报告的决议、关于《中国共产党章程（修正案）》的决议。

习近平主持大会并发表重要讲话，习近平强调，中国共产党人的初心和使命，就是为中国

人民谋幸福，为中华民族谋复兴。这个初心和使命是激励中国共产党人不断前进的根本动

力。全党同志一定要永远与人民同呼吸、共命运、心连心，永远把人民对美好生活的向往

作为奋斗目标，以永不懈怠的精神状态和一往无前的奋斗姿态，继续朝着实现中华民族伟

大复兴的宏伟目标奋勇前进。全党要紧密团结在党中央周围，高举中国特色社会主义伟大

旗帜，解放思想，改革创新，锐意进取，埋头苦干，带领全国各族人民为实现党的十九大

确定的目标任务而奋斗。









5、中共中央总书记、国家主席、中央军委主席习近平 10 月 26 日下午出席了在京

召开的军队领导干部会议并发表重要讲话。习近平强调，中国特色社会主义进入了新时代，

国防和军队建设也进入了新时代。人民军队要不忘初心、牢记使命，认真学习贯彻党的十

九大精神，深入学习贯彻新时代党的强军思想，坚定不移走中国特色强军之路，全面推进

国防和军队现代化，为实现党在新时代的强军目标、到本世纪中叶把人民军队全面建成世

界一流军队、实现中华民族伟大复兴的中国梦而努力奋斗。



二、国际部分：



1、美国国务院  10 月 12 日宣布退出联合国教科文组织，该项决定将于 2018 年 12 月 31

日生效，此后美国将寻求以永久观察国身份参与该组织事务。



2017 年 11 月国内外时政热点汇总



一、国内部分：



1、应国家主席习近平邀请，美利坚合众国总统唐纳德·特朗普将于 11 月 8 日至 10 日

对中国进行国事访问。届时，两国领导人将就中美关系和共同关心的重大国际与地区问题深

入交换意见。



2、国家主席习近平 11 月 10 日应邀出席在越南岘港举行的亚太经合组织工商领导人峰

会并发表题为《抓住世界经济转型机遇  谋求亚太更大发展》的主旨演讲，强调世界正处在

快速变化的历史进程之中，世界经济正在发生更深层次的变化。我们必须顺应大势，勇于担

当，共同开辟亚太发展繁荣的光明未来。



3、当地时间 11 月 12 日，应东盟轮值主席国菲律宾总统杜特尔特邀请，国务院总理李

克强乘专机抵达马尼拉，出席 12 日至 14 日在这里举行的第二十次中国—东盟（10+1）领

导人会议、第二十次东盟与中日韩（10+3）领导人会议和第十二届东亚峰会，并在与会后

对菲律宾进行正式访问。



4、中央宣传部 11 月 17 日向全社会公开发布南仁东的先进事迹，追授他“时代楷模”

荣誉称号。南仁东是我国著名天文学家，是国家重大科技基础设施建设项目——“中国天眼”

500 米口径球面射电望远镜工程（简称 FAST）的发起者和奠基人。



5、11 月 23 日电，国务院办公厅日前印发《关于创建“中国制造 2025”国家级示范区

的通知》，对“中国制造 2025”国家级示范区创建工作进行全面部署。《通知》指出，通

过创建示范区，鼓励和支持地方探索实体经济尤其是制造业转型升级的新路径、新模式，对

于加快实施《中国制造 2025》，推动制造业转型升级，提高实体经济发展质量，加强制造

强国建设具有重要意义。







6、中共中央对外联络部举行媒体吹风会宣布，中国共产党与世界政党高层对话会

将于 11 月 30 日至 12 月 3 日在北京举行。会议主题为“构建人类命运共同体、共同建设美

好世界：政党的责任”。中方热枕迎接来自世界五大洲的政党领导人齐聚北京，共商大业，

共担责任，引领世界各国人民为构建人类命运共同体、共同建设美好世界作出各自的贡献。

我们积极回应国际社会的关切，顺势搭建全球性政党高层对话平台，全面介绍十九大精神，

深入阐释习近平新时代中国特色社会主义思想，系统宣介我们党关于推动构建人类命运共同

体、共同建设美好世界的主张。高层对话会的目的和意义还在于：一是希望与世界各国政党

共商共议、平等交流，为应对人类社会面临的发展难题和共同挑战，携手构建人类命运共

同体凝聚更多的动力和智慧；二是希望与各国政党相互借鉴治党理政经验，共同提高执政

或参政能力。我们党是开放包容的，既向世界介绍我们的经验作法，也向世界学习；三是

为各国各类政党相互沟通，深入交流提供契机，推动各国各类政党在涉及人类前途命运等

重大战略问题上形成更多的共识。




]]></description><link>https://blog.gaoredu.com/article/6fd74440-f45a-4881-87b4-f9b5c49faab8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6fd74440-f45a-4881-87b4-f9b5c49faab8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Dec 2017 18:02:28 GMT</pubDate></item><item><title><![CDATA[【java进阶】ArrayList和HashSet的比较及Hashcode代码分析]]></title><description><![CDATA[HashCode的作用：1、hashCode的存在主要是用于查找的快捷性，如Hashtable，HashMap等，hashCode是用来在散列存储结构中确定对象的存储地址的；2、如果两个对象相同，就是适用于equals(Java.lang.Object) 方法，那么这两个对象的hashCode一定要相同；3、如果对象的equals方法被重写，那么对象的hashCode也尽量重写，并且产生hashCode使用的对象，一定要和equals方法中使用的一致，否则就会违反上面提到的第2点；4、两个对象的hashCode相同，并不一定表示两个对象就相同，也就是不一定适用于equals(java.lang.Object) 方法，只能够说明这两个对象在散列存储结构中，如Hashtable，他们“存放在同一个篮子里”。
要点归纳：1.hashcode是用来查找的，如果你学过数据结构就应该知道，在查找和排序这一章有例如内存中有这样的位置0  1  2  3  4  5  6  7而我有个类，这个类有个字段叫ID,我要把这个类存放在以上8个位置之一，如果不用hashcode而任意存放，那么当查找时就需要到这八个位置里挨个去找，或者用二分法一类的算法。但如果用hashcode那就会使效率提高很多。我们这个类中有个字段叫ID,那么我们就定义我们的hashcode为ID％8，然后把我们的类存放在取得得余数那个位置。比如我们的ID为9，9除8的余数为1，那么我们就把该类存在1这个位置，如果ID是13，求得的余数是5，那么我们就把该类放在5这个位置。这样，以后在查找该类时就可以通过ID除 8求余数直接找到存放的位置了。
2.但是如果两个类有相同的hashcode怎么办那（我们假设上面的类的ID不是唯一的），例如9除以8和17除以8的余数都是1，那么这是不是合法的，回答是：可以这样。那么如何判断呢？在这个时候就需要定义 equals了。也就是说，我们先通过 hashcode来判断两个类是否存放某个桶里，但这个桶里可能有很多类，那么我们就需要再通过 equals 来在这个桶里找到我们要的类。 那么。重写了equals()，为什么还要重写hashCode()呢？想想，你要在一个桶里找东西，你必须先要找到这个桶啊，你不通过重写hashcode()来找到桶，光重写equals()有什么用啊  ！
在这些规范下才能得到如下推论：规范1若重写了某个类的equals方法，请一定重写hashCode方法，要能保证通过equals方法判断为true的两个对象，其hashCode方法的返回值相等，换句话说，就是要保证”两个对象相等，其hashCode一定相同”始终成立;规范2若equals方法返回false，即两个对象不相等，并不要求这两个对象的hashCode得到不同的数；两个对象相等，其HashCode一定相同;两个对象不相等，其HashCode有可能相同;HashCode相同的两个对象，不一定相等;HashCode不相同的两个对象，一定不相等;
判断两个对象是否相等的规则是：1)首先判断两个对象的hashCode是否相等如果不相等，认为两个对象也不相等，完毕如果相等，转入2）2)判断两个对象用equals运算是否相等如果不相等，认为两个对象也不相等如果相等，认为两个对象相等（equals()是判断两个对象是否相等的关键）










总结1.ArrayList是数组存储的方式2.HashSet存储会先进行HashCode值得比较(hashcode和equals方法)，若相同就不会再存储3.对象用完之后没有回收就是内存泄漏。一个对象一旦hashCode生成之后，再对属性值修改后
其Hashcode值就会发生改变，再通过hashSet删除就删除不掉了
]]></description><link>https://blog.gaoredu.com/article/58cba36b-cb36-49b6-9896-810a45bdb3ad</link><guid isPermaLink="true">https://blog.gaoredu.com/article/58cba36b-cb36-49b6-9896-810a45bdb3ad</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 18 Dec 2017 04:01:57 GMT</pubDate></item><item><title><![CDATA[Webstorm2017软件安装包，离线下载和安装版【附激活码】]]></title><description><![CDATA[Webstorm2017软件功能介绍如下：
Webstorm软件应该说是当前WEB开发比较实用的一款开发工具了，目前功能主要包括智能的代码补全、代码格式化、html提示、代码重构、代码调试、代码结构浏览、代码折叠、包裹或者去掉外围代码等，此外用户还可以根据自己的爱好设置自己喜欢的主题哈配色，主需要下载相应的主题包即可，大大滴提高了程序员的开发效率，小编在这里也搜集到了webstorm软件的离线安装包，供大家下载。
203
Download nitroflare下载：
http://nitroflare.com/view/962C4660BC1AA41/WebStorm.2017.3.1.rar


Download 城通网盘下载：
https://u7940988.ctfile.com/fs/7940988-231307493


百度云软件下载地址：

链接: https://pan.baidu.com/s/1sldYrNn 密码: ghjv

激活码福利：【Jetbrains破解】永久激活Jetbrains系列产品IDEA、webstorm、phpstorm、pycharm等...https://www.52tech.tech/forum.php?mod=viewthread&tid=769&fromuid=1
(出处: 我爱科技论坛)



]]></description><link>https://blog.gaoredu.com/article/04e417cf-8d77-4997-a628-d0ab752e6db6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/04e417cf-8d77-4997-a628-d0ab752e6db6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 17 Dec 2017 18:05:27 GMT</pubDate></item><item><title><![CDATA[2020最新KaliLinux大学霸系列教程电子档（视频+教程）全网首发]]></title><description><![CDATA[对于爱好在Linux系统下进行无线网络渗透的同学来说，KaliLinux是一个最适合不过的Web渗透系统了，可以实现局域网，密码爆破，Wifi破解等操作，特提供大学霸系列教程给大家，供大家下载！
202


链接：链接：http://pan.baidu.com/s/1jIwr2GA 密码：bdta





可以再看下这几个视频教程哈：
【kaliLinux渗透实战】会话劫持-一键劫持登录别人的百度贴吧的实战教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=660&fromuid=1
(出处: 我爱科技论坛)





【KaliLinux渗透实战】使用黑客技术获取内网妹子的QQ相册照片
https://www.52tech.tech/forum.php?mod=viewthread&tid=647&fromuid=1
(出处: 我爱科技论坛)





【KaliLinux渗透实战】使用ARPSpoof命令实现局域网断网攻击
https://www.52tech.tech/forum.php?mod=viewthread&tid=643&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/19f932da-0a56-4d5c-a297-e2f10bf88b5f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/19f932da-0a56-4d5c-a297-e2f10bf88b5f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Dec 2017 21:24:20 GMT</pubDate></item><item><title><![CDATA[Vmvare12最新版及系列免费激活密匙大全(软件激活必备)]]></title><description><![CDATA[Vmvare是当前市面上比较好用的一款虚拟机了，乐意用来安装Windows，Linux，Unix等操作系统，让你不用重装系统就能体验到新系统的乐趣，小编在这里也收集到了Vmvare12版本的安装包，此外附有Vmvare12的相关破解激活密匙，供大家下载！


201


VMware 12 Pro 永久许可证激活密钥
5A02H-AU243-TZJ49-GTC7K-3C61N
VF5XA-FNDDJ-085GZ-4NXZ9-N20E6
UC5MR-8NE16-H81WY-R7QGV-QG2D8
ZG1WH-ATY96-H80QP-X7PEX-Y30V4
AA3E0-0VDE1-0893Z-KGZ59-QGAVF

下载链接：https://pan.baidu.com/s/1eSO5s6e 访问码gbfb

]]></description><link>https://blog.gaoredu.com/article/e2a41f55-0531-46a5-a4c9-eecb2298e247</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e2a41f55-0531-46a5-a4c9-eecb2298e247</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Dec 2017 21:14:03 GMT</pubDate></item><item><title><![CDATA[深入Java虚拟机第二版电子档]]></title><description><![CDATA[书名：《深入理解Java虚拟机》全书共分以下几个模块，围绕了java虚拟机的内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析，深刻揭示了JVM的工作原理。

200

课程目录如下：
前言
第1章  Java体系结构介绍
  1．1  为什么使用Java
  1．2  网络带来的挑战和机遇
  1．3  体系结构
  1．3．1  Java虚拟机
  1．3．2  类装载器的体系结构
  1．3．3  Java class文件
  1．3．4  Java API
  1．3．5  Java程序设计语言
  1．4  Java体系结构的代价
  1．5  结论
  1．6  资源
页
第2章  平台无关
  2．1  为什么要平台无关
  2．2  Java的体系结构对平台无关的支持
  2．2．1  Java平台
  2．2．2  Java语言
  2．3．3  Java class文件
  2．2．4  可伸缩性
  2．3  影响平台无关性的因素
  2．3．1  Java平台的部署
  2．3．2  Java平台的版本
  2．3．3  本地方法
  2．3．4  非标准运行时库
  2．3．5  对虚拟机的依赖
  2．3．6  对用户界面的依赖
  2．3．7  Java平台实现中的bug
  2．3．8  测试
  2．4  平台无关的七个步骤
  2．5  平台无关性的策略
  2．6  平台无关性和网络移动对象
  2．7  资源页
第3章  安全
  3．1  为什么需要安全性
  3．2  基本沙箱
  3．3  类装载器体系结构
  3．4  class文件检验器
    3．4．1  第一趟：class文件的结构检查
    3．4．2  第二趟：类型数据的语义检查
    3．4．3  第三趟：字节码验证
    3．4．4  第四趟：符号引用的验证
    3．4．5  二进制兼容
  3．5  Java虚拟机中内置的安全特性
  3．6  安全管理器和Java API
  3．7  代码签名和认证
  3．8  一个代码签名示例
  3．9  策略
  3．10  保护域
  3．11  访问控制器
    3．11．1  implies()方法
    3．11．2  栈检查示例
    3．11．3  一个回答“是”的栈检查
    3．11．4  一个回答“不”的栈检查
    3．11．5  doPrivileged()方法
    3．11．6  doPrivileged()的一个无效使用
  3．12  Java安全模型的不足和今后的发展方向
  3．13  和体系结构无关的安全性
  3．14  资源页
第4章  网络移动性
  4．1  为什么需要网络移动性
  4．2  一种新的软件模式
  4．3  Java体系结构对网络移动性的支持
  4．4  applet：网络移动性代码的示例
  4．5  Jini服务对象：网络移动对象的示例
    4．5．1  Jini是什么
    4．5．2  Jini如何工作
    4．5．3  服务对象的优点
  4．6  网络移动性：Java设计的中心
  4．7  资源页
第5章  Java虚拟机
  5．1  Java虚拟机是什么
  5．2  Java虚拟机的生命周期
  5．3  Java虚拟机的体系结构
    5．3．1  数据类型
    5．3．2  字长的考量
    5．3．3  类装载器子系统
    5．3．4  方法区
    5．3．5  堆
    5．3．6  程序计数器
    5．3．7  Java栈
    5．3．8  栈帧
    5．3．9  本地方法栈
    5．3．10  执行引擎
    5．3．11  本地方法接口
  5．4  真实机器
  5．5  一个模拟：“Eternal Math”
  5．6  随书光盘
  5．7  资源页
第6章  Java class文件
  6．1  Java class文件是什么
  6．2  class文件的内容
  6．3  特殊字符串
    6．3．1  全限定名
    6．3．2  简单名称
    6．3．3  描述符
  6．4  常量池
  6．4．1  CONSTANT_Utf8_info表
  6．4．2  CONSTANT_Integer_info表
  6．4．3  CONSTANT_Float_info表
  6．4．4  CONSTANT_Long_info表
  6．4．5  CONSTANT_Double_info表
  6．4．6  CONSTANT_Class_info表
  6．4．7  CONSTANT_String_info表
  6．4．8  CONSTANT_Fieldref_info表
  6．4．9  CONSTANT_Methodref_info表
  6．4．10  CONSTANT_InterfaceMethodref_info表
  6．4．11  CONSTANT_NameAndType_info表
  6．5  字段
  6．6  方法
  6．7  属性
    6．7．1  属性格式
    6．7．2  Code属性
    6．7．3  ConstantValue属性
    6．7．4  Deprecated属性
    6．7．5  Exceptions属性
    6．7．6  InnerClasses属性
    6．7．7  LineNumberTable属性
    6．7．8  LocalVariableTable属性
    6．7．9  SourceFile属性
    6．7．10  Synthetic属性
  6．8  一个模拟：“Getting Loaded”
  6．9  随书光盘
  6．10  资源页
第7章  类型的生命周期
  7．1  类型装载、连接与初始化
    7．1．1  装载
    7．1．2  验证
    7．1．3  准备
    7．1．4  解析
    7．1．5  初始化
  7．2  对象的生命周期
    7．2．1  类实例化
    7．2．2  垃圾收集和对象的终结
  7．3  卸载类型
  7．4  随书光盘
  7．5  资源页
第8章  连接模型
  8．1  动态连接和解析
    8．1．1  解析和动态扩展
    8．1．2  类装载器与双亲委派模型
    8．1．3  常量池解析
    8．1．4  解析CONSTANT_Class_info入口
    8．1．5  解析CONSTANT_Fieldref_info入口
    S．1．6  解析CONSTANT_Methodref_info入口
    8．1．7  解析CONSTANT_Interface-Methodref_info入口
    8．1．8  解析CONSTANT_String_info入口  
    8．1．9  解析其他类型的入口
    8．1．10  装载约束
    8．1．11  编译时常量解析
    8．1．12  直接引用
    8．1．13  _quick指令
    8．1．14  示例：Salutation程序的连接
    8．1．15  示例：Greet程序的动态扩展
    8．1．16  使用1．1版本的用户自定义类装载器
    8．1．17  使用1．2版本的用户自定义类装载器
    8．1．18  示例：使用forName()的动态扩展
    8．1．19  示例：卸载无法触及的greeter类
    8．1．20  示例：类型安全性与装载约束
  8．2  随书光盘
  8．3  资源页
第9章  垃圾收集
  9．1  为什么要使用垃圾收集
  9．2  垃圾收集算法
  9．3  引用计数收集器
  9．4  跟踪收集器
  9．5  压缩收集器
  9．6  拷贝收集器
  9．7  按代收集的收集器
  9．8  自适应收集器
  9．9  火车算法
  9．9．1  车厢、火车和火车站
  9．9．2  车厢收集
  9．9．3  记忆集合和流行对象
  9．10  终结
  9．11  对象可触及性的生命周期
  9．11．1  引用对象
  9．11．2  可触及性状态的变化
  9．11．3  缓存、规范映射和临终清理
  9．12  一个模拟：“Heap of Fish”
  9．12．1  分配鱼
  9．12．2  设置引用
  9．12．3  垃圾收集
  9．12．4  压缩堆
  9．13  随书光盘
  9．14  资源页
第10章  栈和局部变量操作
  10．1  常量入栈操作
  10．2  通用栈操作
  10．3  把局部变量压入栈
  10．4  弹出栈顶部元素，将其赋给局部变量
  10．5  wide指令
  10．6  一个模拟：“Fibonacci Forever”
  10．7  随书光盘
  10．8  资源页
第11章  类型转换
  11．1  转换操作码
  11．2  一个模拟：“Conversion Diversion”
  11．3  随书光盘
  11．4  资源页
第12章  整数运算
  12．1  二进制补码运算    
  12．2  Inner Int：揭示Java int类型内部性质的applet
  12．3  运算操作码
  12．4  一个模拟：“Prime Time”
  12．5  随书光盘
  12．6  资源页
第13章  逻辑运算
  13．1  逻辑操作码
  13．2  一个模拟：“Logical Results”
  13．3  随书光盘
  13．4  资源页
第14章  浮点运算
  14．1  浮点数
  14．2  Inner Float：揭示Java float类型内部性质的applet
  14．3  浮点模式
  14．3．1  浮点值集合
  14．3．2  浮点值集的转换
  14．3．3  相关规则的本质
  14．4  浮点操作码
  14．5  一个模拟：“Circle of Squares”
  14．6  随书光盘
  14．7  资源页
第15章  对象和数组
  15．1  关于对象和数组的回顾
  15．2  针对对象的操作码
  15．3  针对数组的操作码
  15．4  一个模拟：“Three—Dimensional Array”
  15．5  随书光盘
  15．6  资源页
第16章  控制流
  16．1  条件分支
  16．2  五条件分支
  16．3  使用表的条件分支
  16．4  一个模拟：“Saying Tomato”
  16．5  随书光盘
  16．6  资源页
第17章  异常
  17．1  异常的抛出与捕获
  17．2  异常表
  17．3  一个模拟：“Play Ball!”
  17．4  随书光盘
  17．5  资源页
第18章  finally子句
  18．1  微型子例程
  18．2  不对称的调用和返回
  18．3  一个模拟：“Hop Around”
  18．4  随书光盘
  18．5  资源页
第19章  方法的调用与返回
  19．1  方法调用
    19．1．1  Java方法的调用
    19．1．2  本地方法的调用   
  19．2  方法调用的其他形式
  19．3  指令invokespecial
    19．3．1  指令invokespecial和<init>()方法  
    19．3．2  指令invokespecial和私有方法
    19．3．3  指令invokespecial和super关键字
  19．4  指令invokeinterface
  19．5  指令的调用和速度
  19．6  方法调用的实例
  19．7  从方法中返回
  19．8  随书光盘
  19．9  资源页
第20章  线程同步
  20．1  监视器
20．2  对象锁
20．3  指令集中对同步的支持
  20．3．1  同步语句
  20．3．2  同步方法
20．4  Object类中的协调支持
20．5  随书光盘
20．6  资源页
附录A  按操作码助记符排列的指令集
附录B  按功能排列的操作码助记符
附录C  按操作码字节值排列的操作码助记符
附录D  Java虚拟机的一个模拟：“Slices of Pi”



总的来说，内容讲解还是很完善的，适合不同阶段学习java的人士。
下载链接：链接: https://pan.baidu.com/s/1nv44ZiD 密码: bbpz

]]></description><link>https://blog.gaoredu.com/article/fee03df2-a0c3-41c6-98dd-63d97ccecc81</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fee03df2-a0c3-41c6-98dd-63d97ccecc81</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 16 Dec 2017 20:58:57 GMT</pubDate></item><item><title><![CDATA[java编程思想第四版PDF高清扫描]]></title><description><![CDATA[书名：java编程思想
197

译者序
199

其他介绍
198



简介
第1章 对象导论
第2章 一切都是对象
第3章 操作符
第4章 控制执行流程
第5章 初始化与清理
第6章 访问权限控制
第7章 复用类
第8章 多态
第9章 接口
第10章 内部类
第11章 持有对象
第12章 通过异常处理错误
第13章 字符串
第14章 类型信息
第15章 泛型
第16章 数组
第17章 容器深入研究
第18章 Java I/O系统
第19章 枚举类型
第20章 注解
第21章 并发
第22章 图形化用户界面


链接: https://pan.baidu.com/s/1cM2nVo 密码: ngh8




顺便再来推荐几个java相关的视频教程：

【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1

【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1

【java架构师】2018最新打造从菜鸟到java架构师的高级编程之路实战视频教程
https://www.52tech.tech/forum.ph ... d=796&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/d6a0dbf7-d5d4-47f5-aebb-51dbd4c6f9fa</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d6a0dbf7-d5d4-47f5-aebb-51dbd4c6f9fa</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Dec 2017 21:40:38 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【相爱相亲】]]></title><description><![CDATA[导演: 张艾嘉
编剧: 张艾嘉 / 游晓颖
主演: 张艾嘉 / 田壮壮 / 郎月婷 / 宋宁峰 / 吴彦姝 / 更多...
类型: 剧情 / 爱情 / 家庭
制片国家/地区: 中国大陆 / 台湾
语言: 汉语普通话
上映日期: 2017-11-03(中国大陆) / 2017-10-21(釜山电影节)
片长: 120分钟
又名: Love Education
196
电影介绍：这部电影虽然有着一个温馨平和的片名，但却以一场死亡作为开篇。外婆逝世，妈妈执意把外公的坟迁到城里，与外婆合葬在一起。外公去世多年，埋在老家乡下。他的坟被一个农村老太太守着，老太太（阿祖）是外公的原配，外公生前她在家守着，外公死后她还守着。老太太不同意迁坟。由此引发了一段关于坚守与自由、代沟与理解的故事。


爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr8gqd9o.html#vfrm=19-9-0-1（需开通VIP会员） 
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。


]]></description><link>https://blog.gaoredu.com/article/46c4b5fa-6b8a-4d65-b701-2c563b8523d8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/46c4b5fa-6b8a-4d65-b701-2c563b8523d8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Dec 2017 21:08:02 GMT</pubDate></item><item><title><![CDATA[一个快捷键迅速突破360图书馆防复制功能的黑科技，简单又实用]]></title><description><![CDATA[这种方法很简单哈，下面我就来介绍下，
1.我们随便在360个人图书馆找一篇文章，我就找到了这篇文章《袁立手撕节目组，演员终究是被操控的》，发现这篇文章中某个片段写的还不错，哈哈，我来复制下，当我们选择其中的文字进行复制的时候，如图，360会提示我们注册，不论你是Ctrl+C还是鼠标右键选择复制都不行啊。怎么办呢？
195


2.接下来哈，我们直接按下Ctrl+P按键，没错，就只有这两个按键，接下来就是见证奇迹的时刻到了，会弹出需要打印的内容，这个时候我们就可以选中文字进行复制了。这样，去其他任何地方都可以粘贴了，想复制哪里就复制哪里，哈哈，你根本拦不住我哈。

195

]]></description><link>https://blog.gaoredu.com/article/9aa6ee5d-f2ee-419c-9b0a-18b4625d0863</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9aa6ee5d-f2ee-419c-9b0a-18b4625d0863</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Dec 2017 19:06:11 GMT</pubDate></item><item><title><![CDATA[windows系统下一句话获取曾经连接过的所有wifi的密码]]></title><description><![CDATA[今天无聊间想来看下自己电脑上以前连接过的wifi密码，然后就尝试了下，最后摸索出如下方法，目前在windows7平台下测试成功哈，各位路过的朋友赶紧回去试下吧。

使用方法：一、首先我们在电脑正常桌面下按Win+R键调出运行对话框，然后在弹出来的对话框中输入cmd即可调出dos窗口；或者在开始菜单中输入cmd载搜索到该程序后我们以管理员权限运行CMD （以及 开启无线网卡、最好是笔记本）191二、输入命令：
1

for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do  @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear


大家可以把上面的命令复制下来然后，然后在DOS窗口右键粘贴内容即可。三、这是CMD就列出很多行，包括 你以前连接过的wifi信息、加密方式、包括密码等信息，是不是很有意思呢，赶紧试试哈。192
]]></description><link>https://blog.gaoredu.com/article/32939f5a-3e4e-4506-8c7e-e7a8a65625e7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/32939f5a-3e4e-4506-8c7e-e7a8a65625e7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 14 Dec 2017 07:13:08 GMT</pubDate></item><item><title><![CDATA[有考二级建造工程师的吗？这些资料应该够你用了]]></title><description><![CDATA[2017二级建造师考证必备资源，包括水利、市政、管理、矿业、机电、公路、法规等全套资料统统拿下，此外还包括2017年的考证真题讲解资料。有需要的快来下载！

188
189
190


下载链接1：https://pan.baidu.com/s/1skj17eH
下载链接2：https://pan.baidu.com/s/1sj8Au7N
下载链接3：https://pan.baidu.com/s/1pJxBJ79
下载链接4：https://pan.baidu.com/s/1kTPsA2b
汇总链接：https://pan.baidu.com/s/1pL1ISDP?from=singlemessage
]]></description><link>https://blog.gaoredu.com/article/7c5bd287-6052-449e-9b87-52ca472ea14b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7c5bd287-6052-449e-9b87-52ca472ea14b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 13 Dec 2017 21:16:21 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【伏妖.白鱼镇】]]></title><description><![CDATA[电影名称：【伏妖.白鱼镇】
上映时间：2017年12月9日
类型：古装、玄幻


      《伏妖·白鱼镇》讲述了一个由“抬杠”引发的斗法大战。赖府公子赖晓华与张家公子张不会等人抬杠，赢得了一块“抬杠之王”的牌匾，因张不会善妒不服输的性格，从乡下邀请了能人为其出力，不料被邪道修四海利用。与此同时，马家传人马一衡奉父之命来帮助赖家公子，从而正邪双方交汇，大战打响…………

187


至于对电影的评价嘛，小编在这里暂且不多说了，据说剧情还是很不错的呢！
爱奇艺在线观影地址：http://www.iqiyi.com/v_19rremh1d8.html#vfrm=19-9-0-1（需开通VIP会员） 
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。



]]></description><link>https://blog.gaoredu.com/article/16a993f6-da66-46a2-bd9d-da643032baf7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/16a993f6-da66-46a2-bd9d-da643032baf7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 13 Dec 2017 21:03:54 GMT</pubDate></item><item><title><![CDATA[2017六级临门一脚之道长六级考前作文和翻译必备20篇]]></title><description><![CDATA[各位考研党们，再有十天左右的时间你们就会走进考场了，但是还有三天的时间2017年最后一次六级考试就开始了，想不想在考研成功的同时同时通过六级考试呢，我爱科技论坛也精心从网上收集到了道长六级考前作文和翻译必备20篇，内含考前必须熟悉的200个写作词汇和翻译词汇便携版，供大家下载，祝大家考研成功六级顺利通过！

184

185
186

下载链接: https://pan.baidu.com/s/1jIKPXaA 密码: cdnr（精简版）
下载链接：https://pan.baidu.com/s/1geZ9d6N 密码：raxk（压缩版）
]]></description><link>https://blog.gaoredu.com/article/e838ffe6-ce0f-4328-8c7c-d4600e788d21</link><guid isPermaLink="true">https://blog.gaoredu.com/article/e838ffe6-ce0f-4328-8c7c-d4600e788d21</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 13 Dec 2017 06:44:40 GMT</pubDate></item><item><title><![CDATA[Ajax实战实例详解PDF扫描完整版]]></title><description><![CDATA[《Ajax实战实例详解》内容涉及到如何实现富客户端用户界面，包括拖拽、实践性策略、有效导航、事件处理、表单项目验证、状态管理、Ajax 库的选择、访问第三方的开放网络服务接口，等等。《Ajax实战实例详解》以一个妙趣横生且极其实用的mashup 实例结尾，适合不同阶段在WEB前端到后台进阶阶段的每一个人。
183

PDF电子扫描版下载链接：https://pan.baidu.com/s/1kVR9zEJ 密码: 4ehf


]]></description><link>https://blog.gaoredu.com/article/de082162-b7ea-44b9-9995-ba3840df445b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/de082162-b7ea-44b9-9995-ba3840df445b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 12 Dec 2017 21:16:38 GMT</pubDate></item><item><title><![CDATA[JavaScript网页特效应用与开发手册PDF扫描完整版]]></title><description><![CDATA[JavaScript网页特效全书主要内容涉及如下：
182
181

1JavaScript的撰写基础
2基本概念和常用的函数
3物件概念和可用函数
4事件的概念
5常见问题集


Pdf下载地址： https://pan.baidu.com/s/1dF4fe6X 密码: yu99
]]></description><link>https://blog.gaoredu.com/article/d7a747ac-ba05-484d-96b5-b369f9af7b30</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d7a747ac-ba05-484d-96b5-b369f9af7b30</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 12 Dec 2017 21:02:50 GMT</pubDate></item><item><title><![CDATA[俺在某宝上购买的十万余张PS素材，分享给大家哈]]></title><description><![CDATA[素材还是很多滴，也花了不少钱呢，但想想资料分享出来后价值可能会更大，所以就分享给大家哈，拒绝伸手党，喜欢的话请支持我。

178
179
180

 希望大家给点鼓励    免费评价来一波吧      
PS素材链接：https://pan.baidu.com/s/1i5Mn75z 密码：3gw3
]]></description><link>https://blog.gaoredu.com/article/737480ad-6f05-4dff-9468-0ef5ba7ce788</link><guid isPermaLink="true">https://blog.gaoredu.com/article/737480ad-6f05-4dff-9468-0ef5ba7ce788</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 11 Dec 2017 21:08:03 GMT</pubDate></item><item><title><![CDATA[搞设计，这20万张室内装修图应该够你用了]]></title><description><![CDATA[还在为搞平面设计设计半天还没一张合乎大众口味的平面图二捉急吗？不用着急，今天小编给你分享的这20多万张平面设计图，应该是够你用的了。喜欢的话请评论666。

176
177


20万张装修图链接：https://pan.baidu.com/s/1b9uARk 密码：eu6y


]]></description><link>https://blog.gaoredu.com/article/c636d8a1-af82-47a2-8358-4e1ca61d2eed</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c636d8a1-af82-47a2-8358-4e1ca61d2eed</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 11 Dec 2017 20:59:22 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【缝纫机乐队】]]></title><description><![CDATA[电影名称：缝纫机乐队
导演: 大鹏
编剧: 大鹏 / 苏彪
主演: 大鹏 / 乔杉 / 古力娜扎 / 李鸿其 / 韩童生 / 更多...
类型: 喜剧 / 音乐
制片国家/地区: 中国大陆
语言: 汉语普通话
上映日期: 2017-09-29(中国大陆)
片长: 117分钟
又名: City of Rock


175


【剧情简介】
　　《缝纫机乐队》是大鹏的第二部导演作品，延续了小人物逐梦的故事，讲述了一群有趣的摇滚爱好者帮小镇集安重拾音乐梦想的故事。 
　　小镇青年胡亮（乔杉 饰）为守护家乡摇滚公园，高薪请来音乐经纪人程宫（董成鹏 饰）筹办演唱会。最后集合了鼓手-炸药（李鸿其 饰），贝斯手-丁建国（娜扎 饰），吉他手-杨双树（韩童生 饰），键盘手-希希（曲隽希 饰）组建了“缝纫机乐队”，演出筹备之际，当地房地产大亨为尽快拆除公园，表示愿出高价迫使程宫取消演出。面对高额诱惑和音乐梦想，程宫该何去何从？摇滚小镇集安的摇滚公园能否保全，集安人的摇滚梦想又将何去何从呢……




爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr7pc3gs.html#vfrm=19-9-0-1（需开通VIP会员）
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。

]]></description><link>https://blog.gaoredu.com/article/c12f5aa8-7b68-4f15-8611-c7a05eee27cb</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c12f5aa8-7b68-4f15-8611-c7a05eee27cb</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 11 Dec 2017 20:48:59 GMT</pubDate></item><item><title><![CDATA[Office2016全套组件安装包（Word/Excel/PPT/Access整套离线Windows软件下载）+激活码]]></title><description><![CDATA[ 如果不是计算机等级考试的话，建议各位亲们还是换上2016吧，毕竟2016的功能强大的不是一点点,对于破解激活的KMS插件也在下方一并提供给大家了，供大家下载。至于WIN10永久激活的功能以前可用，但是过去很久了不知道是否还能用，不能用的话换下可用的密钥就可以了。


正好VM装的WIN10需要激活，刚刚找了几个永久激活的key，不需要用工具 （windows设置 ---> 更新和安全 ---> 激活 ---> 更改产品密钥），激活成功会提示成功，否则失败，成功后可能需要重启：
WIN10专业版密钥：
MMX8H-NB7RG-V2B3H-DGW4X-9HJXG
M6K6J-K9NBC-9T3QT-GBXMX-FRG6T
C8N9B-V9JQ4-87FX2-B44JQ-RJRC6
D9NK9-8CT4J-94KXY-H93TQ-JTYP6 (我用的这个，永久激活)
N6KHP-YYX2W-97RMK-TQHGV-QPFC6
  
右键run.bat 以管理员身份运行，激活过程中需要联网，如果无法激活可以到批处理文件中更换kms服务器
  
173


Microsoft Office 2016 专业增强版下载地址（含32位/64位，激活工具）
链接: https://pan.baidu.com/s/1bpD0NPd 密码: rxna


]]></description><link>https://blog.gaoredu.com/article/8dd38aba-2ce2-42ff-9978-fcd79592ac9a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8dd38aba-2ce2-42ff-9978-fcd79592ac9a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 11 Dec 2017 03:31:02 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【羞羞的铁拳】]]></title><description><![CDATA[电影名称：【羞羞的铁拳】
类型：话剧
导演：宋阳
编剧：张吃鱼、宋阳
主演：马丽 / 艾伦 / 吴江 / 金金
豆瓣评分：6.9分


172


电影简介：自从三年前被拳王吴良打断手臂后，艾迪生就放弃了拳手的自尊，和黑道健哥勾结，打假拳。令他没想到的是，健哥的女儿，竟然是那个专门揭发假拳、专门和他作对的麻辣女记者马羞羞。更让他欲哭无泪的是，因为一次意外的电击，他们灵魂互换了！ 
二人想尽一切办法换回身体，过程笑料百出，结果却是白费。拳皇吴良在此时又放言要在拳王挑战赛上将艾迪生打死。可是现在，艾迪生的身体里可是完全不会打拳的马羞羞！ 
艾迪生如何在这场拳击中获胜？他们最终能换回自己的身体吗？除了拳击和灵魂互换，还有更大的挑战在等着他们......




爱奇艺在线观影地址：http://www.iqiyi.com/w_19rvddgjc1.html（需开通VIP会员）
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。






]]></description><link>https://blog.gaoredu.com/article/c43dfbd8-90f8-4eac-b362-a09f70f89dde</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c43dfbd8-90f8-4eac-b362-a09f70f89dde</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 11 Dec 2017 03:10:33 GMT</pubDate></item><item><title><![CDATA[最新WEB破解教程，送给需要的你]]></title><description><![CDATA[最新WEB破解全套教程，教程内容主要介绍了过滤器和封包的相关内容，主要算是WEB破解的基础教程吧，在这里提供给大家，供大家下载！

169


链接: https://pan.baidu.com/s/1o8RJPRc 密码: g2tf 

]]></description><link>https://blog.gaoredu.com/article/2e4315db-b9ff-4ebb-8823-a0692667fdc4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2e4315db-b9ff-4ebb-8823-a0692667fdc4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 10 Dec 2017 02:52:28 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【天才枪手】]]></title><description><![CDATA[电影名称：【天才枪手】
导演: 纳塔吾·彭皮里亚
编剧: 塔妮达·汉塔维瓦塔娜 / 瓦苏红·皮娅罗姆娜 / 纳塔吾·彭皮里亚
主演: 茱蒂蒙·琼查容苏因 / 查侬·散顶腾古 / 依莎亚·贺苏汪 / 披纳若·苏潘平佑 / 塔内·瓦拉库努娄 / 更多...
类型: 剧情 / 悬疑 / 犯罪
制片国家/地区: 泰国
语言: 泰语 / 英语
上映日期: 2017-10-13(中国大陆) / 2017-05-03(泰国)
片长: 130分钟

又名: 模犯生(台) / 出猫特攻队(港) / 完美作弊 / 高智商的作弊游戏 / 坏天才 / Bad Genius
豆瓣评分：8.2分

170

爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr8gnyzo.html#vfrm=19-9-0-1（需开通VIP会员）
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。

]]></description><link>https://blog.gaoredu.com/article/6a96641d-9d61-4902-af01-49fece9a3c8a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6a96641d-9d61-4902-af01-49fece9a3c8a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 21:31:40 GMT</pubDate></item><item><title><![CDATA[VIP在线影院电影抢先看——【英伦对决】]]></title><description><![CDATA[电影名称：【英伦对决】
导演: 马丁·坎贝尔
编剧: 大卫·马可尼 / 史蒂芬·莱泽
主演: 成龙 / 皮尔斯·布鲁斯南 / 刘涛 / 梁佩诗 / 夏莉·墨菲 / 更多...
类型: 动作 / 惊悚
制片国家/地区: 英国 / 中国大陆
语言: 英语 / 汉语普通话
上映日期: 2017-09-30(中国大陆) / 2017-10-13(美国)
片长: 113分钟
又名: 龙震天下 / 普通人 / 中国人 / 外国佬 / The Chinaman
豆瓣评分：7.2分



166

爱奇艺在线观影地址：http://www.iqiyi.com/v_19rr7pj5bc.html#vfrm=19-9-0-1（需开通VIP会员）
【本站VIP免费在线观影步骤】：1.复制以上链接并进入到我爱科技论坛在线VIP影院：http://www.52tech.tech/portal.php?mod=topic&topicid=1
2.将在线观影地址粘贴到文本框，点击提交视频地址等待数十秒即可在线观看（无需VIP会员）。
      关玉明（成龙 饰）和女儿小凡（梁佩诗 饰）在英国伦敦过着相依为命的日子。关玉明经营着一间小小的餐馆，老老实实的靠着辛勤劳作养活家庭，从未有过想要僭越法律或是道德的念头。然而，上天并不眷顾这个善良的男人，在一场恐怖袭击中，小凡不幸成为了受害者之一。 
　　让关玉明无法接受的除了女儿的死之外，还有英国政府对此次事件的轻视和不作为。政府高官莱姆（皮尔斯·布鲁斯南 Pierce Brosnan 饰）出现在了关玉明的视野之中，他坚信莱姆和恐怖组织以及事件的真相有着不可分割的联系。既然法律和正义无法还关玉明一个公道，关玉明决定用自己的力量来为女儿复仇


网友评价：这是国庆档我最喜欢的电影，配合背景知识一同食用口味更佳。解读一下电影涉及到的历史政治背景。首先，影片中共有3股势力互相制衡。一是多次提到的恐怖组织UDI，实际上就是影射爱尔兰共和军（IRA），改名字可能是因为IRA名字比较敏感。他们支持北爱尔兰独立，或加入南爱尔兰，反对英联邦制。另一股势力，是支持联合王国的新教徒武装力量乌尔斯特民兵（UVF），影片中依旧保留着这个名字，汉尼斯老婆的哥哥就是被UVF杀死的。UVF在片中没有出现一个人，但它的影响力从未消失。这两支武装力量经常针对对方的平民进行宗教袭击，并互相栽赃，制造恐怖袭击以引发世界对于对方的指责。第三股势力，则是英国政府，英政府对于北爱尔兰来说不是统治者，而是受制约的联盟关系，虽然有汉尼斯等政客帮忙统治北爱尔兰，但是“北独”人数一直不少，随时可能公投或者采取激进行动脱离英联邦王国。而这次炸弹袭击让政治局面变得异常紧张。




]]></description><link>https://blog.gaoredu.com/article/a6abb002-1d84-4b0f-be77-35639d77124e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a6abb002-1d84-4b0f-be77-35639d77124e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 21:14:08 GMT</pubDate></item><item><title><![CDATA[VIP视频抢先看专栏简介]]></title><description><![CDATA[我爱科技论坛VIP视频在线影院开通啦，无会员也可观看VIP高清视频这是本站提供的一个特色模块，本模块将不定期更新VIP视频，并将长期提供爱奇艺/腾讯/优酷等网站VIP视频在线播放的专线接口，大家不用购买VIP会员，就可以直接在本站免费观看海量免费在线视频资源。
174

我爱科技论坛VIP影院在线观影地址：http://www.52tech.tech/portal.php?mod=topic&topicid=1

视频观看使用方法介绍：http://www.52tech.tech/forum.php?mod=viewthread&tid=160
]]></description><link>https://blog.gaoredu.com/article/ca15b5a1-e32a-44a2-b01e-ba8c8a741ce8</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ca15b5a1-e32a-44a2-b01e-ba8c8a741ce8</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 21:06:22 GMT</pubDate></item><item><title><![CDATA[腾讯视频VIP手机APK软件]]></title><description><![CDATA[腾讯视频VIP手机安装版APK使用说明：


1.首次运行软件如果无法正常全屏播放，请退出软件后再次进入。


2.如果还是不能全屏那就下载个QQ浏览器设置成默认浏览器后退出,再次进入软件。


165


软件下载地址：链接：https://pan.baidu.com/s/1i4Biajz 密码：jm80

]]></description><link>https://blog.gaoredu.com/article/85f6cc68-02ca-4022-a0c8-50eb9202a40e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/85f6cc68-02ca-4022-a0c8-50eb9202a40e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 20:54:19 GMT</pubDate></item><item><title><![CDATA[黑客风云VIP破解教程]]></title><description><![CDATA[主要是收集的关于黑客风云系列的全套VIP破解教程哈，视频质量还不错，拒绝伸手党，感谢支持我爱科技论坛！
164
教程链接链接：http://pan.baidu.com/s/1nvoaDuh 密码：de45
]]></description><link>https://blog.gaoredu.com/article/1d86fbd3-66b9-4171-8da1-795537b9a7e3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1d86fbd3-66b9-4171-8da1-795537b9a7e3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 06:49:45 GMT</pubDate></item><item><title><![CDATA[华为安全认证HCIE-Security视频教程]]></title><description><![CDATA[这是目前最新的HCIE-Security（安全领域）最高级别的认证，实体培训价值上完，考试难度很大，通过后将成为安全方面独当一面的综合技术专家

163

链接:http://pan.baidu.com/s/1c12N3sG 密码:k7f2

大家保存时，别忘了评个分，给个热心值，您此次的评分，和给予的热心值，是我下次的强强动力！
祝大家学习进步！（出自我爱科技论坛）
]]></description><link>https://blog.gaoredu.com/article/66810345-ee58-455d-a087-53d9de3250c9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/66810345-ee58-455d-a087-53d9de3250c9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 06:41:31 GMT</pubDate></item><item><title><![CDATA[LINUX教程系列完整版]]></title><description><![CDATA[大家好，今天给大家分享一个LINUX操作系统的教程，希望能够对想学习或者正在学习LINUX的朋友有所帮助。也希望大家以后有好的东西的时候多多分享，多多支持。
162



链接：http://pan.baidu.com/s/1o7g6dWA 密码：w60e
]]></description><link>https://blog.gaoredu.com/article/6dc317c5-fea0-44a3-a8a8-22970ecef8b6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6dc317c5-fea0-44a3-a8a8-22970ecef8b6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 08 Dec 2017 06:36:36 GMT</pubDate></item><item><title><![CDATA[10款程序员开发利器大幅度提高你的开发效率]]></title><description><![CDATA[工欲善其事必先利其器，拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。零：Notepad++Notepad++ 程序员必备的文本编辑器，软件小巧高效，支持27种编程语言，通吃C,C++ ,Java ,C#, XML, HTML, PHP,JS 等，推荐各位下载使用。Notepad++ 可完美地取代微软的记事本。相信这是每个程序员必备的工具，神器不解释！http://upload-images.jianshu.io/upload_images/1743111-571c28e851410c0e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：Notepad++中文版下载一：XML Marker(xml查看编辑工具)XML Marker是国外的一款非常实用的xml查看编辑工具。软件功能强大，纯文本调试输出和日志文件，你可以有效增加修改你的程序才能产生XML格式他们的作用。你也可以使用XML标记的图形功能，以现场隐藏的趋势，并更快地解决你的错误。更多的功能包括表格排序，语法高亮编辑器和自动缩进，经常编辑XML文件的用户可以下载本软件使用。 
http://upload-images.jianshu.io/upload_images/1743111-7706ab43484feb63.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：XML Marker(xml查看编辑工具) 下载二：EverythingEverything是速度最快的文件搜索软件。其速度之快令人震惊，百G硬盘几十万个文件，可以在几秒钟之内完成索引；文件名搜索瞬间呈现结果。它小巧免费，支持中文，支持正则表达式，可以通过HTTP或FTP分享搜索结果。如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索，如果正在使用或放弃了Locate32，都值得推荐这款体积小巧、免安装、免费、速度极快（比Locate32更快）的文件搜索工具Everything！http://upload-images.jianshu.io/upload_images/1743111-b9f8ba49ee61251e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：Everything下载地址插播经典技术书籍打包下载（全免费，内附地址） 
下载地址： 
http://www.jianshu.com/p/4a9599a230af)三：MarkMan既有爱又给力的长度标注神器！设计师、重构、前端工程师必备。马克鳗是基于AdobeAIR平台的方便高效的标注工具，可方便地为设计稿添加标记，极大节省设计师在设计稿上添加和修改标注的时间。马克鳗使用起来也是非常简单，双击添加测量，单击改变横纵方向等等功能，基本都是一键完成。http://upload-images.jianshu.io/upload_images/1743111-245bb89e3060015e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：MarkMan下载地址四：HiJson使用HiJson工具并通过此工具快速查看JSON字符串、熟悉JSON的数据结构。针对程序员来说，如果了解了连续字符串对应的JSON的数据组成，便可以快速对JSON字符串进行数据处理。http://upload-images.jianshu.io/upload_images/1743111-4d50f1a098079d4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：HiJson64位下载地址五：XMindXmind是一款全球领先的思维导图软件，除了可以轻松绘制基本逻辑图之外，还支持组织如结构图（竖直）、树状图（水平+竖直）、思维导图（辐射）、鱼骨图、二维图（表格）模型。在企业和教育领域都有很广泛的应用。Xmind Pro可以将您的图形显示给他人，或者将图形内容导出到MicrosoftPowerpoint、Word中，令复杂的思想和信息得到更快的交流。在企业中它可以用来进行会议管理、项目管理、信息管理、计划和时间管理、企业决策分析等，在教育领域，它通常被用于教师备课、课程规划、头脑风暴等。http://upload-images.jianshu.io/upload_images/1743111-b9d52c13c00a5524.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：XMind破解版下载六：Beyond CompareBeyond Compare是一套由Scooter Software推出的软件，主要用途是对比两个文件夹或者文件，并将差异以颜色标示。在使用git提交代码时，可以比较两个文件的不同之处，处理冲突，非常实用。http://upload-images.jianshu.io/upload_images/1743111-8d529377f7cb902e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：Beyond Compare插播福利我把互联网领悟的经典技术书和资源整理了一下，涵盖34个领悟，143家公司的面试真题，以及常见互联网技术领悟经典书和面试书和知名互联网公司校招薪资汇总表，领取方式：关注此号，回复：干货下载地址：http://www.jianshu.com/p/4a9599a230af)七：金山词霸这个就不多解释了，类、变量的命名尽量不要使用拼音，遇到拿不准的单词，就使用金山词霸查询一下吧。写在后面：如果大家还有什么还用的辅助开发工具，请在下方留言哈，不断地补充分享~评论朋友们的补充（感谢）八：Sublime Text程序员必备代码编辑器，几乎每位程序员提到Sublime Text都是赞不绝口!它体积小巧，无需安装，绿色便携;它可跨平台支持Windows/Mac/Linux;支持32与64位操作系统，它在支持语法高亮、代码补全、代码片段(Snippet)、代码折叠、行号显示、自定义皮肤、配色方案等所有其它代码编辑器所拥有的功能的同时，又保证了其飞快的速度!还有着自身独特的功能，比如代码地图、多种界面布局以及全屏免打扰模式等，这些优秀特性让Sublime Text 2成了所有程序员眼中的神!http://upload-images.jianshu.io/upload_images/1743111-4ec591a680290c4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：Sublime text下载链接和使用教程九：ListaryListary 是一款非常优秀的 Windows 文件浏览和搜索增强工具，可以为你 Windows 的「文件浏览对话框」、「资源管理器」等增加非常方便的文件快速定位、实时全盘搜索、常用文件夹收藏、打开历史、快速切换到已打开的路径、快捷右键菜单等一系列非常非常实用和高效的功能。http://upload-images.jianshu.io/upload_images/1743111-7d1330b82ac0379e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240下载地址及使用说明：Listary十：strokeplusstrokesplus是一个类似strokeit的鼠标手势软件。无须.net运行环境即可运行，只占用250-500kb内存。strokesplus支持脚本动作，提供了更为强大的可操控性。下载地址及使用说明：http://upload-images.jianshu.io/upload_images/1743111-49a300a084e543f8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240StrokesPlus下载十一：source insightSource Insight 实质上是一个支持多种开发语言（java,c ,c++等等）的编辑器，只不过由于其查找、定位、彩色显示等功能的强大，而被我们当成源代码阅读工具使用 。所以，为了有效的阅读源程序，首先必须选择功能菜单上的“Project”选项的子菜单“New Project” 新建一个项目，项目名称可以自由选定，当然也可以选择删除（Remove）一个项目。当删除一个项目的时候，并不删除原有的源代码文件,只是将该软件生成的那些工程辅助文件删除。设定之后，将会弹出一个对话框如图2，接受默认选择，如果，硬盘空间足够，可以将第一个复选框选上，该选项将会需要与源代码大致同等的空间来建立一个本地数据库以加快查找的速度。http://upload-images.jianshu.io/upload_images/1743111-c963e365d01753b4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240出处：我爱科技论坛


]]></description><link>https://blog.gaoredu.com/article/8982dd8f-6c05-49d0-97c3-d2847116fabc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8982dd8f-6c05-49d0-97c3-d2847116fabc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 07 Dec 2017 03:18:29 GMT</pubDate></item><item><title><![CDATA[2018考研英语最后冲刺班更新完毕]]></title><description><![CDATA[【1】2018英语二直播密训写作-王江涛链接：http://pan.baidu.com/s/1hsirKB6 密码：e17l
【2】2018英语一直播密训写作-王江涛（完结）链接：http://pan.baidu.com/s/1skXkdHj 密码：aqkh
【3】【2018版-五夜十篇】链接：http://pan.baidu.com/s/1gf0AWEJ 密码：hs15
【4】恋恋写作【讲义】链接：http://pan.baidu.com/s/1bOl3XW 密码：5jop
【5】2018唐叔完型翻译新题型密训链接：http://pan.baidu.com/s/1pK768ht 密码：rsbn
【6】K男计划-朱薇老师直播课程（完形+新题型）链接：http://pan.baidu.com/s/1mhK3R9u 密码：pl6b
【7】考研帮冲刺-薛冰-新题型【完】链接：http://pan.baidu.com/s/1boEG98z 密码：v7c9
【8】【18英语】【朱伟】巧夺阅读致命16分链接：http://pan.baidu.com/s/1bpzxKwZ 密码：xwzs
【9】【2017】十年真题词汇一扫光【完整】链接：http://pan.baidu.com/s/1i57taW9 密码：6y1i
【10】【18英语】【张剑】2018考研英语(一)写作高分突破(热点话题50)链接：http://pan.baidu.com/s/1dEWn28p 密码：h0ly
]]></description><link>https://blog.gaoredu.com/article/5090cf9a-b6dc-4b4a-b182-bb89665f2c57</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5090cf9a-b6dc-4b4a-b182-bb89665f2c57</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 05 Dec 2017 21:12:07 GMT</pubDate></item><item><title><![CDATA[2018考研政治最后冲刺班视频完结（蒋中挺/肖秀荣/石磊冲刺班）]]></title><description><![CDATA[【1】石磊冲刺【更新35+32】链接：http://pan.baidu.com/s/1o8kNufo 密码：d2uh
【2】2018年面授时政-蒋中挺链接：http://pan.baidu.com/s/1pKDBtcJ 密码：h66z
【3】2018主观题答题技巧班-任燕翔（完结）链接：http://pan.baidu.com/s/1dELxojR 密码：vreh
【4】2018考研政治1500题重难点解析---石磊链接：http://pan.baidu.com/s/1dENzeI9 密码：zo7k
【5】2018石磊考研政治真题精讲链接：http://pan.baidu.com/s/1mhAZ9tm 密码：rczq
【6】2018考研时事政治分阶段精讲精练链接：http://pan.baidu.com/s/1bpbazs7 密码：f4dq
【7】小草音频链接：http://pan.baidu.com/s/1bOR5vC 密码：j1gc
【8】2018徐涛刷题班-毛中特链接：http://pan.baidu.com/s/1qYBhWgW 密码：26eb
【9】2018腿姐语音陪练链接：http://pan.baidu.com/s/1eSF6hiy 密码：t3ib
【10】【2018年肖秀荣】1000题逐题精讲 史纲+思修链接：http://pan.baidu.com/s/1slBLRo5 密码：uwi5
【11】3、高端刷题班-涛哥链接：http://pan.baidu.com/s/1qYumWC8 密码：ezc9
【12】【2018高端政治】腿姐分析题技巧 重新整理更新链接：http://pan.baidu.com/s/1skNGXn3 密码：l17l
【13】郭继承-马原-冲刺【完】链接：http://pan.baidu.com/s/1kUXxg8n 密码：icgg
【14】2018肖秀荣考研政治命题人知识点提要 链接：http://pan.baidu.com/s/1dFKsueH 密码：82r5
]]></description><link>https://blog.gaoredu.com/article/a4c780b7-51a5-4188-b630-6c9ee5615875</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a4c780b7-51a5-4188-b630-6c9ee5615875</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 05 Dec 2017 21:10:51 GMT</pubDate></item><item><title><![CDATA[2018考研数学资料集合（最后冲刺班视频讲解完结）]]></title><description><![CDATA[【1】汤家凤老师 97-2017年真题分析数学一链接：http://pan.baidu.com/s/1dF3wAuX 密码：gdg2
【2】汤家凤老师 97-2017年真题分析数学二链接：http://pan.baidu.com/s/1c26MzDI 密码：9xv3
【3】汤家凤老师 97-2017年真题分析数学三链接：http://pan.baidu.com/s/1eSCNYPO 密码：kpx0
【4】2018年数学31年真题精讲班【主讲：高昆仑】链接：http://pan.baidu.com/s/1kUJPfWb 密码：3if1
【5】杨超冲刺押题课程链接：http://pan.baidu.com/s/1ge2wu8V 密码：1nm2
【6】31年真题按题型讲解链接：http://pan.baidu.com/s/1qXJFmHI 密码：jtms
【7】【2018张宇专项】180题刷题  张宇  完结链接：http://pan.baidu.com/s/1skNGXlz 密码：wr1j
【8】杨超-冲刺高等数学【完】链接：http://pan.baidu.com/s/1c1WVvTQ 密码：ki8g
]]></description><link>https://blog.gaoredu.com/article/7d5540d3-90d0-40bc-8bed-59ed6ea69791</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7d5540d3-90d0-40bc-8bed-59ed6ea69791</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 05 Dec 2017 21:07:56 GMT</pubDate></item><item><title><![CDATA[千库网图片素材下载器，让你不用抠图下载海量图片]]></title><description><![CDATA[软件只支持下载图片那个什么模板PSD不行undefined

具体操作看图吧

161  

喜欢的来点那啥undefined

百度链接: http://pan.baidu.com/s/1kVP19Vh 密码: a2my

]]></description><link>https://blog.gaoredu.com/article/2b7a067e-0d95-48fe-a2f2-966d2e53cd2f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2b7a067e-0d95-48fe-a2f2-966d2e53cd2f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 05 Dec 2017 20:54:01 GMT</pubDate></item><item><title><![CDATA[QT所有版本下载链接，从QT1.0版本到QT5.10版本全系列]]></title><description><![CDATA[最近有朋友说在网上下载QT的某一个版本，但是找了半天居然没找到，好吧，那我就在这里把QT官方的所有版本都呈现在这里吧，供大家学习交流使用！159 如果直接上Qt官网http://www.qt.io/download/想下载Qt，速度很慢，在这里记录下在Qt官网看到的镜像下载地址：1. 所有Qt版本下载地址：http://download.qt.io/archive/qt/

2. 所有Qt Creator下载地址：http://download.qt.io/archive/qtcreator/

3. 所有Qt VS开发插件下载地址:http://download.qt.io/archive/vsaddin/

4. Qt相关下载大全http://download.qt.io/
]]></description><link>https://blog.gaoredu.com/article/c2cb18d0-7e1d-4c4c-8921-9e7ca97379a7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c2cb18d0-7e1d-4c4c-8921-9e7ca97379a7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 05 Dec 2017 03:03:24 GMT</pubDate></item><item><title><![CDATA[肖秀荣四套卷电子打印版新鲜出炉]]></title><description><![CDATA[近期，考研快到了最后的尾声了，各位考研党们也都好好努力加油，坚持下最后的不到20天时间，坚持就是胜利！
157
158
我爱科技论坛也在此收集到了肖秀荣四套卷电子档，有需要的可以自行下载：
2018肖秀荣试题：链接：http://url.cn/5VqEsK6 密码：YS9Zgx
2018肖秀荣答案：链接：http://url.cn/51sO3mU 密码：FrZxAa
]]></description><link>https://blog.gaoredu.com/article/ddc80a28-503a-47de-ab7b-3dbe3addbcb2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ddc80a28-503a-47de-ab7b-3dbe3addbcb2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 04 Dec 2017 21:12:38 GMT</pubDate></item><item><title><![CDATA[kms小工具一键激活win7/win8/win10和Office所有版本]]></title><description><![CDATA[kms一键激活win7/win8/win10，office所有版本都可激活，安全无毒，自用软件，无需安装。
156
下载下来是个文件夹，打开，找到里面的KMSELDI.exe，右键管理员运行会出现如图所示的界面，然后点一下中间的红色按钮就行。
听到一句英文语音提示program。。。。。。就破解完成了！

链接：https://pan.baidu.com/s/1cLfDaY 密码：6h8q
]]></description><link>https://blog.gaoredu.com/article/0e8ebea0-23f5-431e-9b85-1facbfef1db2</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0e8ebea0-23f5-431e-9b85-1facbfef1db2</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 03 Dec 2017 21:00:06 GMT</pubDate></item><item><title><![CDATA[6G的EXCEL学习资料打包分享]]></title><description><![CDATA[155
ISO格式是个镜像文件，有好多可以打开的程序推荐使用这个 虚拟光驱(Daemon Tools），也可以用winRAR解压（有可能会出现问题）

链接: https://pan.baidu.com/s/1hsdAdbY 
密码: 2rkv

]]></description><link>https://blog.gaoredu.com/article/bc6f4d66-fd40-448b-953f-c9577cc85ca9</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bc6f4d66-fd40-448b-953f-c9577cc85ca9</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 03 Dec 2017 20:53:43 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛VIP视频在线影院开通啦，无会员也可观看VIP高清视频]]></title><description><![CDATA[1.使用教程
比如我想看前段时间电影院热搜的电影，战狼2。我们直接来爱奇艺搜索，
终于搜索到了，于是点击播放，但是没想到只能播放6分钟，必须要开通会员才能看，不用管他
，我们直接把地址栏的播放地址复制下来，http://www.iqiyi.com/v_19rre19on4.html备用。
149
2.然后来到我爱科技论坛的VIP在线影院页面【在线观看地址：http://www.52tech.tech/portal.php?mod=topic&topicid=1】，粘贴你刚才复制的链接到提交地址栏。目前链接最新为：http://vip.52tech.tech
http://www.52tech.tech/video/preview.gif



150
3.提交链接后，弹出如下对话框，然后你需要按下快捷键【ALT+1,2,3,4,5,6】中的任意数字，以选择不同的播放线路。

151
4.比如我现在按下的是ALT+1, 等待下即可。

152

说到这里，想必你已经学会了如何使用本站的免费在线VIP视频在线影院的解析方法了吧，其他的就不多说了，我先来重温下战狼2的经典画面。快来观看你想看的海量免费视频电影吧：点击此处快速进入

154

快捷通道1：点击此处快速进入
快捷通道2：http://vip.52tech.tech








]]></description><link>https://blog.gaoredu.com/article/da394302-b267-4e12-857a-628236a4c8ca</link><guid isPermaLink="true">https://blog.gaoredu.com/article/da394302-b267-4e12-857a-628236a4c8ca</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Dec 2017 22:49:35 GMT</pubDate></item><item><title><![CDATA[百度网盘下载助手-Tampermonkey解决你的快速上网下载]]></title><description><![CDATA[主要功能介绍：

可以实现百度云大文件下载，并且提取到相应的链接

142

1.插件安装地址：http://tampermonkey.net/
141
2.百度网盘下载助手脚本下载地址：
http://www.pc6.com/softview/SoftView_446962.html


此外，如果大家还要安装其他插件，也可以直接在一下网站搜索你想要的插件：
https://greasyfork.org/zh-CN/scripts/
]]></description><link>https://blog.gaoredu.com/article/0fed894f-a95b-4ff7-8e9b-263bacb04f9d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0fed894f-a95b-4ff7-8e9b-263bacb04f9d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Dec 2017 21:25:07 GMT</pubDate></item><item><title><![CDATA[喜欢捣鼓电脑的友友们的福利来了]]></title><description><![CDATA[自己看过一阵子视频还可以感觉，起码能了解个大概大看完了只会换个零件什么的还是不会修电脑，了解一下也好
139
链接：https://pan.baidu.com/s/1i4I9kBr 密码：l51m
拒绝白手党，回复的的都是好人，好人一生平安！

]]></description><link>https://blog.gaoredu.com/article/84aece68-c72f-4d69-9333-ba3ca2d77df7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/84aece68-c72f-4d69-9333-ba3ca2d77df7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Dec 2017 03:04:27 GMT</pubDate></item><item><title><![CDATA[WordPress 4.9.1 正式发布，快来尝尝鲜]]></title><description><![CDATA[今天在后台看到了更新推送WordPress 4.9.1，因为的没有给很大的权限给它，所以我都是手动更新的，让我们一起来看下 WordPress 4.9.1 的具体更新内容吧！WordPress 4.9.1下载地址：https://wordpress.org/download/注意：官方的中文版（cn.wordpress.org）往往会更新慢很多，对于一些重大的bug、漏洞修复我一直使用最快更新的英文版本。
相信对WordPress有一定理解的朋友都清楚，它不仅是一种使用PHP语言开发的博客平台，还可以当做一个内容管理系统（CMS）来使用！而据外媒最新消息显示，WordPress开发团队今天发布了最新的WordPress 4.9.1版本并在其中解决了困扰诸多用户的四大Bug。
今天，WordPress开发团队发布了WordPress 4.9.1版本，是3.7以来所有版本的安全和维护版本，强烈建议尽快升级。WordPress 4.9及其较早版本都存在四大安全漏洞，导致易遭到多矢量攻击，在4.9.1版本中，这四大问题都得到了解决。分别如下：1、为newbloguser密钥使用正确生成的散列代替确定的子字符串。2、为html元素上使用的语言属性添加转义。3、确保RSS和Atom feeds中的附件属性正确转义。4、删除没有unfiltered_html功能的用户上传JavaScript文件的权利。 138此外4.9.1还解决了其他许多bug，比如：1、有关主题模板文件缓存的问题。2、MediaElement JavaScript错误，阻止某些语言的用户能够上传媒体文件。3、无法在基于Windows的服务器上编辑主题和插件文件。

]]></description><link>https://blog.gaoredu.com/article/f8f52add-65c4-4a24-95dd-cb48e2f1b4be</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f8f52add-65c4-4a24-95dd-cb48e2f1b4be</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 01 Dec 2017 02:59:40 GMT</pubDate></item><item><title><![CDATA[淘淘购物商城项目实战教程十四天系列]]></title><description><![CDATA[

第一天：项目介绍，搭建Maven工程

137

视频1链接: https://pan.baidu.com/s/1dFrTkBZ 密码: 5ghs
环境配置链接: https://pan.baidu.com/s/1pL0wnLh 密码: uuyv
教案1链接: https://pan.baidu.com/s/1ctvk5o 密码: 9a2n


]]></description><link>https://blog.gaoredu.com/article/a328fc85-7c0d-4401-af67-0af99b35a78c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a328fc85-7c0d-4401-af67-0af99b35a78c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 30 Nov 2017 20:40:45 GMT</pubDate></item><item><title><![CDATA[爱创课堂web前端系列教程【从入门到精通完整版】]]></title><description><![CDATA[这个就不截图了，资料挺完整的，可以选择相应的模块选择下载

2016 年前端开发 html 基础课程
链接: https://pan.baidu.com/s/1b2qlFC 密码: z83n

2016 年前端开发 Angular.JS 从入门到上手企业开发视频
链接: https://pan.baidu.com/s/1dF2vBzV 密码: 3hbk

2016 年最新前端技术 react 视频入门
链接: http://pan.baidu.com/s/1i46by8t 密码: 48tt

2016 年 CSS 实体班同步教程
链接: https://pan.baidu.com/s/1qXWRbCK 密码: a725

2016 年 JS 视频教程实体班同步教程
链接: https://pan.baidu.com/s/1jHIkxLG 密码: hpyb

]]></description><link>https://blog.gaoredu.com/article/f002fa52-4793-46f1-affc-b92b6e3889d1</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f002fa52-4793-46f1-affc-b92b6e3889d1</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 30 Nov 2017 02:38:03 GMT</pubDate></item><item><title><![CDATA[如果学Java看视频不够过瘾，再配合这些书籍效果可能会更好了]]></title><description><![CDATA[
链接: http://pan.baidu.com/s/1eRLWKIe 密码: 2ryc
135


新增加五本链接: http://pan.baidu.com/s/1hrJQLyG 密码: sjnk
136






]]></description><link>https://blog.gaoredu.com/article/692e3730-d8d7-474d-affc-6d037cb1ce75</link><guid isPermaLink="true">https://blog.gaoredu.com/article/692e3730-d8d7-474d-affc-6d037cb1ce75</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 30 Nov 2017 02:32:46 GMT</pubDate></item><item><title><![CDATA[易语言POST系列教程合集（基础篇+中级篇+高级篇）全套教程拿下你就是大神了]]></title><description><![CDATA[第一课:POST概念和抓包工具
第二课:商都论坛登录实现
第三课:商都论坛注册实现
第四课:POST数据包分析步骤
第五课:易语言官方论坛登录
第六课:JS与动态参数

POST教程中级班
第一课:精易论坛登录实现
第二课:POST与文本处理
第三课:精易论坛回帖实现
第四课:115网盘登录
第五课:多线程注册商都论坛
第六课:多账号cookies处理
第七课:多线程登录并发帖

POST高级班教程1-13课(官方有密以破解)
预备课  WINHTTP协议讲解
第1课  QQ邮箱登录
第2课  获取QQ邮件列表
第3课  发送QQ邮件
第4课  YY注册
第5课  迅雷登录
第6课  5173登录
第7课  DZ论坛QQ登录
第8课  POST上传图片
第9课  复杂表单数据的处理
第10课  多线程POST-1
第11课  多线程POST-2
第12课  简单验证码识别思路剖析
第13课  淘宝API讲解


下载地址：
链接：http://pan.baidu.com/s/1bP2qQi




再分享几个相关的易语言视频教程吧：
【视频教程】2020最新10天从0入门入门易语言系列中文视频教程（无加密）
https://www.52tech.tech/forum.ph ... d=968&fromuid=1
价值万元的易语言辅助、模块开发、管理系统开发及工具开发全套超详细视频教程
https://www.52tech.tech/forum.ph ... d=667&fromuid=1
墨鱼科技易语言游戏辅助编程VIP培训视频教程免费下载

https://www.52tech.tech/forum.ph ... d=666&fromuid=1

全网最全的一套易语言学习教程，想让编程变得简单，就来学易语言！

https://www.52tech.tech/forum.ph ... id=58&fromuid=1
(出处: 我爱科技论坛)
]]></description><link>https://blog.gaoredu.com/article/6a7ad3f8-5c7c-479e-a4e0-d531246f7d7e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/6a7ad3f8-5c7c-479e-a4e0-d531246f7d7e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 29 Nov 2017 05:20:25 GMT</pubDate></item><item><title><![CDATA[嵌入式入门基础：C语言视频教程完整版]]></title><description><![CDATA[了解过嵌入式开发的朋友们都知道，学习C语言是嵌入式开发的基础，也是非常重要的一部分。
今天在这里给大家分享一个C语言视频教程完整版，需要的朋友么都可以下载来看看，希望能帮助到大家！
134
百度云盘下载地址：http://pan.baidu.com/s/1c2emXBa

密码：zblc
]]></description><link>https://blog.gaoredu.com/article/06611de6-764b-4561-b1fb-dfaf1b93ff81</link><guid isPermaLink="true">https://blog.gaoredu.com/article/06611de6-764b-4561-b1fb-dfaf1b93ff81</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 27 Nov 2017 21:07:21 GMT</pubDate></item><item><title><![CDATA[给大家分享一个 我自己平常用的视频编辑软件   还是非常不错的！！]]></title><description><![CDATA[进入软件界面 功能列表
132
133

链接：http://pan.baidu.com/s/1nv3xh7z 密码：u9cb



]]></description><link>https://blog.gaoredu.com/article/3fa4232c-d80d-4cef-8051-c98a2b61db8d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3fa4232c-d80d-4cef-8051-c98a2b61db8d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 27 Nov 2017 20:58:42 GMT</pubDate></item><item><title><![CDATA[WEB大前端---北京全程就业班]]></title><description><![CDATA[130
131

链接:https://pan.baidu.com/s/1c2GNg9U 密码: 2du7
]]></description><link>https://blog.gaoredu.com/article/5eb66b02-5087-46ed-8bcf-fe5cb449742c</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5eb66b02-5087-46ed-8bcf-fe5cb449742c</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 26 Nov 2017 21:09:22 GMT</pubDate></item><item><title><![CDATA[学习AI，这套视频就够了]]></title><description><![CDATA[我全程跟着学，每个图标练一遍。图标至少会做一点了。教程主要是实战分析一些图标是怎样着手做的。现在正自学平面+英语，AI→手绘→PS。我本以为没什么天赋，但选一个好视频一步步慢慢做下来，才发现进入了门槛后灵感变很多了。现在看到一些好看的图标，会自然拆分由什么步骤做出来……虽然我也想做梦想的事业，奈何学历不到位，但世上千万条路，总能到达让自己的生活变更好！2017，共勉。ps:我要自学网上的AI教程，讲师说得比较重复，但有耐心的话，看一遍并实操下来，每个知识点截屏做记录，会学到很多。现在找不到我的截屏笔记在哪了，回头也一并上传。
129
下载链接：http://pan.baidu.com/share/link?shareid=643566861&uk=3342848726

]]></description><link>https://blog.gaoredu.com/article/32fdf7de-702a-47f2-8284-5d37a942cbd5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/32fdf7de-702a-47f2-8284-5d37a942cbd5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 26 Nov 2017 21:05:44 GMT</pubDate></item><item><title><![CDATA[初级+中级+施工图视频教程【bim/revit建模】]]></title><description><![CDATA[建筑建模（bim）软件,revit教程，初级+中级+施工图视频教程，仅供学习，不得用于商业。如有版权侵犯，请及时版主！
127
链接：http://pan.baidu.com/s/1qYa5bHU 密码：4acw
]]></description><link>https://blog.gaoredu.com/article/95bfe83e-5a5b-4c5e-aefc-a379f4db9001</link><guid isPermaLink="true">https://blog.gaoredu.com/article/95bfe83e-5a5b-4c5e-aefc-a379f4db9001</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 Nov 2017 22:25:07 GMT</pubDate></item><item><title><![CDATA[商道SEO网站优化，营销推广就从这里做起吧]]></title><description><![CDATA[126


商道SEO教程链接: http://pan.baidu.com/s/1i4dSjQl 密码: tdfy
]]></description><link>https://blog.gaoredu.com/article/833fbdb4-1c6f-465e-ad1a-84a2a151e3a7</link><guid isPermaLink="true">https://blog.gaoredu.com/article/833fbdb4-1c6f-465e-ad1a-84a2a151e3a7</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 Nov 2017 22:08:59 GMT</pubDate></item><item><title><![CDATA[苹果IOS APP开发系列教程]]></title><description><![CDATA[教程的内容还算完整，基本上涉及到了苹果IOS开发的方方面面，从菜鸟到高手的突破用这套教程就够了：
124
125
]]></description><link>https://blog.gaoredu.com/article/c00bac7c-605d-4494-95dc-be972ce80451</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c00bac7c-605d-4494-95dc-be972ce80451</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 25 Nov 2017 22:02:28 GMT</pubDate></item><item><title><![CDATA[最新和谐版都叫兽免费数据恢复软件，以后数据丢了不用怕]]></title><description><![CDATA[123
下载链接: http://pan.baidu.com/s/1kVwVuuj  密码:gdyu
]]></description><link>https://blog.gaoredu.com/article/7d3b57ff-0abd-40dd-9851-0387bdedf7da</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7d3b57ff-0abd-40dd-9851-0387bdedf7da</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 23 Nov 2017 21:06:46 GMT</pubDate></item><item><title><![CDATA[酷狗音乐安卓版豪华VIP破解版，海量资源免费下，会员权限已获取]]></title><description><![CDATA[119
122
120
121


手机版下载链接: https://pan.baidu.com/s/1sk8OjOp 密码: 28rb


电脑版软件下载地址：https://www.lanzous.com/i3drbyd
]]></description><link>https://blog.gaoredu.com/article/52df1098-b821-42bb-a61b-8e7b4e74fc0d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/52df1098-b821-42bb-a61b-8e7b4e74fc0d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 23 Nov 2017 20:57:51 GMT</pubDate></item><item><title><![CDATA[QQ远程连接太卡顿，使用TeamViewer可以解决你远程的所有问题]]></title><description><![CDATA[118

TeamViewer 是一款能在任何防火墙和 NAT 代理的后台用于远程控制，桌面共享和文件传输的简单且快速的解决方案。为了连接到另一台计算机，只需要在两台计算机上同时运行 TeamViewer 即可，而不需要进行安装。该软件第一次启动在两台计算机上自动生成伙伴ID。只需要输入伙伴 ID 到 TeamViewer，然后就会立即建立起连接。

下载链接：链接: https://pan.baidu.com/s/1pLgcYQv 密码: cdr2


]]></description><link>https://blog.gaoredu.com/article/473ee664-17e2-4a57-9abd-d481f352fced</link><guid isPermaLink="true">https://blog.gaoredu.com/article/473ee664-17e2-4a57-9abd-d481f352fced</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 22 Nov 2017 20:56:31 GMT</pubDate></item><item><title><![CDATA[酷狗无损音乐下载器，有了它，海量高品质音乐免费听]]></title><description><![CDATA[这个小软件非常的简洁，可以搜索，结果只会显示有无损的。有了它，不用开通酷狗的免费会员同样可以听酷狗的高品质音乐，缺点就是目前下载只能单个下载，用的也是迅雷线路下载。
116
117
链接: https://pan.baidu.com/s/1jHNqz34 密码: v5y1




还有貌似我爱科技音乐馆也是可以下载百度、网易、酷狗等好几个站的音乐的，全部是免费的，而且高音质。
大家可以看看：http://music.52tech.tech/


]]></description><link>https://blog.gaoredu.com/article/d0b87689-504b-4685-9a4a-39c34c7a4298</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d0b87689-504b-4685-9a4a-39c34c7a4298</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 22 Nov 2017 20:49:10 GMT</pubDate></item><item><title><![CDATA[菜鸟从JAVA基础走向JAVAWEB项目实战全套教程]]></title><description><![CDATA[课程内容如下：

114
115
下载链接：http://pan.baidu.com/share/link? ... &parentPath=%2F






再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.php?mod=viewthread&tid=20&fromuid=1

【资源共享】分享一套最新价值千元的Javaweb全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.php?mod=viewthread&tid=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.php?mod=viewthread&tid=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.php?mod=viewthread&tid=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=783&fromuid=1



]]></description><link>https://blog.gaoredu.com/article/0a37240d-15fb-492c-a942-f3e67b7940e3</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0a37240d-15fb-492c-a942-f3e67b7940e3</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 22 Nov 2017 20:36:15 GMT</pubDate></item><item><title><![CDATA[黑马28期Android全套视频无加密完整版下载]]></title><description><![CDATA[教程内容如下：

112
113

课程体系：
01、JavaWEB
02、Android基础
03、版本控制SVN&GIT
04、Linux操作系统
05、手机安全卫士
06、C语言入门&JNI与地层调用
07、WebView、HTML5与PhoneGAP框架
08、自定义控件和视图
09、手机彩票
10、UML和电子商城
11、百度地图
12、Linux下Android开发
13、新浪微盘（云存储）
14、插屏广告项目&源码工程及反射工程
15、植物大战僵尸
16、新闻客户端敏捷开发
17、屏幕适配&消息传递
18、短信智能管理器
19、10000知道手机营业厅
20、WebService
21、项目管理与项目实施
22、321手机视频
23、Android就业指导课



下载链接：https://pan.baidu.com/share/link ... 27095#list/path=%2F


再分享几个站内的教程：
价值千元的最新版老罗安卓开发从零到精通实战视频教程（共两季）
https://www.52tech.tech/forum.php?mod=viewthread&tid=21&fromuid=1
(出处: 我爱科技论坛)

【安卓基础】基于Androidstudio的安卓从入门到精通全套视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=767&fromuid=1
(出处: 我爱科技论坛)



10天带你Hode住安卓《智慧北京》项目项目实战视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=637&fromuid=1
(出处: 我爱科技论坛)



传智播客76期安卓视频教程分享
https://www.52tech.tech/forum.php?mod=viewthread&tid=526&fromuid=1
(出处: 我爱科技论坛)




]]></description><link>https://blog.gaoredu.com/article/9da913f7-9fa8-4c5a-81a3-4852cb8a5797</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9da913f7-9fa8-4c5a-81a3-4852cb8a5797</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 22 Nov 2017 20:32:26 GMT</pubDate></item><item><title><![CDATA[孙鑫C++系列视频教程完整版]]></title><description><![CDATA[104
孙鑫C++系列视频教程内容主要包括C++视频20讲完整版，此外老师还主讲了3讲XML课程，欢迎大家下载咨询！
链接: https://pan.baidu.com/s/1dFwCuUP 密码: m9fs
]]></description><link>https://blog.gaoredu.com/article/4933bec6-0eef-470b-b1e0-89a9edcf8197</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4933bec6-0eef-470b-b1e0-89a9edcf8197</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 21 Nov 2017 20:29:34 GMT</pubDate></item><item><title><![CDATA[2017韩顺平老师泰牛培训班的PHP系列教程完整版]]></title><description><![CDATA[103
这套视频非常清晰，而且讲课的质量也很高，是一套不可多得的PHP最新系列教程哦
在线版    链接：http://pan.baidu.com/s/1qYzA5oo 密码：a03l
压缩版    链接: https://pan.baidu.com/s/1o87gg6A 密码：prw5



]]></description><link>https://blog.gaoredu.com/article/8db43200-9b06-408e-aa46-0dc67a395b64</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8db43200-9b06-408e-aa46-0dc67a395b64</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 21 Nov 2017 05:44:41 GMT</pubDate></item><item><title><![CDATA[动力节点最新JAVASE系列教程/带你从菜鸟飞向卓越]]></title><description><![CDATA[101
链接: https://pan.baidu.com/s/1hsCftqO 密码: pt2d



]]></description><link>https://blog.gaoredu.com/article/69688204-d28f-46c7-9128-b5c3340e0c58</link><guid isPermaLink="true">https://blog.gaoredu.com/article/69688204-d28f-46c7-9128-b5c3340e0c58</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 21 Nov 2017 05:19:34 GMT</pubDate></item><item><title><![CDATA[FLASH动画制作系列教程完整版25讲--带你玩转FLASH动画制作]]></title><description><![CDATA[97
链接: https://pan.baidu.com/s/1qYIAD6s 密码: nux8
]]></description><link>https://blog.gaoredu.com/article/921e9e87-e41a-40cd-8b28-f6a3ece79105</link><guid isPermaLink="true">https://blog.gaoredu.com/article/921e9e87-e41a-40cd-8b28-f6a3ece79105</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 20 Nov 2017 20:51:39 GMT</pubDate></item><item><title><![CDATA[Linux上有什么游戏?最新收集全网的Linux游戏大全免费下载]]></title><description><![CDATA[这次分享的这些游戏基本上都是可以直接在Linux系统玩的游戏，当然在Mac下应该也是可以安装的。
1. 首先，从本站分享的这些游戏中选择自己喜欢的一款游戏，文件后缀默认是.sh结尾的。
重力世界链接: https://pan.baidu.com/s/1sl6xmot 密码: m6nd
地球战区链接: https://pan.baidu.com/s/1qXQ1MTe 密码: 2kev
原子粉碎机链接: https://pan.baidu.com/s/1boQmx2J 密码: aq9b
黑暗城堡链接: https://pan.baidu.com/s/1sliaKKt 密码: syam
堡垒链接: https://pan.baidu.com/s/1jHSFXci 密码: ndx3
危险节奏链接: https://pan.baidu.com/s/1c2KuXji 密码: mndy
造桥工程师链接: https://pan.baidu.com/s/1o8Mc1nW 密码: wvb5
2. 然后直接在Linux进入终端，输入下面的命令来执行这个刚刚下载的游戏程序文件。
sh ./游戏名称.sh

3. 执行上面的命令之后就可以安装这个游戏，安装完毕之后就可以了。
这是我试玩的“危险节奏游戏”界面，大家也可以去试试看！
1168



Linux游戏资源总链接: https://pan.baidu.com/s/1qXW73HU 密码: j5vh



]]></description><link>https://blog.gaoredu.com/article/bd5f9246-b6e2-4745-a893-098e3d5f96ae</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bd5f9246-b6e2-4745-a893-098e3d5f96ae</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 20 Nov 2017 20:45:12 GMT</pubDate></item><item><title><![CDATA[会声会影大宝藏之320个高清背景+360个遮罩效果+百余个视频素材]]></title><description><![CDATA[95
高清模板链接：链接: https://pan.baidu.com/s/1eRR2ney 密码: 5gkp
360个遮罩链接：链接: https://pan.baidu.com/s/1nvpAwnn 密码: 2tqq
百余个视频素材：链接: https://pan.baidu.com/s/1gfriEIn 密码: fiyv

会声会影大宝藏之320个高清背景+360个遮罩效果+百余个视频素材
https://www.52tech.tech/forum.php?mod=viewthread&tid=68&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/bad4c49a-2fbb-4805-ae70-b14ddb217327</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bad4c49a-2fbb-4805-ae70-b14ddb217327</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 20 Nov 2017 02:54:51 GMT</pubDate></item><item><title><![CDATA[特殊字体大全 550种很漂亮很难找的字体，快来看看有没有你需要的字体]]></title><description><![CDATA[94
链接: https://pan.baidu.com/s/1qXHEvso 密码: xsyn链接: https://pan.baidu.com/s/1jHVxJ98 密码: 3epv
]]></description><link>https://blog.gaoredu.com/article/d1038d94-2cee-4fef-9897-93df4fe91ddc</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d1038d94-2cee-4fef-9897-93df4fe91ddc</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 19 Nov 2017 20:58:02 GMT</pubDate></item><item><title><![CDATA[快速找资源和分享资源]]></title><description><![CDATA[简单介绍下本论坛的使用教程：
1.如何快速找到自己需要的资源？
答：用户可通过首页88，输入自己要查找的资源的关键字，就可以快速找到自己需要的资源！
89

2.如何分享文章到其他网站？
答：用户可以使用本页面最右边的分享按钮，就可以把自己的文章快速推送给好友。
90

3.如何关注我们？
答：用户可选择扫描屏幕右侧二维码关注我们，也可以通过在页面底部直接在线咨询客服人员，也可以通过加入我们的官方QQ群快速了解我们！
919293

4.分享的资源链接失效了怎么办？
答：由于本站提供的资源内容相对较多，对于链接失效的情况下请及时联系版主或加入官方QQ群，或者直接在线咨询客服人员补发资源链接。
]]></description><link>https://blog.gaoredu.com/article/23b2c503-2bcc-40db-8488-5e3361352b87</link><guid isPermaLink="true">https://blog.gaoredu.com/article/23b2c503-2bcc-40db-8488-5e3361352b87</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 19 Nov 2017 06:36:02 GMT</pubDate></item><item><title><![CDATA[【游戏开发】玩转C++系列教程之COCOS2D游戏项目实战]]></title><description><![CDATA[87
链接: https://pan.baidu.com/s/1mhG05Pe 密码: j72b]]></description><link>https://blog.gaoredu.com/article/c8aa5ea3-13ec-43d4-890f-99b0e9c39880</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c8aa5ea3-13ec-43d4-890f-99b0e9c39880</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 19 Nov 2017 05:56:33 GMT</pubDate></item><item><title><![CDATA[带你一周HOLD住HTML5+CSS（最棒的DIV+CSS网页设计系列教程）]]></title><description><![CDATA[83
领取链接：链接: https://pan.baidu.com/s/1bp4hPBT密码: p5iw
]]></description><link>https://blog.gaoredu.com/article/ce78ed95-f170-4dd6-ade9-6ff5f26b9417</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ce78ed95-f170-4dd6-ade9-6ff5f26b9417</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Nov 2017 22:17:10 GMT</pubDate></item><item><title><![CDATA[我爱科技论坛简介（www.52tech.tech），打造全网最大的免费资源共享平台]]></title><description><![CDATA[论坛简介（关于我们）：我爱科技论坛（www.52tech.tech）旨在打造全网最大的免费资源共享平台。目前论坛包括考研资料、编程学习、黑科技/科学上网、开源软件等资源模块，竭力服务于正在学习道路上的每一个人。我爱科技论坛，爱科技，更爱分享。致力于营造一个资源丰富、内容完善的大型网络学习交流资源共享平台！
联系我们：站长邮箱：tech52admin@126.com
官方QQ群：78925824【您可在本页面底部点击加入QQ群按钮加入我们的家族---快乐学习】在线服务QQ：3487425316【您可在本页面底部点击在线咨询按钮快速咨询客服人员】微信公众号：您可选择使用手机微信扫一扫扫描页面右侧二维码关注我们，以及时获取我们分享的资源及动态！
网站服务：正在不断完善中…………
帮助中心：您可选择右上角登录/注册选项注册成为我爱科技论坛的会员，也可及时修改自己的账号密码保证自己的账号密码安全。
常见问题解答：具体参见http://www.52tech.tech/thread-66-1-1.html



]]></description><link>https://blog.gaoredu.com/article/988b6df8-de95-43fa-b4b8-8ead97c9f773</link><guid isPermaLink="true">https://blog.gaoredu.com/article/988b6df8-de95-43fa-b4b8-8ead97c9f773</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Nov 2017 04:47:11 GMT</pubDate></item><item><title><![CDATA[【新】1000分精选免费简历模板下载]]></title><description><![CDATA[82
颠覆常规的简历15份：链接: https://pan.baidu.com/s/1dFyDZLR 密码: fxb3
仿界面创意简历25份：链接: https://pan.baidu.com/s/1pL9PaaR 密码: 68dh
国外创意简历247份：链接: https://pan.baidu.com/s/1nv3h0jZ 密码: wrai
简历word格式467份：链接: https://pan.baidu.com/s/1miqYl40 密码: 38vq
简历PPt格式13份：链接: https://pan.baidu.com/s/1mi9VeLa 密码: v3sw
优秀设计师的简历50份：链接: https://pan.baidu.com/s/1o80xB54 密码: 7i2g
微博推荐简历：链接: https://pan.baidu.com/s/1o8DUERw 密码: gisz
另类简历46份：链接: https://pan.baidu.com/s/1bpi3gbd 密码: avdd
乔布简历75份：链接: https://pan.baidu.com/s/1miKK1eC 密码: b3k4
500强心动的简历13份：链接: https://pan.baidu.com/s/1sl0r5rZ 密码: d8vf
微博长图简历4份：链接: https://pan.baidu.com/s/1jIFyRyu 密码: 6pec
简历指导：链接: https://pan.baidu.com/s/1sl8zakl 密码: 4b3c
炫酷动画5份：链接: https://pan.baidu.com/s/1bpIuQT5 密码: kcha
英文简历65份：链接: https://pan.baidu.com/s/1jIIgFt0 密码: mipd

此外，找了下论坛里面的其他几个相关帖子供大家下载。
【黑科技】求职者必备的个人简历自动生成神器（多种风格任你选择）
https://www.52tech.tech/forum.php?mod=viewthread&tid=873&fromuid=1
(出处: 我爱科技论坛)

300道面试真题和3000多份精品简历模板资源大放送
https://www.52tech.tech/forum.php?mod=viewthread&tid=267&fromuid=1
(出处: 我爱科技论坛)




]]></description><link>https://blog.gaoredu.com/article/360ef812-e259-40b7-ad6c-864f524653b5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/360ef812-e259-40b7-ad6c-864f524653b5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 18 Nov 2017 01:07:46 GMT</pubDate></item><item><title><![CDATA[全网最全的一套易语言学习教程，想让编程变得简单，就来学易语言！]]></title><description><![CDATA[教程主要内容如下：
78
79
链接: https://pan.baidu.com/s/1gfJ8F9x 密码: h9nb


再分享几个相关的易语言视频教程吧：
【视频教程】2020最新10天从0入门入门易语言系列中文视频教程（无加密）
https://www.52tech.tech/forum.php?mod=viewthread&tid=968&fromuid=1
价值万元的易语言辅助、模块开发、管理系统开发及工具开发全套超详细视频教程
https://www.52tech.tech/forum.php?mod=viewthread&tid=667&fromuid=1
墨鱼科技易语言游戏辅助编程VIP培训视频教程免费下载

https://www.52tech.tech/forum.php?mod=viewthread&tid=666&fromuid=1
易语言POST系列教程合集（基础篇+中级篇+高级篇）全套教程拿下你就是大神了

https://www.52tech.tech/forum.php?mod=viewthread&tid=153&fromuid=1
全网最全的一套易语言学习教程，想让编程变得简单，就来学易语言！

https://www.52tech.tech/forum.php?mod=viewthread&tid=58&fromuid=1
(出处: 我爱科技论坛)



]]></description><link>https://blog.gaoredu.com/article/b024af1d-7a59-4f36-a25e-43796f3e2711</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b024af1d-7a59-4f36-a25e-43796f3e2711</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 17 Nov 2017 03:28:34 GMT</pubDate></item><item><title><![CDATA[QQ音乐最新去广告破解绿色版，可听无损音乐]]></title><description><![CDATA[该版本主要特点：
1、破解无损音乐试听特权，普通用户也可以试听切换SQ无损音质！
2、去我的音乐页面(试听列表、播放历史、本地歌曲、下载歌曲)右侧图文广告；
3、去我创建的歌单页面(我喜欢、新建歌单)和我收藏的歌单页面右侧图文广告；
4、去除QQMusicUp.exe、QQMusicExternal.exe程序自效验，并删除这几个程序；
5、去后续登陆后提示该版本过旧已停止使用，让你长期可用！除非官方服务器升级；
6、删设备驱动组件、一键修复工具、服务程序、升级模块、电脑管家模块等无用文件。
7576
77

链接: https://pan.baidu.com/s/1slPtTeP 密码: dafq

]]></description><link>https://blog.gaoredu.com/article/26289b24-10fd-4cd7-91c5-d14195966863</link><guid isPermaLink="true">https://blog.gaoredu.com/article/26289b24-10fd-4cd7-91c5-d14195966863</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 17 Nov 2017 03:07:09 GMT</pubDate></item><item><title><![CDATA[VS2017旗舰离线下载百度云盘版发布了，快来下载]]></title><description><![CDATA[Visual Studio 2017是微软于2017年3月8日正式推出的新版本，是迄今为止 最具生产力 的 Visual Studio 版本。其内建工具整合了 .NET Core、Azure 应用程序、微服务（microservices）、Docker 容器等所有内容。最大的亮点之一：
VS2017 甚至还自带了 iOS 模拟器 (这可曾是之前只有 Mac 独享的开发环境) 以及 Android 模拟器。加上 .Net 的开源与跨平台、Visual Studio for Mac 的发布、VS Code 代码编辑器的跨平台支持都能看出微软正在一步步走向跨平台的目标了。
下载地址：http://pan.baidu.com/s/1c17Fjgs密码：ufiw
]]></description><link>https://blog.gaoredu.com/article/8db61f34-4178-4c71-805b-10d17bf4f934</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8db61f34-4178-4c71-805b-10d17bf4f934</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 16 Nov 2017 02:35:42 GMT</pubDate></item><item><title><![CDATA[免费分享一波高端大气上档次的PPT模板，再也不用担心自己的PPT了]]></title><description><![CDATA[免费模板
1.
OfficePlus:微软官方的免费良心模板下载网站
http://office.mmais.com.cn/Template/Home.shtml 
2.
演界网：锐普出品，模板海量。
http://www.yanj.cn/search-0-0-1.html 
3.
找个PPT：海量免费，分类清晰
http://www.zhaogeppt.com/pptmuban/ 
4.
优品PPT：资源丰富，实属优品
http://www.ypppt.com/moban/


两个PPT资源导航站
1.
HI,PPTer：一个PPT资源导航（关于PPT的所有资源这里全都有）
http://www.hippter.com/ 
2.
PPT达人：导航站，精选
http://www.toolfan.cn/ppter.html 
更多幻灯片演示知识，请移步阿斗的课程：
https://i.xue.taobao.c一个om/detail.htm?spm=a2174.7365761.39b9.12.rbakDA&courseId=73335

一些素材补充：
剪影素材库：http://kage-design.com/
小人图：http://pictogram2.com
相框素材：http://pictogram2.com
对话框：http://fukidesign.com/
dot小图标：http://dots-design.com/
各种植物：http://flode-design.com/
箭头：http://yajidesign.com/
图标：http://icooon-mono.com/
纹理：http://bg-patterns.com/
节日：http://event-pre.com/
线段：http://free-line-design.com/


以上资源模板应该足够你正常办公学习用了！

虽然就是几个PPT，但是这几个黑科技网站应该是足够你使用了吧。

]]></description><link>https://blog.gaoredu.com/article/7619c659-7c62-4678-956a-95e962e7afec</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7619c659-7c62-4678-956a-95e962e7afec</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Wed, 15 Nov 2017 07:14:47 GMT</pubDate></item><item><title><![CDATA[FlvCapture（绿色版）软件直接在线下载视频]]></title><description><![CDATA[只要将播放的视频链接复制粘贴到软件地址框，然后下面会出现视频下载地址，看箭头。1、复制这个地址用迅雷或其它下载工具下载； 
 2、也可直接点击【Download】按钮直接下载！  
 下载链接：http://url.cn/5PXbJpL密码：jnNefn

]]></description><link>https://blog.gaoredu.com/article/5c07c02c-2231-4cf0-8162-337527971e4f</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5c07c02c-2231-4cf0-8162-337527971e4f</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 14 Nov 2017 06:56:34 GMT</pubDate></item><item><title><![CDATA[一款浏览器插件快速解决你的翻墙问题]]></title><description><![CDATA[这是目前的发现的唯一一个能用的浏览器插件翻墙上网了，具体安装过程请参照自己 使用的浏览器安装相应的WEB插件！使用效果直接看图！


传送门：http://url.cn/5CYXTE5  密码：pV7mpg
]]></description><link>https://blog.gaoredu.com/article/4366bb47-062a-47f6-9102-f16c3538ad45</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4366bb47-062a-47f6-9102-f16c3538ad45</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Tue, 14 Nov 2017 00:58:27 GMT</pubDate></item><item><title><![CDATA[目前5款最新最好用的手机翻墙vpn软件，蓝灯专业版已破解 测试可用！]]></title><description><![CDATA[目前最新最好用的手机翻墙vpn软件，蓝灯专业版已破解 测试可用！  11月最新好用的手机翻墙vpn软件，赶快下载测试体验吧！

手机翻墙其他备用软件：
http://url.cn/5oKuVsX
http://url.cn/5GT1XjG
http://url.cn/55JYUIa
http://url.cn/5zpIWEh
http://url.cn/5hex4ZW
小白可加群问老司机群号：78925824（为保证链接长期有效，已对链接进行了加密分享，解压密码加群查看群公告或者用微信关注微信号，回复密码即可得到解压密码），或直接在右下角点击【加入QQ群即可快速加入群聊】

此外也可参见文章：1.12月最新最好用的科学上网新突破方法【VPN持续更新】

2.
【全局置顶】2018年最新最好用的科学上网工具，我爱科技论坛科学上网VPN电脑端工具...

3.不使用VPN就能访问谷歌或者谷歌学术的方法

4.
目前5款最新最好用的手机翻墙vpn软件，蓝灯专业版已破解 测试可用！


5.更多工具软件/科学上网工具/浏览器插件，可直接在搜索栏直接搜索关键词，即可搜索到自己想要的资源，快去试试吧！








]]></description><link>https://blog.gaoredu.com/article/91176e3f-9e1f-4ceb-a16c-92ba61b82877</link><guid isPermaLink="true">https://blog.gaoredu.com/article/91176e3f-9e1f-4ceb-a16c-92ba61b82877</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 12 Nov 2017 20:49:58 GMT</pubDate></item><item><title><![CDATA[功守道无水印版，看看大佬们在干啥]]></title><description><![CDATA[《功守道》是由文章执导、编剧，李连杰监制，马云领衔主演，袁和平、洪金宝、吴京、甄子丹、程小东、邹市明、朝青龙、托尼·贾、向佐、刘承羽、佟大为、李晨、黄晓明等主演。
链接: https://pan.baidu.com/s/1dFcZe2t 密码: 52v8
]]></description><link>https://blog.gaoredu.com/article/0ec3e954-c561-429e-9d08-7b6cd2200cca</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0ec3e954-c561-429e-9d08-7b6cd2200cca</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sun, 12 Nov 2017 06:53:57 GMT</pubDate></item><item><title><![CDATA[二十七个WEBGL动态实例和视频资源让你快速体验WEBGL的世界]]></title><description><![CDATA[本站提供的WEBGL高级在线学习教程：WEBGL中英文资源视频：【传送门】【版主力推】
【如果觉得教程不错，可以加入QQ群78925824一起交流】：

目前关于实例的代码已经全部打包上传，有需要的亲们请直接打包下载学习：链接: https://pan.baidu.com/s/1UY_QO-bLTColGyCAVeZZeQ 密码: 5q5t


网络上的一些经典的WebGL资源网站和WebGL开源引擎整理：http://www.babylonjs.com/http://threejs.org/http://www.finalmesh.com/webglexamples.htmhttp://www.glge.org/category/demos/http://www.visualiser.fr/index.phphttp://www.babylonjs.com/Demos/Retail/http://oos.moxiecode.com/blog/index.php/experiments/javascript-webgl/http://developer-autodesk.github.io/


WEBGl学习网站：1.OpenGL ES2.0 API:http://www.khronos.org/opengles/sdk/docs/man/2.GLSL API:http://www.opengl.org/sdk/docs/manglsl/3.Mozilla WebGL:https://developer.mozilla.org/en ... &redirectslug=WebGL4.THE CG TUTORIAL:https://developer.nvidia.com/con ... pter-1-introduction5.Cg Standard Library Documentation:http://http.developer.nvidia.com/Cg/index_stdlib.html6.1_April2012_ReferenceManual:http://developer.download.nvidia ... ReferenceManual.pdf8.GLSL_ES_Specification_3.0:http://www.khronos.org/registry/ ... fication_3.00.4.pdf9：http://learningwebgl.com/blog/?page_id=1217【推荐】
WEBGL开源网站：网络上的一些经典的WebGL资源网站和WebGL开源引擎整理http://www.babylonjs.com/http://threejs.org/http://www.finalmesh.com/webglexamples.htmhttp://www.glge.org/category/demos/http://www.visualiser.fr/index.phphttp://www.babylonjs.com/Demos/Retail/http://oos.moxiecode.com/blog/index.php/experiments/javascript-webgl/http://developer-autodesk.github.io/
【温馨提示】如果你的当前网络无法访问部分网站或者Google 搜索，请参考：科学上网新突破【持续更新】一文配置本地网络！WEBGL综合案例DEMO：
http://www.hightopo.com/blog/wp-content/uploads/2016/08/3DrNQNgFNYYAAAAASUVORK5CYII.png
http://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.07.27-AM.png
A星寻路算法 3D 模拟：http://www.hightopo.com/demo/astar/astar.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/11/Screen-Shot-2014-11-24-at-5.09.13-PM.png
3D 汉诺塔算法演示：http://www.hightopo.com/demo/hanoi_20151106/index.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.53.51-AM.png3D 热力图：http://www.hightopo.com/guide/guide/plugin/forcelayout/examples/example_heatmap3d.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/09/IMG_10361.jpg
Box2D 物理碰撞 3D 例子：http://www.hightopo.com/demo/box2djs/ht-box2d-demo.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/11/Screen-Shot-2014-11-25-at-8.06.57-PM.png设备管理 EMS 系统：http://www.hightopo.com/guide/guide/core/databinding/examples/example_ems.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2015/01/Screen-Shot-2015-01-07-at-11.50.54-PM.pngEasing 动画类型：http://www.hightopo.com/guide/guide/plugin/form/examples/example_easing.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/05/Screen-Shot-2014-05-29-at-3.07.23-PM.png3D 网络拓扑图：http://www.hightopo.com/guide/guide/plugin/forcelayout/examples/example_forcelayout3.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.41.50-AM.png书架场景，亮点自寻：http://www.hightopo.com/guide/guide/plugin/modeling/examples/example_bookshelf.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/12/Screen-Shot-2014-12-25-at-12.19.17-AM.png灯光舞台流动场景：http://www.hightopo.com/guide/guide/core/lighting/examples/example_flowing.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.33.11-AM.png2D 和 3D 模型联动的可编辑房间场景：http://www.hightopo.com/guide/guide/plugin/modeling/examples/example_csgshape.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.28.21-AM.png各种样式的茶杯座椅场景：http://www.hightopo.com/guide/guide/plugin/modeling/examples/example_custommodel.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2015/01/Screen-Shot-2015-01-07-at-11.46.14-PM.png
一百行代码实现的 3D 贪吃蛇游戏：http://www.hightopo.com/demo/snake_20151106/GreedySnake.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/03/060128389406803.png带可控制端口的 3D 服务器演示：http://www.hightopo.com/demo/hp5406/hp5406-rotation.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.47.43-AM.png脑洞打开了吧，其实纯 3D API 还是能做很多效果的，更多例子参考：http://www.hightopo.com/demos/index.html。另外你也可以采用 HT 辅助的 3D 编辑器所见即所得的快速搭建出三维场景：http://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-1.17.13-AM.png当然不同的行业客户也会根据自己需要打造更适合自己项目的 3D 编辑器：http://www.hightopo.com/blog/wp-content/uploads/2016/08/63E8D17A-24C7-433B-BAB6-5773F51876D4.png但纯 API 的方式对于复杂的模型就很难实现了，所以对于复杂的模型我们就可以利用主流的 3D 设计工具如 3DMaxs，Maya 或 Blender 等进行设计，然后导出 OBJ 格式供 HT 读入使用，可参考《HT for Web 的 OBJ 手册》http://www.hightopo.com/guide/guide/plugin/obj/ht-obj-guide.html ，HT 手册中也有众多采用 OBJ 的应用例子：可控指针的燃气表记：http://www.hightopo.com/guide/guide/plugin/obj/examples/example_meter.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-2.22.14-AM.png飞机飞行轨道例子：http://www.hightopo.com/guide/guide/plugin/obj/examples/example_path.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/10/Screen-Shot-2014-10-08-at-7.45.25-PM.png摩托车模型结合灯光例子：http://www.hightopo.com/guide/guide/core/lighting/examples/example_pointlight.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-2.25.50-AM.png可开关复杂 3D 门窗：http://www.hightopo.com/guide/guide/plugin/obj/examples/example_room.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-2.28.02-AM.png跑道飞驰汽车：http://www.hightopo.com/demo/media/index.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-2.28.42-AM.png笔记本模型例子：http://www.hightopo.com/guide/guide/core/schedule/examples/example_network.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-09-at-10.37.04-PM.png
可控燃气监控系统 http://www.hightopo.com/guide/guide/core/serialization/examples/example_exportimport.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2014/04/IMG_0282.jpg并且 OBJ 导入的模型依然可以进行数据绑定和动态实时驱动，这个话题后续我再以服务器扇叶旋转为例子展开详细介绍，本篇先到此为止，大家可玩下电信网管 3D 机房监控系统场景中，常见的服务器机柜和带风扇旋转功能的例子：http://www.hightopo.com/demo/fan3d/demo-enhanced.htmlhttp://www.hightopo.com/blog/wp-content/uploads/2016/08/Screen-Shot-2016-08-26-at-2.41.04-AM.png





]]></description><link>https://blog.gaoredu.com/article/2344d929-b22c-4946-a479-05a5627e3daf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/2344d929-b22c-4946-a479-05a5627e3daf</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 11 Nov 2017 06:18:17 GMT</pubDate></item><item><title><![CDATA[这个黑科技可以带你快速撤回QQ群里面的消息记录]]></title><description><![CDATA[最新版QQ8.9.6新功能群主管理员可以撤回QQ群员消息再也不怕广告狗了恶搞也很不错哦其他功能自己去发现吧！


黑科技软件的下载链接: https://pan.baidu.com/s/1dFfaO2t 密码: q7jj
]]></description><link>https://blog.gaoredu.com/article/bcaf1959-00c8-46e2-97a7-809793460d35</link><guid isPermaLink="true">https://blog.gaoredu.com/article/bcaf1959-00c8-46e2-97a7-809793460d35</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Nov 2017 19:32:58 GMT</pubDate></item><item><title><![CDATA[免费电子书TXT在线下载工具，可直接打包下载]]></title><description><![CDATA[爱看小说的朋友们可以用下这个软件，不用你在去找免费的txt资源了，直接搜索就ok了。这个软件目前支持下载的网站有： 八零电子书、久久小说、书本、奇书、无限小说、炫书网、知轩等网站，支持搜索内容一键下载。



链接更新于2020年3月
TXT电子书免费下载链接：http://pan.baidu.com/s/1kU4Vpwb 密码：masy



]]></description><link>https://blog.gaoredu.com/article/4256490e-7ce8-478b-96cd-cca09edc5e17</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4256490e-7ce8-478b-96cd-cca09edc5e17</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Nov 2017 19:23:50 GMT</pubDate></item><item><title><![CDATA[Adobe全套免激活软件（包含PS、AE、AI、DW等等20多款软件）]]></title><description><![CDATA[包含PS、AE、AI、DW等等20多款常用Adobe软件（具体看图），打开安装后自动激活，无需手动激活，亲测好用，建议各位收藏以备不时之需。

传送门链接: https://pan.baidu.com/s/1pKDCfl5 密码: fdwi




]]></description><link>https://blog.gaoredu.com/article/7aaa9ab1-6c6d-4164-b088-57ed29658e8b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/7aaa9ab1-6c6d-4164-b088-57ed29658e8b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Nov 2017 19:19:45 GMT</pubDate></item><item><title><![CDATA[[黑科技]豪迪QQ群发软件一键自动群发去广告破解版+使用教程]]></title><description><![CDATA[1.首先我们打开豪迪QQ软件，选择你要群发的对象，内容的话随便填无所谓

2.然后我们打开豪迪群发破解器，这里面输入你要群发的内容，切记不要忘了点击开始替换豪迪广告


3.最后我们把QQ窗口放到桌面上，选到QQ群，回到豪迪软件界面点击发送
黑科技软件下载链接: https://pan.baidu.com/s/1qXPLpd6 密码: 76g8






]]></description><link>https://blog.gaoredu.com/article/f319ab60-4abf-471e-a21c-5123db8ae829</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f319ab60-4abf-471e-a21c-5123db8ae829</guid><category><![CDATA[黑科技]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Nov 2017 19:10:44 GMT</pubDate></item><item><title><![CDATA[2020最新可用的各大网盘资源搜索引擎推荐下载]]></title><description><![CDATA[支持百度网盘搜索，暴力搜索，磁力搜素等功能，可以加速你的文件网络检索速度。
效果如图，挺好用的，推荐给大家哈！

失效链接已更新于2020年3月
网盘最全检索神器免费下载：点我进入
密码：GR2wqd



]]></description><link>https://blog.gaoredu.com/article/fcb424b7-53df-4d88-81e0-e8fb1fa681ac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/fcb424b7-53df-4d88-81e0-e8fb1fa681ac</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 10 Nov 2017 06:57:37 GMT</pubDate></item><item><title><![CDATA[WEB渗透实战教程【包括无线网/KaliLinux系列教程】]]></title><description><![CDATA[bg4.png也算是楼主收藏的比较全面的一份WEB实战教程了，需要的请举手拿走吧！
小迪高级渗透链接: https://pan.baidu.com/s/1bpjOmWf 密码: f9zx
MSF系列教程链接: https://pan.baidu.com/s/1gfD2tfP 密码: v9pc
安卓两大神器链接: https://pan.baidu.com/s/1o7XW3Aa 密码: t6sy
安卓渗透实战链接: https://pan.baidu.com/s/1eS0DgaQ 密码: 9ngu
metasploit链接: https://pan.baidu.com/s/1cttFmm 密码: cvfs
Metasploit3链接: https://pan.baidu.com/s/1i5hAhP7 密码: 3ggr
Metasploit4链接: https://pan.baidu.com/s/1gf1rbiF 密码: tneb
Kalilinux链接: https://pan.baidu.com/s/1b05bCa 密码: 6vpt
isafe2016链接: https://pan.baidu.com/s/1boEGirt 密码: fw8d
黑客风云链接: https://pan.baidu.com/s/1o8mjGKi 密码: jf4r
黑客联盟链接: https://pan.baidu.com/s/1bpg02Wf 密码: uhvd
第二季链接: https://pan.baidu.com/s/1c22JeTU 密码: 52xq
无线网监听链接: https://pan.baidu.com/s/1slPtiTv 密码: irnv
无线网2链接: https://pan.baidu.com/s/1mh5AvGk 密码: cxj5
backtrack链接: https://pan.baidu.com/s/1dEHtUbJ 密码: ahes
高级进阶链接: https://pan.baidu.com/s/1eSD4sSU 密码: pfwe
进阶2链接: https://pan.baidu.com/s/1o8DTSim 密码: xtg2
Amo2015链接: https://pan.baidu.com/s/1bGJYSu 密码: pq5q
]]></description><link>https://blog.gaoredu.com/article/8b5b47be-8ba8-43c2-a4ff-3f929722df2e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8b5b47be-8ba8-43c2-a4ff-3f929722df2e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 04 Nov 2017 03:37:43 GMT</pubDate></item><item><title><![CDATA[12月最新最好用的科学上网新突破方法【VPN持续更新】]]></title><description><![CDATA[直接上谷歌不需要跳墙方法（经过自己的一番折腾,终于在这里找到以下几种翻墙方法，分享给大家，一起学习交流下！


你可以直接使用下面的网站，只能在GOOGLE上搜索，但是其他国外的网站还是上不了 要访问其他网站看最下面的vpn翻墙， 需要用谷歌搜索或者谷歌学术的可以直接用下面的链接
1.谷歌原版镜像： 
https://a.sdao.top/
https://google.uulucky.com/
https://quick.likeso.ml/
https://xs5.rqiao.net/
https://g.bazziyang.com/
https://d.ggkai.men/
2.谷歌学术镜像： 
https://xue.glgoo.net/
https://xues.glgoo.com/
https://xue.glgoo.net/ 
https://d.ggkai.men/extdomains/scholar.google.com/
https://c3.zgdhhjha.com/scholar   


     如果需要免费vpn翻墙软件可以看我之前发的文章 我把这几天发的几款都发出来，需要的可以下载（最好都下下来，大家都知道vpn软件会经常挂，多下几款备用，而且也不占多少空间的！）

3.目前最新最好用的手机翻墙vpn软件，蓝灯专业版已破解 测试可用！【传送门】http://www.52tech.tech/data/attachment/forum/201711/13/124802y84lddl9bi9bxiib.jpg

手机翻墙其他备用软件：
http://url.cn/5oKuVsX
http://url.cn/5GT1XjG
http://url.cn/55JYUIa
http://url.cn/5zpIWEh
http://url.cn/5hex4ZW
【查看全部】


4.两款电脑直接翻墙软件：
下载链接：http://url.cn/5gRjk25  密码：cLYtgF
下载链接：http://url.cn/5pNvr23 密码：MoGNiP


5.一款浏览器翻墙插件：
参加文章一款浏览器插件快速解决你的翻墙问题
【http://www.52tech.tech/forum.php?mod=viewthread&tid=51&fromuid=1]快速查看】


6.一键开启浏览器自带科学上网功能：【快速查看】


7.无需安装插件快速体验科学上网：【快速查看】


8.不用VPN直接在线使用谷歌搜索：【http://www.52tech.tech/forum.php?mod=viewthread&tid=478&fromuid=1]快速查看】

9.2018年最新最好用的科学上网工具，我爱科技论坛科学上网VPN电脑端工具：【快速查看】

如果有不懂的小白可加群问老司机，群号：78925824（资源来之不易，大家且用且珍惜），或直接在右下角点击【加入QQ群即可快速加入群聊查看群公告更多资料】






















]]></description><link>https://blog.gaoredu.com/article/cb26c6d0-a964-4cbc-b504-e9a02ffe1188</link><guid isPermaLink="true">https://blog.gaoredu.com/article/cb26c6d0-a964-4cbc-b504-e9a02ffe1188</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 02 Nov 2017 04:04:16 GMT</pubDate></item><item><title><![CDATA[WEBGL中英文学习资料和视频教程]]></title><description><![CDATA[一套完整的WEBGL视频教程，具体看图，直接拿走不谢！有需要的亲们请留下你的邮箱或者直接联系版主！或者直接在下方直接下载！资料获取：您可以通过注册成为本论坛的会员回复此帖子下载资源，也可以选择回复获得密码，或直接在页面最右下方点击加入QQ群查看群公告查看密码！如遇链接不能打开也可以直接在QQ群里78925824私聊群主索取，资料来之不易，望大家且用且珍惜！

【简单说明】由于国内目前对于WEBGL的学习资料甚少，更没有全面的介绍WEBGL的相关视频，这个视频也是楼主收藏的一份比较完整的WEBGL视频教程了，只不过是英文的，有一定英语基础的基本上看着屏幕老师的笔记就能听懂吧！另外也希望大家能够积极地分享WEBGL相关资源，祝大家学习愉快！


1.如果大家还没有学过OpenGl或者图形学的相关知识可以建议大家先看下这两个的相关知识：
计算机图形学：【传送门】
OpenGl实战：【传送门】
WEBGL精品视频教程：【传送门】从Lesson1-Lesson10【完整版】链接：https://share.weiyun.com/5JFxEXz 密码：4zu9wy
（其他资料已移动到WEB前端模块，请进入到相应模块查看）
2.看到大家的学习热情学习热情都蛮高的，再分享一波相关学习资料的网站吧，具体见附件！【在线学习资源】
3.如果大家需要中文资源：我就分享以下几本书吧！有需要的请自行下载~
WEBGL编程指南：【传送门】 密码: 2mva
OpenGLES 2.0编程指南：【传送门】 密码: b4s8
HTML5与WEBGL编程：【传送门】密码: 7ixf
WEBGL learn：【传送门】 密码: nnng
在线观看地址

如果觉得这些资源还不够，参见文章：
二十七个WEBGL动态实例和视频资源让你快速体验WEBGL的世界 http://www.52tech.tech/forum.php?mod=viewthread&tid=47&fromuid=1 


















]]></description><link>https://blog.gaoredu.com/article/0ca91c0a-b029-4a17-9ce3-314be113171d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0ca91c0a-b029-4a17-9ce3-314be113171d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 20 Oct 2017 03:02:10 GMT</pubDate></item><item><title><![CDATA[分享一款百度云下载无限制软件【亲测好用】]]></title><description><![CDATA[简单说下，软件是便携版的，不用安装，下载了就能好用哈，可以下载你百度云盘中的任意文件！直接上图！]]></description><link>https://blog.gaoredu.com/article/542e369b-a9c2-4c8a-a2db-46e08dc0efb4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/542e369b-a9c2-4c8a-a2db-46e08dc0efb4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Mon, 16 Oct 2017 03:19:20 GMT</pubDate></item><item><title><![CDATA[2018考研资料持续更新]]></title><description><![CDATA[请大家持续关注该帖子，将持续更新最新考研公共课资料：

英语
2018【何凯文】专项
链接：http://pan.baidu.com/s/1pKXntBt
密码：mv3f
2018【Q航】英语
链接：http://pan.baidu.com/s/1dE5Nye9 密码：bi0j
2018【刘一男】专项
链接：http://pan.baidu.com/s/1eSvmlRO 密码：ouhj
2018【商志】专项
链接：http://pan.baidu.com/s/1geG8B8v 密码：nxr3
2018【新东方】英语
链接：http://pan.baidu.com/s/1slDgFq1
密码：cdsh
2018【朱伟】专项
链接：http://pan.baidu.com/s/1jHZzw3O 密码：aejv
2018【考研帮】专项
链接：http://pan.baidu.com/s/1pLxBE5P 密码：udtm
2018【屠皓民】专项链接：http://pan.baidu.com/s/1qY5HglQ 密码：s1sf


政治
2018【V研课】政治链接：http://pan.baidu.com/s/1kUBGHgV 密码：sxz1
2018【海天】政治链接：http://pan.baidu.com/s/1gfCLjDx 
密码：hvei
2018【石磊】链接: https://pan.baidu.com/s/1slC0M9R  密码: 6ymq
2018【腿姐陆寓丰】链接：http://pan.baidu.com/s/1geOGe8V 密码：5kof
2018【肖秀容】专项链接：http://pan.baidu.com/s/1qXEoyMK 密码：qhpx
2018【徐涛】专项
链接: https://pan.baidu.com/s/1kURpQbP 密码: bu7h
2018【孔昱力大纲解析】
链接：http://pan.baidu.com/s/1i49IWZV 
密码：n4qf
2018【米鹏80分保过班】链接：http://pan.baidu.com/s/1hs5r5Qk 
密码：j2kq

数学
2018【 启航张宇】 数学链接：http://pan.baidu.com/s/1qY0Xykk 
密码：x7ax
2018【V研客-李永乐】链接：http://pan.baidu.com/s/1hs3V63U 
密码：xqsl
2018【北大张伟】链接：http://pan.baidu.com/s/1gfoy4sr 
密码：y3ln
2018【潘鑫】链接：http://pan.baidu.com/s/1kURpKZt 
密码：aj95
2018【汤家凤】链接：http://pan.baidu.com/s/1c2KYInm 
密码：ebjq
2018【杨超】链接：http://pan.baidu.com/s/1eSneCMI 
密码：qrk1
2018【文都】链接：http://pan.baidu.com/s/1pLsRUOF 
密码：rluk
2018【新DF】数学链接：http://pan.baidu.com/s/1kUAuOmj 
密码：n705

如果还不过瘾，再来精品专业课资料区来转转！详情请戳【传送门】





]]></description><link>https://blog.gaoredu.com/article/9855c002-0995-4d9e-b496-2435563bc7c0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9855c002-0995-4d9e-b496-2435563bc7c0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Sat, 14 Oct 2017 00:49:23 GMT</pubDate></item><item><title><![CDATA[考研专业课成功秘笈]]></title><description><![CDATA[ 1.1 导学阶段（3月初-5月初）                           ——导学阶段（建议截止时间：2017年3月底）
  时间段  复习资料学习方法复习目的可参加的辅导和可购买的资料
导学阶段  （决定考研起2星期内）1、13大学科、100多个1级学科  2、学术型硕士、专业型硕士目录及介绍  3、本专业就业信息、就业需求  4、本校本专业往届学长考研信息1、上网查阅相关资料进行自学  2、通过本校导员了解本专业近3年的就业情况、考研参与率、考研成功率、报考院校报考专业信息  3、参加专业就业解析课程1、明确知道本科专业对应的是哪个学科门类、哪个一级学科；  2、给自己一个相对明确的参考：报考院校报考专业  3、确定专业，可多个，但是要有相关性  4、初选多个学校1、专业与就业解析课程（4月10日上线）  2、专业与就业解析讲义
复习提醒：  1、选择专业是一件非常重要的事情，重要原因一是专业不确定就不能起步考研，专业决定初试考试科目是什么，如政治、外语、数学（或专业课）、专业课、专业素质、专业技能；重要原因二是选择专业是一种抉择，要么放弃本科专业，要么坚持本科专业，不论怎么选择，必须要搞清楚为什么放弃为什么坚持；  2、不要做无谓的牺牲。本科专业跨专业必须要坚持选择专业的相关性。工科不能考理科，文科、管理和经济不能考工科和理科，外专业不能考医科、英语专业、日语专业等……，相关性是基于专业本身对考生专业素质、基础知识的需求，专业素质、基础知识是大学四年的积累和沉淀，不是单单依靠考研1年不到时间复习就可以完成的；  3、学术型和专业型要有区分度，有针对性鉴别。不能一概论，否决专业硕士的不好和盲目崇拜学术硕士的好；  4、专业选择是考研的第一步，而非学习数学学习英语，选择成功与否决定着考研的成功与否、就业的成功与否以及职业发展的成功与否。
       1.2 基础阶段（4月初-8月底）——基础阶段（建议截止时间：2017年8月底）
  时间段  复习资料学习方法复习目的可参加的辅导和可购买的资料
基础阶段11、本科教材（不限定是哪个出版社哪个作者）  2、基础讲义不能学的太深也不能学的太浅  此时学习针对性不要太强，但是也不能不学，掌握基础层面的知识点是必须要做到的通用知识点融会贯通  超越他人复习进度  为自己理性择校择专业做好铺垫参加“基础课程”辅导
基础阶段23、本科笔记  4、本科讲义  5、期末试卷  6、模拟试题  7、复习题  8、历年真题不论是用哪套资料学习，其目的是通过不同资料学习掌握该科目的知识点，完成众多资料中的知识点还原。目标院校目标专业本科所授内容完全掌握，和目标院校本科生站在同一起跑线上  复习完所有的基础  知识点 5月前购买《高分8套资料》或《考研胜经》
基础阶段39、基础测试模拟试题严格执行自我测试、客观自我评价，扬长避短，制定下阶段复习策略根据学习状态和基础学习结果（基础测试），确定院校确定专业  达到的效果一：看真题能看出所考的知识点  达到效果二：能还原知识点  达到效果三：看教材能做对应的习题  若有问题继续基础阶段的复习一对一测试和咨询
复习提醒：  1、基础阶段 是考研复习最重要阶段，是打下根据、顺利进入强化和冲刺阶段的基石，往往考生容易忽略此阶段复习专业课，为后续有针对性的择校择专业埋下了不稳定因素；  2、基础阶段 复习专业课，不单单是为了应付初试，同时还要准备专业技能、专业素质和专业科目理论功底等要素的提高，因为考研究生的结果是会要么准备复试要么准备就业，而复试和就业所要求恰好都是考生专业技能、专业素质和专业科目理论功底。  3、必须搞清楚考研究生的真正目的，不要重蹈读大学覆辙。自问一下，如果大四毕业能找到10万以上的工作，你还会考研、读研么？  4、基础阶段一定要扎实，复习到每个知识点，并要达到基础阶段三的效果，建议复习4-5遍
  1.3 强化阶段（9月初-11月底）——强化阶段（建议截止时间：2017年11月底）
  时间段  复习资料学习方法复习目的可参加的辅导和可购买的资料
强化阶段11、专业课大纲；  2、强化讲义；  3、目标院校本科教材；  4、招生简章指定教材；  5、目标院校导师作品包含辅导书、论文、期刊等大纲、讲义、教材等同步复习掌握相关内容的同时，精确提炼出相应的知识点完全了解并熟悉目标院校专业课知识点参加“强化辅导班”辅导
强化阶段26、历年真题真题分解出3点并还原至教材：知识点、题型、分值在知识点基础上完全清楚并掌握历年考点、重点及难点
强化阶段37、同档次院校同专业真题集真题分解出3点并还原至教材：知识点、题型、分值有效补充真题考点、重点及难点并加以强化训练，达到稳固掌握该科目可能所有考点、重点及难点，做到万无一失
复习提醒：  1、强化复习  其核心是精确提炼目标院校知识点，通过本校历年真题标注出知识点中的考点、重点及难点  2、熟悉考研非统考命题过程不难发现，同档次院校真题具有非常好的参考借鉴价值，通过同档次院校真题可更完整标注出知识点中的考点、重点及难点  3、暑期考研复习心态调整、学习内容详细规划并严格执行，考生对自己“狠”一点  4、9月份考生需要度过2道坎，其一是关注招生简章、目录和参考书目，积极应对这种变化；其二是杜绝9月中旬找工作的想法，坚决制止这种想法。
       1.4 冲刺阶段（12月初-考前）——冲刺阶段（建议截止时间：2017年12月底）
  时间段  复习资料学习方法复习目的可参加的辅导和可购买的资料
冲刺阶段11、知识框架图  2、历年真题（可自行全真模拟）归纳总结11月份前所有复习内容，形成知识框架图  通过真题再次温习，更精准掌握考点、重点和解决难点归纳总结所有考点、重点及难点参加“冲刺辅导班”辅导  购买“考前模拟3套题”
冲刺阶段23、冲刺讲义  4、各题型答题模式归纳总结相关知识并强化训练标准答题模式（达到条件反射的效果）掌握2014最新命题动态，预测2014考点，强化固定答题模式，把握最终考试成绩
冲刺阶段35、考前模拟试卷指定时间段内标准完成试卷内容，考后不要特别追究考题正确与否，而要强化题目对应知识点的掌握程度知识点查漏补缺、准确时间段内完整答题

    时间段复习资料学习方法复习目的可参加的辅导和可购买的资料
成绩公布前1、复试讲义    2、复试笔试对应的本科笔记、讲义、期末试卷、复习题    3、复试真题    4、外语口语和听力讲义1、熟悉复习流程、考试科目、考试题型、考试要求并Email联系导师    2、着重强化复习复试笔试和面试考试内容，笔试注重综合分析问题解决问题的能力，面试注重理论与实践的结合明确复试考什么，什么时候考，注意哪些事项，如何准备         联系导师，让导师初步对你有个印象         开始投入复试科目复习阶段1、复试辅导课程    2、复试6套资料    3、复试讲义
复试名单公布前5、内部信息讲义    6、导师信息密切关注动态，扎实复习考试内容    与有意向导师会面快速获取复试名单确定具    复试名额，    赴目标院校全身心备战；同时，与意向导师诚恳见面
录取名单公布前7、录取名单（公费或奖学金）密切关注动态    快速做出决定    为可读研做充足准备快速获取录取名额信息、奖学金信息，确定是否被录取，未被录取需要快速联系校内和校外调剂
复习提醒：     1、复试整体流程务必要全面掌握；    2、密切关注初试成绩公布时间点、复试名单公布时间点、录取名单公布时间点、校内专业调剂信息、校外专业调剂信息
  复习提醒：  1、冲刺复习的核心是总结归纳前阶段复习所有内容，特别忌讳考生死扣硬扣难题、怪题、偏题，在脑海中务必要建立一个清晰的知识框架图  2、标准化规范化答题模式，特别忌讳同一道或一种题目，每次答题模式均不一样  3、考前心态调整直接影响着考场3小时的发挥状态和1年时间的复习效果体现，用平常心态、正确方式对待考前学习和生活  
 .5 复试阶段（初试结束-2018年3月底前）


]]></description><link>https://blog.gaoredu.com/article/9e767241-e350-4831-b104-432c3ae5abdf</link><guid isPermaLink="true">https://blog.gaoredu.com/article/9e767241-e350-4831-b104-432c3ae5abdf</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Oct 2017 21:41:27 GMT</pubDate></item><item><title><![CDATA[分享一套基于SSM框架的管理系统的开发视频（10天搞定SSM框架）]]></title><description><![CDATA[001链接: https://pan.baidu.com/s/1o8zFBHg 密码: p5ec
002链接: https://pan.baidu.com/s/1jImW9Em 密码: h7rq
003链接: https://pan.baidu.com/s/1i5gSZop 密码: ferq
004链接: https://pan.baidu.com/s/1qY4vroo 密码: akjq
005链接: https://pan.baidu.com/s/1miSPVHQ 密码: y7pm
006链接: https://pan.baidu.com/s/1o7Vn6tk 密码: rkgk
007链接: https://pan.baidu.com/s/1o8uVWVK 密码: 9b87
008链接: https://pan.baidu.com/s/1qYNsiFq 密码: pvud
009链接: https://pan.baidu.com/s/1kUAuRVh 密码: avzj
010链接: https://pan.baidu.com/s/1i4FODlb 密码: m54z]]></description><link>https://blog.gaoredu.com/article/b8259dca-3cd3-441f-9ca3-73d51d347062</link><guid isPermaLink="true">https://blog.gaoredu.com/article/b8259dca-3cd3-441f-9ca3-73d51d347062</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Oct 2017 21:30:37 GMT</pubDate></item><item><title><![CDATA[英语历年真题打印版]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1boDsUAF 密码: rs7p
]]></description><link>https://blog.gaoredu.com/article/339e27a4-83f7-4a74-b76b-de33c401df41</link><guid isPermaLink="true">https://blog.gaoredu.com/article/339e27a4-83f7-4a74-b76b-de33c401df41</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Oct 2017 07:25:05 GMT</pubDate></item><item><title><![CDATA[文都的政治强化班]]></title><description><![CDATA[由于中特史纲马原的内容变换不是太大， 大家可以参考此视频资料学习，祝大家复习顺利！
链接: https://pan.baidu.com/s/1pKNJUsj 密码: pimi
链接: https://pan.baidu.com/s/1mhAsRX2 密码: y8x4
链接: https://pan.baidu.com/s/1pLoisMf 密码: jg27
链接: https://pan.baidu.com/s/1dF1tO0x 密码: txib
链接: https://pan.baidu.com/s/1kVbziwZ 密码: 6caa

如果遇到链接失效等问题，请大家及时在下面跟帖回复，谢谢！

]]></description><link>https://blog.gaoredu.com/article/570fff9a-04f6-475a-878d-390a6d738fd4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/570fff9a-04f6-475a-878d-390a6d738fd4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Fri, 13 Oct 2017 07:20:50 GMT</pubDate></item><item><title><![CDATA[专业课资料荟萃]]></title><description><![CDATA[部分高校的专业课资料完整版已经移动到：http://52tech.tech/forum.php?mod=viewthread&tid=2&extra=page%3D1
]]></description><link>https://blog.gaoredu.com/article/5d1fa25e-8393-4ea9-82d4-48eeb5c257f4</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5d1fa25e-8393-4ea9-82d4-48eeb5c257f4</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 20:45:59 GMT</pubDate></item><item><title><![CDATA[Adobe photoshop CS6最新版软件免费下载【附激活码】]]></title><description><![CDATA[分享一个PS软件，Adobe photoshop CS6版本的，以后大家也可以自由切图了哈。


1150






开源软件下载链接: https://pan.baidu.com/s/1i4DgHWp 密码: vxsa]]></description><link>https://blog.gaoredu.com/article/f751a004-4159-4997-a701-cf3d81485e97</link><guid isPermaLink="true">https://blog.gaoredu.com/article/f751a004-4159-4997-a701-cf3d81485e97</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 18:54:09 GMT</pubDate></item><item><title><![CDATA[论坛主要问题发帖处]]></title><description><![CDATA[初入论坛请看：http://52tech.tech/forum.php?mod=viewthread&tid=1&extra=]]></description><link>https://blog.gaoredu.com/article/3920685e-8b36-4d76-be44-eaf928111a2b</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3920685e-8b36-4d76-be44-eaf928111a2b</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 18:49:01 GMT</pubDate></item><item><title><![CDATA[JS进阶]]></title><description><![CDATA[JS进阶：链接: https://pan.baidu.com/s/1qY0rzLM 密码: 7h9t
Ajax进阶：链接: https://pan.baidu.com/s/1qY1Dyvq 密码: xhxm
JQuery进阶：链接: https://pan.baidu.com/s/1o883aFw 密码: m4k6]]></description><link>https://blog.gaoredu.com/article/d914a3aa-f56a-4a1f-a868-351fd72d51ac</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d914a3aa-f56a-4a1f-a868-351fd72d51ac</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:52:57 GMT</pubDate></item><item><title><![CDATA[基于QT的开发实战]]></title><description><![CDATA[476

QT网友视频：链接: https://pan.baidu.com/s/1pLFSBtL 密码: ewfz
丁林松：链接: https://pan.baidu.com/s/1eSgtdwI 密码: 3iwi
英文版：链接: https://pan.baidu.com/s/1jImW5Dk 密码: g5in



此外学习Qt推荐几个资源哈：
【Qt教程】2018最新最适合初学者入门的QT5最新入门视频教程完整版
https://www.52tech.tech/forum.php?mod=viewthread&tid=906&fromuid=1
(出处: 我爱科技论坛)

学好QT，下面这些电子书资料应该就够了
https://www.52tech.tech/forum.php?mod=viewthread&tid=390&fromuid=1
(出处: 我爱科技论坛)


QT所有版本下载链接，从QT1.0版本到QT5.10版本全系列
https://www.52tech.tech/forum.php?mod=viewthread&tid=165&fromuid=1
(出处: 我爱科技论坛)




]]></description><link>https://blog.gaoredu.com/article/a69e74f2-6aa0-4d46-b2e8-afff1cc84cd5</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a69e74f2-6aa0-4d46-b2e8-afff1cc84cd5</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:48:54 GMT</pubDate></item><item><title><![CDATA[韩顺平PHP视频教程]]></title><description><![CDATA[视频介绍：PHP，是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言，是一种在服务器端执行的嵌入HTML文档的脚本语言，语言的风格有类似于C语言，被广泛的运用。 为此，传智播客特免费赠送其他机构需价值上万元的PHP系列视频教程！针对广大的PHP初学者和已经具有多年PHP开发经验程序员，让您在PHP领域上更 上一层楼！观看须知：本视频教程为传智播客 讲师 韩顺平 PHP从入门到精通视频教程（更新到第149讲...），教程采用的wmv方式发布，所以看起来 很流畅，大家可以通过各种视频播放软件(暴风影音 kmplayer)观看和学习。视频目录如下：
0讲 PHP开山篇
1讲 html介绍 html运行原理①
2讲 html运行原理② html文件基本结构 html元素和属性
3讲 符号实体 url说明 超链接 发送电邮
4讲 图像 表格 实际应用-菜谱 课堂练习-课程表
5讲 无序列表 有序列表 框架
6讲 浮动窗口 表单及表单控件①
7讲 表单及表单控件②
8讲 多媒体页面 标签汇总① 地图映射
9讲 多标签汇总② 线包字效果 测试题
10讲 div+css开山篇
11讲 初识css 类选择器 id选择器 html选择器
12讲 通配符选择器 父子选择器
13讲 选择器使用细节 块元素和行内元素 盒子模型 盒子模型经典应用①
14讲 盒子模型经典应用② 作业布置
15讲 div+css作业评讲①
16讲 div+css作业评讲②
17讲 div+css作业评讲③
18讲 浮动
19讲 网站推荐 定位
20讲 仿sohu首页面布局 可爱屋首页面
21讲 解答学员问题
22讲 可爱屋首页面(浏览器兼容)评讲
23讲 动态网页技术介绍 PHP基本介绍
24讲 PHP快速入门 bs和cs介绍
25讲 web服务器介绍 apache服务器安装
26讲 apache服务器使用及配置① 启动和停止 端口配置
27讲 apache服务器使用及配置② apache目录结构
28讲 apache服务器使用及配置③ apache虚拟目录
29讲 apache服务器使用及配置④ apache虚拟主机 web访问时序图
30讲 apache服务器使用及配置⑤ 作业点评 提出apache和PHP整合的需求
31讲 PHP开发环境的搭建和使用① appserv套件安装
32讲 PHP开发环境的搭建和使用② 自定义安装
33讲 PHP开发环境的搭建和使用③ 安装并配置discuz论坛
34讲 解答学生问题--一个ip绑定多个域名
35讲 PHP运行过程时序图 PHP书写规范
36讲 PHP基本语法介绍 PHP数据类型介绍
37讲 整型细节说明
38讲 布尔细节 浮点数细节 字符串细节 算术运算符①
39讲 算术运算符② 比较运算符 逻辑运算符
40讲 三元运算符 类型运算符 运算符优先级
41讲 顺序控制 分支控制(if ifelse switch) 程序流程图
42讲 循环控制①(for)
43讲 循环控制②(while dowhile) 打印金字塔案例
44讲 打印金字塔案例评讲 布置练习题
45讲 break语句 continue语句 常量
46讲 函数基本概念 函数快速入门
47讲 函数使用 函数调用初步理解
48讲 函数调用深入理解 函数使用注意事项①
49讲 函数使用注意事项② 函数作业布置
50讲 函数再回顾 自定义函数
51讲 位运算①
52讲 位运算②
53讲 数组介绍 数组的创建 数组的遍历
54讲 数组的引用 数组使用细节①
55讲 数组使用细节② 数组运算符 数组作业评讲① 数组小结
56讲 排序介绍 冒泡排序
57讲 选择排序 插入排序 快速排序
58讲 顺序查找 二分查找
59讲 多维数组 数组作业评讲②
60讲 数组作业评讲③
61讲 类与对象的基本概念
62讲 成员属性 如何创建对象
63讲 对象在内存中存在形式 函数传递对象方式
64讲 函数传递基本数据类型和数组方式 成员方法①
65讲 成员方法②
66讲 作业评讲>
67讲 构造方法
68讲 析构方法
69讲 static关键字(静态变量)
70讲 static关键字(静态方法) 面向对象编程三大特性①
71讲 面向对象编程三大特性②
72讲 面向对象编程三大特性③
73讲 面向对象编程三大特性④
74讲 面向对象编程三大特性⑤
75讲 抽象类
76讲 接口
77讲 继承与实现比较 final const
78讲 面向对象综合案例
79讲 错误和异常处理介绍 处理错误方式①-die
80讲 处理错误方式②-错误处理器 错误级别 处理错误方式③-错误触发器
81讲 PHP错误日志
82讲 PHP异常处理
83讲 PHP进阶预热篇-PHP执行流程时序图
84讲 http协议深度剖析①-http请求详解 防盗链技术
85讲 http协议深度剖析②-http响应详解(302 304码运用)
86讲 http协议深度剖析③-http响应详解(禁用缓存设置)
87讲 http协议深度剖析④-http响应详解(文件下载)
88讲 http协议深度剖析⑤-http响应详解(作业评讲)
89讲 PHP数据库编程①-使用mysql扩展库
90讲 PHP数据库编程②-使用mysql扩展库
91讲 PHP数据库编程③-使用mysql扩展库
92讲 PHP数据库编程④-使用mysql扩展库(在线词典案例)
93讲 PHP数据库编程⑤-使用mysql扩展库(在线词典案例)
94讲 PHP数据库编程⑥-使用mysqli扩展库
95讲 PHP数据库编程⑦-使用mysqli扩展库
96讲 PHP数据库编程⑧-使用mysqli扩展库(布置练习)
97讲 PHP数据库编程⑨-使用mysqli扩展库增强(批量执行sql和事务控制)
98讲 PHP数据库编程(10)-使用mysqli扩展库增强(预处理技术)
99讲 PHP数据库编程(11)-使用mysqli扩展库增强(预处理技术)
100讲 预定义超全局数组①-原理分析 $_GET
101讲 预定义超全局数组②-$_POST $_REQUEST
102讲 预定义超全局数组③-$_SERVER $_ENV $GLOBALS
103讲 zend studio使用 项目开发五个阶段 雇员管理系统①
104讲 雇员管理系统②-model1模式简单登录
105讲 雇员管理系统③-model1模式数据库登录
106讲 雇员管理系统④-model1模式雇员分页
107讲 雇员管理系统⑤-分层模式管理员登录
108讲 雇员管理系统⑥-分层模式雇员分页
109讲 雇员管理系统⑦-分层模式整体翻页
110讲 雇员管理系统⑧-分层模式通用分页模块
111讲 雇员管理系统⑨-mvc模式介绍
112讲 mvc模式①-用mvc模式改进网站结构
113讲 mvc模式②-用mvc模式改进网站结构
114讲 cookie①-cookie原理介绍 创建cookie 获取cookie
115讲 cookie②-更新cookie 删除cookie cookie运用案例
116讲 cookie③-雇员管理系统使用cookie技术 1.显示上传登录时间2.保留登录id
117讲 session①-session原理介绍 保存session
118讲 session②-获取session 更新session 删除session session细节和原理深入讨
119讲 session③-购物车 cookie禁用后如何使用session session防用户非法登录
120讲 session④-验证码防恶意攻击
121讲 session⑤-session配置 session的gc机制 自定义session处理器
122讲 PHP文件编程①-文件操作原理 如何获取文件信息 如何读文件
123讲 PHP文件编程②-如何写文件 拷贝文件 创建和删除(文件夹、文件)
124讲 PHP文件编程③-文件的上传和下载 文件上传细节讨论
125讲 PHP文件编程④-mini文件共享网实现分析
126讲 PHP绘图技术①-报表简介
127讲 PHP绘图技术②-PHP绘图坐标体系
128讲 PHP绘图技术③-PHP绘图原理及步骤
129讲 PHP绘图技术④-PHP绘图核心技术
130讲 PHP绘图技术⑤-绘制3d效果人口分布饼状图
131讲 PHP绘图技术⑥-JpGraph-网民支持情况统计图(静态数据)
132讲 PHP绘图技术⑦-JpGraph-网民支持情况统计图(实时数据)
133讲 PHP绘图技术⑧-绘制验证码
134讲 PHP xml编程①-xml基本介绍 xml元素 xml属性
135讲 PHP xml编程②-cdata 实体字符 处理指令 dtd快速入门 编程校验xml
136讲 PHP xml编程③-内部dtd 外边dtd dtd元素 dtd修饰符
137讲 PHP xml编程④-dtd属性 引用实体 参数实体 ide开发xml
138讲 PHP xml编程⑤-复杂的dtd综合练习
139讲 PHP xml编程⑥-dom基本概念 PHPdom编程(1)
140讲 PHP xml编程⑦-PHPdom编程(2)
141讲 PHP xml编程⑧-PHPdom编程(3) 综合练习-基于xml的在线词典
142讲 PHP xml编程⑨-综合练习-基于xml的在线词典 PHPdom使用xpath
143讲 PHP xml编程(10)-SimpleXML
144讲 PHP绘图技术(11)-基于xml的在线词典评讲
145讲 开发自己的网上支付平台①-网上支付的两种方式及其流程介绍
146讲 开发自己的网上支付平台②-商家与易宝支付网关对接详解
147讲 开发自己的网上支付平台③-发送支付请求
148讲 开发自己的网上支付平台④-接收支付结果
149讲 开发自己的网上支付平台⑤-防止回调页面刷新
第150讲 smarty基本介绍 快速入门.wmv
第151讲 smarty原理详解-仿模板引擎1.wmv
第152讲 smarty原理详解-仿模板引擎2.wmv
第153讲 smarty安装、配置、使用.wmv
第154讲 smarty变量操作1.wmv
第155讲 smarty变量操作2 内建函数1.wmv
第156讲 内建函数2.wmv
第157讲 内建函数3  自定义函数1.wmv
第158讲 自定义函数2.wmv
第159讲 smarty综合运用-部门留言板1.wmv
第160讲 smarty阶段回顾.wmv
第161讲 smarty综合运用-部门留言板2.wmv
第162讲 smarty综合运用-部门留言板3.wmv
第163讲 smarty语法细节 数学运算 变量操作符详解1.wmv
第164讲 变量操作符详解2.wmv
第165讲 变量操作符详解3.wmv
第166讲 smarty内建函数加强1.wmv
第167讲 smarty内建函数加强2.wmv
第168讲 smarty自定义函数1.wmv
第169讲 smarty自定义函数2.wmv
第170讲 smarty变量 缓存技术详解1.wmv
第171讲 缓存技术详解2.wmv
第172讲 smarty方法.wmv
第173讲 smarty高级特性 操作对象 过滤器.wmv
第174讲 zend快速入门1.wmv
第175讲 zend快速入门2.wmv
第176讲 zend原理剖析 zend整合数据库.wmv
第177讲 zend原理深度剖析.wmv
第178讲 综合应用-数据采集系统1.wmv
第179讲 综合应用-数据采集系统2.wmv
第180讲 阶段复习.wmv
第181讲 综合应用-数据采集系统3.wmv
第182讲 综合应用-数据采集系统4.wmv
第183讲 综合应用-数据采集系统5.wmv
第184讲 多表操作1.wmv
第185讲 多表操作2.wmv
第186讲 多表操作3.wmv
第187讲 多表操作4.wmv
第188讲 综合应用-购物车1.wmv
第189讲 综合应用-购物车2.wmv
第190讲 综合应用-购物车3.wmv
第191讲 综合应用-购物车4.wmv
第192讲 综合应用-购物车5(发送邮件).wmv
第193讲 综合应用-购物车6.wmv
第194讲 Ajax是什么.wmv
第195讲 Ajax原理图.wmv
第196讲 无刷新验证用户名.wmv
第197讲 返回XML如何处理(一).wmv
第198讲 返回XML如何处理(二).wmv
第199讲 返回JSON如何处理(一).wmv
第200讲 返回JSON如何处理(二).wmv
第201讲 省市联动实例.wmv
第202讲 黄金价格实时图实例.wmv
第203讲 阶段小结.wmv
第204讲 WEB版QQ多人聊天，带离线留言功能(一).wmv
第205讲 WEB版QQ多人聊天，带离线留言功能(二).wmv
第206讲 WEB版QQ多人聊天，带离线留言功能(三).wmv
第207讲 WEB版QQ多人聊天，带离线留言功能(四).wmv
第208讲 WEB版QQ多人聊天，带离线留言功能(五).wmv

链接: https://pan.baidu.com/s/1boCDcFd 密码: 7wr3]]></description><link>https://blog.gaoredu.com/article/ace6039b-d0b6-4497-91a8-c3c61ab6ed57</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ace6039b-d0b6-4497-91a8-c3c61ab6ed57</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:46:49 GMT</pubDate></item><item><title><![CDATA[价值千元的最新版老罗安卓开发从零到精通实战视频教程（共两季）]]></title><description><![CDATA[都说老罗有锤子手机，其实老罗老师也有视频教程哈，哈哈

1151
第一季教程链接: https://pan.baidu.com/s/1qYbUU1Q 密码: 4e1y
第二季教程链接: https://pan.baidu.com/s/1skEmumx 密码: rpdg






再分享几个站内的教程：
黑马28期Android全套视频无加密完整版下载
https://www.52tech.tech/forum.php?mod=viewthread&tid=80&fromuid=1
(出处: 我爱科技论坛)



【安卓基础】基于Androidstudio的安卓从入门到精通全套视频教程
https://www.52tech.tech/forum.ph ... d=767&fromuid=1
(出处: 我爱科技论坛)



10天带你Hode住安卓《智慧北京》项目项目实战视频教程
https://www.52tech.tech/forum.ph ... d=637&fromuid=1
(出处: 我爱科技论坛)



传智播客76期安卓视频教程分享
https://www.52tech.tech/forum.ph ... d=526&fromuid=1
(出处: 我爱科技论坛)

]]></description><link>https://blog.gaoredu.com/article/affaada9-2c03-4c7f-8eb8-5abb4b74645a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/affaada9-2c03-4c7f-8eb8-5abb4b74645a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:44:49 GMT</pubDate></item><item><title><![CDATA[和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享]]></title><description><![CDATA[自己网盘珍藏的：韩顺平Java和javaEE视频教程完整版 分享给大家！在本模块进行相关资料的下载，以供学习交流！



和韩老师一起学java珍藏版的链接: https://pan.baidu.com/s/1c2D7hmw 密码: vn3j






此外学习java的同学还可以看看下面这几个：

【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1

【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1

【java架构师】2018最新打造从菜鸟到java架构师的高级编程之路实战视频教程
https://www.52tech.tech/forum.ph ... d=796&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/540dd8b5-d85a-4ca2-b9f5-37743220d736</link><guid isPermaLink="true">https://blog.gaoredu.com/article/540dd8b5-d85a-4ca2-b9f5-37743220d736</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:43:56 GMT</pubDate></item><item><title><![CDATA[韩顺平HTML+CSS+JS入门到精通]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1o8DSDuE 密码: eij8]]></description><link>https://blog.gaoredu.com/article/c0bc25ed-87a8-4535-a22c-1481c60868f6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/c0bc25ed-87a8-4535-a22c-1481c60868f6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:43:03 GMT</pubDate></item><item><title><![CDATA[c++中国象棋实战（大师带你4天开发出一个企业版的中国象棋游戏）]]></title><description><![CDATA[1153


这套精品视频教程可以带你从0开发出来一个企业版的中国象棋小游戏。
教程目录如下:
第一天：
1.QT基础介绍.wmv
2.象棋整体框架介绍.wmv
3.使用QT绘制棋盘.wmv



第二天：
1.初始化棋子.wmv
2.走棋.wmv
3.总结.wmv
4.象棋走棋规则和轮流规则.wmv
5.参考代码中的其他棋子的游戏规则.w



第三天：
1.一步象棋人工智能.wmv
2.两步的人工智能.wmv
4.走n步的人工智能.wmv
5.优化-剪枝算法.wmv
6.最小值最大值算法解释.wmv



第四天：
1.网络版本的实现.wmv
2.android移植.wmv
3.复习参考代码.wmv

链接: https://pan.baidu.com/s/1i5BvaZj 密码: rfar



由于这个视频是基于QT进行界面绘制的，如果你还没学过Qt的话，可以看下下面几个资源：
基于QT的开发实战【强烈推荐】
https://www.52tech.tech/forum.php?mod=viewthread&tid=23&fromuid=1


【Qt教程】2018最新最适合初学者入门的QT5最新入门视频教程完整版
https://www.52tech.tech/forum.php?mod=viewthread&tid=906&fromuid=1
(出处: 我爱科技论坛)


]]></description><link>https://blog.gaoredu.com/article/98b43b99-6a8d-49a8-bca5-b78c4f5e0e65</link><guid isPermaLink="true">https://blog.gaoredu.com/article/98b43b99-6a8d-49a8-bca5-b78c4f5e0e65</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:42:07 GMT</pubDate></item><item><title><![CDATA[韩顺平的SSH框架]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1o85fnjO 密码: nyba
链接: https://pan.baidu.com/s/1bpHCVuR 密码: ar7r
链接: https://pan.baidu.com/s/1nv0x7qL 密码: pac8]]></description><link>https://blog.gaoredu.com/article/8812d667-a294-4953-90f7-550a97c4255e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/8812d667-a294-4953-90f7-550a97c4255e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:41:03 GMT</pubDate></item><item><title><![CDATA[徐涛政治的答题技巧班（建议大家都来看一下）]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1o8LunMU 密码: uf97
链接: https://pan.baidu.com/s/1kVQQb0z 密码: s31x
链接: https://pan.baidu.com/s/1dEBSWRB 密码: d76a]]></description><link>https://blog.gaoredu.com/article/64697e9c-4d2a-4c19-88b4-e278bbabc760</link><guid isPermaLink="true">https://blog.gaoredu.com/article/64697e9c-4d2a-4c19-88b4-e278bbabc760</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:39:08 GMT</pubDate></item><item><title><![CDATA[张孝祥Java基础加强]]></title><description><![CDATA[这是张孝祥老师所制作的一个关于Java的视频教程，包括了JavaSE的方方面面，能讲到的都讲到了，包括Java基础，Java多线程，Java AWT，Java Swing，Java网络编程等。张孝祥老师是我们最为敬佩的一个视频制作者，再此向他致敬 ！！！
链接: https://pan.baidu.com/s/1kV7TjDl 密码: a43x





再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/4fb01224-0676-4470-9f5f-20fb14bcfb35</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4fb01224-0676-4470-9f5f-20fb14bcfb35</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:27:32 GMT</pubDate></item><item><title><![CDATA[JQuery视频教程]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1boN2xQJ 密码: gpmu
]]></description><link>https://blog.gaoredu.com/article/a428a390-b359-42e5-aebc-336580f0ba9a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/a428a390-b359-42e5-aebc-336580f0ba9a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:24:53 GMT</pubDate></item><item><title><![CDATA[小象大数据分析视频教程（Hadoop+Spark+Redis+HBase）【不加密版】]]></title><description><![CDATA[这套视频教程的目录如下：
企业级Hadoop、Spark应用、开发、整合
spark内核原理与项目架构案例-CHEN超
Spark 1.X 大数据平台V2
Redis从入门到精通
Mahout入门与实战
Hive进阶课程
HBase进阶 
hadoop进阶
Hadoop 2.X大数据平台V3



链接: https://pan.baidu.com/s/1eSfDgfo 密码: reai




链接补发:
链接:https://pan.baidu.com/s/1J4PPLm1XVAuwLb5zbIhk7w 密码:cda9





此外可以看下这个：
【大数据教程】2020最新大数据Hadoop/MapReduce跳槽班百G精品视频教程免费分享
https://www.52tech.tech/forum.php?mod=viewthread&tid=969&fromuid=1


最新传智Hadoop大数据分析与挖掘视频教程百度云盘下载
https://www.52tech.tech/forum.ph ... d=631&fromuid=1





]]></description><link>https://blog.gaoredu.com/article/4e00ea31-69cb-4e63-bd89-d0c664841180</link><guid isPermaLink="true">https://blog.gaoredu.com/article/4e00ea31-69cb-4e63-bd89-d0c664841180</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:23:40 GMT</pubDate></item><item><title><![CDATA[上海交大的计算机图形学]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1sluPG89 密码: nrvt





2019年12月3日更新
链接: https://pan.baidu.com/s/1M_OeAHJI5jm-VIuezYQdrA 提取码: gcbs 复制这段内容后打开百度网盘手机App，操作更方便哦
]]></description><link>https://blog.gaoredu.com/article/db84fd8e-209e-4f0c-97d4-dbcb7fb206e6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/db84fd8e-209e-4f0c-97d4-dbcb7fb206e6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:22:40 GMT</pubDate></item><item><title><![CDATA[目前网上最全面实用的OpenGL视频教程]]></title><description><![CDATA[260

入门基础：链接: https://pan.baidu.com/s/1i5tefoL 密码: mbh9
中文基础：链接: https://pan.baidu.com/s/1dFm0GUX 密码: yih4
技术文档：链接: https://pan.baidu.com/s/1bpHCVrp 密码: m5mn
三维粒子引擎制作：链接: https://pan.baidu.com/s/1mhVX232 密码: srz7
OpenGLES视频：链接: https://pan.baidu.com/s/1slz93MP 密码: zs42
OpenGL库文件：链接: https://pan.baidu.com/s/1hsGgNB2 密码: 15qm
安卓3D游戏开发：链接: https://pan.baidu.com/s/1c1FsNyo 密码: 3i82

再推荐一本NeHe 的OpenGl教程，很经典，强烈推荐！
书籍资料：http://url.cn/5ZKm4nB  密码：g3BIAr
代码：http://url.cn/5nJEa04 密码：qrtc6f
如果想学习WEBGL，请参见文章：
WEBGL中英文学习资料和视频教程
http://www.52tech.tech/forum.php?mod=viewthread&tid=39&fromuid=1

附件【GLTOOLS工具包】
链接：http://url.cn/5DjTjZl  密码：6oDBYS
(出处: 我爱科技论坛)



]]></description><link>https://blog.gaoredu.com/article/174d6b49-e87d-4f56-a564-07b4aef8ca7e</link><guid isPermaLink="true">https://blog.gaoredu.com/article/174d6b49-e87d-4f56-a564-07b4aef8ca7e</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 17:20:30 GMT</pubDate></item><item><title><![CDATA[韩顺平Java基础珍藏版视频教程分享]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1hsrKykk 密码: vkba

点击此处进入：【张孝祥Java基础加强】
点击此处进入：【java编程进阶学习】
点击此处进入：【Java高级编程】






再来分享几个java相关的教程吧：
和韩顺平老师一起学java之J2EE实战教程珍藏版视频教程分享
https://www.52tech.tech/forum.ph ... id=20&fromuid=1

【资源共享】分享一套最新价值千元的JavaWEB全栈工程师必备的SSM框架系列教程
https://www.52tech.tech/forum.ph ... d=966&fromuid=1


【资料共享】某课vipJava零基础入门三步走2020最新java完整教程无加密版
https://www.52tech.tech/forum.ph ... d=955&fromuid=1


【后台进阶】2018最新深入理解java虚拟机和内存原理全套视频教程
https://www.52tech.tech/forum.ph ... d=822&fromuid=1


最新 Java并发编程原理与实战视频教程百度云下载
https://www.52tech.tech/forum.ph ... d=635&fromuid=1


【java项目实战】2018最新传智播客JavaEE第49期实战视频教程（前端+后台+项目部署）
https://www.52tech.tech/forum.ph ... d=734&fromuid=1


【java进阶】Java秒杀系统方案优化 高性能高并发实战视频教程
https://www.52tech.tech/forum.ph ... d=783&fromuid=1
]]></description><link>https://blog.gaoredu.com/article/1e543da1-e691-42ab-ade6-8a0273c450c0</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1e543da1-e691-42ab-ade6-8a0273c450c0</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:24:00 GMT</pubDate></item><item><title><![CDATA[C++全套教程基础进阶]]></title><description><![CDATA[C++全套教程基础进阶，这套教程应该是目前收藏最完善的一套C++系列教程，深入浅出，通俗易懂,推荐给大家！
链接: https://pan.baidu.com/s/1bCEVZC 密码: cmwr]]></description><link>https://blog.gaoredu.com/article/dd22e340-7372-4702-88f8-75c34b76abb6</link><guid isPermaLink="true">https://blog.gaoredu.com/article/dd22e340-7372-4702-88f8-75c34b76abb6</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:22:34 GMT</pubDate></item><item><title><![CDATA[杨中科DOM编程]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1pLdsQDX 密码: 6g44]]></description><link>https://blog.gaoredu.com/article/48186ccf-1f48-445f-8c98-219ba39dcc94</link><guid isPermaLink="true">https://blog.gaoredu.com/article/48186ccf-1f48-445f-8c98-219ba39dcc94</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:20:48 GMT</pubDate></item><item><title><![CDATA[动力节点王勇SSM教程全集]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1dF6d1Zj 密码: vgpp
]]></description><link>https://blog.gaoredu.com/article/ca469822-47df-43f0-9e51-75a4d36bc38a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/ca469822-47df-43f0-9e51-75a4d36bc38a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:19:03 GMT</pubDate></item><item><title><![CDATA[韩顺平XML教程]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1i5FyOhZ 密码: 9se8]]></description><link>https://blog.gaoredu.com/article/1d193c92-4de5-4a24-b1a4-6afa1c8afb47</link><guid isPermaLink="true">https://blog.gaoredu.com/article/1d193c92-4de5-4a24-b1a4-6afa1c8afb47</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:17:29 GMT</pubDate></item><item><title><![CDATA[Python从入门到精通教程]]></title><description><![CDATA[链接: https://pan.baidu.com/s/1qYI80pe 密码: ajsh]]></description><link>https://blog.gaoredu.com/article/71ec68a3-001b-40c3-91fc-263a607d7a5a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/71ec68a3-001b-40c3-91fc-263a607d7a5a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:16:32 GMT</pubDate></item><item><title><![CDATA[K哥的午夜十篇]]></title><description><![CDATA[K哥资料荟萃集：链接: https://pan.baidu.com/s/1pKRNGmf 密码: yhve
带你练真题：链接: https://pan.baidu.com/s/1skMtQjF 密码: 2qkf
五夜十篇：链接: https://pan.baidu.com/s/1slsNPIP 密码: vgdv
英语强化：链接: https://pan.baidu.com/s/1bp2dY9p 密码: f3ya
何凯文写作：链接: https://pan.baidu.com/s/1boUnVC7 密码: n2zt
]]></description><link>https://blog.gaoredu.com/article/5068188e-3014-4c36-bef2-e13f3a510f5a</link><guid isPermaLink="true">https://blog.gaoredu.com/article/5068188e-3014-4c36-bef2-e13f3a510f5a</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:14:55 GMT</pubDate></item><item><title><![CDATA[数学一资料分享]]></title><description><![CDATA[李永乐系列：链接: https://pan.baidu.com/s/1c2APwNQ 密码: pxq2
链接: https://pan.baidu.com/s/1c11LC20 密码: y63p
链接: https://pan.baidu.com/s/1o7RjFAE 密码: t4n4
链接: https://pan.baidu.com/s/1dFMY4hz 密码: f914
链接: https://pan.baidu.com/s/1cwGlrC 密码: pncv
链接: https://pan.baidu.com/s/1pL0t1I7 密码: 7yim
链接: https://pan.baidu.com/s/1eR1H8zS 密码: 2gg6
链接: https://pan.baidu.com/s/1eSq27S2 密码: zzi3
链接: https://pan.baidu.com/s/1skAO7wx 密码: wawp
链接: https://pan.baidu.com/s/1eSGQQC6 密码: 17yh
链接: https://pan.baidu.com/s/1hrWf46C 密码: 4zga
]]></description><link>https://blog.gaoredu.com/article/0dfa4c7d-5a7c-4651-8d4e-b5b58e114e55</link><guid isPermaLink="true">https://blog.gaoredu.com/article/0dfa4c7d-5a7c-4651-8d4e-b5b58e114e55</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 07:05:42 GMT</pubDate></item><item><title><![CDATA[免费分享整理的最全面的全国各大高校的专业课资料[考研资料]]]></title><description><![CDATA[  全国部分高校专业课真题资料免费分享，由于资料过多，如果没有找到你要找的资料，你也可以选择加入快乐学习群78925824，或直接在页面最下方点击加入QQ群询问群主获取更多专业课资料！
部分院校试题集：专业真题：链接: https://pan.baidu.com/s/1bpaZCKZ 密码: xeqm
链接: https://pan.baidu.com/s/1jI1jGH4 密码: 63g8
链接: https://pan.baidu.com/s/1dFhbkjv 密码: eqqk
链接: https://pan.baidu.com/s/1i4RZUQh 密码: qgw6
链接: https://pan.baidu.com/s/1i5rIv1F 密码: xe4c
链接: https://pan.baidu.com/s/1slNqd3J 密码: bbt9
链接: https://pan.baidu.com/s/1sl0p7it 密码: 6t15
链接: https://pan.baidu.com/s/1b3RGnW 密码: dj8u
链接: https://pan.baidu.com/s/1hsL64hY 密码: a4pp
链接: https://pan.baidu.com/s/1qYr4bj2 密码: vwtu
链接: https://pan.baidu.com/s/1b7Vx74 密码: khcu
链接: https://pan.baidu.com/s/1c1MKxdY 密码: sxwa
链接: https://pan.baidu.com/s/1pKVl56j 密码: hn96
链接: https://pan.baidu.com/s/1kVOioGR 密码: 64vd
链接: https://pan.baidu.com/s/1jHCyOyM 密码: 2urh
链接: https://pan.baidu.com/s/1dEZ97UD 密码: 3eei
链接: https://pan.baidu.com/s/1hrJUz56 密码: ubdn
链接: https://pan.baidu.com/s/1hsQWlDU 密码: 7xcq
链接: https://pan.baidu.com/s/1qY2Zx9M 密码: 3c2n
链接: https://pan.baidu.com/s/1pKGswbh 密码: b8ri
链接: https://pan.baidu.com/s/1jIcNj4i 密码: 4afe
链接: https://pan.baidu.com/s/1clkW7W 密码: f37c
链接: https://pan.baidu.com/s/1kU4VoZt 密码: 7edj
链接: https://pan.baidu.com/s/1bpJEUHD 密码: tvuy
链接: https://pan.baidu.com/s/1eRGAIem 密码: bxp2
链接: https://pan.baidu.com/s/1i57XwbF 密码: wshs
链接: https://pan.baidu.com/s/1jIrGqxw 密码: 7akj
链接: https://pan.baidu.com/s/1skMtPDz 密码: c64w
链接: https://pan.baidu.com/s/1kUJOtDH 密码: urdh
链接: https://pan.baidu.com/s/1gfgXcJL 密码: ufn8
链接: https://pan.baidu.com/s/1jHLSkS2 密码: 4asu



专业试卷：链接: https://pan.baidu.com/s/1nvHs9uT 密码: tn6q01链接: https://pan.baidu.com/s/1nuTTH5v 密码: jdbp
02链接: https://pan.baidu.com/s/1micdhnq 密码: qkpw
03链接: https://pan.baidu.com/s/1o8aDk4y 密码: itc6
04链接: https://pan.baidu.com/s/1o7Vn8Ci 密码: rixq
06链接: https://pan.baidu.com/s/1i4Xz8Vz 密码: thbg
07链接: https://pan.baidu.com/s/1jIf5gJO 密码: dkqc
08链接: https://pan.baidu.com/s/1qXGqxmk 密码: ccv6
09链接: https://pan.baidu.com/s/1c2935YC 密码: gdd6
10链接: https://pan.baidu.com/s/1gfD1kll 密码: t7eq
12链接: https://pan.baidu.com/s/1jI9Xnjo 密码: ijuc
13链接: https://pan.baidu.com/s/1sk92DJ3 密码: 1b75
15链接: https://pan.baidu.com/s/1c2KYOoC 密码: ragr
16链接: https://pan.baidu.com/s/1hszRS1I 密码: 27i8
17链接: https://pan.baidu.com/s/1jHE0GSI 密码: bs8c
18链接: https://pan.baidu.com/s/1qXPJJ6c 密码: mmp5
19链接: https://pan.baidu.com/s/1c11fFqw 密码: jgqb
20链接: https://pan.baidu.com/s/1skGopC5 密码: udij
22链接: https://pan.baidu.com/s/1pLLYpsf 密码: tvjd
23链接: https://pan.baidu.com/s/1mi9nlSc 密码: kxzc
25链接: https://pan.baidu.com/s/1sluPNzB 密码: d2an
26链接: https://pan.baidu.com/s/1pKDA9vX 密码: ed5j
27链接: https://pan.baidu.com/s/1ge3H4Vx 密码: cxaj
28链接: https://pan.baidu.com/s/1bpKuTiv 密码: 5eqn
29链接: https://pan.baidu.com/s/1slt3VQ1 密码: 14sk
30链接: https://pan.baidu.com/s/1dFzsbLJ 密码: t5xa
31链接: https://pan.baidu.com/s/1bp0cbSV 密码: shgb



真题笔记：
01计算机类：链接: https://pan.baidu.com/s/1nv0xDNz 密码: dgiu
02经济类：链接: 链接: https://pan.baidu.com/s/1miKI444 密码: njj4
03管理类：链接: https://pan.baidu.com/s/1mi9nlS8 密码: uehf
04金融：链接: https://pan.baidu.com/s/1ge81m2R 密码: 3u6v
05中文语言：链接: https://pan.baidu.com/s/1kVcfrHt 密码: rw2f
06新闻类：链接: https://pan.baidu.com/s/1i5cjq2h 密码: 2wq5
07外语类：链接: https://pan.baidu.com/s/1dEV5NBr 密码: 1rwj
08力学类：链接: https://pan.baidu.com/s/1bp0IaOf 密码: xtcx
09机械类：链接: https://pan.baidu.com/s/1qXTh4g0 密码: u49w
10遗传学：链接: https://pan.baidu.com/s/1qXPdO5Y 密码: j82t
11电子电路类：链接: https://pan.baidu.com/s/1jIraxBC 密码: 9da7
12生物类：链接: https://pan.baidu.com/s/1qYkcA3y 密码: 366r
13化工类：链接: https://pan.baidu.com/s/1geUfRkn 密码: jqu6
14材料学类：链接: https://pan.baidu.com/s/1c15j8Es 密码: 4526
15数学类：链接: https://pan.baidu.com/s/1bptW0GZ 密码: k4ga
16物理类：链接: https://pan.baidu.com/s/1kUCwIYb 密码: 55v2
17建筑类：链接: https://pan.baidu.com/s/1dFANtgX 密码: z3mm
18行政管理类：链接: https://pan.baidu.com/s/1pLbrfEb 密码: wxie
如果链接失效，请及时在下方跟帖回复，并留下你的邮箱或者百度云账号，版主也会及时回复大家并更新链接！【此外，主要高校的部分专业试题参见清单列表，如果没有你的高校试题信息，请在下方联系版主查询相关信息！】【如遇连接失效，请由此进入2018最新专业课笔记发布页】



【注意：1.由于百度云和谐资源速度很快， 如果遇到链接失效，请大家下载附件（为防止链接失效太快，请大家在下方留下你的联系方式，版主会及时将资源通过邮箱或者百度云的方式发送给大家，文件链接也将会持续更新）
2.对于专业课笔记，大家还是在下面留言吧，已经分享了好几波了，资源失效速度实在太快！3.注意回帖的时候，请务必注明你需要的资料类型，格式为：四川大学+历史学+专业课笔记，或者计算机专业笔记。
】



其他考研资料（数学，政治，英语）请戳此处：【传送门】【数学资料】 【英语资料】【政治资料】更多资料：【编程基础】 【Web前端】 【后台进阶】 【编程艺术】 



最新公共课资料发布页

如果这些资料还不过瘾，请进入【徐涛考研政治热搜帖】


























]]></description><link>https://blog.gaoredu.com/article/3e5a1c19-b041-4be2-9f64-f5d36f6e2b5d</link><guid isPermaLink="true">https://blog.gaoredu.com/article/3e5a1c19-b041-4be2-9f64-f5d36f6e2b5d</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 06:55:27 GMT</pubDate></item><item><title><![CDATA[52tech.tech我爱科技论坛新版上线啦！]]></title><description><![CDATA[欢迎各位新人和虫子，我爱科技论坛（www.52tech.tech）今天成功上线了，这是一个集齐考研资料，编程学习，书籍资料，原创资料和开源软件等模块为一体的论坛，大家可以在这里畅所欲言，分享或者下载需要的任何资料，祝各位新人和虫友水吧愉快！@所有新人虫友


站长致上！


]]></description><link>https://blog.gaoredu.com/article/d32a0f84-6239-4e34-8057-90f0c8d27032</link><guid isPermaLink="true">https://blog.gaoredu.com/article/d32a0f84-6239-4e34-8057-90f0c8d27032</guid><category><![CDATA[免费资源]]></category><dc:creator><![CDATA[https://github.com/fecommunity]]></dc:creator><pubDate>Thu, 12 Oct 2017 04:56:09 GMT</pubDate></item></channel></rss>