编程设计思想

NOIP/NOI/IOI不同的比赛

http://www.noi.cn/articles.html?type=10     NOI的信息

https://www.zhihu.com/question/332128488?sort=created   NOI与NOIP的区别

https://ac.nowcoder.com/acm/home    牛客网中关于NOI与NOIP的一些题目

https://pre.ac.nowcoder.com/acm/archive/oi-ybt/problem     信息学题目

https://ioinformatics.org/            国际奥林匹克信息赛

https://wangchujiang.com/linux-command/   linux命令搜索

 

codec: sbc, aac, 
playback: pcm data, alsa
bluez, bluedroid, linux TV, android TV

看sequence是否连续,看delta是否大于80ms,看frame是否小包
pcm data是否为无声数据
看是否有现场卡住,underrun

https://cloud.tencent.com/developer/article/1488607   android架构设计特点

Boot Rom, Boot loaders, Trusted Execution Environment

https://my.oschina.net/weichou/blog/1036513

C Secure Coding Rules:
SEI Cert C Coding Standard(2016 Edition)

http://gen.lib.rus.ec/search.php?req=SEI+Cert+C+Coding+Standard&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def
Common Programming Language issues:
1. Command Injection
2. Format String
3. buffer overflow
4. Integer Overflow

Example L3 rule: exp37 call functions withthe correct number and type
fd = open(参数1,参数2) error,应该有3个参数

Example L2 rule: exp30 Do not depend on the order of evaluation for side effects
void func(int i, int *b) {
  int a = i + b[++i];   ++i的行为,如果存在顺序不一致;会出问题;
  printf("%d, %d", a, i);
}
改法
void func(int i, int *b) {
  int a = i + b[i+1];   ++i的行为,如果存在顺序不一致;会出问题;
  ++i;
  printf("%d, %d", a, i);
}

Example L1 rule : exp34, Do not dereference null pointers
void func(int i, const char *b) {
  char *buf;
  buf = (char *)malloc(i);    malloc返回为空,或长度i为0;将有问题
  memcpy(buf, b, i);
}
改法
void func(int i, const char *b) {
  char *buf;
  buf = (char *)malloc(i); 
  if(buf == NULL || b == NULL) {
    /*Handle error*/
  }  
  memcpy(buf, b, i);
}

ftrace的使用,主要是非tv平台;a2dp的卡顿,使用ftrace分析Underrun的原因是cpu loading过高,stp_dump3的进程占用的。

gdb工具,valgrid工具,coverity代码检查

查看Scratch的源代码 - 开放百科 - 灰狐
https://wiki.huihoo.com/wiki/?title=Scratch&action=edit

【Android】pcm音频数据调节音量大小 - 简书
https://www.jianshu.com/p/50c697bec409

PCM音频数据调整音量 - 简书
https://www.jianshu.com/p/ca2cb00418a7 

关于 单凯
https://kaikai-sk.github.io/about_me.html

手机做src连接sink设备,调节音量的2种方式:

1.手机支持absolute volume,传音量;sink设置音量

2. 手机传给sink设备的pcm data保护音频audio振幅,

在线查看android 源代码

http://androidxref.com/9.0.0_r3/xref/system/bt/

/system/bt/     如果需要porting linux的代码在这个路径下,该如何做?

场景化与抽象化:涉及的主体与角色,交互过程,子过程,message;

虚拟世界(编程)->现实世界(人的互动),软件中(分层)-硬件中(分层)-现实世界中(人分层)

github开源项目40个_weixin_30650859的博客-CSDN博客
https://blog.csdn.net/weixin_30650859/article/details/99386240

软件中不同模块的通信(message),现实世界中的message(手语,手势,视频,音频,文字)

软件中难以表示“模糊概念”,现实世界可以“冗余,模糊”;软件生成软件(根据rule规则),现实中编程(“模糊”规则)

软件中如何表示模糊规则?

映射关系:文字->语音,文字->图片,视频=图片+文字+语音

http://www.wowotech.net/tag/porting    porting技术,一套代码在不同平台下的适用性;

设计模式

https://www.cnblogs.com/amanlikethis/p/4843266.html

linux文件I/O缓存思想:

  • 速度与效率考虑,系统I/O(内核)与标准C库函数,在操作磁盘文件是对数据进行缓存
  • 那些技术可以屏蔽或者影响缓存?那些场景需要用到这些技术?
  • 用户空间与kernel空间,read()与write()函数,内核缓存区,缓存区flush,什么时候?

跨平台yocto, linux,android

https://github.com/Mr-YangCheng/ForAndroidInterview  面试

https://github.com/sonuauti/Android-Web-Server   简单web server

https://github.com/leesk8012/AndroidConnections   Android connections (Bluetooth, TCP/IP, USB)

https://github.com/kingspp/Android-TCP-IP-Socket   This repository consists of basic introduction for Server-Client model using Android Wifi Hotspot, which uses TCP/IP model using Primary Sockets

https://github.com/wzbos/Android-NDK-Socket    基于TCP/IP在NDK下的SOCKET通信示例

https://github.com/saminiir/level-ip     A hacker's userspace TCP/IP stack

https://github.com/liexusong/tcp-ip-stack    linux的tcp/ip

 

https://github.com/webpro/programming-principles   以java为例的编程思想,扩展应用到C,C++  https://github.com/iluwatar/java-design-patterns    https://java-design-patterns.com/

https://github.com/faif/python-patterns    

https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/factory_method.html 

https://blog.csdn.net/weixin_42093428/article/details/83187114    wifi的流程

https://github.com/search?l=C&q=modular+design&type=Repositories    https://github.com/me115/design_patterns    C++版本

https://github.com/ChanceMaker/Senior_Design_Project  这个团队正在开发的语音识别系统已经完全自主实施和培训。这是非常有利的机器学习应用程序。使用某些机器学习技术,可以准确,快速地完成每个单词的严格编程

https://github.com/MarcoFlo/Optimal-Database-Design-Problem/blob/master/solver.c    简单的优化算法

https://github.com/yashdivecha/Design-and-Analysis-of-Algorithm    https://github.com/Benjarit/Algorithm_Design_and_Programming

内核和操作系统设计的基本思想和方法。 https://github.com/mnxx/operating-systems-development-project/blob/master/processus.c

https://github.com/garciad16/CIS-2750-ICalendar-App

https://github.com/SuriZhang/TCP-Chatroom   简单tcp

https://github.com/SzymonKatra/FATNode_FileSystem   简易文件系统fat

https://github.com/Ji-Keyu/Simple-Shell      IPC通信模拟

https://github.com/shachijun/merge-sort-csv-file-with-connecting-two-machines     linux简单编程例子

https://github.com/nearc/pascal_compiler    简单编译器

https://github.com/gatieme/LDD-LinuxDeviceDrivers   linux驱动

https://github.com/doxygen/doxygen/tree/master/src     doxygen源代码

https://github.com/tesseract-ocr/tesseract/tree/master/src   tesseract代码,包含lstm

https://github.com/notepad-plus-plus/notepad-plus-plus    notepad++源代码

https://www.jianshu.com/p/2d4d91129ddb   十二个值得一读的源码

http://www.androidchina.net/5563.html    游戏代码看

APR(Apache Portable Runtime)

这是由 Apache 社区维护的 C 开源库,主要提供操作系统相关的功能(文件系统、进程、线程、用户、IPC)。此外还提供了一些网络相关的功能。

APR 原先是 Apache Web 服务器的一个组成部分,后来独立出来,成为一个单独的开源项目。
主页:https://apr.apache.org

https://blog.csdn.net/ranxiaoxu123/article/details/52003376  值得看的代码  https://github.com/steveLauwh/SGI-STL

https://blog.csdn.net/a110658684/article/details/78862253   代码

 

 

 

linux中编程思想:分层,隔离,linux io性能调优;调度算法

https://www.ituring.com.cn/book/800   Linux/Unix设计思想

https://cloud.tencent.com/developer/information/linux%E8%AE%BE%E8%AE%A1%E6%80%9D%E6%83%B3     一些经典的设计; linux;

状态机,MVC,IPC,不同的通信模型,事件分发算法;

跨语言的调用思想:C语言调用C++的,C++调用C的;C语言调用java的,C++调用java的;java调用C与C++;C调用python,python调用C;matlab与C++的互相调用

从C端到B端,我的设计思考及感受 https://www.jianshu.com/p/e673d7eb0047

professional c with modular design method   C高级编程:基于模块化设计思想的C语言开发

C高级编程:基于模块化设计思想的C语言开发

怎么从本质上理解面向对象的编程思想? https://www.zhihu.com/question/305042684/answer/550196442

linux设计中强调了一个基本观点:
机制和策略的分离

机制: 做某样事情固定的步骤,方法

策略:每一个步骤采用不同的方法

机制是固定的,策略往往是不固定的。在linux内核中不应该实现策略

e.g1:
Linux提供api可以让线程优先级调高调低,linux内核本身并不管谁高谁低,提供api属于机制,谁高谁低属于策略。
也就是说, 由应用程序告诉内核,那个进程拥有更高的优先级,而内核本身不负责这些事情。

e.g2:
在linux2.4所使用的设备文件系统devfs(位与内核空间),在linux2.6引入udev(用户空间设备管理)。


 

 单一职责原则

  单一职责原则(Single responsibility principle),就一个类而言,应该只有一个引起它变化的原因。

  在实际编程中的体现,比如一个类只是某一个事物相关的集合,一个函数只做一件事情,不要在这个函数中编写一些不想关的逻辑,这样可以最大程度的提高程序的可维护性,可复用性。

  开放-封闭原则

  开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改,即对扩展是开放的,对修改是关闭的。新的需求,应该通过增加新的代码来完成,而不是修改现有的代码。绝对的对修改关闭是不可能的,可以预先猜测最有可能发生的变化种类,然后构造抽象来隔离那些变化。

  在实际编程中的体现,比如接手了一个复杂的代码库,要基于此完成某种功能时,如果一上手就咔咔咔大改里面的逻辑,不仅不是正确的做法,有时越改越深入,如果不完全理解这个代码库的大部分逻辑,就不能完成当前的需求,耽误了很长时间,老大肯定会不开心的^_^。

  依赖倒置原则

  1. 高层模块不应该依赖底层模块。两个都应该依赖抽象;

  2. 抽象不应该依赖细节。细节应该依赖抽象。

  开发程序时,高层模块调用底层模块的函数。当要做新项目时,发现高层模块基本一致,想要复用,但是要换用不同的数据库或者存储方式(底层模块),而高层模块与底层访问数据库的模块绑定了,无法复用,这就出现了倒置。解决办法是不管高层模块还是底层模块,都应该依赖抽象,具体一点就是接口和抽象类。

  在实际生活当中的应用,比如计算机的主板、CPU、内存、硬盘等都是针对接口设计的,如果针对实现来设计,比如某一个型号的主板只支持某一个型号的CPU,这将会大大制约计算机的发展。在实际编程中的应用,比如,一个部门写了一个lib,其他部门都要使用,那么这些部门就应该相互沟通好,大家先把接口固定,然后各自编写自己的程序,只要接口设计的稳定,这些部门之间就可以自己写自己的程序,不用担心相互干扰。

  里氏代换原则

  子类型必须能够替换掉它们的父类型。意思是如果一个软件实体使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别,即在软件里面,把父类都替换成它的子类,程序的行为没有变化。再通俗点,如果一个方法需要父类对象作为输入,如果你提供一个子类对象,它也应该正常工作,如果它不能正常工作,那么这种写法就违反了里氏替换原则。

  迪米特法则

  迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用领一个类的某一个方法的话,可以通过第三者转发这个调用。在类的结构设计上,每一个类都应当尽量降低成员的访问权限,不需要公开的就不要公开,其根本思想是强调了类之间的松耦合。

Android架构思考:模块化、多进程  http://www.sohu.com/a/129970049_465908   路由机制;多线程

https://github.com/SpinyTech/ModularizationArchitecture  

http://blog.spinytech.com/2016/12/28/android_modularization/

多进程,什么时候需要?http://blog.spinytech.com/2016/11/17/android_multiple_process_usage_scenario/

 

Android系统编程思想篇:建造者模式 https://www.jianshu.com/p/475027a94c5b

浅析android系统设计中的回调思想   https://blog.csdn.net/qq_31778741/article/details/85074748

Android系统编程思想篇:单例模式   https://www.jianshu.com/p/906aa5f8c7c0

https://guoxiaoxing.gitbooks.io/android-open-source-project-analysis/content/doc/Android%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E7%AF%87/01Android%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E7%AF%87%EF%BC%9A%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.html

http://www.imooc.com/article/257802      MVP思想; RPC思想;Service思想

https://guoxiaoxing.gitbooks.io/android-open-source-project-analysis/content/doc/Android%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E7%AF%87/02Android%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E7%AF%87%EF%BC%9A%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.html

看到差别:MVP与MVC的区别, https://www.cnblogs.com/hebao0514/p/5687959.html

https://www.zhihu.com/question/19759722?sort=created      大牛们是怎么阅读 Android 系统源码的?

https://www.oschina.net/question/2245602_180023 

https://segmentfault.com/p/1210000008721369/read    设计模式23种思想

 

待解决的问题思考与描述

(不同语言c,c++,python,java 等特有的情况与通用的情况)技术使用的场景

  1. 通用的打开文件open函数的逻辑是怎样? (open输入:路径地址,包括绝对路径与相对路径的解析;open文件的形式)
  2. 一个函数功能的输入参数、输出参数是怎么确定的?
  3. 如何使一个函数的功能尽可能的与其他函数的功能,解耦和?减小函数的依赖性?
  4. 函数A的error handle怎么处理?比如函数A中使用了函数B,如果函数B失效了,怎样降低程序die的情况?
  5. 状态机的例子,状态机可以应用的场合有哪些?(bluetooth中a2dp的状态机,tcp、ip中的状态机,进程状态切换的状态机?)
  6. 字符串操作有哪些?是如何实现的?
  7. C中有全局变量,当函数A,B,C都需要使用这个全局变量,但是只能保证一个函数对全局变量修改,如何实现?(锁)
  8. 程序在其他地方调用了函数A、B、C但是期望的是执行顺序是函数ABC的顺序,如何实现?(线程同步)
  9. 当有多个逻辑需要and(与)、or(或)操作时,比如有逻辑1,2,3,4一起条件判断,使用什么方法可以降低代码复杂度?(位掩码技术,bit mask技术; https://www.jianshu.com/p/e159f3a506achttps://bbs.csdn.net/topics/200055867
  10. parser技术用到了哪些思想与数据结构?(https://blog.csdn.net/weixin_34080571/article/details/88669757
  11. 进行输入检查的方法有哪些?(正则表达式检查,字符串分割检查,)
  12.  ring buffer的适用场景?(https://blog.csdn.net/qq_26093511/article/details/65648750  ,当读取速度大于写入速度时,在环形缓冲区的支持下不会丢掉任何一个字节(硬件问题除外)。 为什么? 因为读数据实际上没有消耗buffer,写数据要清空buffer,对buffer内容做操作)https://www.cnblogs.com/bluedoctor/p/5892726.html 
  13. 哪些技术适用于 读> 写的操作?哪些技术使用读  <  写的操作?
  14. 假设程序设计分为ABCD层,从上到下有什么技术支持调用?(C语言中函数call就是);从下到上有什么技术支持回调?(C语言中callback)?跨层调用(由A调到C,有什么技术?由C到A,有什么技术?)。对于不同的语言,其实现特点有什么区别?
  15. 处理器1,2,3希望交互流程为处理器1 -> 2,2->3,什么技术可以实现?
  16. 对于单核的设备,线程1,线程2,线程3,线程4异步执行;对于4核设备,线程异步执行,技术差异?
  17.  同步与异步,有哪些技术?阻塞技术会导致什么问题?

 

考试:高中教师资格证考试,研究生考试(信号与系统),计算机等级考试,软件设计师考试,高级设计师考试,公务员考试,高考

 

蓝牙工程师需要的能力:

1. 蓝牙Spec,在https://www.bluetooth.com/   中注册,下载pdf的spec,不同profile:a2dp, avrcp, hid, hogp等

2. 蓝牙测试pts,参考 https://launchstudio.bluetooth.com/    

https://www.bluetooth.com/specifications/qualification-test-requirements/     这里测试的场景与不同profile的子过程

通过pts的pdf了解profile的过程,以a2dp为例;看src,sink情况,不同的过程对应的bluedroid stack的代码;

不同profile的pts测试过程不同;如何通过HCI log,查看pts测试过程是否正确?

3. HCI log的查看,HCI log分为:正常的HCI log,PTS测试的HCI log;  PTS的HCI log可以查看PTS测试哪里出了问题

正常的HCI log,可以看本机设备与对端设备交互流程是否正常

4. 蓝牙stack的移植,code porting;将一包bluedroid的code,根据实际功能需求,移植到不同的嵌入式设备;不同profile的裁剪,新的HCI command加入要怎么加入;HCI command测试的结果怎么量化?

5. 蓝牙架构的设计,app层->bt mw层->bt stack层->driver层,每一层的变动;app层实现哪些功能?bt mw层实现哪些功能?

bt stack层? 不同层的扩展功能怎么扩展?  bt stack层可以分层,btif层,bta层,l2c层等等?

6. 蓝牙可移植性的分布研究,一个基本的bt程序,需要包含哪些部分?(app代码对应了bin文件,bt mw层,bt stack层对应了哪些.so? drvier层对应了什么.ko?)如果需要再蓝牙app中添加一个功能,哪些部分需要改动?功能正确性验证如何保证?

7. 蓝牙功能测试方式,app功能测试正常,bt mw层测试正常,bt stack层测试正常,driver层测试正确,不同层的测试逻辑是什么?如何写这些测试用例?

8. 解决bug,对bug的分析;通过对log的分析,定位问题点;从正常流程的分析,找到异常点;

不同profile的流程不同;以a2dp为例,蓝牙播放音乐,正常的流程是什么样子?

9. linux编程:多线程试用在哪些场景?window下多线程与linux下多线程的异同?

socket使用场景?回调函数使用场景?同步调用与异步调用的场景?

10. linux脚本,linux的编译技术,linux的makefile写法:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值