<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>编程语言 on 赵裕的博客</title>
    <link>/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/</link>
    <description>Recent content in 编程语言 on 赵裕的博客</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 30 Jul 2026 15:32:42 +0800</lastBuildDate>
    <atom:link href="/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>C&#43;&#43;升级之殇</title>
      <link>/articles/the-tragedy-of-cpp-upgrade/</link>
      <pubDate>Mon, 01 Jul 2024 00:00:00 +0000</pubDate>
      <guid>/articles/the-tragedy-of-cpp-upgrade/</guid>
      <description>是否应该从公司级统一升级Android NDK版本? 如果我们的引擎SDK升级到NDK25，那么调用我们的app都要升级NDK25. 我们的SDK也要给微信，手Q使用，如果让他们也去升级NDK25，不太现实</description>
    </item>
    <item>
      <title>C&#43;&#43;函数调用栈回溯初探</title>
      <link>/articles/cpp-function-callstack-backtrace-1/</link>
      <pubDate>Sun, 10 Apr 2022 00:00:00 +0000</pubDate>
      <guid>/articles/cpp-function-callstack-backtrace-1/</guid>
      <description>背景 之前在解决一个Flutter Engine的C++ Crash问题时，就曾受困于一个问题：如何回溯C++的 函数调用栈？最近频繁使用C++的过程中，这个诉求日益突出。 遂下定决心彻底解决之。 过程 在stac</description>
    </item>
    <item>
      <title>记一次AbstractMethodError</title>
      <link>/articles/abstractmethoderror-solve/</link>
      <pubDate>Tue, 24 Mar 2020 09:55:46 +0800</pubDate>
      <guid>/articles/abstractmethoderror-solve/</guid>
      <description>最近在灰度的时候发现了一个Error： 详细信息如下： 结合机型分布，可以判断是部分ROM自己的修改导致的问题(因为已经走到系统Api里面了)。 最后直接catch住了，因为触发的机型其实很少，灰度15w，</description>
    </item>
    <item>
      <title>Java URL类踩坑指南</title>
      <link>/articles/java-urllei-cai-keng-zhi-nan/</link>
      <pubDate>Sun, 26 Nov 2017 00:00:00 +0000</pubDate>
      <guid>/articles/java-urllei-cai-keng-zhi-nan/</guid>
      <description>Java URL类踩坑指南 java.net.URL类的几个细节问题。 背景介绍 最近再做一个RSS阅读工具给自己用，其中一个环节是从服务器端获取一个包含了RSS源列表的json文件，再根据这个json文件下载、解</description>
    </item>
    <item>
      <title>&#39;Python爬虫实战:妹子图&#39;</title>
      <link>/articles/pythonpa-chong-shi-zhan-mei-zi-tu/</link>
      <pubDate>Sun, 02 Jul 2017 00:00:00 +0000</pubDate>
      <guid>/articles/pythonpa-chong-shi-zhan-mei-zi-tu/</guid>
      <description>&amp;lsquo;Python爬虫实战:妹子图&amp;rsquo; 本文记录了一些爬虫的基础知识，并实现了一个50行左右的爬虫脚本。 前言 看了一些Python的语法后打算做一个小项目练手，打发一下时间。爬虫比较容易</description>
    </item>
    <item>
      <title>学习HotSpot（一）：Launcher</title>
      <link>/articles/xue-xi-hotspot-yi-launcher/</link>
      <pubDate>Mon, 29 May 2017 00:00:00 +0000</pubDate>
      <guid>/articles/xue-xi-hotspot-yi-launcher/</guid>
      <description>学习HotSpot（一）：Launcher 《Java虚拟机精讲》学习笔记：剖析HotSpot的Launcher。 HotSpot源码目录 可以用tree命令查看源码层次，对源码层次有一定印象有助于学习每个</description>
    </item>
    <item>
      <title>大端（Big Endian）与小端（Little Endian）</title>
      <link>/articles/da-duan-big-endian-yu-xiao-duan-little-endian/</link>
      <pubDate>Thu, 27 Apr 2017 00:00:00 +0000</pubDate>
      <guid>/articles/da-duan-big-endian-yu-xiao-duan-little-endian/</guid>
      <description>大端（Big Endian）与小端（Little Endian） 本文记录了计算机中存在的两种数据存储模式及其对网络编程的影响。 内存抽象 在较高层次上，可以把内存抽象成一个很大的数组。唯一不同的是，一个元素(</description>
    </item>
    <item>
      <title>C语言实现IPv6抓包程序</title>
      <link>/articles/cyu-yan-shi-xian-ipv6zhua-bao-cheng-xu/</link>
      <pubDate>Wed, 19 Apr 2017 00:00:00 +0000</pubDate>
      <guid>/articles/cyu-yan-shi-xian-ipv6zhua-bao-cheng-xu/</guid>
      <description>C语言实现IPv6抓包程序 本文记录了如何借助libpcap实现一个简单的抓包程序。 准备 对于实现一个抓包程序，最重要的是熟悉每种协议。熟悉协议包括两部分：每个协议具体字段的意义和每个协议在C语言中对应的</description>
    </item>
    <item>
      <title>Build Your Own Lisp中的闲言碎语</title>
      <link>/articles/build-your-own-lispzhong-de-xian-yan-sui-yu/</link>
      <pubDate>Sat, 08 Apr 2017 00:00:00 +0000</pubDate>
      <guid>/articles/build-your-own-lispzhong-de-xian-yan-sui-yu/</guid>
      <description>Build Your Own Lisp中的闲言碎语 Build Your Own Lisp中的一些摘录。 前不久，读完了Build Your Own Lisp。作者用C语言写了一个简单的Lisp解释器，代码之精妙、设计之优雅确实让我受益匪浅！ 不过，除了跟着作者写代码，</description>
    </item>
    <item>
      <title>关于C/C&#43;&#43;中指针自增运算符的思考</title>
      <link>/articles/guan-yu-c-c-zhong-zhi-zhen-zi-zeng-yun-suan-fu-de-si-kao/</link>
      <pubDate>Thu, 06 Apr 2017 00:00:00 +0000</pubDate>
      <guid>/articles/guan-yu-c-c-zhong-zhi-zhen-zi-zeng-yun-suan-fu-de-si-kao/</guid>
      <description>关于C/C++中指针自增运算符的思考 本文记录了C/C++中指针自增运算的一些微妙特性。 问题引入 C代码： #include &amp;lt;stdio.h&amp;gt; int main(int argc, char const* argv[]) { int a = 1, *p = &amp;amp;a; ++++p; ++p++; return 0; } C++代码： #include &amp;lt;bits/stdc++.h&amp;gt; int main(int argc, char const* argv[]) { int a = 1, *p = &amp;amp;a; ++++p; ++p++; return 0; } 编</description>
    </item>
    <item>
      <title>踩坑记：从C&#43;&#43;变量到Java引用</title>
      <link>/articles/cai-keng-ji-cong-c-bian-liang-dao-javayin-yong/</link>
      <pubDate>Fri, 24 Mar 2017 00:00:00 +0000</pubDate>
      <guid>/articles/cai-keng-ji-cong-c-bian-liang-dao-javayin-yong/</guid>
      <description>踩坑记：从C++变量到Java引用 本文介绍了Java和C++中变量名（对象类型）的细微差别。 问题引入 问题的产生自另一个题目: 请实现一种数据结构SetOfStacks，由多个栈组成，其中每个栈的大小为s</description>
    </item>
    <item>
      <title>&#39;C语言中不带{}的代码块&#39;</title>
      <link>/articles/cyu-yan-zhong-bu-dai-de-dai-ma-kuai/</link>
      <pubDate>Thu, 16 Mar 2017 00:00:00 +0000</pubDate>
      <guid>/articles/cyu-yan-zhong-bu-dai-de-dai-ma-kuai/</guid>
      <description>&amp;lsquo;C语言中不带{}的代码块&amp;rsquo; 本文讨论了C99中的一个新特性：不带{}的代码块。以及阅读编程语言教程的一种新思路。 问题 在阅读C Primer Plus325页时遇到以下一句话： 先前曾提到C99</description>
    </item>
    <item>
      <title>C语言宏展开的顺序问题</title>
      <link>/articles/cyu-yan-hong-zhan-kai-de-shun-xu-wen-ti/</link>
      <pubDate>Tue, 14 Mar 2017 00:00:00 +0000</pubDate>
      <guid>/articles/cyu-yan-hong-zhan-kai-de-shun-xu-wen-ti/</guid>
      <description>C语言宏展开的顺序问题 本文记录了作者遇到的一个关于C语言宏展开顺序的问题及其解释。 问题 这是我在阅读The C Puzzle Book一书中遇到的一个问题，为了简化问题，我写了以下一段代码 #include &amp;lt;stdio.h&amp;gt; #define TEST(x) x*5 #define PR(x) printf(#x &amp;#34; = %d&amp;#34;, x) #define PRINT1(x) PR(x);printf(&amp;#34;\n&amp;#34;)</description>
    </item>
    <item>
      <title>Java逆向之UML查看工具（检索记录）</title>
      <link>/articles/2017-uml-viewing-tool-for-java-reverse-engineering-retrieval-records/</link>
      <pubDate>Thu, 23 Feb 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-uml-viewing-tool-for-java-reverse-engineering-retrieval-records/</guid>
      <description>花了几个钟头时间，搜索了一下，如何从源代码得到UML,因为WCI（Writing Compilers and Interpreters,下同）越往后代码越多，必须得借助工具才能把握整个工程了。初次涉猎此方面，花了不少时间，感觉</description>
    </item>
    <item>
      <title>ClassNotFoundException------IDEA下的一种原因</title>
      <link>/articles/2017-classnotfoundexception-a-reason-under-idea/</link>
      <pubDate>Tue, 21 Feb 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-classnotfoundexception-a-reason-under-idea/</guid>
      <description>由于直接复制文件而未经过IDE造成次异常，需要修改程序入口：</description>
    </item>
    <item>
      <title>ClassNotFoundException------我有一句妈卖批一定要讲</title>
      <link>/articles/2017-classnotfoundexception-i-have-a-saying-that-i-must-say-when-i-sell-batches/</link>
      <pubDate>Tue, 21 Feb 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-classnotfoundexception-i-have-a-saying-that-i-must-say-when-i-sell-batches/</guid>
      <description>最近在写《Writing Compilers and Interpreters》一书的代码，本来打算用vim敲代码，一来每个字母都要自己敲，而来就当练习vim，但是感觉真是太不方便了，各种小错误，而且更奇怪的是放在这个目录不报</description>
    </item>
    <item>
      <title>《两周自制脚本语言》读后感</title>
      <link>/articles/2017-thoughts-after-reading-two-weeks-of-homemade-scripting-language/</link>
      <pubDate>Tue, 07 Feb 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-thoughts-after-reading-two-weeks-of-homemade-scripting-language/</guid>
      <description>粗略读完了本书，说实话比我想象的好。之前在学校就把基础部分（1-10章）过了一遍，回家之后比较懒，但终于看完了，代码也很好，可惜很多自己都没亲手敲。从消化程度来说，打算回学校之前再精读一遍，并敲完说有</description>
    </item>
    <item>
      <title>Java开发图片浏览器－－记录</title>
      <link>/articles/2017-java-development-picture-browser-record/</link>
      <pubDate>Fri, 03 Feb 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-java-development-picture-browser-record/</guid>
      <description>效果 设计思路 需求分析 图片浏览，上/下一张，放大缩小等基本功能。可以继续拓展的功能：缩略图、旋转，画笔修改等。此外，缩放实现较为简单，所以会出现失真。设计此类软件功能可参考ACDSee或irfanvie</description>
    </item>
    <item>
      <title>Common Lisp学习资源整理</title>
      <link>/articles/2017-common-lisp-learning-resources-collection/</link>
      <pubDate>Tue, 24 Jan 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-common-lisp-learning-resources-collection/</guid>
      <description>Lisp Hackers: Interviews with 100x More Productive Programmers Posted on June 26th, 2013 Lisp Hackers: Interviews with 100x More Productive Programmers, by Vsevolod Dyomkin, is available for free in multiple formats from Leanpub. Let Over Lambda Posted on November 18th, 2009 Free online book “Let Over Lambda” is one of the most hardcore computer programming books out there. Lisp Primer Posted on March 24th, 2006 This text has been written to provide a quick introduction to the basic elements of Common Lisp for both experienced and novice programmers. It is not</description>
    </item>
    <item>
      <title>安装lispbox出现：error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory</title>
      <link>/articles/2017-installing-lispbox-appears-error-while-loading-shared-libraries-libjpeg-so-62-cannot-open-shared-obj/</link>
      <pubDate>Thu, 19 Jan 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-installing-lispbox-appears-error-while-loading-shared-libraries-libjpeg-so-62-cannot-open-shared-obj/</guid>
      <description>如下图，运行lispbox出现如下报错（第一个命令）： 检索之后发现解决办法：Solution to libjpeg.so.62 输入一下两条命令（第二条也必须执行）： sudo apt-get upgrade sudo apt-get install libjpeg62-dev // if not 62-dev, the apt will tell you it can not locate the package libjpeg62 解决问题： 蛤蛤蛤！抓</description>
    </item>
    <item>
      <title>Coursera上一个不错的Java课</title>
      <link>/articles/2017-a-good-java-class-on-coursera/</link>
      <pubDate>Thu, 05 Jan 2017 00:00:00 +0000</pubDate>
      <guid>/articles/2017-a-good-java-class-on-coursera/</guid>
      <description>地址：https://www.coursera.org/learn/java-chengxu-sheji/home/welcome 复习天昏地暗，看点视频调剂一下。发现这个讲的还是很不错的。北大毕竟比我</description>
    </item>
    <item>
      <title>PL/0编译器实践---后记</title>
      <link>/articles/2016-pl-0-compiler-practice-postscript/</link>
      <pubDate>Tue, 20 Dec 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-pl-0-compiler-practice-postscript/</guid>
      <description>花了几天时间，把清华版的《编译原理》一书中的PL/0编译器实践了一遍。颇有收获，记录如下： 理解代码的技巧，如何理解一份代码，比如这个程序，其逻辑相对于一般程序就比较复杂了，如何翻译，虚拟机代码执行时数</description>
    </item>
    <item>
      <title>《C编译器剖析》后记</title>
      <link>/articles/2016-postscript-to-analysis-of-a-c-compiler/</link>
      <pubDate>Wed, 07 Dec 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-postscript-to-analysis-of-a-c-compiler/</guid>
      <description>这本书的序言、后记写的都让我很有感触！mark： 后 记 总有曲终人散时，不知不觉我们已经完成了对UCC 编译器的剖析，一路走来，最深的体会仍然是“纸上得来终觉浅，绝知此事要躬行”。按这个道理，理解UCC 编译</description>
    </item>
    <item>
      <title>编译原理实践:计算器</title>
      <link>/articles/2016-compilation-principles-in-practice-calculator/</link>
      <pubDate>Tue, 29 Nov 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-compilation-principles-in-practice-calculator/</guid>
      <description>概述 本博客主要讲述如何利用编译原理的知识实现一个控制台计算器.如果之前利用栈(在学数据结构的时候)实现过计算器,一定会有所印象,写一个计算器程序最重要的就是把握运算优先级了.而本文换一个角度,利用文法</description>
    </item>
    <item>
      <title>短语、直接短语与句柄</title>
      <link>/articles/2016-phrases-direct-phrases-and-handles/</link>
      <pubDate>Wed, 09 Nov 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-phrases-direct-phrases-and-handles/</guid>
      <description>问题背景 定义 举例 直观解释：</description>
    </item>
    <item>
      <title>Processing基础之绘画</title>
      <link>/articles/2016-processing-basics-of-painting/</link>
      <pubDate>Wed, 05 Oct 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-processing-basics-of-painting/</guid>
      <description>图形 //在(x, y)绘制点 point(x, y); //(x1, y1)到(x2, y2)的一条线 line(x1, y1, x2, y2); rect(x, y, weight, height); //Constant有三个值: //默认CORNER:rect(左上x, 左上y, 宽, 高) //CENTER:rect(中心x,</description>
    </item>
    <item>
      <title>HttpClient &#43; Jsoup模拟登录教务处并获取课表</title>
      <link>/articles/2016-httpclient-jsoup-simulates-logging-into-the-academic-affairs-office-and-obtaining-the-class-schedule/</link>
      <pubDate>Thu, 15 Sep 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-httpclient-jsoup-simulates-logging-into-the-academic-affairs-office-and-obtaining-the-class-schedule/</guid>
      <description>1、概述 最近想做一个校园助手类的APP，由于第一次做，所以打算先把每个功能单独实现，防止乱了阵脚。利用教务处登录获取课表和成绩等是一个基本功能，所以以获取课表为例实现了这个功能。完整代码点这里，尝试了</description>
    </item>
    <item>
      <title>Java学习路线图</title>
      <link>/articles/2016-java-learning-roadmap/</link>
      <pubDate>Wed, 14 Sep 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-java-learning-roadmap/</guid>
      <description>参考《疯狂Java实战演义》制作，觉得可以做一参考（放大网页看）</description>
    </item>
    <item>
      <title>Java文件处理：分离全国省市县ID（数据来自和风天气）</title>
      <link>/articles/2016-java-file-processing-separating-national-province-city-and-county-ids-data-from-zefeng-weather/</link>
      <pubDate>Tue, 30 Aug 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-java-file-processing-separating-national-province-city-and-county-ids-data-from-zefeng-weather/</guid>
      <description>最近，在做第一行代码上的酷欧天气APP，但是发现书中的API已经用不了了，所以选择了和风天气的API，但是，在遍历省市县数据是遇到了麻烦，之前中国天气网是有个省市对应下一级行政区列表的，像这样： 但是，</description>
    </item>
    <item>
      <title>Java命名约定</title>
      <link>/articles/2016-java-naming-conventions/</link>
      <pubDate>Tue, 09 Aug 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-java-naming-conventions/</guid>
      <description>类名 类名应该是名词， 描述对象。应该按照驼峰式写法，即只有每个单词首字母大写。 接口名称 接口名称应该是形容词，描述功能。应该以“able”、“ible”结尾，否则应该是名词。通常遵循和类名写相同的大小约定</description>
    </item>
    <item>
      <title>Java多线程实践</title>
      <link>/articles/2016-java-multithreading-practice/</link>
      <pubDate>Fri, 05 Aug 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-java-multithreading-practice/</guid>
      <description>1.实现Runnable接口 1 import java.util.Random; 2 3 4 public class PrintTask implements Runnable{ 5 private final int sleepTime; 6 private final String taskName; 7 private final static Random generator = new Random(); 8 9 10 public PrintTask(String name) { 11 taskName = name; 12 sleepTime = generator.nextInt(5000); 13 } 14 15 @Override 16 public void run() { 17 try { 18 System.out.printf(&amp;#34;%s going to Sleep for %d milliseconds.\n&amp;#34;, 19 taskName, sleepTime); 20 Thread.sleep(sleepTime); 21 } catch (InterruptedException e) { 22 System.out.printf(&amp;#34;%s %s\n&amp;#34;, taskName, &amp;#34;terminated prematurely&amp;#34; + 23 &amp;#34;</description>
    </item>
    <item>
      <title>C语言实现penna模型</title>
      <link>/articles/2016-c-language-to-implement-penna-model/</link>
      <pubDate>Fri, 03 Jun 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-c-language-to-implement-penna-model/</guid>
      <description>一年前写的代码，偶然翻出来。发现自己当时水平还不赖吗。 1 # include &amp;lt;stdio.h&amp;gt; 2 # include &amp;lt;stdlib.h&amp;gt; 3 # include &amp;lt;time.h&amp;gt; 4 # include &amp;lt;stdbool.h&amp;gt; 5 # include &amp;lt;windows.h&amp;gt; 6 7 # define N0 1000 //初始时刻种群数量为1000 8 # define Nmax 100000 //种群最大数量为100000 9 # define R 6 //最低繁殖年</description>
    </item>
    <item>
      <title>C语言用面向对象的思想写贪吃蛇</title>
      <link>/articles/2016-c-language-uses-object-oriented-thinking-to-write-greedy-snake/</link>
      <pubDate>Fri, 29 Apr 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-c-language-uses-object-oriented-thinking-to-write-greedy-snake/</guid>
      <description>大概一年前这时候，接触C语言一个月，那时候知之甚少，对面向对象只觉”可远观而不可亵玩“，而且会看到很多言论说C语言就是面向过程的语言，C++就是面向对象的语言。不过，不记得什么时候在网上看到过一篇博文</description>
    </item>
    <item>
      <title>深入学习 memset 函数</title>
      <link>/articles/2016-learn-more-about-the-memset-function/</link>
      <pubDate>Fri, 15 Apr 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-learn-more-about-the-memset-function/</guid>
      <description>最近，和同学讨论了一下memset函数，趁着周五空闲做一总结。 memset函数最常用的功能就是初始化数组了（主要是置零），如 #include &amp;lt;iostream&amp;gt; #include &amp;lt;cstring&amp;gt; using namespace std; int main(int argc, char const *argv[]) { int A[10]; memset(A, 0, sizeof(A)); cout &amp;lt;&amp;lt; A[0] &amp;lt;&amp;lt; &amp;#39;\t&amp;#39; &amp;lt;&amp;lt; A[1] &amp;lt;&amp;lt; endl; return 0; } 输出 0 0 但是，</description>
    </item>
    <item>
      <title>C语言实现贪吃蛇源码</title>
      <link>/articles/2016-c-language-to-implement-snake-source-code/</link>
      <pubDate>Sun, 20 Mar 2016 00:00:00 +0000</pubDate>
      <guid>/articles/2016-c-language-to-implement-snake-source-code/</guid>
      <description>先放效果 源代码 //2016-2-12 //zhaoyu //Gmail:zhaoyu1995.com@gmail.com //Language: C //Platform:Code::Blocks #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;windows.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;time.h&amp;gt; typedef struct snake { int x; int y; struct snake *next; }Snake; int X, Y; enum STATUS{Up = 1, Down, Left, Right}; Snake *pHead, *pBody;//the head of the snake enum STATUS Direction; int score=0, scorePerFood=10; int gameStatus = 0; int timeInterval = 200; void gameEnd(void); void setPosition(int x, int y) { COORD pos; HANDLE hOutput; pos.X = x; pos.Y = y; hOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOutput, pos); } void hideCursor() { CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &amp;amp;cursor_info);</description>
    </item>
  </channel>
</rss>
