Huawei OD Online Assessment and Technical Interview Complete Experience: From Practice to Offer
Complete review of Huawei OD interview for 2-year Java developer, including 3 online assessment problems, technical rounds 1/2, and HR round with real questions on Java, Spring, MySQL, and algorithms
Background
Let me start with my background: 2 years of Java development experience, currently working at a small company with fewer than 50 employees building enterprise SaaS systems. My tech stack is Spring Boot + MyBatis-Plus + MySQL + Redis + RabbitMQ. Honestly, life at a small company is pretty comfortable, but the technical growth is limited and the projects aren't very challenging. I've always wanted to move to a bigger platform.
In March this year, a college classmate who had been working at Huawei OD for about half a year told me that although OD employees aren't official Huawei staff, the work content, tech stack, and projects are basically the same as regular employees. Plus, there's a pathway to conversion, and the entry barrier is lower than regular social recruitment. I used to have prejudices against OD, thinking it was just outsourcing. But after learning more, I discovered that OD is Huawei's own outsourcing system — completely different from third-party outsourcing. The office environment and technical training are shared with regular employees.
On March 15th, I submitted my resume on Huawei's recruitment website, choosing the Java developer position in Cloud BU. After submitting, I waited over a week before receiving the online assessment notification. In between, I thought my resume didn't pass screening. Later I learned that OD resume reviews are relatively slow — you need a referral from a Huawei employee or channel approval before the assessment can be scheduled.
Before the assessment, I spent about two weeks practicing problems, mainly on Nowcoder's Huawei OD problem bank, and also did some LeetCode. Honestly, my algorithm fundamentals were mediocre — I barely passed data structures in college and hadn't written algorithm problems since starting work. So during those two weeks, I practiced 3-4 problems every evening after work and 8-10 on weekends, starting with simple string and array problems and gradually moving to medium-difficulty DFS and BFS problems.
Online Assessment (3 Problems, 150 Minutes)
The assessment was on Saturday, March 28th at 2 PM, using Huawei's own online testing platform. Before the exam, I had to install monitoring software — the webcam recorded everything and desktop switching wasn't allowed. 150 minutes for 3 problems, 600 points total. Generally, 150+ points is enough to pass, but requirements vary by department — Cloud BU reportedly requires 200+ points.
I ended up scoring 350 points: 100/100 on the first problem, 200/200 on the second, and only 50/300 on the third (some test cases didn't pass). Let me describe each problem in detail.
Problem 1 (100 points, Easy): String Compression
Problem description: Given a string consisting of lowercase letters, compress it according to the following rule: consecutive repeated characters are represented as "character + count", and if the count is 1, omit it. For example, "aaabbc" compresses to "a3b2c", and "abc" compresses to "abc".
This problem was fairly straightforward. I used a two-pointer approach — one pointer traverses the string while the other tracks the start of the current consecutive character sequence. When encountering a different character, I calculate the consecutive length and append the result. I finished in about 5 minutes and passed all test cases on the first try.
Problem 2 (200 points, Medium): Meeting Room Scheduling
Problem description: There are N meetings, each with a start time and end time. Find the minimum number of meeting rooms needed to schedule all meetings, with no time overlap within the same room.
This is essentially the classic maximum overlapping intervals problem. My approach: sort all time points, +1 for start times and -1 for end times, then traverse the sorted points while accumulating a counter — the maximum value is the number of rooms needed. After writing the solution, I ran the test cases and found a boundary case I hadn't handled — when one meeting ends and another starts at the same time, the end should be processed first. I adjusted the sorting rule so end times come before start times, and it passed. This took about 25 minutes.
Problem 3 (300 points, Hard): Minimum Cost to Connect Cities
Problem description: There are N cities and M roads, each connecting two cities with a construction cost. Some roads are already built (cost 0). Find the minimum cost to make all cities connected. Return -1 if it's impossible to connect all cities.
I immediately recognized this as a minimum spanning tree problem that should use Kruskal's algorithm with Union-Find. The problem was that I wasn't proficient enough with Union-Find — I got stuck on the path compression part for a while. I eventually wrote it out, but only passed some test cases. I suspect there was a bug in the Union-Find merge operation, but I ran out of time to debug. I only got 50 points on this one.
After the assessment, I was a bit worried that not solving the third problem might mean failing. But on April 2nd, I received a notification that I passed and could proceed to interviews. I later learned that 350 points is considered above average for OD assessments.
Round 1: Technical Interview 1 (Video, ~60 Minutes)
The first interview was on Wednesday, April 8th at 10 AM, using Huawei's WeLink video conferencing. The interviewer was a guy around 30 who introduced himself as a Cloud BU engineer with 6 years of experience. He started by asking me to introduce myself, then moved straight into technical questions.
1. What's the difference between == and equals in Java?
I explained that == compares reference addresses while equals compares content. For primitive types, == compares values; for reference types, == compares addresses. Object's equals defaults to the same behavior as ==, while String overrides equals to compare character by character. The interviewer followed up about the Integer cache pool range, and I answered -128 to 127 — beyond that, new objects are created.
2. What's the difference between HashMap and Hashtable?
I listed several differences: HashMap is not thread-safe while Hashtable is (methods use synchronized); HashMap allows null keys and values while Hashtable doesn't; HashMap's default capacity is 16 while Hashtable's is 11; HashMap optimizes linked lists with red-black trees while Hashtable doesn't. The interviewer followed up about how ConcurrentHashMap ensures thread safety, and I explained that JDK 1.7 uses Segment-based segmented locking while 1.8 uses CAS + synchronized on the head node.
3. What's the difference between @Autowired and @Resource in Spring?
I explained that @Autowired is a Spring annotation that injects by type, while @Resource is a JDK annotation that injects by name. @Autowired can be combined with @Qualifier for name-based injection, and @Resource's name attribute specifies the bean name. The interviewer followed up about how many injection methods @Autowired supports — I mentioned field injection, constructor injection, and setter injection, recommending constructor injection because it's immutable and can detect circular dependencies.
4. Walk me through Spring Boot's startup process
I started from the main method: create a SpringApplication object, infer the application type (Servlet/Reactive), load ApplicationContextInitializer and ApplicationListener, execute the run method, create ApplicationContext, refresh the container (bean definition loading, auto-configuration, bean creation), and execute CommandLineRunner. The interviewer didn't follow up and said "you have a decent understanding."
5. What scenarios cause MySQL indexes to become ineffective?
I listed several common ones: 1) using functions or operations on indexed columns; 2) implicit type conversion, like querying a varchar column with an int; 3) LIKE starting with a wildcard; 4) OR conditions where one column lacks an index; 5) composite indexes not satisfying the leftmost prefix rule; 6) IS NULL and IS NOT NULL failing in certain cases. The interviewer followed up with a composite index (a,b,c) — can b=1 use the index? I said no, because it doesn't satisfy the leftmost prefix rule.
6. What are Redis data types and their use cases?
I covered five basic types: String for caching and counters, Hash for objects, List for message queues and latest lists, Set for deduplication and intersection/union operations, and ZSet for leaderboards and delayed queues. The interviewer followed up about ZSet's underlying implementation — I mentioned compressed lists and skip lists, with compressed lists for small datasets and skip lists when elements grow.
7. How do you use RabbitMQ in your project, and why not Kafka?
I explained that we use RabbitMQ for async notifications and delayed messages. We chose it because our project's message volume isn't large, RabbitMQ has a good management UI, and it supports multiple exchange types for flexible routing. Kafka is better suited for high-volume log scenarios. The interviewer followed up about how RabbitMQ ensures messages aren't lost — I mentioned producer confirmation, message persistence, and consumer manual ACK.
8. Algorithm: Reverse Linked List (LeetCode 206)
I had practiced this problem before. I used the iterative approach with three pointers (prev, curr, next) and finished in 5 minutes. The interviewer asked me to also write it recursively, which I did. The interviewer said "no problem with the basics."
Interview 1 Summary
The first interview was mostly focused on fundamentals — lots of Java basics and Spring, with one MySQL and one Redis question each. The algorithm problem was simple — reverse linked list is a must-practice problem. The interviewer was friendly and gave hints when I couldn't answer something. I received the second interview notification on April 11th, 3 days later.
Round 2: Technical Interview 2 (Video, ~65 Minutes)
The second interview was on Wednesday, April 15th at 3 PM. The interviewer was more senior than the first one — he started by saying "let's just talk tech" with no self-introduction.
1. What are the JVM garbage collection algorithms and their pros and cons?
I covered mark-sweep (simple but creates memory fragmentation), mark-copy (no fragmentation but wastes space, suitable for young generation), and mark-compact (no fragmentation but slow, suitable for old generation). The interviewer followed up about G1 collector's characteristics — I explained that G1 divides the heap into equal-sized Regions, maintains a priority list to reclaim Regions with the most benefit, and offers predictable pause times. The interviewer then asked when G1 triggers Full GC — I said when the concurrent marking phase finds that reclamation can't keep up with allocation, it degrades to Serial Old for Full GC.
2. What does the volatile keyword do and how does it work?
I explained two functions: ensuring visibility (modifications are immediately flushed to main memory) and preventing instruction reordering. The mechanism uses memory barriers — StoreStore before writes, StoreLoad after writes, LoadLoad before reads, and LoadStore after reads. The interviewer followed up about whether volatile guarantees atomicity — I said no, giving the i++ example, which requires AtomicInteger or synchronized.
3. What's the difference between Synchronized and ReentrantLock?
I listed several differences: Synchronized is at the JVM level while ReentrantLock is at the API level; Synchronized automatically releases the lock while ReentrantLock requires manual unlock; ReentrantLock supports fair locks, interruptible locks, and multiple condition variables; Synchronized supports lock escalation (biased → lightweight → heavyweight). The interviewer followed up about when ReentrantLock is better — I said when you need fair locks, tryLock, or multiple wait queues.
4. What are the Spring transaction propagation behaviors?
I listed seven: REQUIRED (default, join existing or create new), REQUIRES_NEW (always create new, suspend current), NESTED (nested transaction), SUPPORTS (join if exists, non-transactional if not), NOT_SUPPORTED (non-transactional, suspend current), MANDATORY (must be in transaction, throw exception otherwise), NEVER (must not be in transaction, throw exception otherwise). The interviewer followed up about the difference between REQUIRED and REQUIRES_NEW — I said REQUIRES_NEW creates an independent transaction where outer rollback doesn't affect inner and vice versa.
5. How do you optimize MySQL slow queries?
I outlined several steps: 1) use EXPLAIN to check the execution plan, focusing on type, key, rows, and Extra fields; 2) check if indexes are being used — add indexes or rewrite SQL if not; 3) avoid SELECT *, only query needed columns; 4) for large tables, consider cursor-based pagination instead of OFFSET; 5) for very large data volumes, consider sharding. The interviewer followed up about EXPLAIN's type field values — I listed them from best to worst: system > const > eq_ref > ref > range > index > ALL.
6. What production issues have you encountered, and how did you troubleshoot them?
I shared a real case: after a deployment, API response times slowed down with P99 going from 200ms to 2s. Troubleshooting process: 1) checked monitoring and found slow database queries; 2) checked slow query logs and found a full table scan; 3) EXPLAIN revealed index failure due to implicit type conversion in a new query condition; 4) fixed the SQL parameter type and everything returned to normal. The interviewer followed up about prevention — I mentioned code review for SQL checks, pre-deployment EXPLAIN verification, and slow query alerts.
7. Algorithm: Binary Tree Level Order Traversal (LeetCode 102)
I used BFS with a queue, recording the node count at each level and outputting level by level. I had practiced this problem before and finished in 8 minutes. The interviewer followed up about how to do it with DFS — I explained recursive approach with a depth parameter, grouping results by depth.
Interview 2 Summary
The second interview was noticeably deeper than the first. JVM and concurrency questions were more detailed. I stumbled a bit on Spring transaction propagation — I didn't clearly explain the difference between NESTED and REQUIRES_NEW at first, and the interviewer had to prompt me before I got it straight. The production troubleshooting question went well since it was based on real experience. I received the HR interview notification on April 18th, 3 days later.
Round 3: HR Interview (~30 Minutes)
The HR interview was on Wednesday, April 22nd at 11 AM. The interviewer was a Cloud BU HR with a gentle voice — the overall atmosphere was quite relaxed.
1. Self-introduction
I briefly covered my work experience, tech stack, and why I wanted to join Huawei OD.
2. Why did you choose Huawei OD over other companies?
I gave three reasons: Huawei's large technical platform offers exposure to real enterprise cloud service scenarios; OD has a conversion pathway providing long-term career security; and a friend working at OD recommended it based on their positive experience.
3. Do you understand the differences between OD and regular employees?
I explained that OD is Huawei's outsourcing system — you sign with Adecco, but the work content, office environment, and technical training are the same as regular employees. The main differences are in compensation structure, stock options, and the conversion pathway.
4. What are your salary expectations?
I stated my expected monthly salary range. The HR said they would determine the level based on assessment scores and interview performance, with results in about a week.
5. Can you accept overtime work?
I said I can accept overtime when projects are tight, but I hope it's productive overtime rather than performative. The HR smiled and said Huawei is indeed busy, but Cloud BU's overall pace is manageable.
6. Do you have any questions for me?
I asked two questions: What's the OD conversion rate? The HR said there are annual evaluations and strong performers have opportunities. What's the team's technical culture like? The HR said the team has weekly tech sharing sessions and encourages learning.
Interview Questions Summary
- == vs equals — Java Basics — Easy
- HashMap vs Hashtable — Java Basics — Medium
- @Autowired vs @Resource — Spring — Easy
- Spring Boot startup process — Spring — Medium
- MySQL index failure scenarios — MySQL — Medium
- Redis data types and use cases — Redis — Easy
- RabbitMQ usage and message reliability — Middleware — Medium
- Reverse Linked List — Algorithm — Easy
- JVM garbage collection algorithms — JVM — Hard
- volatile keyword and principles — Java Concurrency — Medium
- Synchronized vs ReentrantLock — Java Concurrency — Medium
- Spring transaction propagation — Spring — Hard
- MySQL slow query optimization — MySQL — Medium
- Production troubleshooting experience — Project Experience — Medium
- Binary Tree Level Order Traversal — Algorithm — Easy
- String Compression — Assessment — Easy
- Meeting Room Scheduling — Assessment — Medium
- Minimum Cost to Connect Cities — Assessment — Hard
Key Takeaways and Advice
1. The online assessment is the first gate — prepare seriously: Huawei OD's assessment passes at 150 points, but different departments have different requirements. Core departments like Cloud BU and 2012 Labs may require 200+ points. I recommend practicing on Nowcoder's OD problem bank, focusing on string processing, sorting, DFS/BFS, and dynamic programming. You can use Java, Python, or C++ — choose whichever you're most comfortable with.
2. Technical interviews focus on fundamentals — they won't ask obscure questions: Huawei OD's interview difficulty is a notch below companies like Alibaba and ByteDance. Mastering Java basics, Spring, MySQL, and Redis is sufficient. Algorithm problems are medium difficulty — they won't give you hard problems. But your fundamentals must be solid — you can't just scratch the surface on things like HashMap's underlying implementation or Spring transaction propagation.
3. Be able to explain your project experience clearly, ideally with production troubleshooting stories: Interviewers really value whether you can solve real problems — just memorizing standard answers isn't enough. I recommend reviewing your project's technology choices, challenges, and optimization processes, especially production troubleshooting — interviewers are very interested in real experiences like these.
4. OD is not the destination — it's the starting point: Many people have prejudices against OD, thinking outsourcing is inferior. But OD is genuinely a pathway into the Huawei ecosystem. The work content is basically the same as regular employees, and the technical growth isn't bad either. If you're currently at a small company, OD is a solid stepping stone.
Final Result: Received the offer on April 28th, classified as D2 level. From submission to offer took 44 days total. Salary increased by about 40% from my previous position — overall, I'm quite satisfied.
FAQ
Q: What score do you need to pass the Huawei OD online assessment?
A: Generally, 150+ points is enough to pass, but core departments (Cloud BU, 2012 Labs, etc.) may require 200+ points. The assessment has 600 points total, with 3 problems worth 100, 200, and 300 points respectively.
Q: How many rounds are there in the Huawei OD interview?
A: Generally 3 rounds: online assessment + technical interview 1 + technical interview 2 + HR interview. Some departments may only have one technical round — it depends on the department.
Q: Is it hard to convert from OD to a regular employee?
A: Conversion requires meeting certain conditions: working for a minimum period (usually 1-2 years), meeting performance standards, and passing a conversion defense. The conversion rate varies by department, but strong performers do have opportunities.
Q: How much is the compensation difference between OD and regular employees?
A: The base salary difference isn't large. The main differences are in stock options, year-end bonuses, and benefits. OD employees don't get stock, year-end bonuses are typically 1-2 months, while regular employees might get 3-6 months.
Q: How useful is Huawei OD interview experience?
A: OD interview experience is very helpful for future job changes because the interview content overlaps heavily with big tech social recruitment. Java basics, Spring, MySQL, Redis, and algorithms are relevant everywhere. Plus, OD work experience adds credibility to your resume.

