12K的码农怎样蜕变为30k的架构师?找准方向,拒绝迷茫

本文深入探讨了成为架构师所需的技能,包括技术深度、技术框架、系统架构、分布式系统、实战能力及软能力等方面,旨在帮助程序员突破职业瓶颈,理解架构师角色的核心价值。

很多工作一定年限的程序员感觉自己到了瓶颈不知道怎么去突破,其实这个时候就要冲破传说中的架构师。

架构师是个很神秘人物,那么架构师的技术一般在什么程度呢?怎样才能被称为架构师?

1240

技术深度

有没有看过JDK源码,看过的类实现原理是什么。

HTTP协议

TCP协议

一致性Hash算法

JVM如何加载字节码文件

类加载器如何卸载字节码

IO和NIO的区别,NIO优点

Java线程池的实现原理,keepAliveTime等参数的作用。

HTTP连接池实现原理

数据库连接池实现原理

数据库的实现原理

 

技术框架

看过哪些开源框架的源码

为什么要用Redis,Redis有哪些优缺点?Redis如何实现扩容?

Netty是如何使用线程池的,为什么这么使用

为什么要使用Spring,Spring的优缺点有哪些

Spring的IOC容器初始化流程

Spring的IOC容器实现原理,为什么可以通过byName和ByType找到Bean

Spring AOP实现原理

消息中间件是如何实现的,技术难点有哪些

1240

系统架构

如何搭建一个高可用系统

哪些设计模式可以增加系统的可扩展性

介绍设计模式,如模板模式,命令模式,策略模式,适配器模式、桥接模式、装饰模式,观察者模式,状态式,访问者模式。

抽象能力,怎么提高研发效率。

什么是高内聚低耦合,请举例子如何实现

什么情况用接口,什么情况用消息

如果AB两个系统互相依赖,如何解除依赖

如何写一篇设计文档,目录是什么

什么场景应该拆分系统,什么场景应该合并系统

系统和模块的区别,分别在什么场景下使用

 

分布式系统

分布式事务,两阶段提交。

如何实现分布式锁

如何实现分布式Session

如何保证消息的一致性

负载均衡

正向代理(客户端代理)和反向代理(服务器端代理)

CDN实现原理

怎么提升系统的QPS和吞吐量

1240

实战能力

有没有处理过线上问题?出现内存泄露,CPU利用率标高,应用无响应时如何处理的。

开发中有没有遇到什么技术问题?如何解决的

如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能。

新浪微博是如何实现把微博推给订阅者

Google是如何在一秒内把搜索结果返回给用户的。

12306网站的订票系统如何实现,如何保证不会票不被超卖。

如何实现一个秒杀系统,保证只有几位用户能买到某件商品。

 

软能力

如何学习一项新技术,比如如何学习Java的,重点学习什么

有关注哪些新的技术

工作任务非常多非常杂时如何处理

项目出现延迟如何处理

和同事的设计思路不一样怎么处理

如何保证开发质量

职业规划是什么?短期,长期目标是什么

团队的规划是什么

能介绍下从工作到现在自己的成长在那里

 

总结一下:

表示层:spring mvc 3.1 + annotation

控制层:spring 3.1

持久层:hibernate 3.6 +jdbcTemplate

后台列表控件:displaytag 1.2

Ajax框架: DWR 3

JS框架 : Jquery

缓存机制:spring 3.1 cache + ehcache/memcached

静态化机制: Freemarker静态化/spring mvc伪静态化

页面技术: EL + JSTL +JSP

安全框架 spring security

搜索引擎: Lucene

中文分词:IKAnalyzer

模板引擎: apache tiles 2.22

Linux、nginx、php、mysql,几乎是标配

部署视图所需:

数据库: mysql

Web 服务器: windows 下用apache, linux 下用ngnix

应用服务器: Tomcat Jboss,tomcat,weblogic

 

想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件。

架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统,访问量不大,数据量小,你给人家上集群、上分布式存储、上高端服务器为了架构而架构,这是最扯淡的,架构师的作用就是第一满足业务需求,第二最低的硬件网络成本和技术维护成本。

架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。

下面是总结出的一个脑图:

1240

需要高清脑图或者学习资料——点击免费获取

一下是部分学习资料、电子书及面试PDF截图(涵盖高并发、分布式、JVM、spring、源码分析、kafka、MQ等等架构技术)

需要请点击免费获取!!

1240

1240

1240

转载于:https://my.oschina.net/u/4180819/blog/3085242

<think>好的,我现在需要解决用户关于STC32G12K128单片机程序超过64K时出现的链接地址冲突问题。首先,我得回忆一下这个单片机的内存结构。STC32G12K128有128K的Flash,分为两个64K的块。当程序超过64K时,默认的链接配置可能无法正确处理跨块的情况,导致地址冲突。用户提到的问题可能是因为链接器没有正确配置,导致代码段跨越了64K边界而没有正确处理。这时候需要考虑如何将代码分配到不同的块中。可能的解决方案包括修改链接脚本,指定不同段的起始地址,或者使用分段编译的方式。接下来,我需要确认STC32G12K128的内存布局。通常,Flash被分为块0和块1,每个块64K。默认情况下,链接器可能将所有代码放在块0,当超过64K时就会溢出到块1,但如果没有正确配置,会导致地址重叠或跳转错误。解决方案之一是在链接脚本中定义两个不同的代码区域,比如将主程序放在块0,将较大的库或其他模块放在块1。同时,可能需要使用特定的函数修饰符或编译指令来指定代码存放的位置,例如使用Keil的`#pragmacode`或者自定义段。另外,可能需要调整编译器的内存模式,确保编译器能够处理大内存模型。有些编译器在small模式下默认使用16位地址,超过64K后需要切换到large模式,使用24位或32位地址。还需要考虑中断向量表的放置,确保它位于正确的块中,通常是在块0的开始部分。如果中断服务程序位于不同的块,可能需要使用长跳转指令或调整链接脚本以确保正确跳转。此外,用户可能需要检查是否启用了正确的存储模式,比如在Keil中设置CodeRomSize为Large,这样编译器会生成适合大代码模型的指令。同时,优化代码结构,将不常用的函数放到单独的块中,减少主块的压力。最后,参考用户提供的代码示例,虽然主要是关于延迟函数的,但可以推测用户可能在使用Keil进行开发,因此需要针对Keil的环境进行配置调整。可能需要修改项目的Target选项,设置正确的代码分区,并确保链接器脚本正确划分各个段。总结起来,解决方案应包括修改链接脚本、调整编译器设置、使用分段代码存放以及可能的代码优化。需要一步步引导用户进行这些配置更改,并验证是否解决了地址冲突问题。</think>针对STC32G12K128单片机程序超过64K时的链接地址冲突问题,以下是分步解决方案: ### 一、内存结构分析 STC32G12K128的128KB Flash分为两个物理块: - **块0**:$0000\text{-}FFFF$ (64KB) - **块1**:$10000\text{-}1FFFF$ (64KB) 当代码超过64KB时,需手动控制代码分布[^1]。 ### 二、Keil环境配置 1. **目标设置**: ```c Project -> Options for Target -> Target - Memory Model: 选择"Large: variables in XDATA" - Code Rom Size: 改为"Large: 64K program" ``` 2. **链接控制**: 在`Scatter File`中添加分块映射: ```scatter LR_IROM1 0x0000 0x10000 { ; 块0 ER_IROM1 0x0000 0x10000 { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } } LR_IROM2 0x10000 0x10000 { ; 块1 ER_IROM2 0x10000 0x10000 { large_code.o (+RO) ; 指定大模块 } } ``` ### 三、代码分段控制 ```c // 将特定函数放置到块1 #pragma CODE_SECTION(large_func, ".large_code") void large_func(void) { // 函数体 } // 使用__far修饰跨块调用 extern __far void large_func(void); ``` ### 四、中断向量处理 在启动文件(startup.a51)中扩展跳转指令: ```assembly CSEG AT 0x0003 ; 定时器0中断入口 LJMP _Timer0_ISR ``` ### 五、验证方法 1. 查看生成的.map文件: ```text Execution Region ER_IROM1 (Base: 0x00000000, Size: 0x0000FF00) Execution Region ER_IROM2 (Base: 0x00010000, Size: 0x00008000) ``` 2. 使用STC-ISP工具烧录时,确认自动识别分块数据
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值